Chương 1 - Mé đầu Đặt van dé, ly do thuc hién dé tài luận văn và mục đích của nghiên cứu. Chương 2 — Tổng quan về tình hình nghiên cứu Khảo sát các nghiên cứu có liên quan về ứng dụng fuzzing hiện nay, các giải pháp phục vụ fuzzing, các thách thức và giải pháp tăng tốc độ và tiết kiệm tài nguyên trong ứng dụng fuzzing. Chương 3 — Cơ sở lý thuyết và phương pháp luận Khao sát về các công cụ fuzzing hiện nay như ffuf, wfuzz, webfuzz, AFL và phân loại các phương pháp fuzzing dựa trên cách thực hiện của nó. Chương 4 — Kết quả thực hiện Thể hiện lại các kết quả, số liệu đã thử nghiệm thực tế khi thực hiện fuzzing kết hợp giải thuật di truyền (Chương 3) lên các ứng dụng web có sẵn trong môi trường thực tế, từ đó thông kê, đánh giá về hoạt động, hiệu suất của giải pháp này.
Cùng với đó là so sánh với các công cụ khác để có cái nhìn thực tế hơn về phương pháp sử dụng. Chương 5 - Kết luận và hướng phát triển Dua ra kết luận, đánh giá về kết quả của luận văn dé tiếp tục thực hiện trong tương lai. TONG QUAN VE TINH HÌNH NGHIÊN CUU 2. Cac hướng tiếp cận Lỗ hồng trên trang web là loại lỗ hông tiềm an nhiều khả năng bị khai thác dé dàng trong hệ thống mạng, vì vậy được đặc biệt quan tâm hiện nay.
Dé tìm kiếm va khắc phục những vị trí tồn tại lỗ hong này, các nhà nghiên cứu chia làm hai nhánh tiếp cận, nhánh đầu tiên là phân tích tĩnh và nhánh thứ hai là phân tích động. Phương pháp phân tích động được trién khai bang cách sử dụng thực tế trang web dé tìm ra lỗi. Điển hình cho kiêu phân tích này là kỹ thuật fuzzing. Phương pháp nay thực hiện bằng cách nhập các tham số đầu vào và theo dõi các truy vấn tương tác với ứng dụng web.
Kết quả của phân tích động sẽ là thông tin về lỗ hồng có tồn tại trên hệ thống hay không. Còn về phân tích tĩnh, phương pháp này liên quan đến việc phân tích mã nguồn được cung cấp dé tìm ra lỗ hồng. Phương pháp này sẽ không thực sự thực thi mã nguồn ứng dụng mà thông qua các thuật toán đề tìm các lỗ hồng tiềm ân, do đó có thể phát hiện được các lỗ hông mà phương pháp phân tích động không tìm được, đồng thời đi sâu vào chỉ tiết mã nguồn ứng dụng. Tuy nhiên phân tích tĩnh thường trả về nhiều kết quả không chính xác và dương tính giả (False Positive) cùng với âm tính giả (False Negative) [3].
Dé tăng cường hiệu quả kiểm tra có thé kết hợp cả phương pháp phân tích tĩnh và phân tích động. Phương pháp kết hợp này cho phép phát hiện các lỗ héng mà phân tích riêng lẻ bằng các phương pháp kế trên không phát hiện được. Dưới đây là bảng so sánh các phương pháp tìm kiếm lỗ hông web được nghiên cứu trước đây. Phân tích tĩnh Phương pháp này phân tích mã nguồn, luồng thực thi của Đại diện: TAJ, chương mà không thực sự thực thi chương trình.
DeepSource, DeepScan, TAJS [4], Uu diém: ¢ GO nhánh phân tích tĩnh có phương pháp thực thi tượng trưng (symbolic execution) rất hữu ích vì có thể tìm kiếm sâu các lỗ hồng tồn tại trong ứng dụng nhờ vào việc phân tích các điêm sink của chương trình. Nhược điểm: e _ Việc thiết kế thuật toán và phân tích luồng thực thi của mã nguồn là tương đối phức tạp với các ứng dụng web, và tỉ lệ dương tính giả cao. Phân tích động Trong phương pháp phân tích động, những nhà nghiên Đại diện: wfuzz, ffuf cứu thực hiện thực thi mã nguồn của ứng dụng trong một [5] Acunetix [6], môi trường kiểm soát và quan sát vị trí tim thấy lỗ hong. e Đơn giản trong xây dựng mô hình và thực thi.
Nhược điểm: e _ Tốn nhiều thời gian thực thi chương trình. Và thời gian thực thi phụ thuộc vào số lượng mã khai thác và các đầu vào nào cần kiểm tra, có thể từ vài tiếng đối với tập hợp các mã khai thác có số lượng ít, đến vài ngày, thậm chí vài năm với số lượng lớn các mã khai thác và đầu vào tương ứng. Do đó, phương pháp này được xem là có nhược điểm trong việc tốn quá nhiều thời gian. Đây van là một phương pháp tốt và phé biến nhất dé kiểm tra lỗ hồng web mặc cho những nhược điểm của nó do tính dé sử dụng và khả năng tìm ra lỗ hồng của phương pháp này.
Kết hợp phân tích Điển hình là các phân tích động dựa trên fuzzing và phản tĩnh và động: hồi, trong đó các mô hình này thực hiện việc thực thi mã Đại điện: AFL++ [9], | nguồn ứng dung trong môi trường kiểm soát và theo dõi webFuzz [10], Cefuzz | các tương tác giữa ứng dụng và môi trường để tìm ra các [11]. Hướng tiếp cận này từ các đại diện như AFL++, webfuzz, Cefuzz cho thấy tốt hơn so với phân tích tĩnh hay phân tích động riêng lẻ, giúp tăng tốc quá trình tìm kiếm lỗ hỗng và giảm thiểu các sai sot. Các nghiên cứu liên quan 2. WebFuzz: Grey-Box Fuzzing for Web Applications Công trình của Orpheas van Rooij về sử dung kĩ thuật fuzzing trên các ứng dụng web chứng minh được việc kết hợp phân tích tĩnh và phân tích động trong mô hình hiệu quả như thế nào [10].
Mặc dù chủ đề nghiên cứu fuzzing không mới, tuy vậy áp dung fuzzing trên các ứng dụng web và đánh giá độ bao phủ mã là một hướng đi mới mà tác giả đưa ra. Cụ thể, WebFuzz - một công cụ fuzzing theo hướng hộp xám được thiết kế bởi tác giả đã tạo ra các mã khai thác hiệu quả dé khai thác lỗ hồng Cross- site Scripting (XSS) trên các ứng dụng web mã nguồn mở khác nhau. WebFuzz sử dụng thông tin thu được để hướng dẫn tạo các trường hợp thử nghiệm, giúp tăng độ bao phủ mã và xác định hiệu quả hơn các lỗ hồng phức tạp mà các công cụ fuzzing truyền thống có thé bỏ sót. Điều đáng chú ý là WebFuzz đã được áp dụng trên các ứng dụng thực tế và đạt được kết quả tốt.
Tom lại, nghiên cứu của Orpheas van Rooij thiết kế ra một phương pháp kiểm thử hộp xám mới cho các ứng dụng web và mở ra hướng nghiên cứu tiềm năng trong tương lai. Nghiên cứu của Webfuzz chứng minh được việc kết hợp các phương pháp sẽ có hiệu quả hơn so với việc phân tích riêng lẻ, do tính phức tạp ngày nay của các ứng dụng web. Cefuzz: Phương pháp fuzzing sứ dung symbolic execution dé tìm kiếm lỗ hồng thực thi mã từ xa. Tương tự với WebFuzz, nghiên cứu của tác giả Jiazhen Zhao va Phòng thí nghiệm trọng điểm về nhận thức và đánh giá tình hình an ninh mạng của tỉnh An Huy, Trung Quốc [11] đã tìm hiểu việc áp dụng fuzzing có định hướng trong tìm kiếm lỗ hồng ứng dụng web.
Nghiên cứu sử dụng thực thi mã tượng trưng (symbolic execution) và theo dõi thời gian thực thi dé xác định các lỗ hồng tiềm ẩn và tạo các trường hợp thử nghiệm mới nhằm kích hoạt các lỗ hồng này. Khác biệt của nghiên cứu này với phương pháp kiểm thử truyền thống đó là việc sử dụng phân tích tĩnh dé quét mã nguồn ứng dụng và xác định đầu vào tiềm năng của người dùng đề kích hoạt lỗ hồng thực thi mã từ xa. Sau đó, mô hình sử dụng giám sát thời gian thực thi để quan sát hành vi của ứng dụng nhằm kiểm tra dấu hiệu của việc khai thác lỗ hồng thành công. Tuy nhiên, mô hình này tập trung chủ yếu ở việc phân tích tĩnh để chuyển đầu vào thành mã giả và phát hiện các sink nhiễm ban trước khi thực hiện các bước fuzzing có định hướng tiếp theo.
Với các lỗ hồng phức tạp, phương pháp kiểm thử này được đánh giá là hiệu quả hơn so với các công cụ fuzzing truyền thống và cũng có thé cải thiện độ bao phủ mã. Nghiên cứu về fuzzing dựa vào thuật giải di truyền cải tiến. Nghiên cứu về fuzzing có định hướng kết hợp với các thuật toán di truyền cũng đã được nghiên cứu sâu hon, ví dụ như nghiên cứu của Xinshi Zhou va Bin Wu [12]. Các tác giả của nghiên cứu dé xuất một mô hình fuzzing kết hợp với thuật toán di truyền được cải tiến và xây dựng các khái niệm mới của thuật toán di truyền đề phù hợp với quá trình fuzzing ứng dụng web.
Để chứng minh tính hiệu quả, các tác giả đã thực hiện thử nghiệm trên 3 ứng dụng web mã nguồn mở. Đây là một đề xuất đầy hứa hẹn với các kết quả thực nghiệm có được, tuy vậy tác giả chỉ tìm kiếm lỗ hong của các ứng dụng trên với thuật toán được cải tiến và so sánh với thuật toán di truyền cơ bản, chưa có các so sánh với các kỹ thuật fuzzing web khác đồng thời tác giả cũng không cung cấp mã nguồn ứng dụng dé chia sẻ cho cộng đồng. Tuy vậy, hướng nghiên cứu này vẫn là một kỹ thuật cao cấp trong việc cải tiến quá trình fuzzing cho nhiều ứng dụng, đặc biệt là trong ứng dụng web. Mục tiêu luận van Luận văn mong muốn áp dụng kỹ thuật của thuật giải di truyền trong việc phân tích luỗng thực thi của ứng dụng web trong quá trình fuzzing.
Nhằm tăng mức độ bao phủ mã khi fuzzing, giảm thiểu tài nguyên khi thực thi công cụ mà vẫn đảm bảo kết quả đạt được mong đợi. Quá trình thực nghiệm của luận văn sẽ chủ yếu khai thác lỗ hồng thực thi mã từ xa và so sánh với các công cụ Blackbox fuzzing như ffuf và wfuzz. Bằng cách so sánh với các phương pháp khác, luận văn hi vọng sẽ giúp tìm ra các đặc điểm mạnh và yếu của thuật giải di truyền, từ đó có thé cải tiến các công cụ fuzzing và áp dụng phân tích các ứng dụng thực tế. Dé đánh giá giải thuật được đề xuất, luận văn sẽ dùng tập dữ liệu là các phần mềm mã nguồn mở phỏ biến được nhiều người sử dụng dé đảm bảo bao quát hết các trường hợp của các phần mềm được phát triển bằng ngôn ngữ PHP khác nhau trong quá trình phân tích.
Nội dung và phương pháp nghiên cứu Fuzzing là một kỹ thuật kiểm thử tự động dé phát hiện các điểm đột biến trong ứng dụng. Trong đó, giải thuật di truyền này khi áp dụng vào fuzzing sẽ tạo ra một quy trình xây dựng và đưa mã khai thác mới vào chương trình để giúp tìm ra các điểm đột biến nhanh và tối ưu hơn.