method): nhận mau thử và thực thi chương trình để lấy kết quả
Chỉ tiết cách hoạt động và luồng hoạt động của mô hình sẽ được mô tả ở các phần tiếp.
46
Intial seeds Reinforcement reward
learning model
push to Get coverage method
seed picked
queue seed action sample
mutated Inpu
Sood quev| Seed selection >! Multi level samples C/C++ proxy > Target
Seed queue and schedule engine program
algorithm energy Coverageit |
info
Hình 3.1: Tổng quan mô hành CT Fuzz
3.2. Phương pháp biến đổi đầu vào dựa trên học tăng
cường
ệ mục này, chỳng tụi sẽ mụ tả mụ hỡnh học tăng cường được sử dụng để chọn2,
hành động biến đổi. Về tổng quát, mô hình học tăng cường của chúng tôi sẽ nhận nhệm chọn ra hành động biến đổi mang lại hiệu quả tốt nhất với đầu vào được chúng tôi cung cấp.
3.2.1. Mô hành hóa fuzzing thành quụ trành quyết định Markov
Trong phần này, chúng tôi mô hình hóa fuzzing thành quy trình quyết định Markov (MDP) bằng cách định nghĩa các trạng thái, hành động và phần thưởng
trong ngữ cảnh chọn hành động biến đổi trong fuzzing. Việc mô hình hóa này
lần đầu tiờn được trỡnh bày bởi nhúm tỏc giả Bửttinger trong [2]. Trong đú, việc
chọn hành động biến đổi tiếp theo cho đầu vào được xem như việc chọn một
nước đi tiếp theo trên bàn cờ vua.
Khi áp dụng học tăng cường vào trong cờ vua, có thể coi trạng thái của mô
hình học tăng cường là vị trí các quân trên bàn cờ, hành động là việc chọn ra
nước đi tiếp theo, và điểm thưởng là ưu thế có được sau khi thực hiện nước đi (các công cụ máy tính cờ vua có thuật toán để chấm điểm ưu thế dựa trên thế
4ù
trận ban cờ, chúng tôi sẽ không bàn chi tiết ở đây). Từ đó, các nhà nghiên cứu
có thể áp dụng các kĩ thuật học tăng cường để đào tạo mô hình tìm ra nước
đi tối ưu bằng cách chơi ván cờ rất nhiều lần và tích lũy kinh nghiệm (điểm thưởng). Một trong những ví dụ có thể kể đến là AlphaZero, được phát triển bởi DeepMind, sử dụng một kết hợp của học tăng cường và học sâu để tự động
chơi cờ vua. Nó từ nâng cao năng lực cờ vua bằng cách chơi hàng ngàn trận cờ
với chính nó để tich lũy kinh nghiệm và đã trở thành một trong những công cụ
đánh cờ mạnh nhất thế giới hiện tại.
Từ đó ta có thể áp dụng tương tự đối với việc fuzzing, khi này, đầu vào thử
nghiệm cũng sẽ giống như vị trí các quân cờ trở thành đầu vào của mô hình
học tăng cường. Việc chọn hành động biến đổi sẽ giống như chọn nước đi tiếp theo trên bàn cờ. Và độ phủ mã sẽ tương tự như điểm ưu thế trên bàn cờ và trở thành điểm thưởng cho mô hình học tăng cường. Từ đó, ta có thể đào tạo
mô hình học tăng cường chọn ra hành động biến đổi tốt nhất theo từng đầu vào dựa theo kinh nghiệm đã được tích lũy. Việc chọn cơ chế điểm thưởng không hoàn toàn dựa trên độ phủ mã mà có thể dựa trên các yêu tố khác dựa vào việc chúng ta mong muốn cải thiện điều gì trong mô hình (có thể là thời gian chạy,
độ dài các mẫu thử, ... hoặc kết hợp).
Dựa trên ý tưởng tương tự, chúng tôi mô hình hóa fuzzing thành vấn đề quyết định Markov và sử dụng số lượng độ phủ mã mới được tìm thấy làm điểm thưởng, với mong muốn mô hình sẽ hướng đến việc tìm kiếm các phần mã mới trong chương trình. Chi tiết định nghĩa các trạng thái, hành động và phần thưởng sẽ được chúng tôi nêu rõ ở các mục tiếp theo.
3.2.2. Trang thái (state)
Với không gian trang thái, chúng tôi chỉ định tất cả đầu vào thử nghiệm dưới dạng chuỗi byte với chiều dài tối đa là 0x10000 byte làm trạng thái (hình 3.2), các byte từ đầu vào sẽ được quy thành mảng với giá trị các phần tử nằm trong khoảng (0, 255]. Việc chọn trạng thái như vậy làm giới han độ dài của đầu vào
48
thử nghiệm tôi đa là 0x10000 byte và cũng là một hạn chế nhưng chúng tôi cân
nhắc dánh đổi vì trạng thái quá lớn sẽ làm chậm quá trình xử lí của mô hình học tăng cường. Với độ dài byte ban đầu, sau khi chọn hành động biến đổi, các
giá trị đầu vào sẽ tùy theo hành động mà được thêm byte, cắt bớt byte hoặc các byte bị đảo vị trí (trạng thái mới). Từ đó, chúng tôi muốn mô hình fuzzing
chọn hành động chỉ dựa trên thông tin về đầu vào được biến đổi và chọn hành động biến đổi tốt nhất dựa trên kinh nghiệm.
byte to byte mapping
—
state array (max 0x10000 byte)
Hình 3.2: Chuyển từ đầu uào thành trạng thái cho mô hành hoc tăng cường
3.2.3. Hành động (action)
Trong học tăng cường, các hành động được thực hiện để tương tác với một môi trường và đạt được mục tiêu cụ thể. Trong ngữ cảnh fuzzing thì các hành
49
Bảng 3.1: Các hành động biến đổi thuộc không gian hành động
Hành động M6 ta
Mutate_ EraseBytes Xóa byte
Mutate_ InsertByte Chén byte
Mutate_ InsertRepeatedBytes | Chén một chuỗi byte
Mutate_ ChangeByte Thay đổi byte
Mutate_ ChangeBit Thay đổi một bit của một byte
Thay đổi thứ tự sắp xếp của byte trong
một khoảng
Mutate_ ChangeASCIIInteger | Thay đổi số nguyên
Mutate_ ChangeBinaryInteger | Thay đổi số nguyên nhị phân
Mutate_ CopyPart Thực hiện sao chép và chèn byte
Mutate_ShuffleBytes
động chính là những phép biến đổi trên đầu vào thử nghiệm để đưa vào bộ kiểm thử. Mô hình học tăng cường của chúng tôi bao gồm 9 hành động biến đổi trên
các byte của đầu vào thử nghiệm, được lấy ý tưởng từ libFuzzer do tính chất
độc lập và dễ triển khai so với các trình kiểm thử khác. Các hành động được
định nghĩa chỉ tiết trong bảng 3.1.
3.2.4. Phần thưởng (reward)
Một trong những khâu quan trọng nhất của việc thiết kế mô hình học tăng
cường là thiết kế cơ chế điểm thưởng. Cơ chế điểm thưởng sẽ ảnh hưởng đến hiệu suất và kết quả của mô hình học tăng cường. Do đó cơ chế điểm thưởng
đặt ra cần phải hợp lí và hướng đến các mục tiêu mong muốn mô hình. Trong ngữ cảnh của mô hình chúng tôi khi thực hiện fuzzing, chúng tôi mong muốn
mô hình mình sẽ gia tăng độ phủ mã hết sức có thể, hướng đến việc tìm ra các
phần mã chưa được chạm tới trong chương trình. Vì thế, số lượng độ phủ mã
mới được tìm thấy sẽ là tiêu chí trong cơ chế điểm thưởng của chúng tôi. Cơ chế điểm thưởng sẽ là:
total _ new _ coverage reward =
energy