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 đã đưa các ứng dụng phần mềm trở thành thành phần cốt lõi trong hạ tầng điều khiển công nghiệp, nhà thông minh và các dịch vụ thành phố thông minh. Tuy nhiên, sự xuất hiện của các lỗ hổng phần mềm tiềm ẩn nguy cơ gây ra những thiệt hại nghiêm trọng về tài sản và bảo mật dữ liệu cá nhân. Trong số các kỹ thuật phát hiện lỗ hổng phần mềm tự động, kiểm thử mờ (fuzzing) là phương pháp phổ biến và đạt hiệu quả cao thông qua việc cung cấp các dữ liệu đầu vào bất thường để theo dõi phản ứng và ghi nhận sự cố của chương trình mục tiêu.

Trong các biến thể fuzzing, kỹ thuật fuzzing hộp xám dựa trên độ phủ mã (coverage-guided grey-box fuzzing) được ứng dụng rộng rãi nhờ khả năng hoạt động trực tiếp trên tệp thực thi nhị phân mà không yêu cầu mã nguồn gốc, rất phù hợp với các ứng dụng thương mại mã nguồn đóng. Gần đây, các kỹ thuật học máy, đặc biệt là học tăng cường (Reinforcement Learning), đã được đưa vào để giải quyết hai bài toán chính: dự đoán hành động biến đổi đầu vào nhằm tối đa hóa độ phủ mã và phân bổ số lần thử nghiệm (lập lịch) cho các hạt giống (seed). Mặc dù vậy, các nghiên cứu fuzzing kết hợp học tăng cường trước đây vẫn đối mặt với những rào cản kỹ thuật như tốc độ thực thi chậm, tiêu tốn tài nguyên và đặc biệt là tình trạng mất cân bằng giữa tính khai thác (exploit) và tính khám phá (explore). Tính khai thác tập trung tạo mẫu thử đi sâu vào một nhánh mã nhất định, trong khi tính khám phá giúp bao phủ đa dạng các nhánh thực thi khác nhau. Các mô hình học tăng cường hiện có thường thiên lệch quá mức về khai thác, dẫn đến việc bỏ sót các lỗi tiềm ẩn ở các phân nhánh khác của chương trình.

Trước thực trạng đó, khóa luận tốt nghiệp kỹ sư ngành An toàn thông tin của nhóm tác giả Nguyễn Phúc Chương và Phạm Thành Thái (Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, năm 2023) đã xác định các mục tiêu và nhiệm vụ nghiên cứu cụ thể:

  1. Nghiên cứu sử dụng mô hình học tăng cường để chọn hành động mang lại độ phủ mã cao hơn khi biến đổi đầu vào.
  2. Xây dựng thuật toán chọn và lập lịch đầu vào cân bằng tính khai thác và khám phá của mô hình fuzzing sử dụng học tăng cường.
  3. Tối ưu hóa hiệu quả của mô hình fuzzing học tăng cường.
  4. Triển khai mô hình fuzzing hộp xám với độ phủ mã kết hợp học tăng cường và các thuật toán tối ưu được nghiên cứu.
  5. So sánh và đưa ra ưu nhược điểm của mô hình fuzzing kết hợp học tăng cường, so sánh điểm mạnh, điểm yếu so với các công cụ fuzzing hiện đại, từ đó đưa ra hướng phát triển.

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

  • Đối tượng nghiên cứu: Kỹ thuật fuzzing trong phát hiện lỗ hổng phần mềm; các thuật toán học tăng cường (DQN, SARSA, DDPG, PPO); các thuật toán lập lịch và chọn hạt giống; các thư viện hỗ trợ máy học gồm TensorFlow, Keras-rl2, Gym; các công cụ fuzzing có chỉ dẫn độ phủ gồm AFLplusplus, rlfuzz, libFuzzer.
  • Phạm vi nghiên cứu: Mô hình fuzzing hộp xám có chỉ dẫn độ phủ mã thực thi trên môi trường hệ điều hành Linux đối với tệp nhị phân định dạng ELF 64-bit, tập trung vào việc cân bằng tính khai thác và khám phá nhằm gia tăng độ phủ mã và độ đa dạng đường dẫn thực thi.

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

Khóa luận thiết lập nền tảng lý thuyết dựa trên hai trụ cột chính: kỹ thuật kiểm thử phần mềm dựa trên độ phủ nhị phân và lý thuyết học tăng cường.

Trong việc phân tích nhị phân và kiểm thử hộp xám, tác giả khảo sát cấu trúc tệp thực thi định dạng ELF 64-bit trên Linux (gồm ELF Header, Program Headers, Section Headers và các Section như .text chứa mã máy thực thi). Khi biên dịch từ mã nguồn C sang hợp ngữ x86_64, luồng điều khiển của chương trình được biểu diễn thông qua hàm, các khối cơ bản (Basic Block) và các cạnh (Edge) liên kết giữa các khối. Khóa luận phân tích bốn cấp độ đo độ phủ mã: theo hàm (Function coverage), theo khối mã (Block coverage), theo cạnh (Edge coverage) và theo dòng lệnh (Line coverage). Trong đó, độ phủ theo cạnh được lựa chọn làm cơ sở đánh giá chính do phản ánh chính xác thứ tự thực thi và sự phân nhánh của luồng điều khiển, mang lại độ phân giải cao hơn độ phủ theo khối mà không làm suy giảm hiệu năng như đo độ phủ theo dòng lệnh.

Để thu thập thông tin độ phủ mã trong điều kiện không có mã nguồn, khóa luận phân loại và đối sánh ba kỹ thuật trích xuất độ phủ:

Phương pháp trích xuất độ phủ Yêu cầu mã nguồn Tốc độ thực thi Tính linh hoạt kiến trúc Đặc điểm kỹ thuật
Biên dịch lại chương trình Có Rất nhanh Thấp Chèn mã phụ (instrumentation) trực tiếp trong quá trình biên dịch; độ ổn định cao nhất nhưng không áp dụng được cho phần mềm mã nguồn đóng.
Sử dụng ảo hóa (QEMU/Unicorn) Không Chậm Rất cao Giám sát nhân hệ thống ảo; hỗ trợ fuzzing chéo kiến trúc nhưng tiêu tốn tài nguyên và tốc độ thực thi rất chậm.
Sử dụng cơ chế móc (Hooking/Frida) Không Trung bình - Khá Trung bình Chèn mã phụ động tại thời điểm chạy (runtime); tốc độ nhanh hơn ảo hóa và không yêu cầu mã nguồn, tối ưu cho fuzzing hộp xám.

Để tối ưu hóa tốc độ trao đổi dữ liệu độ phủ giữa tiến trình fuzzer và tiến trình con mục tiêu, kỹ thuật vùng nhớ chia sẻ (Shared Memory) kết hợp cơ chế Semaphore được triển khai. Hệ thống sử dụng các hàm giao tiếp cấp thấp của hệ điều hành Linux gồm shm_open, mmap, shm_unlink cùng các hàm điều phối luồng sem_init, sem_wait, sem_post, sem_destroy để duy trì bản đồ theo dõi (Trace Bits) mà không phát sinh chi phí ghi tệp hay truyền qua socket.

Về mô hình học tăng cường, bài toán fuzzing được chuẩn hóa thành Quy trình quyết định Markov (Markov Decision Process - MDP) bao gồm bộ tứ $M = \langle S, A, P, R \rangle$:

  • Không gian trạng thái $S$: Biểu diễn đặc trưng của đầu vào thử nghiệm.
  • Tập hợp hành động $A$: Các thao tác đột biến đầu vào (đảo bit, xóa bit, chèn bit, dịch bit, thay đổi giá trị byte).
  • Hàm chuyển tiếp trạng thái $P$: Xác suất chuyển đổi sang mẫu thử mới.
  • Hàm phần thưởng $R$: Phản ánh mức độ gia tăng độ phủ mã mới mà mẫu thử mang lại.

Khóa luận áp dụng thuật toán Deep Q-Network (DQN) để khắc phục hiện tượng bùng nổ không gian trạng thái của bảng Q-Table truyền thống. Hàm giá trị hành động $Q(s, a)$ được cập nhật theo phương trình Bellman: $$Q(s, a) = Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right]$$ Trong đó $\alpha$ là tốc độ học, $r$ là phần thưởng độ phủ, $\gamma$ là hệ số chiết khấu. Chiến lược cân bằng khai thác - khám phá sử dụng chính sách $\varepsilon$-greedy (EpsGreedyQPolicy) kết hợp cơ chế lưu trữ tái hiện trải nghiệm (SequentialMemory). Hệ thống được xây dựng trên nền tảng thư viện Keras-rl2, TensorFlow (sử dụng các lớp Dense, BatchNormalization, Flatten và thuật toán tối ưu hóa) cùng OpenAI Gym để tạo lập môi trường tương tác.

Thuật toán học tăng cường Phân loại mô hình Loại chính sách Đặc điểm triển khai trong kiểm thử mờ
DQN Không mô hình (Model-free) Không theo chính sách (Off-policy) Dùng mạng nơ-ron xấp xỉ hàm Q; dễ cài đặt; phù hợp không gian hành động rời rạc.
SARSA Không mô hình (Model-free) Theo chính sách (On-policy) Chọn hành động tiếp theo theo chính sách hiện tại; dễ rơi vào vòng lặp cục bộ.
DDPG Không mô hình (Model-free) Không theo chính sách (Off-policy) Kết hợp hai mạng Actor-Critic; đòi hỏi thời gian huấn luyện dài; xử lý hành động liên tục.
PPO Không mô hình (Model-free) Theo chính sách (On-policy) Tối ưu hóa cận biên; xử lý được hành động rời rạc và liên tục; việc hiệu chỉnh tham số phức tạp.

Thiết kế và triển khai

Trên cơ sở phương pháp luận đã chọn, nhóm tác giả thiết kế và cài đặt công cụ CTFuzz – một hệ thống fuzzing hộp xám có chỉ dẫn độ phủ mã kết hợp học sâu tăng cường:

  1. Mô hình hóa MDP và mạng DQN: Đầu vào được vector hóa thành trạng thái cung cấp cho mạng nơ-ron sâu. Mạng bao gồm các lớp ẩn kết nối đầy đủ (Dense), lớp chuẩn hóa BatchNormalization để giữ ổn định phân phối dữ liệu đầu ra và tránh hiện tượng triệt tiêu gradient, cùng hàm kích hoạt phi tuyến ReLU. Lớp đầu ra tương ứng với không gian các hành động đột biến bit và byte.

  2. Thuật toán chọn và lập lịch đầu vào: Nhằm khắc phục tình trạng các fuzzer học tăng cường đi quá sâu vào một nhánh duy nhất, CTFuzz bổ sung thuật toán chọn và phân bổ lượt thử nghiệm cho các hạt giống trong hàng chờ (seed queue). Thuật toán không ưu tiên tuyệt đối các mẫu thử đạt độ phủ cao nhất tức thời mà phân phối xác suất hợp lý để các mẫu thử ở các nhánh chưa được khám phá vẫn có cơ hội đột biến, duy trì sự cân bằng giữa tính khai thác và tính khám phá.

  3. Thuật toán đột biến nhiều cấp và cơ chế chống lãng phí: CTFuzz tích hợp cơ chế đột biến nhiều cấp (multi-stage mutation), cho phép thực hiện một chuỗi liên hoàn các hành động biến đổi do mạng DQN gợi ý trên cùng một mẫu thử trước khi đưa vào thực thi. Đồng thời, cơ chế chống lãng phí được thiết lập để phát hiện và loại bỏ các thao tác đột biến dư thừa không có khả năng thay đổi luồng điều khiển, giảm thiểu chi phí tính toán vô ích.

  4. Tương tác Forkserver và thu thập độ phủ: CTFuzz sử dụng kiến trúc forkserver tương tác qua vùng nhớ chia sẻ và đồng bộ bằng semaphore. Khi một tiến trình mục tiêu được nhân bản (fork), mã phụ chèn qua cơ chế móc ghi nhận các cạnh thực thi vào bảng Trace Bits trong vùng nhớ chia sẻ. Bộ điều khiển CTFuzz đọc bảng này để tính toán phần thưởng phản hồi cho tác tử DQN, cập nhật danh sách hạt giống và tiếp tục vòng lặp kiểm thử.

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

Chương 1. Tổng quan

Chương 1 trình bày bối cảnh rủi ro an ninh phần mềm trong các hệ thống thông tin hiện đại và vị trí của kỹ thuật fuzzing hộp xám. Tác giả tiến hành tổng quan các công trình nghiên cứu trong và ngoài nước, chia làm hai nhóm:

  • Nhóm cải tiến fuzzing không dùng học máy: Phân tích các công cụ AFLPro (kết hợp phân tích tĩnh ưu tiên nhánh ít chạm), EcoFuzz (mô hình hóa lập lịch theo Adversarial Multi-Armed Bandit), Matryoshka (sử dụng taint analysis giải câu lệnh điều kiện) và InsFuzz (đột biến byte ảnh hưởng so sánh). Điểm hạn chế chung của nhóm này là phụ thuộc vào phân tích tĩnh dẫn đến cảnh báo sai hoặc tốn tài nguyên runtime lớn.
  • Nhóm kết hợp học máy và học tăng cường: Phân tích RapidFuzz, CGFuzzer (dùng GAN học cấu trúc định dạng), NeuFuzz (dùng mạng LSTM dự đoán luồng lỗi), công trình tiên phong của Böttinger et al. (DQN cho tệp PDF), Kuznetsov et al. (DQN giảm 30% thời gian tạo mẫu thử), Reddy et al. (Monte Carlo Control), Reinforcement Compiler Fuzzing của Li et al., Drozd et al. (Deep-DoubleQ-Learning), rlfuzz của Zheng Zhang et al. và mô hình lập lịch đa cấp của Jinghan Wang et al. Qua đó, chương xác định khoảng trống nghiên cứu về sự mất cân bằng giữa khai thác và khám phá, đặt ra tính ứng dụng, các thách thức kỹ thuật và xác định rõ 5 mục tiêu nghiên cứu cụ thể.

Chương 2. Cơ sở lý thuyết

Chương 2 cung cấp toàn bộ nền tảng lý thuyết phục vụ việc xây dựng mô hình. Nội dung bao gồm:

  • Khái quát các kỹ thuật rà soát bảo mật: kiểm tra mã nguồn (Code review), kiểm thử thâm nhập (Pentest), phân tích tĩnh, phân tích động và kiểm thử mờ.
  • Chi tiết cấu trúc tệp nhị phân định dạng ELF 64-bit và cơ chế chuyển đổi mã C sang hợp ngữ (phân rã hàm, khối cơ bản và cạnh điều khiển).
  • Cơ chế đo lường 4 loại độ phủ mã và đánh giá 3 phương pháp trích xuất độ phủ (biên dịch lại, ảo hóa, hooking).
  • Hệ thống thông số định lượng trong fuzzing: Độ phủ mã (Coverage), Số đường đi duy nhất (Unique Path), Thời gian thực thi (Time Execs), Số lần thử (Execs Done), Bảng theo dấu (Trace Bits), Số lượng hạt giống (Corpus Count), Độ sâu biến đổi (Max Depth).
  • Kỹ thuật lập trình hệ thống: Quản lý vùng nhớ chia sẻ qua shm_open, mmap, shm_unlink và đồng bộ hóa tiến trình bằng sem_wait, sem_post.
  • Nền tảng toán học học tăng cường: Quy trình quyết định Markov (MDP), cân bằng khai thác và khám phá, hàm giá trị hành động Q-value, thuật toán Q-Learning và mạng Deep Q-Network (DQN).
  • Tổng hợp đặc điểm các thuật toán RL phổ biến (DQN, SARSA, DDPG, PPO) cùng hướng dẫn tích hợp các thư viện chuyên dụng Keras-rl2, TensorFlow và OpenAI Gym.

Chương 3. Mô hình fuzzing sử dụng học tăng cường

Chương 3 đi sâu vào chi tiết thiết kế hệ thống CTFuzz:

  • Trình bày kiến trúc tổng quan của CTFuzz và cách thức chuyển đổi dữ liệu đầu vào thành vector trạng thái cho mô hình học máy.
  • Quy trình mô hình hóa fuzzing thành bài toán MDP: định nghĩa không gian trạng thái, tập các hành động đột biến bit/byte, thiết kế hàm phần thưởng tương ứng với độ phủ mã mới.
  • Cấu trúc mạng nơ-ron sâu trong DQNAgent và quy trình huấn luyện xấp xỉ hàm Q.
  • Thuật toán chọn và lập lịch đầu vào giúp phân bổ tài nguyên kiểm thử đồng đều cho các nhánh mã, khắc phục sự thiên lệch khai thác.
  • Thuật toán đột biến nhiều cấp cho phép kết hợp chuỗi hành động biến đổi và cơ chế chống lãng phí để loại bỏ các thao tác đột biến không hiệu quả.
  • Phương pháp thu thập độ phủ mã thời gian thực thông qua forkserver và cơ chế chia sẻ vùng nhớ giữa các tiến trình.

Chương 4. Thí nghiệm và đánh giá

Chương 4 mô tả toàn bộ quá trình thử nghiệm thực nghiệm:

  • Mục tiêu thí nghiệm và quy trình cài đặt môi trường thử nghiệm trên hệ điều hành Linux.
  • Lựa chọn các ứng dụng thử nghiệm thực tế định dạng ELF 64-bit và thiết lập các tiêu chí đo lường định lượng: độ phủ mã đạt được, số lượng đường dẫn duy nhất (Unique Paths) và tốc độ thực thi (Execs Done).
  • Thiết lập hai mô hình đối chứng: công cụ fuzzing sử dụng học tăng cường rlfuzz và công cụ fuzzing hộp xám hiện đại AFLplusplus.
  • Phân tích kết quả thực nghiệm theo hai kịch bản:
    1. Kịch bản 1: Đánh giá liên tục sau 6 tiếng chạy thử nghiệm để so sánh toàn diện với rlfuzz.
    2. Kịch bản 2: Đánh giá trong 200.000 lần thử đầu tiên nhằm so sánh hiệu quả tạo mẫu thử và tốc độ với AFLplusplus.
  • Thảo luận chi tiết về nguyên nhân dẫn đến sự khác biệt hiệu năng giữa các công cụ.

Chương 5. Kết luận

Chương 5 tóm tắt các kết quả đạt được của khóa luận: xây dựng thành công mô hình CTFuzz kết hợp DQN với các thuật toán tối ưu hóa chọn hạt giống, chứng minh tính khả thi của việc ứng dụng học sâu tăng cường trong fuzzing hộp xám mà không cần mã nguồn, đồng thời chỉ ra các hướng nghiên cứu mở rộng trong tương lai.

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

Khóa luận ghi nhận các kết quả thực nghiệm định lượng cụ thể dựa trên việc so sánh trực tiếp với hai công cụ đại diện:

  • So sánh với rlfuzz (sau 6 tiếng chạy thực nghiệm): Mô hình CTFuzz đề xuất cho thấy sự cải thiện vượt trội so với công cụ fuzzing học tăng cường rlfuzz trên cả ba chỉ số đánh giá: độ phủ mã đạt được cao hơn, số lượng đường dẫn duy nhất (unique paths) phát hiện được nhiều hơn và tốc độ thực thi tổng thể nhanh hơn. Kết quả này chứng minh thuật toán chọn hạt giống và lập lịch của nhóm tác giả đã giải quyết hiệu quả điểm nghẽn mất cân bằng khai thác - khám phá vốn khiến rlfuzz bị mắc kẹt tại các nhánh cục bộ.

  • So sánh với AFLplusplus (trong 200.000 lần thử đầu tiên): Trong phạm vi 200.000 lần thực thi đầu tiên, CTFuzz đạt độ phủ mã nhỉnh hơn so với AFLplusplus. Điều này chứng minh rằng việc áp dụng mạng DQN để định hướng chọn hành động đột biến kết hợp cơ chế đột biến nhiều cấp giúp tạo ra các đầu vào chất lượng cao, tiếp cận các nhánh mã sâu nhanh hơn so với các đột biến ngẫu nhiên hoặc heuristic thuần túy của AFLplusplus trong giai đoạn đầu.

Các đóng góp khoa học và kỹ thuật do nhóm tác giả tự xác định:

  1. Đề xuất một mô hình fuzzing có chỉ dẫn độ phủ mã kết hợp thuật toán học tăng cường Deep Q-Learning, có khả năng cân bằng hiệu quả giữa tính khai thác (exploit) và tính khám phá (explore).
  2. Phát triển thuật toán chọn và lập lịch đầu vào tối ưu cùng cơ chế biến đổi đầu vào nhiều cấp và giải thuật chống lãng phí, giúp giảm thiểu các đột biến vô hiệu và tăng tốc độ bao phủ luồng thực thi.
  3. Hiện thực hóa giải pháp fuzzing hộp xám hoàn chỉnh trên môi trường Linux nhị phân ELF 64-bit thông qua cơ chế forkserver, hooking và shared memory mà không cần mã nguồn chương trình.
  4. Cung cấp dữ liệu thực nghiệm và góc nhìn so sánh khách quan về ưu nhược điểm giữa fuzzer học tăng cường với công cụ fuzzer hiện đại (AFLplusplus).

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

Khóa luận tự chỉ ra một số hạn chế kỹ thuật và điều kiện thử nghiệm:

  • Quá trình thực nghiệm đòi hỏi thời gian chạy kéo dài và tài nguyên tính toán lớn; hiệu năng thực tế vẫn chịu sự tác động nhất định từ các yếu tố môi trường hệ thống.
  • Chỉ số đánh giá số lượng đường dẫn duy nhất (unique paths) không được hỗ trợ thống kê sẵn trong một số công cụ fuzzing chuẩn, buộc nhóm tác giả phải can thiệp chỉnh sửa mã nguồn công cụ để thu thập dữ liệu.
  • Kỹ thuật lấy độ phủ mã thông qua cơ chế móc (hooking) khi kiểm thử hộp xám vẫn phát sinh chi phí trễ thời gian khởi tạo mã phụ ở đầu mỗi lượt chạy so với phương pháp biên dịch chèn mã trực tiếp từ mã nguồn.
  • Mô hình hiện tại mới được triển khai và kiểm thử trên tệp thực thi định dạng ELF 64-bit chạy trên hệ điều hành Linux, chưa kiểm thử rộng rãi trên các kiến trúc phần cứng và định dạng nhị phân khác.

Hướng nghiên cứu phát triển tiếp theo được tác giả đề xuất:

  • Tối ưu hóa cấu trúc mạng nơ-ron và giảm độ trễ tính toán của bước dự đoán hành động để gia tăng số lượt thực thi trên giây.
  • Mở rộng cơ chế kiểm thử sang nhiều nền tảng hệ điều hành, kiến trúc vi xử lý khác nhau và hỗ trợ các định dạng tệp có cấu trúc đầu vào phức tạp hơn.
  • Cải tiến hàm phần thưởng và không gian hành động để nâng cao khả năng vượt qua các khối kiểm tra điều kiện phức tạp.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo chuyên môn cao đối với:

  • Sinh viên, học viên cao học và nhà nghiên cứu thuộc các ngành An toàn thông tin, Mạng máy tính và Truyền thông, Khoa học máy tính hoặc Kỹ thuật phần mềm đang tìm kiếm giải pháp tích hợp trí tuệ nhân tạo vào quy trình kiểm thử tự động và rà quét lỗ hổng.
  • Các chuyên gia kiểm thử xâm nhập (pentester), kỹ sư phân tích mã độc và chuyên viên đánh giá an ninh phần mềm cần xây dựng công cụ phát hiện lỗi trên các phần mềm thương mại mã nguồn đóng không có sẵn mã nguồn gốc.

Các nội dung có giá trị tham khảo kỹ thuật nổi bật:

  • Chương 2: Phần phân tích chi tiết về việc kết hợp Shared Memory (shm_open, mmap) và Semaphore (sem_wait, sem_post) trong việc truyền dữ liệu bản đồ độ phủ mã tốc độ cao giữa các tiến trình Linux.
  • Chương 3: Phương pháp mô hình hóa bài toán kiểm thử mờ thành quy trình MDP, cách thức thiết kế hàm phần thưởng dựa trên độ phủ mã mới và thuật toán phân bổ lịch trình hạt giống nhằm khắc phục tính thiên lệch khai thác của mạng DQN.

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

Khóa luận giải quyết tình trạng mất cân bằng giữa tính khai thác và tính khám phá trong fuzzing học tăng cường bằng cách nào?

Khóa luận giải quyết vấn đề này bằng cách không chỉ sử dụng mạng DQN để chọn hành động đột biến mà còn tích hợp hai thuật toán chuyên biệt: thuật toán chọn đầu vào và thuật toán lập lịch đầu vào. Thay vì liên tục đào sâu vào các mẫu thử vừa tìm thấy độ phủ cao (thiên lệch khai thác), thuật toán lập lịch phân bổ số lượng thử nghiệm hợp lý cho các hạt giống khác nhau trong hàng chờ, đảm bảo các nhánh mã chưa được thăm dò vẫn nhận được cơ hội đột biến (tính khám phá).

Tại sao nghiên cứu lựa chọn độ phủ theo cạnh (Edge coverage) thay vì độ phủ theo khối (Block coverage)?

Khóa luận chỉ ra rằng độ phủ theo khối chỉ ghi nhận việc một khối lệnh có được thực thi hay không, do đó hai đầu vào đi theo hai nhánh rẽ hoàn toàn khác nhau nhưng cùng đi qua tập khối mã giống nhau sẽ bị đánh giá là trùng lặp độ phủ. Ngược lại, độ phủ theo cạnh ghi nhận điểm nối giữa các khối trong đồ thị luồng điều khiển, phản ánh chính xác thứ tự thực hiện và sự chuyển hướng rẽ nhánh, giúp công cụ fuzzing phân biệt rõ ràng sự khác biệt trong luồng thực thi của các mẫu thử.

Cơ chế nào được sử dụng để trích xuất độ phủ mã trong mô hình CTFuzz mà không cần mã nguồn?

Mô hình triển khai cơ chế móc (hooking) tương tự như Frida để chèn các đoạn mã phụ (instrumentation) vào tệp nhị phân ELF 64-bit tại thời điểm chạy (runtime). Khi chương trình thực thi qua các cạnh mã, mã phụ sẽ ghi nhận thông tin trực tiếp vào bảng theo dấu (Trace Bits) đặt trong vùng nhớ chia sẻ (Shared Memory), được đồng bộ hóa tức thời với tiến trình chính thông qua Semaphore, giúp việc thu thập độ phủ đạt tốc độ cao mà không cần biên dịch lại mã nguồn.

Mô hình CTFuzz đạt được kết quả như thế nào khi so sánh với rlfuzz và AFLplusplus?

Sau 6 tiếng chạy thực nghiệm liên tục, CTFuzz đạt độ phủ mã cao hơn, tìm được nhiều đường dẫn duy nhất (unique paths) hơn và đạt tốc độ chạy tốt hơn so với công cụ học tăng cường rlfuzz. Khi đối sánh với công cụ fuzzing hiện đại AFLplusplus trong 200.000 lần thử đầu tiên, CTFuzz đạt độ phủ mã nhỉnh hơn nhờ các đột biến có định hướng từ mạng Deep Q-Learning.

Mạng học sâu tăng cường trong khóa luận sử dụng kiến trúc và công nghệ nào?

Mô hình sử dụng thuật toán Deep Q-Network (DQN) với tác tử DQNAgent thuộc thư viện Keras-rl2 trên nền tảng TensorFlow. Mạng bao gồm các lớp ẩn kết nối đầy đủ (Dense), lớp chuẩn hóa BatchNormalization, hàm kích hoạt ReLU và lớp đầu ra biểu diễn giá trị Q của các hành động đột biến rời rạc. Việc huấn luyện kết hợp chính sách thăm dò $\varepsilon$-greedy (EpsGreedyQPolicy) và bộ nhớ lưu trữ trải nghiệm tuần tự (SequentialMemory).

Kết luận

Khóa luận tốt nghiệp của nhóm tác giả Nguyễn Phúc Chương và Phạm Thành Thái đã xây dựng thành công mô hình CTFuzz, ứng dụng hiệu quả thuật toán học sâu tăng cường DQN vào quy trình fuzzing hộp xám có chỉ dẫn độ phủ mã trên tệp nhị phân ELF 64-bit. Đề tài giải quyết thấu đáo vấn đề mất cân bằng giữa tính khai thác và tính khám phá thông qua việc kết hợp thuật toán lập lịch hạt giống và cơ chế đột biến nhiều cấp có kiểm soát lãng phí. Các kết quả thực nghiệm sau 6 giờ chạy và trong 200.000 lần thử đầu tiên đã chứng minh tính hiệu quả vượt trội của CTFuzz so với rlfuzz và tính cạnh tranh cao so với công cụ hiện đại AFLplusplus, mang lại giá trị học thuật và thực tiễn vững chắc cho lĩnh vực an toàn thông tin phần mềm.