CHƯƠNG 1. TONG QUAN 11 Giới thiệu van đề 2.2 Giới thiệu những nghiên cứu liên quan.2_ Các kĩ thuật cải thiện fuzzing không sử dụng học máy. Sự kết hợp giữa học máy vào fuzzing.3 Tính ứng dụng.4 hững thách thức .5 Mục tiêu, đối tượng, và phạm vi nghiên cứu.1 Muc tiêu nghiên cứu .2 Dối tượng nghiên ctu .3 Phạm vi nghiên đỨU .4 Cau trúc khóa luận tốt nghiệp .1 Các phương pháp tìm kiếm lỗ hổng phần mềm .1 Cấu trúc tệp thực thi ELF (Executable).4 Các kĩ thuật lấy độ phủ mã .5 Các thông số so sánh của fuzzing.6 Shared memory và Semaphore.3 Mô hình học tăng cường .1 Quy trình quyết định Markov (Markov Decision Process - MDP).2 Tổng quan mô hình học tăng cường .3 Van đề khai thác và khám phá trong hoc tăng cường 2.4 Hàm giá trị - hành động (Q-value Function) .6 Mô hình học sâu tăng cường .7 Các thuật toán học tăng cường.4 Các thư viện sử dụng. fe ee eee 243 Gym.
MO HÌNH FUZZING SỬ DUNG HỌC TANG CUGNG 3.1 Tổng quan mô hinh.2 Phương pháp biến đổi đầu vào dựa trên học tăng cường.1 Mô hình hóa fuzzing thành quy trình quyết định Markov .4 Phần thưởng (reward).5 Mô hình deep-q-learnng.3 Thuật toán chọn va lập lịch đầu vào .4 Thuật toán biến đổi đầu vào nhiều cấp và chống lãng phi.1 Thuật toán biến đổi đầu vào nhiều cấp .2 Cơ chế chống lãng phí .5 Phương pháp thu thập độ phủ mã từ chương trình.6 Luồng hoạt động của chương trình. THÍ NGHIỆM VÀ ĐÁNH GIÁ 63 4.1 Thiết lap thinghiém .1 Mục tiêu của thí nghệm.2 Cài đặt các mô hình sosánh. Các ứng dung thử nghiệm .4 Các tiêu chí đánh gié.5 Thiết lập môi trường thử nghiệm.2 Kết quả thí nghiệm .1 Kết quả so sánh đánh giá sau 6 tiếng chạy .2 Kết quả so sánh đánh giá sau 200000 lần thử. Thảo luận về kết quả.
ee 77 CHƯƠNG 5. KẾT LUẬN 81 51 Kết lui".2 Hướng phát triển. 82 TÀI LIỆU THAM KHẢO 84 DANH MỤC CAC KÝ HIỆU, CÁC CHỮ VIET TAT 5 Khéng gian các trang thái mà tác tử St Trang thái môi trường tại lượt t A Tap các hành động tác tử đị Hành động tại lượt thứ t P Ham chuyển R Hàm phần thưởng T Chính sách của Mô hình học tăng cường w Trong số cho phần thưởng * Chiết khấu cho phần thưởng vr Chính sách tối đa hóa kì vọng Q Hàm giá trị cho trạng thái - hành động 6 Trọng số cho mạng nơ-ron a Ti lệ học L(0) Hàm mat mát AFL American Fuzzy Lop SGD Stochastic Gradient Descent MDP Markov Decision Process CEM Cross-Entropy Method DQN Deep Q Network SARSA State-action-reward-state—action DPG Deep Deterministic Policy Gradient PO Proximal Policy Optimization R. Enhancing Rate PS Virtual Private Server vi DANH MUC CAC HINH VE inh 1.1 Các bước trong quá trình fuzzing với độ phủ mã.1 Cấu trúc tệp thực thi định dạng ELF_.
Hàm, khối, cạnh trong hợp ngữ, phần 1 chứa mã nguồn chương trình viết bằng C, phần 2 chứa hợp ngữ của chương trình 21 inh 2.3 Chia sé vùng nhớ giữa 2 tiến trình .4 Mô hình hoc tăng cường.5 Thuật toán Q-Learning .6 Q-Learning và Deep-Q-Learning.7 Cấu trúc một Deep Q Network .1 Tổng quan mô hình CTEu⁄z.2 Chuyển từ đầu vào thành trang thái cho mô hình học tăng ình 3.3 Cấu trúc mô hình Deep Q Learning .4 Cách AFLplusplus tương tác với forkserver để lấy độ phủ mã 59 inh 3.5 Cách CTFuzz tương tác với forkserver để lấy độ phủ mã. 59 vii DANH MUC CAC BANG BIEU Bảng 2.1 Một số thuật toán hoc tăng cường .1 Các hành động biến đổi thuộc không gian hành động .1 Thông tin các ứng dụng thử nghiệm. So sánh độ phủ mã giữa các mô hình sau 6 tiếng chạy Bảng 4.3 So sánh số lượng đường dẫn duy nhất tìm được sau 6 tiếng Bảng 4.5 So sánh độ phủ mã giữa các mô hình trong 200000 lần thử đầu. ay we WM —ìì.6 So sánh số lượng đường dẫn duy nhất tìm được trong 200000 lànthiữ: S5 /@Ó .7 So sánh tốc độ chạy trong 200000 lần thử đầu.
TÓM TẮT KHÓA LUẬN Tính cấp thiết của đề tài nghiên cứu: Fuzzing là một kỹ thuật kiểm thứ phần mềm phổ biến và hiệu quả, bằng cách tự động tạo ra hoặc biến đổi các đầu vào để kiểm tra tính ổn định và các lỗi của hệ thống phần mềm. Fuzzing đã được sử dung rộng rãi và liên tục được cải tiến bởi các nhà nghiên cứu và chuyên gia trong lĩnh vực bảo mật. Mục tiêu của fuzzing là tìm ra các lỗ hổng tiềm ẩn trong phần mềm bằng cách cung cấp các đầu vào không mong đợi và không hợp lệ cho chương trình mục tiêu, theo đõi hành vi của nó và xác định các lỗi, sự cố hoặc kết quả không mong muốn. Gần đây với sự phát triển bùng no của trí tuệ nhân tạo, các nhà nghiên cứu cũng đem các thuật toán máy học như học tăng cường vào nhằm cải thiện quá trình fuzzing.
Các nghiên cứu trước đây cho thay học tăng cường có thé giúp cải thiện hiệu quả fuzzing bằng cách giúp cho mô hình chọn và ưu tiên thực hiện các hành động biến đổi mang lại độ phủ cao hơn, từ đó giảm số lượng thử để tìm được các lỗi xuống. Tuy nhiên các mô hình fuzzing kết hợp học tăng cường đang gặp một số hạn chế nhất định, trong đó có việc mat cân bằng giữa tính khai thác (exploit) và tính khám phá (explore) của mô hình. Sau khi nghiên cứu, chúng tôi đề xuất một mô hình fuzzing có chỉ dẫn độ phủ sử dụng học tăng cường có khả năng đảm bảo sự cân bằng giữa tính khai thác và khám phá. Mô hình đề xuất có thể hoạt động hiệu quả trên nhiều nền tảng, kiến trúc khác nhau và không yêu cầu mã nguồn để thực hiện fuzzing.
Ngoài ra, chúng tôi cũng cung cấp những so sánh và một cái nhìn khách quan về hiệu quả của mô hình so với các công cụ fuzzing hiện đại. TONG QUAN Chương này giới thiệu về van đề và các nghiên cứu liên quan. Đồng thời, trong chương này chúng tôi cũng trình bày phạm vi và cấu trúc của Khóa luận. Giới thiệu van dé Trong những năm gần day, sự phát triển mạnh mẽ của máy tính và công nghệ đã trở thành một phần không thể thiếu trong hầu hết các hoạt động của con người.
Tuy nhiên, điều này cũng có nghĩa là một lỗ hổng phần mềm trong các ứng dụng công nghệ mang lại những hệ quả rất đáng kể. Những lỗ hổng này khi xảy ra có thể gây ra những thiệt hại nghiêm trọng như mất tiền bạc, lộ thông tin cá nhân, và nhiều hệ quả khác. Các lĩnh vực như điều khiển công nghiệp, nhà thông minh, và thành phố thong minh đặc biệt đối điện với những rủi ro lớn hơn rất nhiều. Chính vì vậy, việc kiểm thử và nâng cao bảo mật phần mềm đã trở thành một vấn đề được quan tâm và cải thiện ngày càng nhiều.
Trong số các kỹ thuật phát hiện lỗ hổng phần mềm, fuzzing là một trong những phương pháp phổ biến, tiện lợi và hiệu quả nhất. Mục tiêu của fuzzing là tìm ra các lỗ hong tiềm an trong phần mềm bằng cách cung cấp các đầu vào không mong đợi và không hợp lệ cho chương trình mục tiêu, từ đó theo đõi hành vi và xác định các lỗi, sự cố hoặc kết quả không mong muốn. Một trong những kĩ thuật fuzzing phổ biến nhất đó la fuzzing hộp xám (grey-box) với độ phủ mã (coverage). Kĩ thuật fuzzing này yêu cầu cần có tệp thực thi của ứng dụng và chạy được chúng trên hệ thống dùng dé fuzz.
Kĩ thuật này phổ biến bởi nó không yêu cầu mã nguồn của ứng dụng (phù hợp cho các phần mềm mã nguồn đóng) và đạt được hiệu quả cao khi kết hợp các thông tin về độ phủ mã có được khi chạy chương trình. Khi này 3 các công cụ fuzzing sẽ chạy chương trình với các đầu vào thử nghiệm, sử dụng các kĩ thuật đặc biệt để lấy thông tin độ phủ mã từ chương trình và dùng nó để đánh giá tiêu chí cho các đầu vào thử nghiệm nhằm tối ưu hóa hiệu quả fuzzing. Gần đây, các kĩ thuật học máy như học tăng cường cũng được nghiên cứu và áp dụng vào fuzzing. Dựa vào đặc điểm của nó, học tăng cường thường được các nhà nghiên cứu chọn để làm 2 việc chính trong quá trình fuzzing: học để dự oán hành động biến đổi nào dựa trên đầu vào sẽ cho độ phủ mã cao nhất và ùng để lập lịch, phân bổ số lượng thử nghiệm cho từng đầu vào.
Các nghiên cứu đã cho thấy các mô hình fuzzing kết hợp học tăng cường mang lại hiệu quả tốt trong cải thiện fuzzing, tuy nhiên vẫn còn nhiều hạn chế, trong đó nổi bật là thời gian chạy chậm, yêu cầu nhiều tài nguyên và mất cân bằng giữa tính khai thác và khám phá. Một trong những vấn đề lớn của các kĩ thuật fuzzing áp dụng học tăng cường ó là sự cân bằng giữa tính khai thác (exploit) và tính khám phá (explore), các mô hình này thường có tính khai thác vượt trội hơn rất nhiều so với tính khám phá. Tính khai thác (exploit) và tính khám pha (explore) là hai khái niệm quan trọng trong quá trình fuzzing. Tính khai thác đề cập đến việc các mẫu thử có khả năng đi thật sâu và chạm đến những đoạn mã nằm rất sâu bên trong chương trình, còn tính khám phá đề cập đến việc các mẫu thử có mức độ bao phủ càng nhiều nhánh càng tốt.
Một mô hình fuzz có tính khám phá quá cao sẽ không tạo đ ược các mẫu thử đủ sâu đến các phần đoạn mã bị lỗi của chương trình, trong khi đó một hình fuzz có tính khai thác quá cao thường sẽ chỉ tập trung đi sâu nhất có thể ở một nhánh mà bỏ qua khả năng lỗi nằm ở các nhánh khác trong chương trình. Trong nghiên cứu này của chúng tôi, chúng tôi đề xuất một mô hình fuzzing có chỉ din độ phủ kết hợp hoc tăng cường cho fuzzing hộp xám có sự cải thiện về các điểm yếu trước đó. Mô hình sử dụng thuật toán học tăng cường là deeq- q-learning nhằm giúp cho mô hình dự đoán và chọn hành động biến đổi đầu vào mang lại hiệu quả cao nhất, dùng độ phủ mã của chương trình là điểm thưởng. 4 Kết hợp với nó là 2 thuật toán chọn đầu vào và lập lịch đầu vào đơn giản giúp cân bằng tính khai thác và k hám phá của chương trình.
Đồng thời chúng tôi cũng triển khai mô hình biến ổi đầu vào nhiều cấp có thể kết hợp với học tăng cường giúp cho mô hình có thể tạo đột biến với một chuỗi nhiều hành động.