Bối cảnh và vấn đề nghiên cứu

Sự bùng nổ của mạng Internet và các dịch vụ trực tuyến đã đưa ứng dụng web trở thành nền tảng cốt lõi phục vụ các hoạt động thương mại điện tử, chính phủ điện tử, mạng xã hội và quản lý thông tin. Tuy nhiên, cùng với mức độ phổ biến ngày càng tăng, các ứng dụng web đã trở thành mục tiêu hàng đầu của các cuộc tấn công mạng nhằm chiếm đoạt dữ liệu nhạy cảm, phá hoại hệ thống hoặc chiếm quyền điều khiển tài nguyên.

Trong thực tế phát triển phần mềm, việc đảm bảo an toàn thông tin toàn diện ngay từ khâu thiết kế thường gặp nhiều rào cản do chu kỳ phát triển gấp rút, đội ngũ lập trình thiếu kỹ năng chuyên sâu về bảo mật và thói quen xử lý sự cố mang tính chắp vá. Do đó, việc xây dựng và trang bị cơ sở hạ tầng giám sát an ninh mạng với khả năng phát hiện xâm nhập kịp thời, đưa ra cảnh báo sớm về các hoạt động đáng ngờ là một yêu cầu cấp thiết.

Đồ án tốt nghiệp của sinh viên Nguyễn Văn Cường, dưới sự hướng dẫn của TS. Đặng Minh Tuấn tại Học viện Công nghệ Bưu chính Viễn thông (niên khóa 2017–2022), tập trung giải quyết bài toán phát hiện tấn công ứng dụng web bằng hệ thống phát hiện xâm nhập mã nguồn mở Snort IDS.

Mục tiêu và nhiệm vụ nghiên cứu của đề tài được xác định cụ thể như sau:

  1. Khảo sát tổng quan về các phương thức tấn công ứng dụng web phổ biến và các cơ chế phòng thủ hiện hành (WAF, IDS/IPS, Honeypot).
  2. Nghiên cứu sâu về kiến trúc, nguyên lý hoạt động và cơ chế xử lý gói tin của hệ thống phát hiện xâm nhập mạng Snort IDS.
  3. Xây dựng và tối ưu hóa bộ quy tắc (Snort rules) để nhận diện các dạng tấn công nguy hiểm, trọng tâm là SQL Injection (SQLi), Cross-Site Scripting (XSS) và Tấn công từ chối dịch vụ (DoS/DDoS).
  4. Cài đặt, cấu hình và thử nghiệm thực tế hệ thống Snort IDS trên nền tảng Linux, sử dụng ứng dụng web mẫu có sẵn lỗ hổng (DVWA) và các công cụ sinh lưu lượng kiểm thử (hping3) để đánh giá khả năng phát hiện và cảnh báo.

Đối tượng nghiên cứu là các kỹ thuật tấn công ứng dụng web và hệ thống phát hiện xâm nhập Snort IDS. Phạm vi nghiên cứu giới hạn trong môi trường mạng thực nghiệm, phân tích lưu lượng giao thức HTTP (cổng 80/443), TCP và ICMP trên nền tảng hệ điều hành Ubuntu.


Cơ sở lý thuyết và phương pháp

Đồ án xây dựng dựa trên các cơ sở lý thuyết chuẩn mực trong lĩnh vực an toàn thông tin và mạng máy tính:

  • Kiến trúc ứng dụng web nhiều lớp: Phân tích mô hình ba tầng gồm Web Server, Application Server và Database Server giao tiếp qua giao thức HTTP/HTTPS. Điểm yếu phát sinh chủ yếu từ mã nguồn phía máy khách/máy chủ, logic nghiệp vụ và tính chất phi trạng thái (stateless) của HTTP.
  • Phân loại lỗ hổng bảo mật: Dựa trên các bảng xếp hạng uy tín gồm OWASP Top 10 và SANS Top 25, tập trung vào các lỗi nguy hiểm như Injection (SQLi), Broken Authentication, Cross-Site Scripting (XSS) và Cross-Site Request Forgery (CSRF).
  • Lý thuyết phát hiện xâm nhập: Hệ thống hóa ba phương pháp luận phát hiện chính gồm: Phát hiện dựa trên chữ ký (Signature-based), Phát hiện dựa trên điểm bất thường (Anomaly-based) và Phân tích giao thức trạng thái (Stateful Protocol Analysis - SPA); cùng bốn mô hình triển khai: HIDS, NIDS, NBA và MIDS.

Phương pháp nghiên cứu thực nghiệm và phân tích kỹ thuật được tác giả áp dụng bao gồm:

  • Phương pháp phân tích - tổng hợp tài liệu: Nghiên cứu cấu trúc module của Snort (bộ thu thập gói tin libpcap, Preprocessors, Detection Engine, Output Plugins) và cú pháp luật Snort.
  • Phương pháp kỹ nghệ tập luật (Rule Engineering): Ứng dụng biểu thức chính quy mở rộng (PCRE - Perl-compatible Regular Expressions) và các tùy chọn bộ lọc ngưỡng (detection_filter) để viết các quy tắc nhận dạng chính xác payload độc hại.
  • Phương pháp thực nghiệm mô phỏng (Lab Experimentation): Xây dựng môi trường máy chủ chạy Damn Vulnerable Web App (DVWA), sử dụng công cụ chuyên dụng hping3 để phát động các cuộc tấn công ICMP flood và SYN flood, tiến hành quét và khai thác thử nghiệm để kiểm chứng phản ứng của Snort.

Nguồn dữ liệu của đề tài gồm lưu lượng mạng thời gian thực, các gói tin bắt giữ qua cơ chế libpcap, tập chữ ký cập nhật từ trang chủ Snort và dữ liệu kiểm thử từ các kịch bản tấn công trên DVWA.


Nội dung chính theo từng chương

Chương 1: Tổng quan tấn công ứng dụng web và phương pháp phát hiện

Chương 1 khái quát về kiến trúc ứng dụng web, phân tích nguyên nhân gây ra điểm yếu bảo mật từ lỗi lập trình, cấu hình sai và hạn chế của giao thức HTTP. Tác giả phân chia phương pháp luận tấn công thành hai nhóm chính:

  • Phương pháp luận tấn công tĩnh: Kẻ tấn công áp dụng các phương thức đã biết công khai (Famous Methods), duyệt cây thư mục ứng dụng (Directory Enumeration) hoặc khai thác mã gỡ lỗi còn sót lại (Debugging the Web Application).
  • Phương pháp luận tấn công động: Các kỹ thuật phức tạp hơn gồm Link Traversal, Path Truncation, Session Hijacking, Hidden Web Tracks, Java Applet Reverse Engineering, Passing Parameters, Executing Scripts và SQL Injection.

Chương này trình bày chi tiết cơ chế hoạt động của bốn hình thức tấn công điển hình:

  1. SQL Injection (SQLi): Khai thác việc chèn câu lệnh SQL trái phép vào đầu vào người dùng; phân loại thành In-band SQLi (Error-based), Inferential SQLi (Blind SQLi gồm Boolean-based và Time-based) và Out-of-band SQLi.
  2. Broken Authentication: Khai thác việc quản lý phiên (Session ID, Cookie) yếu kém để giả mạo danh tính qua Phishing, Credential Stuffing hoặc Password Spraying.
  3. Cross-Site Scripting (XSS): Chèn mã độc kịch bản phía máy khách (JavaScript) nhằm đánh cắp phiên đăng nhập hoặc cookie; chia thành 3 biến thể: Reflected XSS, Stored XSS và DOM-based XSS.
  4. Cross-Site Request Forgery (CSRF): Lừa trình duyệt đã xác thực của nạn nhân gửi các yêu cầu HTTP trái phép tới máy chủ đích.

Tác giả so sánh ba công nghệ phát hiện phổ biến hiện nay: Tường lửa ứng dụng web (WAF), Hệ thống phát hiện xâm nhập ứng dụng (AIDS) và Hệ thống bẫy (Honeypot):

Đặc điểm WAF AIDS Honeypot
Phương pháp phát hiện Dựa trên chữ ký, phát hiện bất thường Dựa trên chữ ký, phát hiện bất thường Giả lập môi trường
Kiểm tra lưu lượng mã hóa Không
Phạm vi tấn công phát hiện Các cuộc tấn công lớp ứng dụng và mạng đã biết Các cuộc tấn công lớp ứng dụng và mạng đã biết và chưa xác định Các cuộc tấn công ứng dụng web đã biết và chưa xác định
Độ chính xác Trung bình Trung bình Cao
Thách thức kỹ thuật Dễ bị vượt qua (bypass), chi phí cao, tốn công bảo trì Tỷ lệ cảnh báo sai cao, khó xử lý lưu lượng mã hóa Rủi ro lớn nếu kẻ tấn công phát hiện ra bẫy

Chương 2: Phát hiện tấn công ứng dụng web sử dụng Snort IDS

Chương 2 đi sâu vào hệ thống phát hiện xâm nhập (IDS/IPS) và công cụ mã nguồn mở Snort. Tác giả đối sánh ưu và nhược điểm của các phương thức phát hiện cơ bản:

Phương pháp Ưu điểm Nhược điểm
Signature-based (Dựa trên chữ ký) Đơn giản, hiệu quả cao với các cuộc tấn công đã biết, phân tích ngữ cảnh chi tiết. Không phát hiện được tấn công chưa biết (zero-day); khó duy trì và cập nhật liên tục bộ chữ ký.
Anomaly-based (Dựa trên bất thường) Phát hiện được lỗ hổng mới chưa lường trước; ít phụ thuộc hệ điều hành; phát hiện lạm dụng quyền. Tỷ lệ cảnh báo sai cao do hành vi người dùng biến động liên tục; tốn thời gian xây dựng hồ sơ chuẩn.
Stateful Protocol Analysis (Phân tích giao thức trạng thái) Theo dõi chặt chẽ trạng thái giao thức; phân biệt các chuỗi lệnh không mong muốn. Tiêu tốn nhiều tài nguyên hệ thống; không nhận biết được hành vi tấn công giả mạo giao thức chuẩn.

Tiếp đó, tác giả phân loại bốn mô hình IDS: HIDS (dựa trên máy chủ), NIDS (dựa trên mạng), NBA (phân tích hành vi mạng) và MIDS (hệ thống kết hợp).

Về kiến trúc Snort IDS, công cụ vận hành trên 3 chế độ:

  • Sniffer mode: Đọc và hiển thị tiêu đề hoặc dữ liệu gói tin trực tiếp từ giao diện mạng.
  • Packet Logger mode: Bắt và ghi các gói tin xuống đĩa cứng để phân tích lại sau này.
  • NIDS mode: Chế độ chính, phân tích lưu lượng theo thời gian thực và đối sánh với bộ quy tắc để tạo cảnh báo hoặc ghi log.

Kiến trúc nội tại của Snort gồm 4 module liên hoàn:

  1. Packet Capture & Decoder: Sử dụng thư viện libpcap để bắt gói và phân giải cấu trúc dữ liệu theo tầng giao thức.
  2. Preprocessors: Xử lý trước gói tin, chuẩn hóa URL, chống phân mảnh dữ liệu, phát hiện quét cổng (sfPortscan) nhằm chống kỹ thuật lẩn tránh (evasion).
  3. Detection Engine: Động cơ trung tâm, đối sánh gói tin với tập quy tắc được nạp vào bộ nhớ.
  4. Output Plugins: Xuất cảnh báo (alert) và nhật ký (log) tới màn hình console, file log, socket unix hoặc cơ sở dữ liệu.

Cấu trúc của một quy tắc Snort bao gồm Rule Header (Action, Protocol, Source IP/Port, Direction operator ->/<>, Destination IP/Port) và Rule Options (các từ khóa cấu hình phân cách bằng dấu chấm phẩy nằm trong dấu ngoặc đơn: msg, sid, rev, classtype, priority, content, nocase, pcre, flow, detection_filter).

Tác giả đã xây dựng chi tiết tập quy tắc phát hiện:

  • Tấn công SQL Injection:
    • Bắt dấu nháy đơn ' (%27) và nháy kép " (%22) trong Error-based SQLi.
    • Bắt các toán tử and, or, order, union không phân biệt hoa thường (nocase).
    • Bắt ký tự mã hóa URL: %26%26 (&&) và %7c%7c (||).
    • Sử dụng PCRE nâng cao để nhận diện chuỗi gán logic: /w*((%27)|())((%6F)|o|(%4F))((%72)|r|(%52))/ix hoặc nhận dạng ký tự ? trong URL kết nối CSDL: /(\%3f)|(\?)/ix.
  • Tấn công DoS/DDoS:
    • ICMP flood: Thiết lập ngưỡng phát hiện detection_filter: track by_dst, count 500, seconds 3 (cảnh báo khi có hơn 500 gói tin ICMP tới đích trong 3 giây).
    • SYN flood: Kiểm tra cờ TCP flags: S trên cổng 80 với cấu hình flow: stateless và ngưỡng detection_filter: track by_dst, count 20, seconds 10 (cảnh báo khi vượt quá 20 yêu cầu trong 10 giây).
  • Tấn công XSS: Bắt các payload chứa đoạn mã tiêm độc hại như Alert(%22XSS_BY_C37HUN%22), Alert%281%29, Alert(document.cookie) với tùy chọn flow: to_server, established.

Chương 3: Cài đặt và thử nghiệm

Chương 3 triển khai thực nghiệm hệ thống trên máy tính cài hệ điều hành Ubuntu:

  • Cấu hình Snort: Thiết lập biến địa chỉ mạng nội bộ $HOME_NET và mạng bên ngoài $EXTERNAL_NET, cấu hình đường dẫn thư mục chứa rule, đưa Snort vào chế độ chạy dưới nền (daemon service).
  • Kịch bản kiểm thử:
    • Thực hiện các truy vấn khai thác lỗi SQL Injection trên ứng dụng web mẫu DVWA (Damn Vulnerable Web App).
    • Sử dụng công cụ hping3 phát luồng gói tin ICMP để giả lập ICMP flood.
    • Sử dụng hping3 gửi liên tục các gói TCP SYN đến cổng 80 để giả lập SYN flood.
  • Kết quả ghi nhận: Snort phát hiện chính xác tất cả các hành vi độc hại, bắt giữ payload tương ứng và ghi các bản tin alert ra tệp nhật ký theo đúng mẫu thông điệp đã định nghĩa.
  • Đánh giá so sánh: Đồ án tiến hành so sánh đối chiếu giữa Snort và Bro (Zeek) về phương thức phân tích, hiệu năng và khả năng mở rộng.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình phát hiện xâm nhập mạng (NIDS), bố trí cảm biến Snort tại phân đoạn mạng trước máy chủ dịch vụ để giám sát toàn bộ lưu lượng ra vào:

[Attacker / Client] ---> [Network Interface (libpcap)] ---> [Decoder] ---> [Preprocessors] ---> [Detection Engine (Rules & PCRE)] ---> [Output Module (Alerts/Logs)]

Chi tiết cấu hình và công nghệ triển khai:

  1. Nền tảng hệ thống:
    • Hệ điều hành: Ubuntu Linux.
    • Ứng dụng mục tiêu: Damn Vulnerable Web App (DVWA) chạy trên nền máy chủ Apache/MySQL.
    • Thư viện bắt gói: libpcap.
    • Công cụ kiểm thử tải và mô phỏng tấn công: hping3.
  2. Cấu hình mạng trong file snort.conf:
    • Khai báo dải mạng cần bảo vệ: gán dải địa chỉ IP máy chủ cho $HOME_NET và đặt $EXTERNAL_NET!$HOME_NET hoặc any.
    • Khai báo cổng web: cấu hình biến $HTTP_PORTS 80.
    • Kích hoạt các bộ tiền xử lý liên quan đến HTTP (HTTP plug-in) và phát hiện quét cổng (sfPortscan).
  3. Triển khai tập luật kiểm thử:
    • Các quy tắc tự định nghĩa được lưu trong tệp local.rules và gán dải định danh duy nhất (sid: 1000001 trở lên) để tránh xung đột với tập luật mặc định của Snort.
    • Tích hợp công cụ PCRE cho phép phân tích sâu phần tải trọng (payload) đối với các chuỗi ký tự bị xáo trộn hoặc mã hóa URL.
    • Thiết lập bộ lọc tần suất detection_filter theo dõi theo địa chỉ đích (track by_dst) để ngăn chặn việc nghẽn tài nguyên khi đối mặt với các cuộc tấn công DoS/DDoS lưu lượng lớn.

Kết quả và đóng góp

Kết quả nghiên cứu và thực nghiệm:

  • Triển khai thành công hệ thống Snort NIDS chạy ổn định dưới nền trên môi trường Linux, tích hợp hoàn chỉnh các module từ thu thập gói tin đến xuất cảnh báo.
  • Tập luật tự xây dựng đã bắt và phát hiện chính xác các kịch bản tấn công:
    • Nhận diện toàn bộ các yêu cầu SQL Injection cơ bản (Error-based, Boolean-based, Union-based, Order by) và các biến thể chèn mã qua URL trên ứng dụng DVWA.
    • Nhận dạng chính xác các payload tiêm mã JavaScript phổ biến trong tấn công XSS.
    • Kích hoạt cảnh báo chính xác khi lưu lượng tấn công vượt ngưỡng: bắt giữ tấn công ICMP flood khi vượt quá 500 gói trong 3 giây và SYN flood khi vượt quá 20 gói trong 10 giây qua công cụ hping3.
  • Trích xuất đầy đủ thông tin cảnh báo (Alert) bao gồm thời gian, địa chỉ IP/cổng nguồn, IP/cổng đích, nội dung thông báo (msg), định danh sid và phân loại mức độ ưu tiên (classtype).

Đóng góp của đồ án:

  • Tổng hợp có hệ thống cơ sở lý thuyết về các phương thức tấn công ứng dụng web và các kỹ thuật phòng thủ hiện hành.
  • Cung cấp hướng dẫn chi tiết về cấu trúc cú pháp luật của Snort, đặc biệt là việc ứng dụng biểu thức chính quy PCRE và bộ lọc ngưỡng detection_filter để nâng cao độ chính xác trong việc bắt mẫu payload độc hại.
  • Xây dựng một kịch bản kiểm thử mẫu trực quan, kết hợp giữa ứng dụng web có lỗ hổng (DVWA) và công cụ sinh lưu lượng (hping3), làm tiền đề cho việc thực hành và triển khai thực tế.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế:

  • Hệ thống hoạt động chủ yếu dựa trên cơ chế so khớp chữ ký (Signature-based), do đó chưa thể tự động phát hiện các hình thức tấn công mới hoặc các biến thể chưa có trong cơ sở dữ liệu luật (Zero-day).
  • Việc áp dụng các biểu thức chính quy phức tạp (PCRE) trên nhiều quy tắc đồng thời có thể làm suy giảm thông lượng (throughput) xử lý của Snort khi lưu lượng mạng tăng cao.
  • Chưa có giải pháp phân tích sâu các gói tin truyền qua giao thức mã hóa HTTPS (cổng 443) khi chưa được giải mã trước ở tầng mạng.

Hướng nghiên cứu tiếp:

  • Tích hợp thêm các thuật toán khai phá dữ liệu (Data Mining) và học máy (Machine Learning) vào module phát hiện bất thường (AIDS) để nâng cao khả năng nhận dạng hành vi tấn công mới.
  • Chuyển đổi mô hình từ hệ thống phát hiện xâm nhập thụ động (IDS) sang hệ thống ngăn chặn xâm nhập chủ động (IPS - Snort Inline mode) để tự động chặn các gói tin nguy hiểm (drop/reject).
  • Nghiên cứu cơ chế tích hợp Honeypot nhằm thu thập mẫu tấn công tự động và tự sinh luật cho Snort.

Giá trị tham khảo

Đồ án là tài liệu tham khảo thiết thực cho:

  • Sinh viên và học viên chuyên ngành An toàn thông tin, Mạng máy tính và Công nghệ thông tin: Cung cấp kiến thức nền tảng về cơ chế tấn công web (SQLi, XSS, DoS, CSRF) và nguyên lý hoạt động của NIDS.
  • Kỹ sư quản trị mạng và chuyên viên phân tích an ninh (SOC Analyst): Tham khảo phương pháp xây dựng, quản lý và tối ưu hóa bộ quy tắc Snort Rules, kỹ thuật viết biểu thức chính quy PCRE để bắt gói tin và cơ chế đặt ngưỡng cảnh báo DoS/DDoS.
  • Các nghiên cứu mở rộng: Cung cấp tài liệu tham khảo trực tiếp về cấu trúc module Snort, bảng so sánh đối chuẩn giữa WAF/IDS/Honeypot và giữa Snort với Bro.

Câu hỏi thường gặp

1. Hệ thống Snort IDS vận hành theo những chế độ nào và chế độ nào được sử dụng chính trong đồ án?
Snort hỗ trợ 3 chế độ hoạt động: Sniffer mode (đọc và hiển thị gói tin trực tiếp), Packet Logger mode (ghi gói tin vào đĩa) và NIDS mode (chế độ phát hiện xâm nhập mạng). Đồ án tập trung sử dụng chế độ NIDS mode để phân tích luồng dữ liệu thời gian thực và đối sánh với bộ luật quy tắc nhằm đưa ra cảnh báo.

2. Cấu trúc cơ bản của một quy tắc (rule) trong Snort bao gồm những phần nào?
Một quy tắc Snort gồm 2 phần chính:

  • Rule Header: Chứa hành động (alert, log, pass, activate, dynamic, drop, reject), giao thức (tcp, udp, icmp, ip), địa chỉ IP và số cổng nguồn/đích cùng toán tử định hướng (->, <>).
  • Rule Options: Đặt trong ngoặc đơn (), chứa các từ khóa và tham số như msg (thông điệp cảnh báo), sid (mã định danh duy nhất của luật), rev (phiên bản sửa đổi), classtype (phân loại tấn công), content (chuỗi ký tự cần tìm), pcre (biểu thức chính quy) và detection_filter (bộ lọc ngưỡng).

3. Đồ án thiết lập luật để phát hiện tấn công DoS/DDoS như thế nào?
Tác giả sử dụng tùy chọn detection_filter theo dõi theo IP đích (track by_dst) với hai quy tắc cụ thể:

  • Phát hiện ICMP flood: Bắt gói ICMP khi vượt quá 500 yêu cầu trong vòng 3 giây (count 500, seconds 3).
  • Phát hiện TCP SYN flood: Bắt gói TCP có cờ flags: S gửi tới cổng 80 khi vượt quá 20 yêu cầu trong vòng 10 giây (count 20, seconds 10).

4. Vì sao cần sử dụng biểu thức chính quy PCRE trong các quy tắc phát hiện SQL Injection?
Các kỹ thuật tấn công SQLi thường sử dụng nhiều biến thể xáo trộn mã hoặc mã hóa ký tự (như mã hóa URL, xen kẽ chữ hoa/thường, chèn khoảng trắng). Tùy chọn content thông thường không thể bao quát hết các trường hợp này. Công cụ PCRE trong Snort cho phép định nghĩa các mẫu biểu thức quy tắc linh hoạt để nhận diện chính xác các biến thể payload độc hại mà không cần tạo quá nhiều luật tĩnh.

5. Môi trường và công cụ nào đã được sử dụng để kiểm thử thực nghiệm hệ thống?
Đồ án triển khai thử nghiệm trên hệ điều hành Ubuntu, sử dụng ứng dụng web Damn Vulnerable Web App (DVWA) để kiểm tra các kịch bản tấn công SQL Injection và XSS, đồng thời sử dụng công cụ hping3 để phát luồng dữ liệu mô phỏng các cuộc tấn công ICMP flood và SYN flood.


Kết luận

Đồ án tốt nghiệp của sinh viên Nguyễn Văn Cường đã nghiên cứu toàn diện bức tranh an toàn ứng dụng web và giải pháp giám sát an ninh mạng bằng Snort IDS. Tác giả đã phân tích sâu kiến trúc module của Snort, thiết kế thành công tập luật nhận diện các cuộc tấn công phổ biến gồm SQL Injection, XSS và DoS/DDoS kết hợp kỹ thuật PCRE và bộ lọc ngưỡng. Kết quả thử nghiệm trên nền tảng Ubuntu với ứng dụng DVWA và công cụ hping3 đã chứng minh tính chính xác, khả thi của hệ thống trong việc phát hiện và đưa ra cảnh báo thời gian thực.