Bối cảnh và vấn đề nghiên cứu
Sự phát triển nhanh chóng của mạng Internet mang lại nhiều lợi ích cho các tổ chức và cá nhân nhưng đồng thời cũng làm gia tăng các nguy cơ an ninh mạng và hành vi xâm nhập trái phép. Mặc dù các giải pháp phòng thủ biên giới truyền thống như tường lửa (Firewall) hay mạng riêng ảo (VPN) đã được ứng dụng rộng rãi, tác giả nhận định rằng để ngăn chặn và giảm thiểu hậu quả của các cuộc tấn công mạng, yêu cầu tiên quyết là phải phát hiện sớm sự hiện diện của hành vi xâm nhập trái phép và xác định chính xác kỹ thuật tấn công đang được sử dụng. Từ bối cảnh thực tiễn đó, đề tài "Xây dựng phần mềm phân tích dữ liệu và phát hiện xâm nhập mạng" được thực hiện.
Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định gồm 6 nội dung:
- Tìm hiểu lý thuyết về các kiểu và ý nghĩa của việc phân tích dữ liệu mạng.
- Tìm hiểu về các dấu hiệu tấn công mạng và phương pháp phát hiện.
- Xây dựng phần mềm phân tích dữ liệu mạng và phát hiện xâm nhập.
- Triển khai phần mềm trên môi trường hệ thống.
- Thực nghiệm và sửa lỗi các chức năng.
- Viết báo cáo tổng kết kết quả nghiên cứu.
Đối tượng nghiên cứu của đề tài bao gồm: dữ liệu mạng, các giao thức và cơ chế trao đổi thông tin trong mô hình mạng; kỹ thuật lập trình mạng với ngôn ngữ Python; các dạng tấn công mạng phổ biến; cùng các công cụ tấn công và phân tích lưu lượng mạng. Phạm vi nghiên cứu tập trung vào việc bắt và giải mã các gói tin ở tầng liên kết dữ liệu (Data Link - Ethernet Frame) và tầng ứng dụng (HTTP), nhận dạng 5 dạng tấn công/quét cổng (Ping of Death, Xmas Tree scan, Null scan, FIN scan, SQL Injection) và thử nghiệm trong môi trường mạng giả lập máy ảo nội bộ.
Cơ sở lý thuyết và phương pháp
Đồ án xây dựng nền tảng lý thuyết dựa trên mô hình tham chiếu OSI 7 tầng và mô hình kiến trúc TCP/IP 4 tầng (Application, Transport, Internet, Network Access). Các giao thức mạng cốt lõi được khảo sát chi tiết bao gồm:
- Giao thức tầng giao vận (Transport Layer): TCP (Transmission Control Protocol - giao thức hướng liên kết, tin cậy, điều khiển luồng, kiểm soát cờ SYN, ACK, FIN, RST, PSH, URG) và UDP (User Datagram Protocol - giao thức không liên kết theo chuẩn RFC 768, tối ưu tốc độ cho VoIP, SNMP).
- Giao thức tầng mạng (Internet Layer): IPv4 (Internet Protocol phiên bản 4, cơ chế định địa chỉ logic, đóng gói Datagram, phân mảnh Fragment theo đơn vị MTU), ICMP (Internet Control Message Protocol - giao thức thông báo lỗi và điều khiển như Echo Request/Reply mã 8/0, Destination Unreachable mã 3, Time Exceeded mã 11).
- Giao thức phân giải địa chỉ: ARP (Address Resolution Protocol - chuyển đổi IP sang MAC, mã thao tác Opcode 1 cho Request và Opcode 2 cho Reply) và RARP (Reverse ARP, Opcode 3 cho Request và Opcode 4 cho Reply).
- Giao thức tầng ứng dụng: HTTP (Hypertext Transfer Protocol - giao thức phi trạng thái Stateless theo mô hình Client-Server, các phương thức GET, POST, PUT, DELETE, PATCH và các nhóm mã trạng thái phản hồi 1xx đến 5xx).
Về lý thuyết phát hiện xâm nhập, tác giả tổng hợp 3 phương pháp chính của hệ thống IDS (Intrusion Detection System):
- Nhận biết dựa vào dấu hiệu (Signature-based): So sánh đặc điểm lưu lượng với mẫu tấn công đã biết.
- Nhận biết dấu hiệu bất thường (Anomaly-based): Xây dựng hồ sơ hoạt động bình thường (Profile tĩnh hoặc động) và cảnh báo khi có độ lệch thống kê.
- Phân tích trạng thái giao thức (Stateful protocol analysis): Theo dõi trạng thái hoạt động của các giao thức để tìm kiếm sai lệch so với tiêu chuẩn.
Phương pháp nghiên cứu thực tế được áp dụng bao gồm: phương pháp phân tích - tổng hợp lý thuyết mạng máy tính; phương pháp thiết kế và phát triển phần mềm bằng ngôn ngữ Python; phương pháp phân tích mẫu tấn công (Signature Matching); và phương pháp thực nghiệm kiểm thử hệ thống trên máy ảo.
Thiết kế và triển khai
Hệ thống được thiết kế theo kiến trúc module hóa với ba khối thành phần chính:
- Khối phân tích dữ liệu mạng (
sniffAnaly_use): Bắt các gói tin thô lưu thông trên card mạng và giải mã cấu trúc dữ liệu theo từng tầng giao thức.
- Khối kiểm tra tấn công (
check_use): Tiếp nhận dữ liệu đã phân tích, đối chiếu với các mẫu dấu hiệu tấn công được lập trình sẵn để đưa ra kết luận.
- Khối thông báo cảnh báo (
alert_use): Kích hoạt cơ chế gửi email cảnh báo và phát âm thanh khi phát hiện có xâm nhập.
+-------------------------------------------------------------------+
| KIẾN TRÚC HỆ THỐNG |
+-------------------------------------------------------------------+
| 1. Bắt gói tin (Sniffing) |
| - Raw Socket Layer 2: socket.AF_PACKET, socket.SOCK_RAW |
| - Thư viện Scapy: Bắt và lọc gói tin HTTP tầng ứng dụng |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| 2. Giải mã cấu trúc (Classes Decoding) |
| - Ethernet | IPv4 | TCP | UDP | ICMP | HTTP | Pcap |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| 3. Kiểm tra dấu hiệu xâm nhập (Rule Matching Functions) |
| - check_xmastree - check_nullscan - check_finscan |
| - check_ping_of_death - check_sql_injection |
+-------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------+
| 4. Cơ chế phản hồi & Cảnh báo (Alerts & Logging) |
| - Ghi file Log hệ thống |
| - Phát âm thanh cảnh báo (send_sound) |
| - Gửi thư điện tử cảnh báo (send_mail) |
+-------------------------------------------------------------------+
Hệ thống sử dụng module socket của Python để thiết lập socket thô ở tầng liên kết dữ liệu với cú pháp:
socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
Cấu hình này cho phép ứng dụng can thiệp và bắt toàn bộ các khung dữ liệu Ethernet (Layer 2) đi qua giao diện mạng trên hệ điều hành Linux. Đối với lưu lượng HTTP ở tầng ứng dụng, tác giả tích hợp thêm module Scapy để hỗ trợ phân tách chuỗi dữ liệu.
| Tên Class |
Chức năng giải mã trong phần mềm |
Ethernet |
Phân tích Header khung Ethernet, trích xuất địa chỉ MAC nguồn, MAC đích và Protocol Type. |
IPv4 |
Phân tích gói tin IP, trích xuất Version, IHL, TTL, Protocol (TCP/UDP/ICMP), IP nguồn và IP đích. |
TCP |
Phân tích TCP Segment, trích xuất Port nguồn, Port đích, Sequence/ACK Number và các cờ TCP Flags. |
UDP |
Phân tích UDP Datagram, trích xuất Port nguồn, Port đích, độ dài gói tin Length và Checksum. |
ICMP |
Phân tích bản tin ICMP, trích xuất Type, Code và Checksum kiểm tra lỗi. |
HTTP |
Bắt và phân tách các thành phần của yêu cầu/phản hồi HTTP (Method, URI, Header, Payload). |
Pcap |
Đóng gói dữ liệu gói tin theo định dạng chuẩn PCAP phục vụ việc lưu trữ và kiểm tra. |
| Tên Hàm (Function) |
Vai trò xử lý |
sniff_use |
Khởi động vòng lặp bắt gói tin thô trên giao diện mạng và điều phối các class giải mã. |
check_xmastree |
Kiểm tra gói tin TCP có đồng thời bật cả 3 cờ FIN, URG, PSH (dấu hiệu quét cổng Xmas Tree). |
check_nullscan |
Kiểm tra gói tin TCP không bật bất kỳ cờ điều khiển nào (dấu hiệu kỹ thuật quét Null Scan). |
check_finscan |
Kiểm tra gói tin TCP chỉ bật duy nhất cờ FIN khi chưa có phiên kết nối (kỹ thuật quét FIN Scan). |
check_ping |
Giám sát và ghi nhận các gói tin ICMP Echo Request thông thường. |
check_ping_of_death |
Phát hiện gói tin ICMP có kích thước dữ liệu vượt chuẩn hoặc phân mảnh bất thường gây tràn bộ đệm. |
check_sql_injection |
Phân tích chuỗi truy vấn trong Payload HTTP Request để nhận diện ký tự và câu lệnh SQL độc hại. |
send_mail |
Gửi email thông báo tự động cho quản trị viên khi phát hiện dấu hiệu tấn công. |
send_sound |
Kích hoạt file âm thanh phát cảnh báo trực tiếp tại máy trạm giám sát. |
Nội dung chính theo từng chương
Chương 1. Tổng quan về dữ liệu và mạng máy tính
Chương 1 hệ thống hóa các khái niệm nền tảng về mạng máy tính, lưu lượng mạng và phân tích dữ liệu mạng. Tác giả trình bày chi tiết về cấu trúc Socket (Stream Socket cho TCP và Datagram Socket cho UDP), vai trò của số hiệu cổng hệ thống (Port 1–1023) và việc ứng dụng module socket trong Python để lập trình mạng.
Chương này đi sâu vào cơ chế đóng gói (Encapsulation), phân mảnh (Fragment) gói tin, đồng thời phân tích chi tiết cấu trúc tiêu đề (Header) của các giao thức truyền thông cơ bản: UDP (8 byte header), TCP (20–60 byte header, 6 cờ điều khiển), IPv4 (các trường IHL, Total Length, TTL, Protocol, Checksum), ICMP (Type/Code cho truy vấn và báo lỗi), ARP/RARP (Hardware Type, Protocol Type, Opcode) và HTTP (cấu trúc Request/Response, các phương thức GET, POST, PUT, DELETE). Cuối chương, tác giả trình bày quy trình xử lý dữ liệu 7 tầng trên máy gửi và máy nhận theo mô hình OSI, từ đó giải thích nguyên lý hoạt động của kỹ thuật bắt gói tin (Packet Sniffer) trên giao diện mạng.
Chương 2. Tổng quan về xâm nhập mạng và hệ thống IDS
Chương 2 phân loại khái niệm tấn công mạng theo hai góc độ tích cực (Penetration Testing của Hacker mũ trắng) và tiêu cực (Network Attack của Hacker mũ đen). Tác giả trình bày các phương pháp phát hiện xâm nhập cốt lõi của IDS gồm Signature-based, Anomaly-based và Stateful Protocol Analysis, đồng thời phân tích kiến trúc hai hệ thống IDS phổ biến:
- NIDS (Network-based IDS): Giám sát toàn bộ lưu lượng trên phân đoạn mạng.
- HIDS (Host-based IDS): Cài đặt trên máy chủ để giám sát các tệp tin và tiến trình cục bộ.
Nội dung chương cũng phân tích bản chất của kỹ thuật Network Packet Sniffing (Active Sniffing trên thiết bị Switch thông qua tràn bảng CAM, ARP Poisoning, MAC Flooding, DNS Poisoning; và Passive Sniffing trên thiết bị Hub). Tác giả làm rõ các dấu hiệu nhận biết của các dạng tấn công phổ biến, đặc biệt là Ping of Death, các kỹ thuật quét cổng bí mật (Stealth Scan như Xmas Tree, FIN, Null Scan) và tấn công ứng dụng web SQL Injection.
Chương 3. Xây dựng phần mềm phân tích dữ liệu và phát hiện xâm nhập mạng
Chương 3 trình bày chi tiết toàn bộ thiết kế kiến trúc và mô hình hóa hệ thống phần mềm. Tác giả xây dựng các sơ đồ thành phần, sơ đồ package, thiết kế chi tiết 7 lớp đối tượng dữ liệu (Ethernet, IPv4, TCP, UDP, ICMP, HTTP, Pcap) và 9 hàm xử lý chính phục vụ cho việc bắt gói, kiểm tra luật và phát cảnh báo.
Chương này cũng thể hiện sơ đồ tuần tự (Sequence Diagram) mô tả luồng dữ liệu từ khi socket nhận được luồng bit nhị phân từ tầng vật lý, bóc tách header tầng 2 đến tầng 7, chuyển qua bộ kiểm tra dấu hiệu (Rule Engine) và kích hoạt hành động cảnh báo (ghi file log, gửi mail qua giao thức SMTP, phát âm thanh qua loa hệ thống).
Chương 4: THỰC NGHIỆM
Chương 4 mô tả quá trình thiết lập môi trường thử nghiệm và kết quả kiểm thử các kịch bản tấn công thực tế. Mô hình thực nghiệm bao gồm máy tấn công (Attacker), máy trạm giám sát chạy phần mềm IDS viết bằng Python và máy chủ Web mục tiêu chạy hệ điều hành Ubuntu 18.04 cài đặt ứng dụng lỗ hổng mẫu DVWA (Damn Vulnerable Web App) trên nền cơ sở dữ liệu MySQL.
Tác giả tiến hành thực nghiệm và ghi nhận kết quả thành công trên 5 kịch bản:
- Xmas Tree Scan: Phần mềm bắt được các gói tin TCP có đồng thời 3 cờ FIN-URG-PSH, trích xuất IP nguồn kẻ tấn công, ghi log hệ thống và gửi email cảnh báo thành công.
- FIN Scan: Phát hiện chính xác các gói tin chỉ mang cờ FIN gửi tới các cổng mạng nhằm thăm dò trạng thái cổng mở/đóng.
- Null Scan: Nhận diện các gói tin TCP không thiết lập bất kỳ cờ điều khiển nào.
- Ping of Death: Nhận biết lưu lượng ICMP Echo Request có kích thước bất thường hoặc tần suất phân mảnh cao nhằm mục đích làm quá tải máy đích.
- SQL Injection: Khi thực hiện chèn câu lệnh SQL độc hại vào form đăng nhập trên máy chủ DVWA, phần mềm trích xuất được chuỗi URL/Payload HTTP chứa dấu hiệu tấn công, xuất thông tin cảnh báo lên màn hình, ghi file log và gửi mail thông báo.
Kết quả và đóng góp
Đồ án đã đạt được các kết quả cụ thể trong việc xây dựng một công cụ phát hiện xâm nhập mạng nội bộ:
- Hiện thực hóa thành công module bắt gói tin thô tầng 2 sử dụng Raw Socket trong Python trên môi trường Linux mà không phụ thuộc hoàn toàn vào các phần mềm thương mại bên ngoài.
- Xây dựng được cấu trúc giải mã định dạng dữ liệu cho 6 giao thức truyền thông mạng phổ biến (
Ethernet, IPv4, TCP, UDP, ICMP, HTTP).
- Phát hiện chính xác 5 dạng tấn công và thăm dò mạng trong môi trường thực nghiệm: Xmas Tree Scan, FIN Scan, Null Scan, Ping of Death và SQL Injection.
- Thiết lập cơ chế phản hồi cảnh báo đa kênh gồm: xuất thông tin giám sát thời gian thực trên giao diện dòng lệnh, lưu vết vào file log hệ thống, kích hoạt âm thanh cảnh báo tức thời và tự động gửi email thông báo chi tiết cho quản trị viên.
Về mặt giải pháp, tác giả đề xuất việc kết hợp giữa bắt gói tin thô ở tầng liên kết dữ liệu để phát hiện các kỹ thuật quét cổng cấp thấp (Port Scanning) với việc phân tích sâu payload tầng ứng dụng (Deep Packet Inspection) để bảo vệ các dịch vụ web.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên quá trình thực hiện và nhật ký kế hoạch ghi nhận trong văn bản, đồ án tồn tại các hạn chế kỹ thuật:
- Tốc độ xử lý lưu lượng lớn: Khi máy tấn công gửi gói tin quét cổng với tốc độ cao liên tục, hệ thống giám sát bằng Python gặp hiện tượng bỏ sót một số gói tin do bộ đệm xử lý không kịp.
- Xử lý phân loại gói tin ICMP: Trong giai đoạn đầu thực hiện, phần mềm từng gặp lỗi nhầm lẫn giữa gói tin Ping thông thường và tấn công Ping of Death do thuật toán kiểm tra kích thước chưa tối ưu.
- Tích hợp kênh cảnh báo SMS: Chức năng gửi tin nhắn SMS cảnh báo qua dịch vụ Sinchsms không hoạt động do đầu số điện thoại tại Việt Nam nằm trong danh sách hạn chế (Blacklist) của nhà cung cấp dịch vụ này.
- Phụ thuộc môi trường chạy: Ứng dụng yêu cầu quyền quản trị cao nhất (Root) trên hệ điều hành Linux để mở Raw Socket, không thể chạy trực tiếp trơn tru trong một số môi trường IDE như PyCharm nếu không cấp đủ quyền mạng.
Hướng nghiên cứu tiếp theo được tác giả xác định bao gồm: tối ưu hóa hiệu năng xử lý của bộ giải mã gói tin để giảm thiểu tỷ lệ rớt gói khi lưu lượng mạng tăng cao; hoàn thiện cơ chế phát hiện các kỹ thuật tấn công phức tạp hơn; và bổ sung các giải pháp cảnh báo thay thế cho SMS.
Giá trị tham khảo
Đồ án là tài liệu tham khảo phù hợp cho sinh viên, học viên chuyên ngành Công nghệ thông tin, An toàn thông tin và Mạng máy tính. Các nội dung có giá trị tham khảo cụ thể bao gồm:
- Lập trình Socket thô trong Python: Đoạn mã cấu hình
socket.AF_PACKET cùng cách tổ chức các class bóc tách byte header (Ethernet, IPv4, TCP, UDP, ICMP) là ví dụ thực tiễn cho việc xây dựng ứng dụng Packet Sniffer trên Linux.
- Nhận diện dấu hiệu tấn công mạng: Tài liệu cung cấp logic chi tiết để kiểm tra trạng thái các cờ TCP (Flags) phục vụ việc phát hiện các kỹ thuật quét cổng kinh điển (Xmas Tree, Null, FIN Scan) và phân tích payload HTTP bắt lỗi SQL Injection.
- Mô hình thực nghiệm an ninh mạng: Cách thức xây dựng mô hình kiểm thử kết hợp giữa máy ảo tấn công, máy trạm giám sát IDS và máy chủ ứng dụng web DVWA trên nền Ubuntu 18.04/MySQL.
Câu hỏi thường gặp
1. Phần mềm sử dụng cấu hình socket nào trong Python để bắt toàn bộ gói tin ở tầng 2?
Phần mềm sử dụng câu lệnh khởi tạo Raw Socket trên Linux: socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3)). Cấu hình này cho phép ứng dụng can thiệp ở tầng liên kết dữ liệu (Data Link) để bắt trọn vẹn khung dữ liệu định dạng Ethernet Frame.
2. Các kỹ thuật quét cổng (Port Scanning) nào được phần mềm nhận diện thông qua cờ TCP?
Phần mềm nhận diện 3 kỹ thuật quét cổng dựa trên trạng thái các cờ điều khiển trong TCP Header:
- Xmas Tree Scan: Bật đồng thời 3 cờ FIN, URG và PSH.
- Null Scan: Không bật bất kỳ cờ nào trong 6 cờ TCP (tất cả cờ đều bằng 0).
- FIN Scan: Chỉ bật duy nhất cờ FIN khi chưa có phiên bắt tay thiết lập kết nối trước đó.
3. Tại sao chức năng gửi tin nhắn SMS cảnh báo không thể triển khai thành công trong đồ án?
Trong quá trình thử nghiệm từ ngày 25/6 đến 27/6/2019, nhóm tác giả sử dụng dịch vụ Sinchsms để gửi tin nhắn cảnh báo, tuy nhiên chức năng này bị lỗi do các đầu số viễn thông tại Việt Nam nằm trong danh sách hạn chế (Blacklist) của hệ thống dịch vụ này.
4. Mô hình thực nghiệm kiểm thử tính năng phát hiện SQL Injection được thiết lập như thế nào?
Mô hình thực nghiệm được dựng trên máy ảo chạy hệ điều hành Ubuntu 18.04, triển khai máy chủ Web chạy mã nguồn ứng dụng web chứa lỗ hổng mẫu DVWA (Damn Vulnerable Web App) kết nối cơ sở dữ liệu MySQL. Phần mềm IDS sử dụng Scapy để bắt các truy vấn HTTP gửi đến web server và phân tích chuỗi ký tự độc hại trong Payload.
Kết luận
Đồ án tốt nghiệp "Xây dựng phần mềm phân tích dữ liệu và phát hiện xâm nhập mạng" của sinh viên Đỗ Minh Hậu và Lê Hoàng Kha đã hoàn thành các mục tiêu nghiên cứu về lý thuyết mạng TCP/IP và hệ thống phát hiện xâm nhập IDS. Tác giả đã thiết kế và hiện thực hóa thành công ứng dụng bằng ngôn ngữ Python, có khả năng bắt gói tin thô ở tầng liên kết dữ liệu và giải mã các giao thức mạng phổ biến. Kết quả thực nghiệm trên môi trường máy ảo chứng minh phần mềm có thể nhận dạng chính xác 5 dạng tấn công mạng (Xmas Tree, FIN, Null scan, Ping of Death, SQL Injection) và kích hoạt các phản hồi cảnh báo qua log, email và âm thanh.