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

Trong kỷ nguyên số hóa, sự phát triển mạnh mẽ của mạng Internet đã thúc đẩy nhu cầu trao đổi dữ liệu và chia sẻ tài nguyên không giới hạn về mặt địa lý. Tuy nhiên, tính mở và kết nối xuyên biên giới của không gian mạng cũng làm gia tăng nguy cơ mất an toàn thông tin, khiến các nguồn dữ liệu nhạy cảm dễ bị phân tán, can thiệp và tấn công có chủ đích. Đặc biệt, xu hướng chuyển dịch mô hình vận hành và làm việc từ xa của các cơ quan, tổ chức đòi hỏi hệ thống phải mở cổng truy cập trực tuyến, vô hình trung tạo điều kiện cho các đối tượng tấn công khai thác những lỗ hổng bảo mật ứng dụng web. Trong các phương thức tấn công ứng dụng web, kỹ thuật tiêm mã SQL (SQL Injection) vẫn là một mối đe dọa nghiêm trọng, có khả năng làm rò rỉ hoặc phá hủy cơ sở dữ liệu và chiếm quyền kiểm soát máy chủ.

Nhằm giải quyết bài toán giám sát an ninh và phòng vệ cho hệ thống web, đồ án tốt nghiệp đại học với đề tài "Tìm hiểu về SNORT và ứng dụng trong việc phát hiện tấn công SQL Injection - Xây dựng phương án phòng chống cho website Cloud Travel" (Mã đề tài: 1415) được thực hiện bởi sinh viên Nguyễn Thị Vân, dưới sự hướng dẫn của ThS. Trần Tiến Dũng tại Khoa Công nghệ Thông tin, Trường Đại học Mở Hà Nội (niên khóa 2018 – 2022).

Văn bản xác định 6 nhiệm vụ nghiên cứu cụ thể được đánh số như sau:

  1. Nghiên cứu và tìm hiểu về an toàn an ninh mạng.
  2. Nghiên cứu và hiểu về SNORT, các đặc điểm cơ bản, cách hoạt động của SNORT.
  3. Hiểu được SQL Injection là gì.
  4. Nắm được cách thức hoạt động của kỹ thuật tấn công SQL Injection.
  5. Có thể sử dụng được SNORT để phát hiện tấn công SQL Injection.
  6. Nghiên cứu và phòng chống thành công kỹ thuật tấn công SQL Injection đối với website.

Đối tượng nghiên cứu của đồ án tập trung vào hệ thống phát hiện và ngăn ngừa xâm nhập nguồn mở SNORT, kỹ thuật tấn công cơ sở dữ liệu SQL Injection, cùng các giải pháp phòng vệ ứng dụng web kết hợp tường lửa ModSecurity. Phạm vi nghiên cứu về mặt không gian được thiết lập trong môi trường phòng thí nghiệm ảo hóa trên hệ điều hành Ubuntu 18.04 LTS (nền tảng VMware), áp dụng thực nghiệm trực tiếp trên hệ thống website thử nghiệm mang tên Cloud Travel. Về mặt thời gian, nhiệm vụ đồ án được giao vào ngày 22/09/2022 và hoàn thành vào ngày 17/12/2022.


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

Đồ án xây dựng nền tảng lý luận dựa trên các quy định pháp lý, mô hình an ninh mạng và kiến trúc phần mềm chuyên dụng:

  • Khung pháp lý và khái niệm: Khái niệm an ninh mạng được trích dẫn theo Khoản 1, Điều 2 Luật An ninh mạng Việt Nam. Cơ sở lý thuyết an ninh thông tin được phân chia thành 5 phạm vi bảo vệ: an ninh mạng, bảo mật thông tin, bảo mật ứng dụng, bảo mật hoạt động và phục hồi sau tấn công.
  • Mô hình hệ thống NIDS/IPS: Hệ thống SNORT do Martin Roesch phát triển dưới giấy phép mã nguồn mở GNU/GPL, hoạt động với cơ chế thu thập gói tin thông qua thư viện pcap, phân tích lưu lượng theo chuỗi module và đối sánh dấu hiệu (signature-based detection).
  • Khung lý thuyết về SQL Injection: Phân loại tấn công theo 3 nhóm chính gồm In-band SQLi (Classic), Inferential SQLi (Blind) và Out-of-band SQLi; cơ chế khai thác dựa trên việc thiếu kiểm soát dữ liệu đầu vào và các thông báo lỗi phản hồi từ hệ quản trị cơ sở dữ liệu (DBMS).
  • Mô hình tường lửa ứng dụng web (WAF): Tích hợp module ModSecurity trên nền tảng máy chủ dịch vụ web Apache2 kết hợp bộ quy tắc phòng vệ để ngăn chặn các truy vấn độc hại trước khi chuyển tiếp tới cơ sở dữ liệu.

Phương pháp nghiên cứu trong đồ án kết hợp giữa phương pháp nghiên cứu lý thuyết và phương pháp thực nghiệm kỹ thuật:

  • Phương pháp phân tích - tổng hợp: Nghiên cứu cấu trúc gói tin mạng, giải mã giao thức và cơ chế đối sánh luật của Snort; phân loại các đối tượng tin tặc và các hình thức tấn công mạng phổ biến.
  • Phương pháp thực nghiệm hệ thống: Thiết lập môi trường mạng máy ảo trên VMware; biên dịch thư viện phân tích gói tin DAQ và phần mềm Snort từ mã nguồn; xây dựng luật phát hiện (rules) tùy biến; thực hiện tấn công khai thác lỗ hổng xác thực trên website Cloud Travel; cấu hình WAF ModSecurity trên Apache2 để kiểm thử khả năng ngăn chặn.

Nguồn dữ liệu sử dụng bao gồm: các bộ quy tắc cộng đồng của Snort (Community Rules), bộ quy tắc Core Rule Set tải từ GitHub cho ModSecurity, ứng dụng kiểm thử bảo mật DVWA (Damn Vulnerable Web Application), lưu lượng mạng HTTP bắt bằng thư viện pcap và dữ liệu bảng người dùng trong hệ quản trị MySQL của website Cloud Travel.


Thiết kế và triển khai thực nghiệm

Đồ án trình bày chi tiết kiến trúc kỹ thuật của hệ thống SNORT và quy trình triển khai giải pháp phòng thủ:

Kiến trúc module của SNORT

Hệ thống SNORT được cấu thành từ 5 module hoạt động theo quy trình tuần tự:

  1. Module giải mã gói tin (Packet Decoder): Sử dụng thư viện pcap để bắt các gói tin lưu thông qua giao diện mạng và giải mã cấu trúc gói từ tầng Datalink lên tầng Application theo ngăn xếp giao thức.
  2. Module tiền xử lý (Preprocessor): Đảm nhiệm 3 nhiệm vụ chính gồm tái hợp các gói tin bị phân mảnh (defragmentation/reassembly), giải mã và chuẩn hóa giao thức (decode/normalize URL dạng hexa/unicode hoặc ký tự đặc biệt), và phát hiện các hành vi bất thường không dùng luật thông thường thông qua plugin portscan (quét cổng) và bo (phát hiện trojan Back Orifice).
  3. Module phát hiện (Detection Engine): Thành phần cốt lõi thực hiện so khớp dữ liệu gói tin với tập luật được định nghĩa trước; phân tách và kiểm tra riêng biệt trên các thành phần IP Header, Transport Header (TCP/UDP), Application Header (DNS, HTTP, FTP) và Payload.
  4. Module log và cảnh báo (Logging and Alerting): Ghi nhận dữ liệu gói tin vào các tệp tin theo định dạng (như tcpdump) hoặc kích hoạt cảnh báo khi phát hiện dấu hiệu xâm nhập.
  5. Module kết xuất thông tin (Output Module): Hỗ trợ xuất dữ liệu ra tệp tin log, hệ thống syslog, lưu vào cơ sở dữ liệu, xuất tệp XML, cấu hình lại thiết bị mạng/firewall hoặc gửi cảnh báo qua giao thức SNMP.

Cấu trúc luật (Rule) trong SNORT

Một luật trong Snort được phân chia thành 2 phần rõ rệt:

  • Phần Header: Chứa quy tắc xử lý (rule action: alert, log, pass, activate, dynamic, hoặc drop, reject, sdrop ở chế độ inline), giao thức (TCP, UDP, ICMP, IP), địa chỉ IP nguồn/đích, subnet mask, cổng nguồn/đích và toán tử định hướng (->, <>).
  • Phần Option: Được bao bọc trong dấu ngoặc đơn (), phân cách bằng dấu chấm phẩy ;, gồm 4 nhóm tùy chọn chính:
    • General Options: msg (chuỗi thông báo), reference (tham chiếu CVE, URL...), sid (định danh luật duy nhất; giá trị >= 1.000.000 dành cho luật cục bộ), rev (phiên bản sửa đổi), classtype (phân loại tấn công), priority (mức độ nghiêm trọng).
    • Payload Options: content (tìm kiếm chuỗi ASCII hoặc hex | |), nocase (không phân biệt hoa thường), rawbytes (xét dữ liệu thô), depth, offset, distance, within, uricontent (tìm trong trường URI), pcre (biểu thức chính quy tương thích Perl).
    • Non-payload Options: ttl, tos, id, ipopts, fragbits, dsize (kích thước dữ liệu), flags (các cờ TCP: F, S, R, P, A, U), flow, seq, ack, window, itype, icode, icmp_id, icmp_seq, rpc, ip_proto, sameip.
    • Post-detection Options: logto, session, resp, react, tag, detection_filter (giới hạn tần suất kích hoạt theo địa chỉ và thời gian), threshold.

Quy trình triển khai thực nghiệm

  • Chuẩn bị môi trường máy ảo Ubuntu 18.04 LTS trên VMware, đăng nhập quyền root, cập nhật hệ thống (sudo apt update && sudo apt upgrade).
  • Cài đặt các thư viện phụ trợ, tải mã nguồn daq và snort từ trang chủ để biên dịch và cài đặt.
  • Tạo cấu trúc thư mục, người dùng hệ thống riêng, phân quyền thực thi và tải bộ quy tắc cộng đồng.
  • Cấu hình file snort.conf, thiết lập biến mạng cục bộ và đường dẫn chứa luật; kiểm tra cú pháp cấu hình ở chế độ test mode.
  • Cài đặt máy chủ web apache2 và module libapache2-mod-modsecurity, kích hoạt module và nạp bộ quy tắc Core Rule Set từ GitHub để thực hiện ngăn chặn tấn công vào ứng dụng web Cloud Travel.

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

Chương 1: Tìm hiểu chung về an toàn và tấn công mạng

Chương này cung cấp cái nhìn tổng quan về thực trạng an ninh mạng và các mối đe dọa kỹ thuật số:

  • Phân loại tác nhân tấn công: Hacker được chia thành các nhóm gồm hacker mũ trắng (kiểm thử bảo mật pentest), hacker mũ đen (crackers, bẻ khóa và phá hoại), hacker mũ xám (kết hợp hai loại trên), hacker mũ xanh (tìm kiếm lỗ hổng sản phẩm trước khi phát hành), hacker mũ đỏ (tấn công trực diện vào mạng của tin tặc mũ đen); cùng hai đối tượng mới bắt đầu là Script Kiddie và Neophyte.
  • Thực trạng và các sự cố an ninh mạng điển hình: Đồ án tổng hợp các trường hợp vi phạm dữ liệu thực tế: vụ tấn công Adobe (10/2013) làm thất thoát hơn 40GB mã nguồn và 150 triệu tài khoản người dùng; vụ khủng hoảng của Sony (04/2011); sự cố rò rỉ 137GB dữ liệu từ 4 bộ lưu trữ AWS S3 của công ty Accenture vào năm 2017 và vụ tấn công ransomware LockBit vào tháng 8/2021 đòi 50 triệu USD cho 6TB dữ liệu; vụ việc Verizon năm 2017 (lộ dữ liệu qua Nice Systems) và năm 2020 ghi nhận 29.207 sự cố với 5.200 vi phạm xác nhận (theo báo cáo VERIS 2021, 61% liên quan đến thông tin đăng nhập, lừa đảo tăng từ 25% lên 36%); vụ tấn công chuỗi cung ứng ransomware nhằm vào Kaseya VSA (07/2021); sự cố Cognyte (05/2021) làm lộ 5 tỷ hồ sơ dữ liệu; và vụ tấn công RayChat (2021) làm lộ 267 triệu tài khoản và tin nhắn.
  • Các hình thức tấn công mạng: Phân tích chi tiết về phần mềm độc hại (Malware: Trojan horse gồm BackDoor, Adware, Spyware; Virus gồm Hoax, Scripting, File; Ransomware; Worm; Rootkit); Tấn công giả mạo (Phishing Attack qua email và website); Tấn công SQL Injection; Tấn công từ chối dịch vụ (DoS và DDoS với các dạng Volume-based, cạn kiệt tài nguyên và nhắm vào tầng ứng dụng; biện pháp giảm thiểu gồm Rate Limiting, Anycast Network Diffusion, phần mềm diệt virus); Tấn công Zero-Day; Tấn công trung gian (Man-In-The-Middle - MitM).

Chương 2: Hệ thống phát hiện tấn công SQL Injection - SNORT

Chương này tập trung đi sâu vào cơ chế vận hành của phần mềm Snort:

  • Phân tích chi tiết 5 thành phần module kiến trúc của Snort.
  • Trình bày toàn diện hệ thống cú pháp luật (Rule Header và Rule Options) với các bảng tham số chuẩn hóa.
  • Hướng dẫn chi tiết các bước cài đặt và cấu hình Snort trên nền tảng hệ điều hành Ubuntu 18.04 LTS.
  • Trình bày kịch bản demo kiểm tra tính hợp lệ của hệ thống thông qua gói tin ICMP ping từ máy bên ngoài và kiểm chứng khả năng phát sinh cảnh báo của Snort.
Bảng tham số từ khóa detection_filter trong SNORT
Tùy chọn
track by_src / track by_dst
count <c>
seconds <s>

Chương 3: Kỹ thuật tấn công cơ sở dữ liệu SQL Injection

Chương này phân tích cơ chế và thực nghiệm kỹ thuật SQL Injection:

  • Phân loại chi tiết các kỹ thuật tấn công SQLi: In-band SQLi (dùng cùng một kênh để tấn công và lấy kết quả), Inferential/Blind SQLi (suy đoán dữ liệu dựa trên phản hồi đúng/sai hoặc thời gian trễ), Out-of-band SQLi (sử dụng các kênh truyền dữ liệu phụ trợ của máy chủ).
  • Thực nghiệm kịch bản tấn công bypass đăng nhập bằng cách chèn mệnh đề logic luôn đúng (' OR '1'='1) vào trường xác thực tài khoản.
  • Thực nghiệm trích xuất dữ liệu cơ sở dữ liệu MySQL: hiển thị toàn bộ bản ghi, lấy thông tin phiên bản hệ quản trị cơ sở dữ liệu (version()), lấy tên cơ sở dữ liệu hiện hành (database()), và truy vấn danh sách cột cùng dữ liệu người dùng trong bảng User.

Chương 4: Ứng dụng SNORT vào việc phát hiện và xây dựng phương pháp phòng chống tấn công SQL Injection

Chương này thiết lập phương pháp kết hợp giữa phát hiện và phòng ngừa:

  • Xây dựng luật Snort tùy biến nhằm bắt các chuỗi ký tự tấn công SQLi đặc trưng xuất hiện trong HTTP URI và Payload (sử dụng các tùy chọn uricontent, content, nocase, pcre).
  • Tổng hợp các nguyên tắc phòng chống SQLi cốt lõi:
    1. Xác thực và làm sạch dữ liệu đầu vào (Input Validation & Sanitization) ngay từ phía người dùng.
    2. Sử dụng truy vấn tham số hóa (Parameterized Queries / Prepared Statements) thay vì nối chuỗi trực tiếp trong các câu lệnh SQL.
    3. Phân quyền chặt chẽ cho tài khoản người dùng trong hệ quản trị cơ sở dữ liệu (áp dụng nguyên tắc đặc quyền tối thiểu).

Chương 5: Triển khai thực nghiệm trên website CloudTravel

Chương này mô tả toàn bộ quá trình thực nghiệm tấn công và phòng thủ trên môi trường ứng dụng thực tế:

  • Khảo sát môi trường và mô hình: Thiết lập mô hình gồm máy tấn công, máy chủ dịch vụ web chạy website du lịch Cloud Travel và hệ thống giám sát.
  • Thực hiện tấn công: Tiến hành khai thác lỗ hổng SQL Injection trên biểu mẫu đăng nhập (Login) của website Cloud Travel. Kết quả tấn công cho phép kẻ tấn công vượt qua bước xác thực mật khẩu và đăng nhập thành công vào hệ thống với tư cách quản trị viên (admin). Hệ thống Snort bắt được gói tin và đưa ra cảnh báo về cuộc tấn công.
  • Xây dựng giải pháp ngăn chặn: Cài đặt web server Apache2, tích hợp module ModSecurity, cấu hình chuyển đổi tên tệp cấu hình và kích hoạt các bộ quy tắc bảo mật tải từ GitHub.
  • Kết quả kiểm thử phòng thủ: Thực hiện lại các truy vấn tấn công SQL Injection tương tự vào trang đăng nhập của Cloud Travel; ModSecurity đã nhận diện payload độc hại, chặn đứng yêu cầu và phản hồi mã lỗi, ngăn chặn thành công nguy cơ chiếm quyền quản trị.

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

Kết quả thực nghiệm chính

Đồ án đã chứng minh hiệu quả của việc kết hợp giữa giám sát lưu lượng mạng bằng Snort và ngăn chặn chủ động bằng ModSecurity trên website Cloud Travel:

Kịch bản thực nghiệm Trạng thái trước khi phòng vệ Kết quả xử lý của SNORT Kết quả xử lý của ModSecurity
Bypass Authentication (chèn chuỗi logic luôn đúng tại form đăng nhập) Đăng nhập thành công với quyền admin, hệ thống bị xâm nhập. Phát hiện dấu hiệu chuỗi độc hại trong payload và ghi nhận log cảnh báo. Chặn truy cập ngay tại tầng web server, trả về thông báo lỗi, bảo vệ tài khoản an toàn.
Trích xuất thông tin CSDL (truy vấn phiên bản, tên DB, bảng dữ liệu) Dữ liệu nội bộ và danh sách tài khoản trong CSDL MySQL bị lộ. Bắt gói tin, đối sánh rule và đưa ra cảnh báo tức thời. Chặn đứng câu lệnh truy vấn bất hợp pháp trước khi chuyển tiếp tới MySQL.

Đề xuất và đóng góp của tác giả

  • Đề xuất giải pháp an ninh: Xây dựng mô hình phòng thủ theo chiều sâu cho ứng dụng web, bao gồm: giám sát và ghi log dấu hiệu bất thường ở tầng mạng bằng SNORT NIDS; chặn lọc và triệt tiêu mã độc ở tầng ứng dụng bằng WAF ModSecurity; kết hợp chuẩn hóa mã nguồn ứng dụng (sử dụng truy vấn có tham số và kiểm soát chặt chẽ quyền hạn của người dùng cơ sở dữ liệu).
  • Đóng góp học thuật và thực tiễn: Hệ thống hóa toàn diện cấu trúc viết luật (Header, Payload, Non-payload, Post-detection) của Snort; cung cấp quy trình từng bước từ cài đặt, biên dịch mã nguồn, thiết lập luật tùy biến cho đến kiểm thử thực tế trên một ứng dụng web cụ thể (Cloud Travel).

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

Dựa trên phạm vi và nội dung được trình bày trong văn bản:

  • Hạn chế: Hệ thống thực nghiệm mới được triển khai và đánh giá trên môi trường máy ảo hóa cục bộ (VMware), chưa tiến hành đo lường hiệu năng xử lý (tải CPU, RAM, độ trễ mạng) của Snort và ModSecurity khi chịu lưu lượng truy cập lớn trong môi trường sản xuất thực tế.
  • Hướng nghiên cứu tiếp: Mở rộng nghiên cứu cơ chế phòng chống xâm nhập tự động (chuyển đổi Snort sang chế độ Inline IPS với các hành vi drop/reject), tối ưu hóa hiệu năng của bộ quy tắc WAF và tích hợp thêm các công nghệ phát hiện hành vi xâm nhập thông minh trên các hạ tầng mạng phân tán.

Giá trị tham khảo

Đồ án là nguồn tài liệu hữu ích cho:

  • Sinh viên chuyên ngành: Sinh viên ngành An toàn thông tin, Mạng máy tính và Công nghệ thông tin có nhu cầu tham khảo quy trình cài đặt, cấu hình hệ thống phát hiện xâm nhập SNORT từ mã nguồn trên hệ điều hành Linux/Ubuntu.
  • Lập trình viên và quản trị viên web: Tham khảo các phương pháp phòng chống lỗ hổng SQL Injection, kỹ thuật cấu hình tường lửa WAF ModSecurity trên máy chủ Apache2 và phương pháp phân quyền cơ sở dữ liệu MySQL an toàn.
  • Nội dung đáng tham khảo nhất: Chương 2 (hệ thống hóa toàn bộ cú pháp luật và các tùy chọn của Snort) và Chương 5 (quy trình thực nghiệm tấn công và ngăn chặn cụ thể trên website Cloud Travel).

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

1. Kiến trúc của hệ thống phát hiện xâm nhập SNORT bao gồm những thành phần nào?
SNORT được xây dựng dựa trên 5 module chính: Module giải mã gói tin (sử dụng thư viện pcap), Module tiền xử lý (ghép gói tin, chuẩn hóa giao thức và phát hiện xâm nhập bất thường như portscan), Module phát hiện (so khớp gói tin với bộ luật), Module log và cảnh báo (ghi nhận sự kiện vi phạm), và Module kết xuất thông tin (xuất log ra tệp, syslog, database hoặc SNMP).

2. Hai phần cơ bản trong cấu trúc một luật (Rule) của SNORT là gì?
Một luật của SNORT gồm 2 phần: phần Header (xác định hành động của luật như alert/log, giao thức, địa chỉ IP nguồn/đích, cổng và hướng truyền) và phần Option (nằm trong ngoặc đơn, chứa các thông điệp cảnh báo msg, mã định danh sid, cùng các tiêu chí kiểm tra chi tiết về payload, cờ mạng hoặc bộ lọc tần suất).

3. Kịch bản tấn công SQL Injection được thực hiện trên website Cloud Travel diễn ra như thế nào?
Tác giả đã thực hiện chèn câu lệnh SQL chứa mệnh đề logic luôn đúng vào biểu mẫu đăng nhập của website Cloud Travel, lợi dụng việc không kiểm tra kỹ dữ liệu đầu vào để vượt qua cơ chế xác thực mật khẩu, từ đó đăng nhập thành công vào hệ thống với tư cách quản trị viên (admin).

4. Giải pháp nào được tác giả sử dụng để ngăn chặn thành công tấn công SQL Injection trên website Cloud Travel?
Tác giả đã triển khai cài đặt tường lửa ứng dụng web ModSecurity (libapache2-mod-modsecurity) trên máy chủ web Apache2, nạp bộ quy tắc bảo mật Core Rule Set tải từ GitHub để phân tích, phát hiện và tự động chặn đứng các truy vấn SQL Injection độc hại trước khi chúng tiếp cận cơ sở dữ liệu.


Kết luận

Đồ án tốt nghiệp của tác giả Nguyễn Thị Vân đã hoàn thành các mục tiêu nghiên cứu về an toàn thông tin mạng, làm rõ nguyên lý hoạt động và kiến trúc module của hệ thống SNORT, đồng thời phân tích sâu bản chất kỹ thuật tấn công SQL Injection. Thông qua việc mô phỏng thành công kịch bản tấn công chiếm quyền quản trị trên website Cloud Travel và ứng dụng ModSecurity để ngăn chặn triệt để, đồ án đã chứng minh tính hiệu quả của mô hình bảo mật nhiều tầng trong việc bảo vệ ứng dụng web. Toàn bộ quy trình cài đặt, cấu hình và thực nghiệm được trình bày rõ ràng, mang lại giá trị tham khảo thiết thực cho công tác nghiên cứu và triển khai an ninh hệ thống mạng.