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

Sự phát triển mạnh mẽ của công nghệ thông tin và Internet đã biến dữ liệu cá nhân cùng thông tin nội bộ của các tổ chức, doanh nghiệp trở thành tài sản có giá trị thương mại rất cao. Điều này trực tiếp thúc đẩy sự gia tăng của các cuộc tấn công mạng từ các tin tặc (hacker) nhằm mục đích chiếm đoạt và thương mại hóa dữ liệu trái phép. Trước thực trạng các ứng dụng web liên tục đối mặt với những nguy cơ an ninh nghiêm trọng, việc đào tạo và nâng cao năng lực cho đội ngũ kỹ sư, chuyên viên an toàn thông tin trở thành yêu cầu cấp thiết.

Đề tài "Báo cáo đồ án nhập môn Đảm bảo an toàn và An toàn thông tin: Chương trình WebGoat" được nhóm sinh viên thuộc Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh thực hiện dưới sự hướng dẫn của ThS. Nguyễn Tấn Cầm. Đồ án tập trung nghiên cứu, cài đặt và phân tích các kịch bản tấn công cũng như phương pháp phòng thủ dựa trên nền tảng WebGoat.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:

  1. Nghiên cứu tổng quan về nền tảng WebGoat và vai trò của tổ chức OWASP trong kiểm thử bảo mật ứng dụng web.
  2. Thiết lập môi trường thực nghiệm bằng cách cài đặt và cấu hình WebGoat cùng các công cụ hỗ trợ phân tích gói tin.
  3. Thực hành các kịch bản khai thác lỗ hổng bảo mật thực tế trên WebGoat, tập trung vào giao thức HTTP, các dạng tấn công SQL Injection (cơ bản và nâng cao/Blind SQLi), XML External Entity (XXE), và lỗi xác thực (Authentication Flaws).
  4. Phân tích nguyên nhân gốc rễ của từng lỗ hổng và tổng hợp các giải pháp lập trình an toàn, kỹ thuật giảm thiểu rủi ro tương ứng.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Nền tảng thực hành an toàn ứng dụng web WebGoat (phiên bản 8.0) do dự án OWASP phát triển; các kỹ thuật tấn công và biện pháp phòng chống lỗ hổng bảo mật web.
  • Phạm vi không gian và thời gian: Đồ án môn học được thực hiện tại Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh, hoàn thành vào ngày 20 tháng 11 năm 2020.

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

Khung lý thuyết và khái niệm nền tảng

Đồ án xây dựng nội dung dựa trên các tiêu chuẩn an ninh và phân loại lỗ hổng web từ tổ chức OWASP (Open Web Application Security Project):

  • Cơ chế giao thức HTTP/HTTPS: Cấu trúc thông điệp yêu cầu (Request) và phản hồi (Response) gồm Request/Status line, Headers, và Message Body; cơ chế hoạt động của các phương thức GET, POST, PUT.
  • Phân loại ngôn ngữ SQL: Ngôn ngữ thao tác dữ liệu (DML: SELECT, UPDATE, INSERT, DELETE), ngôn ngữ định nghĩa dữ liệu (DDL: CREATE, ALTER, DROP, TRUNCATE), và ngôn ngữ điều khiển dữ liệu (DCL: GRANT, REVOKE).
  • Nguyên lý tấn công tiêm mã (Injection): Bản chất của việc ứng dụng không tách biệt giữa dữ liệu do người dùng cung cấp và mã lệnh thực thi, dẫn đến việc kẻ tấn công có thể chèn các cấu trúc điều khiển độc hại.
  • Cấu trúc dữ liệu XML và DTD: Định nghĩa kiểu tài liệu (Document Type Definition - DTD), cơ chế thực thể bên ngoài (External Entity) dẫn đến nguy cơ XXE.
  • Cơ chế xác thực (Authentication): Quy trình kiểm tra danh tính đối tượng qua HTTP Headers, Parameters, Cookies và định dạng JSON Web Token (JWT) với 3 phần: Header, Claims (Payload), Signature.

Phương pháp nghiên cứu thực nghiệm

Nhóm tác giả sử dụng phương pháp nghiên cứu thực nghiệm kết hợp phân tích kỹ thuật:

  • Thực nghiệm khai thác lỗ hổng (Penetration Testing Simulation): Sử dụng các công cụ can thiệp proxy (Burp Suite, FoxyProxy) để bẫy, phân tích và sửa đổi trực tiếp dữ liệu HTTP request trước khi gửi đến máy chủ.
  • Phương pháp dò đoán từng bước (Blind Exploitation & Brute-force): Ứng dụng kỹ thuật khai thác Boolean-based Blind SQL Injection và công cụ tự động hóa Payload Attack (Burp Intruder) để giải mã địa chỉ IP máy chủ và mật khẩu người dùng.
  • Phân tích mã nguồn và giải pháp kỹ thuật: So sánh cơ chế hoạt động giữa câu truy vấn động (Dynamic SQL) và câu truy vấn được tham số hóa (Parameterized Queries / Prepared Statements), cùng nguyên tắc phân quyền tối thiểu (Least Privilege).

Thiết kế và triển khai môi trường thực nghiệm

Môi trường thực hành của đồ án được triển khai trên hệ thống cục bộ với các thành phần công nghệ:

Thành phần Đặc tả kỹ thuật / Công cụ sử dụng Vai trò trong hệ thống
Ứng dụng mục tiêu WebGoat phiên bản 8.0 (file thực thi .jar) Máy chủ ứng dụng web chứa lỗi có chủ đích
Môi trường chạy Java Runtime Environment (JRE) Nền tảng thực thi WebGoat
Giao diện người dùng Trình duyệt web truy cập http://localhost:8080/WebGoat Tương tác với các bài học và bài tập thực hành
Proxy can thiệp Burp Suite (Proxy, Repeater, Intruder) Bắt gói tin, sửa đổi header/body, tấn công tự động
Công cụ chuyển hướng Tiện ích mở rộng FoxyProxy trên trình duyệt Điều hướng lưu lượng web qua Burp Suite Proxy

Quy trình cài đặt và triển khai hệ thống gồm 3 bước:

  1. Tải gói mã nguồn/thực thi WebGoat từ kho lưu trữ GitHub chính thức (https://github.com/WebGoat/WebGoat) và cài đặt môi trường Java tương thích.
  2. Khởi chạy ứng dụng từ giao diện dòng lệnh thông qua cú pháp: java -jar [Tên tệp jar].
  3. Mở trình duyệt, kết nối tới cổng dịch vụ mặc định tại http://localhost:8080/WebGoat và đăng ký tài khoản cục bộ để bắt đầu phiên thực hành.

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

Chương I: Tổng quan về đề tài

Chương này phân tích bối cảnh an ninh mạng, nguy cơ thất thoát dữ liệu tổ chức và vai trò của WebGoat trong việc đào tạo an toàn thông tin. WebGoat được định nghĩa là một ứng dụng máy chủ viết bằng Java, được cố tình lập trình chứa nhiều lỗ hổng để người dùng hiểu rõ bản chất rủi ro của ứng dụng web. Văn bản nêu rõ lịch sử hình thành dự án OWASP từ năm 2001 bởi Mark Curphey và người lãnh đạo hiện tại là Matt Konda. Cấu trúc WebGoat phiên bản 8.0 bao gồm 8 bài học chính với định hướng phát triển thành nền tảng đo điểm chuẩn bảo mật (security benchmark) và trang web Java Honeypot.

Chương II: Lợi ích của WebGoat mang lại

Tác giả tổng kết ba giá trị cốt lõi của WebGoat trong quy trình học tập:

  • Giải thích lỗ hổng: Tập trung truyền tải bản chất lý thuyết của lỗ hổng trước khi tiến hành tấn công.
  • Học thông qua thực hành: Cung cấp hệ thống bài tập tương tác mô phỏng môi trường thực tế để người học trực tiếp khai thác.
  • Cung cấp giải pháp giảm thiểu: Đưa ra hướng dẫn tổng quan về các phương pháp lập trình an toàn và biện pháp khắc phục kỹ thuật ở cuối mỗi bài học.

Chương III: Hướng dẫn cài đặt WebGoat

Chương III tài liệu hóa quy trình thiết lập môi trường chi tiết qua 3 bước: tải ứng dụng từ GitHub, chạy gói .jar qua câu lệnh Java trên hệ điều hành Windows/Linux, và cấu hình cổng dịch vụ 8080 trên trình duyệt để khởi tạo tài khoản kiểm thử.

Chương IV: Các bài học tấn công mạng và phương pháp để ngăn chặn trên WebGoat

Đây là chương trọng tâm của đồ án, trình bày chi tiết cơ chế hoạt động, kịch bản khai thác và biện pháp ngăn chặn đối với từng nhóm lỗ hổng:

1. HTTP Basic và HTTP Proxy

  • Cơ chế HTTP: Phân tích cấu trúc 3 phần của một giao dịch HTTP (Request/Response line, Headers, Body). Minh họa luồng dữ liệu của phương thức GET (tham số nằm trên URL, lưu vết trong access log) và POST (dữ liệu nằm trong Entity Body).
  • Thực hành HTTP: Bài học đảo ngược chuỗi ký tự đầu vào (nhập hello trả về olleH) và xác định loại phương thức HTTP trong tab Network.
  • HTTP Proxy: Trình bày nguyên lý hoạt động của máy chủ proxy như một thực thể trung gian có khả năng ghi nhật ký, phân tích và sửa đổi dữ liệu (tampering). Đề cập đến việc ứng dụng OWASP ZAP trong quy trình CI/CD tích hợp Jenkins/Maven.
  • Kịch bản bẫy gói tin: Sử dụng Burp Suite để chặn request, chuyển đổi phương thức từ POST sang GET, chèn header x-request-intercepted:true, và đổi giá trị tham số thành Request are tampered easily để hoàn thành bài học.

2. Lỗ hổng SQL Injection và phương pháp phòng thủ

  • Lý thuyết SQL Injection: Phân tích các phân nhóm lệnh SQL (DML, DDL, DCL). Trình bày các rủi ro nghiêm trọng khi bị khai thác: đọc/ghi dữ liệu nhạy cảm, thực thi lệnh quản trị, can thiệp hệ điều hành (master..xp_cmdshell), giả mạo danh tính, hoặc xóa toàn bộ cơ sở dữ liệu.
  • Khai thác String & Numeric Injection:
    • Tiêm chuỗi: Nhập Smith' or '1'='1 hoặc Smith' or 1=1-- vào tham số LAST_NAME để truy vấn trả về toàn bộ dữ liệu bảng users.
    • Tiêm số: Nhập 101 or 1=1-- vào tham số USERID.
  • SQL Injection nâng cao: Sử dụng các ký tự đặc biệt (/* */, --, #, ;, +, ||, char()) và các toán tử kết hợp UNION, JOINS để trích xuất dữ liệu từ bảng user_system_data.
  • Blind SQL Injection: Phân tích hai biến thể (Content-based và Time-based). Kịch bản thực nghiệm sử dụng mệnh đề ORDER BY kết hợp biểu thức điều kiện để dò từng ký tự địa chỉ IP của máy chủ webgoat-prd (kết quả tìm được IP 104.202). Tiếp theo, sử dụng Burp Intruder để brute-force từng ký tự mật khẩu tài khoản tom, giải mã thành công chuỗi mật khẩu thisisasecretfortomonly.
  • Giải pháp phòng thủ (Mitigations):
    • Sử dụng truy vấn bất biến (Immutable Queries): Bao gồm truy vấn tĩnh và truy vấn tham số hóa (PreparedStatement trong Java).
    • Sử dụng thủ tục lưu trữ an toàn (Safe Stored Procedures), loại bỏ SQL động trong thủ tục.
    • Áp dụng danh sách trắng (whitelist) để kiểm soát các biểu thức sắp xếp trong mệnh đề ORDER BY (vì Prepared Statement không thể tham số hóa tên cột trong ORDER BY).
    • Áp dụng nguyên tắc đặc quyền tối thiểu (Least Privilege): Tách biệt tài khoản chỉ đọc (SELECT) và tài khoản đọc/ghi, hạn chế quyền truy cập schema và vô hiệu hóa các quyền xóa không cần thiết.

3. Lỗ hổng XML External Entity (XXE)

  • Cơ chế XML & DTD: Trình bày cấu trúc tệp XML và vai trò của DTD (Document Type Definitions - bao gồm Internal DTD và External DTD) trong việc định nghĩa cấu trúc dữ liệu. Khẳng định cơ chế xử lý DTD chính là nguồn gốc phát sinh lỗi XXE.
  • Thực hành Challenge: Bẫy gói tin qua Burp Suite, sửa đổi payload XML để chèn thực thể !DOCTYPE độc hại nhằm trích xuất dữ liệu hệ thống hoặc khai thác trên các điểm cuối dạng REST framework hỗ trợ định dạng JSON/XML.

4. Lỗ hổng xác thực (Authentication Flaws)

  • Vị trí xuất hiện: Xác thực qua URL, Headers (Cookie, Authorization, Custom headers), và Request Body (Form fields).
  • Phương thức Bypass: Phân tích các dạng vượt qua xác thực do lỗi logic/cấu hình: Hidden Inputs (trường ẩn trong DOM), Removing Parameters (xóa tham số khỏi request), và Forced Browsing (truy cập trực tiếp đường dẫn không được bảo vệ).
  • Thực hành Bypass: Sử dụng Burp Suite bắt request đặt lại mật khẩu, tiến hành đổi tên các câu hỏi bảo mật trong request để bỏ qua cơ chế kiểm tra và cập nhật mật khẩu mới thành công.
  • Bảo mật JSON Web Token (JWT): Phân tích cấu trúc 3 phần của JWT (Header, Payload/Claims, Signature) và các nguyên tắc triển khai an toàn token trong xác thực phiên làm việc.

5. Các nội dung khác theo mục lục

Mục lục tài liệu ghi nhận sự hiện diện của các bài học về Cross-Site Scripting (XSS) và Lỗi kiểm soát truy cập (Access Control Flaws) ở các trang tiếp theo của chương trình đào tạo.

Chương V: Tổng kết

Tóm lược kết quả nghiên cứu và khẳng định hiệu quả của nền tảng WebGoat trong việc hệ thống hóa kiến thức an toàn thông tin cho sinh viên.

Chương VI: Tài liệu tham khảo

Liệt kê các nguồn tài liệu tham khảo chính, bao gồm mã nguồn và tài liệu kỹ thuật từ kho lưu trữ GitHub của WebGoat và các bài viết phân tích giải pháp kỹ thuật trên nền tảng trực tuyến.

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

Kết quả kỹ thuật đạt được

Đồ án đã ghi nhận và chứng minh bằng thực nghiệm các kết quả cụ thể:

  1. Hoàn thành toàn bộ quy trình thiết lập môi trường WebGoat 8.0 trên nền tảng Java cục bộ.
  2. Thực hiện thành công việc can thiệp, phân tích và sửa đổi gói tin HTTP thông qua Burp Suite Proxy.
  3. Khai thác thành công các dạng lỗ hổng SQL Injection: trích xuất toàn bộ bảng dữ liệu users và user_system_data, giải mã thành công địa chỉ IP máy chủ webgoat-prd (104.202) và bẻ khóa mật khẩu tài khoản tom (thisisasecretfortomonly).
  4. Khai thác thành công cơ chế xử lý DTD trong XML để tạo lỗ hổng XXE và vượt qua cơ chế xác thực bằng kỹ thuật thay đổi tham số (Removing/Modifying Parameters).
  5. Tổng hợp chi tiết các biện pháp phòng chống kỹ thuật từ mức mã nguồn (PreparedStatement, Whitelist Validation) đến mức cấu hình cơ sở dữ liệu (Least Privilege).

Đóng góp của tài liệu

  • Cung cấp tài liệu hướng dẫn thực hành an toàn thông tin chi tiết bằng tiếng Việt cho sinh viên ngành Công nghệ thông tin.
  • Hệ thống hóa các bước khai thác kết hợp với phân tích mã lỗi, giúp người học hiểu rõ mối liên hệ giữa lỗi lập trình phía máy chủ và hậu quả an ninh tương ứng.

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

  • Hạn chế: Phạm vi thực nghiệm của báo cáo giới hạn trên môi trường giả lập cục bộ WebGoat 8.0; các kịch bản tấn công được thực hiện trong môi trường kiểm thử có chủ đích nên chưa bao quát toàn bộ các cấu hình bảo mật phức tạp trên các hệ thống thực tế ngoài môi trường sản xuất.
  • Hướng phát triển: Tiếp tục nghiên cứu các bài học nâng cao khác trong cấu trúc WebGoat (Cross-Site Scripting, Access Control Flaws); mở rộng tích hợp các công cụ kiểm thử bảo mật tự động (như OWASP ZAP) vào đường ống phát triển phần mềm CI/CD theo định hướng DevSecOps.

Giá trị tham khảo

Báo cáo đồ án là tài liệu học tập và tham khảo phù hợp cho:

  • Sinh viên chuyên ngành An toàn thông tin, Kỹ thuật phần mềm, Công nghệ thông tin đang học các học phần An toàn ứng dụng web, Nhập môn An toàn thông tin.
  • Lập trình viên web có nhu cầu tìm hiểu các lỗ hổng thường gặp theo phân loại của OWASP và các kỹ thuật viết mã an toàn (Secure Coding) trong Java/SQL.
  • Các phần đáng tham khảo nhất bao gồm: Kỹ thuật khai thác Blind SQL Injection từng bước bằng Burp Suite (Repeater và Intruder), kỹ thuật kiểm soát mệnh đề ORDER BY, và hướng dẫn sử dụng PreparedStatement để phòng ngừa triệt để SQL Injection.

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

1. WebGoat là gì và mục tiêu của dự án này là gì?

WebGoat là một ứng dụng máy chủ dựa trên Java do tổ chức OWASP phát triển, được cố tình lập trình chứa nhiều lỗ hổng an ninh. Mục tiêu chính của WebGoat là tạo ra môi trường giảng dạy và thực hành tương tác thực tế về bảo mật ứng dụng web, đồng thời định hướng trở thành nền tảng đo điểm chuẩn bảo mật và Java Honeypot.

2. Prepared Statement có ngăn chặn được hoàn toàn SQL Injection trong mệnh đề ORDER BY không?

Không. Theo cấu trúc ngữ pháp của SQL, mệnh đề ORDER BY chấp nhận một biểu thức hoặc tên cột chứ không phải giá trị dữ liệu tham số thông thường. Do đó, Prepared Statement không thể áp dụng trực tiếp cho tên cột sau ORDER BY. Biện pháp giảm thiểu được tài liệu đề xuất là xây dựng một danh sách trắng (whitelist) ở tầng ứng dụng để kiểm tra và chỉ cho phép các giá trị cột hợp lệ (ví dụ: firstname hoặc lastname).

3. Trong bài thực hành Blind SQL Injection, nhóm tác giả đã tìm ra địa chỉ IP và mật khẩu nào?

Bằng kỹ thuật gửi truy vấn kiểm tra điều kiện logic qua Burp Suite Repeater và brute-force qua Burp Suite Intruder, nhóm tác giả đã xác định được:

  • Địa chỉ IP của máy chủ webgoat-prd là 104.202.
  • Mật khẩu của tài khoản tom là thisisasecretfortomonly.

4. Lỗ hổng XML External Entity (XXE) phát sinh từ thành phần nào trong cấu trúc XML?

Lỗ hổng XXE phát sinh từ cơ chế xử lý DTD (Document Type Definitions), cụ thể là việc cho phép khai báo và phân tích cú pháp các thực thể bên ngoài (External Entity) trong tệp XML. Khi ứng dụng xử lý các thực thể này mà không vô hiệu hóa DTD hoặc không lọc dữ liệu, kẻ tấn công có thể chèn các tham chiếu độc hại để đọc tệp hệ thống hoặc tấn công nội bộ.

Kết luận

Đồ án "Báo cáo đồ án nhập môn Đảm bảo an toàn và An toàn thông tin: Chương trình WebGoat" đã hoàn thành việc nghiên cứu, cài đặt và thực nghiệm các kỹ thuật kiểm thử bảo mật web trên nền tảng WebGoat 8.0. Thông qua các kịch bản thực hành với Burp Suite, đồ án đã làm rõ cơ chế hoạt động của các lỗ hổng phổ biến như HTTP tampering, SQL Injection, Blind SQLi, XXE và Authentication Bypasses. Đồng thời, tài liệu đề xuất các biện pháp phòng vệ kỹ thuật chuẩn mực như sử dụng Prepared Statements, Whitelist Validation và phân quyền tối thiểu, mang lại giá trị học thuật và thực hành cao cho sinh viên ngành An toàn thông tin.