Bối cảnh và vấn đề nghiên cứu
Trong xu thế phát triển của công nghệ thông tin, ứng dụng web đã trở thành nền tảng tiêu chuẩn để lưu trữ, xử lý dữ liệu và cung cấp các dịch vụ trực tuyến thiết yếu (như Gmail, Facebook, Amazon). Đi cùng với sự phổ biến này, các ứng dụng web cũng trở thành mục tiêu hàng đầu của các cuộc tấn công khai thác lỗ hổng bảo mật. Trong số đó, tấn công Cross-Site Scripting (XSS) là một trong những hiểm họa tiêm mã (injection) nguy hiểm và phổ biến nhất, cho phép kẻ tấn công chèn mã JavaScript độc hại vào trang web để thực thi trên trình duyệt của người dùng. Dữ liệu thống kê từ năm 2014 đến tháng 6/2024 cho thấy số lượng lỗ hổng XSS liên tục gia tăng và chiếm tỷ trọng lớn trong tổng số các lỗ hổng bảo mật được công bố hằng năm.
Mặc dù các giải pháp phòng thủ hiện nay như tường lửa ứng dụng web (WAF) hoặc các thiết bị bảo mật chuyên dụng (tiêu biểu như giải pháp của Palo Alto Networks) đã có khả năng phát hiện sự hiện diện của tấn công XSS, nhưng các hệ thống này chủ yếu chỉ dừng lại ở mức đưa ra cảnh báo thô mà không xác định được mục đích cụ thể của cuộc tấn công. Hơn nữa, việc kẻ tấn công áp dụng các kỹ thuật làm rối mã (obfuscation) phức tạp khiến cho các giải pháp phân tích tĩnh dựa trên chữ ký gặp nhiều hạn chế. Việc thiếu thông tin về ý định tấn công buộc các chuyên gia bảo mật và quản trị viên phải phân tích thủ công từng trường hợp, làm kéo dài thời gian phản ứng và khắc phục sự cố.
Trước thực trạng đó, khóa luận tốt nghiệp ngành An toàn Thông tin của nhóm tác giả Phan Quang Khải và Võ Hoàng Khanh (Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, dưới sự hướng dẫn của ThS. Nghi Hoàng Khoa và ThS. Ngô Khánh Khoa) đã đề xuất nghiên cứu phương pháp tự động nhận diện ý định tấn công XSS thông qua việc kết hợp giữa phân tích cú pháp và phân tích động.
Mục tiêu nghiên cứu của đề tài bao gồm 7 nhiệm vụ cụ thể:
- Tìm hiểu cách thức hoạt động, trình bày của một website, các kỹ thuật tấn công và bảo mật website.
- Nghiên cứu và phân tích các kỹ thuật tấn công XSS hiện đại, bao gồm cả những kỹ thuật tấn công và cách các câu lệnh tác động lên trang web.
- Xây dựng một công cụ phân tích cú pháp để phân tích các tải trọng (payloads) được chèn vào.
- Xây dựng một thuật toán hoặc phương pháp phân tích động để phát hiện các hoạt động không bình thường của mã JavaScript trong quá trình thực thi.
- Kết hợp kỹ thuật phân tích cú pháp và phân tích động để tạo thành một phương pháp phát hiện tấn công XSS toàn diện.
- Đánh giá hiệu quả của phương pháp bằng cách sử dụng các bộ dữ liệu thử nghiệm.
- Áp dụng phương pháp phát hiện tấn công XSS đã phát triển vào các ứng dụng web thực tế để đánh giá khả năng áp dụng và độ tin cậy của nó trong môi trường sản xuất.
Đối tượng nghiên cứu:
- Lỗ hổng XSS và các kỹ thuật khai thác XSS (Stored XSS, Reflected XSS, DOM-based XSS).
- Kỹ thuật phân tích cú pháp mã nguồn (Syntax Analysis/AST).
- Kỹ thuật phân tích động trên trình duyệt (Dynamic Analysis).
- Các nhóm ý định của kẻ tấn công khi khai thác lỗ hổng XSS.
- Môi trường thử nghiệm và các ứng dụng web chứa nguy cơ XSS.
Phạm vi nghiên cứu:
- Phạm vi thời gian: Đề tài được thực hiện từ ngày 26/02/2024 đến ngày 30/06/2024.
- Phạm vi không gian: Nghiên cứu và triển khai thực nghiệm trên môi trường web thực nghiệm (như ứng dụng web dễ bị tấn công Damn Vulnerable Web Application - DVWA).
- Phạm vi nội dung: Tập trung vào việc giải mã các payload XSS bị rối mã, trích xuất cây cú pháp, giám sát hành vi JavaScript khi thực thi và phân loại payload thành 6 nhóm ý định cụ thể.
Cơ sở lý thuyết và phương pháp
Khóa luận xây dựng trên nền tảng lý thuyết về kiến trúc ứng dụng web đa tầng theo mô hình Client-Server:
- Phía Client-side: Xây dựng bằng HTML, CSS, JavaScript và các thư viện/framework hiện đại (React, Angular, Vue.js), chịu trách nhiệm hiển thị giao diện và tương tác với người dùng thông qua Document Object Model (DOM).
- Phía Server-side: Xử lý logic nghiệp vụ và dữ liệu thông qua các nền tảng (Node.js, Django, Ruby on Rails, ASP) kết hợp cùng hệ quản trị cơ sở dữ liệu (MySQL, PostgreSQL, MongoDB, Microsoft SQL Server).
- Giao thức mạng: HTTP/HTTPS, WebSockets, RESTful APIs, GraphQL.
Văn bản phân loại chi tiết ba biến thể chính của tấn công XSS:
- Stored XSS: Payload độc hại được lưu trữ trực tiếp trong cơ sở dữ liệu máy chủ và thực thi mỗi khi người dùng truy cập vào phần nội dung bị tiêm nhiễm.
- Reflected XSS: Payload nằm trong yêu cầu HTTP (thường là tham số URL) và được máy chủ phản hồi trực tiếp về trình duyệt người dùng mà không qua xử lý lọc thích hợp.
- DOM-based XSS: Cuộc tấn công xảy ra hoàn toàn ở phía client-side, mã độc làm thay đổi cấu trúc Document Object Model trên trình duyệt mà không làm thay đổi nội dung HTML gửi về từ server.
Khóa luận phân định rõ 6 loại ý định tấn công XSS:
- Reconnaissance (Do thám): Thăm dò xem ứng dụng có tồn tại lỗ hổng XSS hay không, thường sử dụng hàm
alert().
- Phishing (Lừa đảo): Chèn biểu mẫu đăng nhập giả mạo hoặc chuyển hướng người dùng đến các website độc hại (như trang giả mạo Microsoft, Google) nhằm chiếm đoạt tài khoản.
- Data theft (Đánh cắp dữ liệu): Đánh cắp các thông tin nhạy cảm lưu trữ trong biến
document.cookie, phiên làm việc (session token) hoặc dữ liệu trình duyệt.
- Defacement (Thay đổi giao diện): Sửa đổi cây DOM nhằm thay đổi diện mạo website, làm suy giảm uy tín của tổ chức.
- Sniffing (Nghe lén): Đặt mã theo dõi hành vi nhập liệu của người dùng trên bàn phím hoặc thu thập thông tin tương tác.
- Malware Distribution (Phát tán mã độc): Tự động kích hoạt tải xuống và cài đặt phần mềm độc hại lên thiết bị của nạn nhân.
Khóa luận kế thừa và phát triển từ ba công trình nghiên cứu liên quan:
- Nghiên cứu nhận diện ý định SQL Injection [4]: Đặt nền tảng cho việc kết hợp phân tích cú pháp và phân tích động dựa trên tập quy tắc để phân loại ý định tấn công truy vấn.
- Khảo sát về tấn công XSS [9]: Cung cấp cơ sở lý thuyết về phân loại các tác động của XSS (thay đổi nội dung, đánh cắp cookie, chiếm đoạt phiên).
- Nghiên cứu tấn công tổ hợp XSSing [3]: Cung cấp mô hình ngữ pháp tấn công kết hợp thẻ HTML, thuộc tính và sự kiện JavaScript để vượt qua các bộ lọc WAF.
Phương pháp nghiên cứu:
- Phương pháp phân tích tĩnh (Static/Syntax Analysis): Tách payload thành các token ngữ pháp, xây dựng cây cú pháp trừu tượng, tích hợp các thuật toán giải mã rối mã (Hex, Base64, Unicode, HTML Entity, nối chuỗi) và áp dụng bảng 11 quy tắc điều kiện để gán nhãn ngữ nghĩa cho các nút cây cú pháp.
- Phương pháp phân tích động (Dynamic Analysis): Chạy đoạn mã JavaScript trên môi trường trình duyệt (Console), chèn mã hook để ghi đè các hàm mặc định (như
alert()) và theo dõi các thay đổi cấu trúc DOM đối với các payload phức tạp (như mã JSFuck).
- Phương pháp suy luận dựa trên tập quy tắc (Rule-based Classification): Tổng hợp nhãn ngữ nghĩa từ cây cú pháp và nhật ký thực thi động để đối sánh với các quy tắc ý định định sẵn, đưa ra kết luận về mục đích của cuộc tấn công.
Thiết kế và triển khai
Hệ thống được hiện thực dưới dạng một công cụ phần mềm viết bằng ngôn ngữ lập trình Python, nhận đầu vào là đoạn tải trọng XSS (XSS payload) và trả về loại ý định tấn công tương ứng. Quy trình xử lý gồm 3 khối chức năng chính:
1. Phân tích cú pháp và giải mã rối mã (Syntax Analysis & Deobfuscation)
Hệ thống tiến hành bóc tách payload thành tập hợp các token cơ sở:
| Tên Token |
Mô tả |
Ví dụ thực tế |
R-OP |
Toán tử quan hệ |
=, != |
A-OP |
Toán tử số học |
+, -, *, / |
, |
Dấu phẩy (liệt kê) |
, |
; |
Dấu chấm phẩy (kết thúc lệnh) |
; |
Name |
Tên thẻ HTML, tên hàm |
img, script, alert |
String |
Chuỗi ký tự (trong dấu nháy đơn/kép) |
'XSS test', "http://..." |
< |
Dấu ngoặc nhọn mở thẻ |
< |
> |
Dấu ngoặc nhọn đóng thẻ |
> |
( |
Dấu mở ngoặc tròn |
( |
) |
Dấu đóng ngoặc tròn |
) |
Đối với các payload bị làm rối mã, công cụ tự động phát hiện mẫu và giải mã theo các thuật toán:
- Hex Encoding: Nhận dạng mẫu chuỗi
%xy để giải mã về ký tự gốc.
- Unicode Encoding: Nhận dạng mẫu
\u00xy để chuyển đổi ký tự.
- Base64 Encoding: Phát hiện cấu trúc
eval(atob('...')) để trích xuất và giải mã chuỗi base64.
- HTML Entity Encoding: Phát hiện chuỗi
&#x; dạng thập phân và chuyển đổi về ký tự tương ứng.
- Nối chuỗi: Ghép các đoạn chuỗi bị phân mảnh trong JavaScript.
Sau khi tạo cây cú pháp, hệ thống áp dụng bảng quy tắc ngữ nghĩa gồm 11 điều kiện để dán nhãn các node (như Func, Value/Var, Event, Tag, Url/Var):
- Điều kiện 1: Token kế tiếp là "Name"
- Điều kiện 2: Token kế tiếp là "A-OP"
- Điều kiện 3: Token kế tiếp là "R-OP"
- Điều kiện 4: Dữ liệu trước đó là "("
- Điều kiện 5: Dữ liệu trước đó là "<"
- Điều kiện 6: Dữ liệu có chứa chuỗi "http" hoặc "https"
- Điều kiện 7: Dữ liệu kế tiếp nằm trong
tag list
- Điều kiện 8: Dữ liệu kế tiếp nằm trong
event list
- Điều kiện 9: Dữ liệu kế tiếp nằm trong
system function list
- Điều kiện 10: Dữ liệu kế tiếp là "("
- Điều kiện 11: Dữ liệu kế tiếp là "/"
2. Phân tích động (Dynamic Analysis)
Đối với các trường hợp rối mã mức độ cao như ngôn ngữ JSFuck (chỉ sử dụng 6 ký tự [ ] ( ) ! + để tạo mã thực thi), phân tích tĩnh không thể giải mã trực tiếp. Công cụ chuyển mã vào console của trình duyệt để thực thi và kích hoạt cơ chế Hooking:
- Ghi đè hàm cảnh báo (
alert Hooking): Chèn đoạn mã JavaScript thay thế hàm window.alert mặc định nhằm ghi nhận tham số truyền vào hàm và lưu vết sự kiện popup mà không làm gián đoạn luồng phân tích.
- Giám sát biến đổi DOM (DOM Change Log): Lắng nghe các thay đổi trên cây cấu trúc tài liệu HTML khi script chạy nhằm phát hiện hành vi chèn thêm đối tượng giao diện độc hại.
3. Bộ luật nhận diện ý định (Intention Identification)
Dựa trên nhãn ngữ nghĩa của cây cú pháp kết hợp với kết quả phân tích động, bộ suy luận luật sẽ phân loại payload vào đúng 1 trong 6 nhóm ý định (Reconnaissance, Phishing, Data theft, Defacement, Sniffing, Malware Distribution).
Nội dung chính theo từng chương
Chương 1. Tổng quan
- Trình bày bối cảnh gia tăng nhanh chóng của các ứng dụng web và mức độ nguy hiểm của lỗ hổng XSS theo các báo cáo bảo mật giai đoạn 2014–2024.
- Đánh giá hạn chế của các giải pháp WAF và thiết bị bảo mật hiện hữu (như Palo Alto Networks) trong việc phân loại ý định và giải mã payload.
- Xác định 7 mục tiêu nghiên cứu, đối tượng nghiên cứu, phạm vi thời gian (26/02/2024 - 30/06/2024) và cấu trúc 5 chương của khóa luận.
Chương 2. Cơ sở lý thuyết
- Phân tích chi tiết kiến trúc ứng dụng web (Client-side, Server-side, giao thức HTTP/HTTPS, WebSockets, RESTful API, GraphQL).
- Trình bày cấu trúc tài liệu HTML, ngôn ngữ kịch bản JavaScript, mô hình Document Object Model (DOM) cùng các phương thức thao tác DOM phổ biến (
write(), getElementById(), getElementsByTagName(), getElementsByClassName(), open(), close()).
- Phân loại và phân tích cơ chế hoạt động của WAF, 3 hình thức tấn công XSS (Stored XSS, Reflected XSS, DOM-based XSS) kèm kịch bản minh họa chi tiết.
- Định nghĩa và mô tả 6 nhóm ý định tấn công XSS (Reconnaissance, Phishing, Data theft, Defacement, Sniffing, Malware Distribution).
Chương 3. Phương pháp nhận diện ý định tấn công XSS dựa vào phân tích cú pháp và phân tích động
- Đặt ra vấn đề nghiên cứu từ hạn chế của các giải pháp thương mại.
- Xây dựng mô hình tổng quan của phương pháp gồm 3 giai đoạn: Phân tích cú pháp, Phân tích động và Nhận diện ý định.
- Chi tiết hóa bảng token, các kỹ thuật giải mã rối mã (Hex, Base64, Unicode, HTML Entity, String concatenation).
- Xây dựng bảng quy tắc ngữ nghĩa với 11 điều kiện logic để phân loại nhãn node trên cây cú pháp.
- Thiết kế cơ chế phân tích động trên console trình duyệt, kỹ thuật Hooking hàm
alert() và ghi log biến đổi DOM để giải quyết các payload phức tạp như JSFuck.
Chương 4. Thí nghiệm và đánh giá
- Thiết lập môi trường thực nghiệm với công cụ tự động bằng Python và ứng dụng web kiểm thử Damn Vulnerable Web Application (DVWA).
- Sử dụng hai bộ dữ liệu để đánh giá: tập dữ liệu nội bộ (có dán nhãn) và tập dữ liệu thực tế deepXSS (không dán nhãn).
- Trình bày luồng hoạt động, kịch bản kiểm thử và bảng kết quả thực nghiệm chứng minh độ chính xác của phương pháp đề xuất.
Kết quả và đóng góp
- Kết quả thực nghiệm: Công cụ nhận diện ý định XSS được xây dựng bằng Python đã hoạt động ổn định trên môi trường thử nghiệm ứng dụng web DVWA. Kết quả thử nghiệm trên cả hai tập dữ liệu (tập dữ liệu nội bộ có dán nhãn và tập dữ liệu thực tế deepXSS) cho thấy phương pháp đạt tỷ lệ nhận diện chính xác cao đối với các dạng payload XSS thông thường lẫn các payload bị làm rối mã phức tạp (như JSFuck).
- Giải pháp đề xuất: Nhóm tác giả đã cung cấp một quy trình tự động hóa hoàn chỉnh kết hợp giữa phân tích tĩnh cây cú pháp (AST) và phân tích động thông qua kỹ thuật Hooking JavaScript trên trình duyệt.
- Đóng góp khoa học và thực tiễn:
- Khắc phục điểm yếu lớn của các hệ thống WAF truyền thống và thiết bị Palo Alto hiện nay (vốn chỉ phát hiện tấn công chứ không xác định được ý định).
- Tự động hóa quá trình giải mã các biến thể làm rối mã (obfuscation), giúp giảm thiểu đáng kể thời gian và công sức phân tích thủ công của các quản trị viên và chuyên gia ứng cứu sự cố an toàn thông tin.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế:
- Nghiên cứu tập trung đánh giá trên môi trường web thực nghiệm (DVWA) và các tập dữ liệu mẫu sẵn có (tập dữ liệu nội bộ và deepXSS), chưa triển khai thử nghiệm toàn diện trên các hệ thống web quy mô lớn trong môi trường sản xuất thực tế.
- Phân tích động trên console trình duyệt hiện chủ yếu tập trung vào hai hành vi đặc trưng là kích hoạt hàm cảnh báo (
alert) và biến đổi cấu trúc DOM, chưa bao quát hết tất cả các hành vi bất thường phức tạp khác của JavaScript.
- Hướng phát triển:
- Mở rộng tập luật ngữ nghĩa và hoàn thiện cơ chế phân tích động để nhận diện thêm các hành vi độc hại tinh vi khác của JavaScript.
- Tích hợp và thử nghiệm công cụ trên các hệ thống mạng và ứng dụng web thực tế trong môi trường sản xuất nhằm đánh giá toàn diện độ tin cậy và khả năng chịu tải.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo chuyên sâu cho:
- Sinh viên, học viên và nghiên cứu sinh thuộc ngành An toàn Thông tin, Khoa học Máy tính và Mạng máy tính & Truyền thông đang thực hiện các đề tài về an toàn ứng dụng web, phân tích mã độc JavaScript hoặc phát hiện xâm nhập.
- Các kỹ sư bảo mật ứng dụng web (AppSec), chuyên gia vận hành trung tâm giám sát an ninh mạng (SOC) và chuyên gia ứng cứu sự cố (Incident Response) cần tài liệu tham khảo về mô hình phân loại ý định tấn công XSS và kỹ thuật giải mã các payload bị làm rối mã.
- Các phần có giá trị tham khảo cao trong tài liệu gồm: Bảng phân loại 11 điều kiện quy tắc ngữ nghĩa (Semantic Rules), các thuật toán giải mã payload (Hex, Base64, Unicode, HTML Entity, JSFuck) và cơ chế can thiệp ghi đè hàm (
alert hooking) trong phân tích động.
Câu hỏi thường gặp
1. Khóa luận phân chia ý định của kẻ tấn công khi khai thác lỗ hổng XSS thành những loại nào?
Khóa luận phân loại thành 6 nhóm ý định cụ thể: Do thám (Reconnaissance), Lừa đảo (Phishing), Đánh cắp dữ liệu (Data theft), Thay đổi giao diện (Defacement), Nghe lén (Sniffing) và Phát tán mã độc (Malware Distribution).
2. Tại sao phương pháp phân tích tĩnh đơn thuần không thể xử lý hiệu quả các payload XSS phức tạp như JSFuck?
Ngôn ngữ JSFuck chỉ sử dụng 6 ký tự cơ bản ([, ], (, ), !, +) để sinh ra toàn bộ mã thực thi, khiến cây cú pháp tĩnh không thể bóc tách được các từ khóa hay hàm rõ nghĩa. Do đó, phương pháp cần kết hợp phân tích động bằng cách đưa mã vào thực thi trên console trình duyệt và hook các hàm liên quan để quan sát hành vi thực tế.
3. Cơ chế dán nhãn ngữ nghĩa (Semantic Labeling) cho các node cú pháp hoạt động như thế nào?
Sau khi tách payload thành các token, hệ thống sử dụng bảng quy tắc ngữ nghĩa gồm 11 điều kiện kiểm tra (dựa trên token kế tiếp, dữ liệu đứng trước, việc chứa chuỗi "http/https", hoặc việc giá trị nằm trong danh sách tag/event/system function của HTML). Tùy thuộc vào việc thỏa mãn các điều kiện này, các node sẽ được gán các nhãn ngữ nghĩa tương ứng như Func, Value/Var, Event, Tag, Url/Var.
4. Khóa luận sử dụng các bộ dữ liệu và môi trường nào để tiến hành thực nghiệm và đánh giá?
Tác giả đã cài đặt công cụ bằng ngôn ngữ Python, triển khai kiểm thử trên môi trường ứng dụng web Damn Vulnerable Web Application (DVWA), đồng thời đánh giá độ chính xác của phương pháp trên hai tập dữ liệu: tập dữ liệu nội bộ (có dán nhãn) và tập dữ liệu thực tế deepXSS (không dán nhãn).
Kết luận
Khóa luận tốt nghiệp của nhóm tác giả Phan Quang Khải và Võ Hoàng Khanh đã giải quyết thành công bài toán nhận diện ý định tấn công Cross-Site Scripting (XSS) thông qua việc kết hợp giữa phân tích cú pháp tĩnh và phân tích động trên trình duyệt. Công cụ mã nguồn Python được phát triển có khả năng giải mã hiệu quả các payload bị làm rối mã phức tạp, dán nhãn ngữ nghĩa chính xác và phân loại payload vào 6 nhóm ý định tấn công rõ ràng. Kết quả thử nghiệm trên ứng dụng DVWA cùng các tập dữ liệu nội bộ và deepXSS đã khẳng định tính khả thi của giải pháp, mở ra hướng ứng dụng thiết thực nhằm hỗ trợ các chuyên gia bảo mật rút ngắn thời gian phân tích và ứng cứu sự cố web.