Mạng sinh đối kháng GAN là một phương pháp học máy rất hiệu quả để giải quyết vấn đề này, bao gồm bộ sinh sẽ tạo ra các mẫu đầu vào và bộ phân biệt sẽ quyết định liệu đầu vào được sinh r
Trang 1TRAN NGUYEN DUC HUY - 19520604
KHOA LUAN TOT NGHIEP
NGHIÊN CỨU PHƯƠNG PHÁP FUZZING TRONG
TU DONG HÓA PHÁT HIỆN LO HONG PHAN MEM
DUA TREN HOC TANG CƯỜNG
A STUDY ON REINFORCEMENT LEARNING-BASED
FUZZING FOR AUTOMATIC SOFTWARE VULNERABILITY
DETECTION
KY SU NGANH AN TOAN THONG TIN
GIANG VIEN HUGNG DAN:
TS Pham Van Hau
ThS Dé Thi Thu Hién
TP.H6 Chi Minh - 2023
Trang 2LỜI CẢM ƠN
Để hoàn thành nghiên cứu và luận văn của mình, nhóm đã nhận được sự
hướng dẫn, giúp đỡ, những ý kiến đóng góp quý báu và động viên của các giảng
viên, giáo viên bộ môn Nhóm xin bày tỏ lời cảm ơn tới thầy Phạm Văn Hậu,
cô Đỗ Thị Thu Hiền đã tận tình trực tiếp hướng dẫn, giúp đỡ trong quá trình
nghiên cứu.
Nhóm xin gửi lời cảm ơn đến gia đình và bạn bè đã động viên, đóng góp ý
kiến trong quá trình làm khóa luận
Nhóm cũng chân thành cảm ơn các quý thầy cô trường Đại học Công nghệ
Thông tin - DHQG TP.HCM, đặc biệt là các thầy cô khoa Mạng máy tính vàTruyền thông, các thầy cô thuộc bộ môn An toàn Thông tin đã giúp đỡ nhóm
Trần Nguyễn Đức Huy
Trang 3MUC LUC
LOI CAM ON 2.0 0.00 i
DANH MỤC CAC KÝ HIỆU, CÁC CHU VIET TAT v
DANH MỤC CÁC HÌNH VẼ vi
DANH MỤC CAC BANG BIEU vi
TOM TAT KHOA LUẬN 1
CHƯƠNG 1 MỞ ĐẦU 2 11 Giới thiệu van đề Quy 2 1.2 Tong quan nghiên cứu ốc 3 1.3 Mục tiêu, đối tượng và phạm vi nghiên cứu 5
1.31 Mục tiêu nghiên ctu 2, 5 1.3.2 Đối tượng nghién ctu 5
1.3.3 Pham vinghiénecttu 000 5 1.3.4 Cấu trúc khóa luận tốt nghiệp - 5
CHƯƠNG 2 CƠ SỞ LY THUYET 7 2.1 PuZzZng ee 7 2.1.1 Khái nệm Fuzzing 20.020.2020.02 0 00040 7 2.1.2 Độ phủ mã LH 220000 ĩ 2.1.3 Greybox fuzzing (Coverage-guided fuzzing) 8
2.1.4 Khối cơ ban - Basic block 9
2.2 Concolic Execution 0.0.0.0 0.000 eee ee 10 2.21 Symbolic Execution .200- 10 2.2.2 Concolic Execution - 0000- 11 2.3 Phương pháp học may tăng cường sâu 12
Trang 42.3.1 Học máy tăng cường - Reinforcement Learning 12
2.3.2 Q-learning 20002000000 15 2.3.3 Deep Q-learning 00.00.0008 16 CHƯƠNG 3 MÔ HINH FUZZING ÁP DUNG CONCOLIC EX-ECUTION VA HOC TANG CƯỜNG SAU 20 3.1 Tong quan mô hình đề xuất 20
3.2 Trình fuzing AELUCTT+T Quy vo 21 3.2.1 Giới thiệu va 21 3.2.2 Cơ chế theo ddi độ phủ mã 21
3.2.3 Cơ chế đồng bộ đầu vào 23
3.3 Trinh concolic execution Driller 23
3.4 Mô hình hoc tăng cường sfu 2 ee 25 3.4.1 Các thành phan của mô hình học tăng cường sau 26
3.4.2 Phần thưởng- Reward 28
3.4.3 Thuật toán huấn luyện môhình 29
CHƯƠNG 4 THỰC NGHIỆM VÀ ĐÁNH GIÁ 31 4.1 Thiết lập thínghiệm 31
4.1.1 Thiết lập môi trường huấn luyện - 31
4.1.2 Thử nghiệm mô hình học tăng cường sâu 33
4.1.3 Tap dữ liệu huấn luyện 35
4.1.4 Các trình fuzzing được thử nghiệm 35
4.2 Tiêu chi đánh gid vo 36 4.3 Kết quả quá trình huấn luyện mô hình - 37
4.3.1 Chương trình CADEE 00001 37
4.3.2 Chương trình CADET 00003 38
4.3.3 Chương trình CROMU 00016 39
4.3.4 Chương trình KPRCA 00032 40
43.5 Chương trình YAN01_00001 41
Trang 54.3.6 Chương trình YANO] 00016 42
4.3.7 Dánh giá quá trình huấn luyện mô hinh 43
4.4 Kết quả quá trình thực nghiệm - 44
4.4.1 Số lượng nhánh đã được thực thỉ 44
4.4.2 Số lượng ngoại lệ gây ra khi fuzzing 45
4.4.3 Thời gian tìm được ngoại lệ đầu tiên khi fuzzing 46
4.4.4 Đánh giá kết quả thực nghệm 46
CHƯƠNG 5 KET LUẬN 48
51 Kếtluận 2 en 48 5.2 Hướng phát triển ee 49
TÀI LIEU THAM KHAO 51
Trang 6DANH MỤC CÁC KÝ HIỆU, CÁC CHU VIET TAT
5 Không gian các trạng thái mà tác tử
St Trang thái môi trường tại lượt t
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
L(0) Ham mất mát
MDP_ Markov Decision Process SMT Satisfiability Modulo Theories
Trang 7Phương pháp hoc máy tăng cường 13
Thuật toán hoc tang cường Q-learning 2.2 16
Mạng no-ron hoc sâu c c Q 17
Mô hình Dr.CEuzz Q Q c 22
Đồng bộ đầu vào trong AFL‡+ 24
Cách thức hoạt động của Driler 25
Thiết lập phần thưởng mô hình học tăng cường 29
Kết quả huấn luyện mô hình trên chương trình CADET_ 00001 38Kết quả huấn luyện mô hình trên chương trình CADET _ 00003 39Kết quả huấn luyện mô hình trên chương trình CROMU_ 00016 40Kết quả huấn luyện mô hình trên chương trình KPRCA_ 00032 41Kết quả huấn luyện mô hình trên chương trình YAN01_ 00001 42Kết quả huấn luyện mô hình trên chương trình YANO1_ 00016 43
Trang 8DANH MUC CAC BANG BIEU
Bang 2.1 Ví dụ về symbolic execution - 11
Bang 4.1 Các chương trình được lựa chọn thực nghiém 35
Bang 4.2 Tong quan các trình fuzzing được sử dung trong quá trình
thực nghiệm ee 36Bảng 4.3 Số lượng nhánh các trình fuzzing phủ được trong ð tiếng 44
Bảng 4.4 Số lượng ngoại lệ các trình fuzzing gây ra trong 5 tiếng 45
Bảng 4.5 Thời gian các trình fuzzing tim ra ngoại lệ đầu tiên (giây) 46
Trang 9TÓM TẮT KHÓA LUẬN
Fuzzing là một phương pháp tối ưu thường được sử dụng trong kiểm thử
phần mềm Fuzzing dựa vào các bộ dữ liệu đầu vào được tạo ra một cách ngẫunhiên nhằm khai thác các lỗ hồng của chương trình, đặc biệc là các lỗ hồng
bộ nhớ (memory corruption) Tuy nhiên các trình fuzzing dựa vào dữ liệu ngẫu
nhiên chỉ có thể tạo ra những đầu vào đơn giản, khó bao phủ được các đường
thực thi chứa những câu lệnh điều kiện phức tạp để khai thác sâu vào chương
trình Đã có nhiều công trình nghiên cứu được thực hiện nhằm giải quyết van đề
này thông qua việc tích hợp các phương thức phân tích động vào trình fuzzing.
Trong nghiên cứu này, chúng tôi đề xuất một mô hình fuzzing kết hợp giữa
concolic execution và học tăng cường sâu nhằm tăng độ bao phủ mã cũng như
giảm thiểu được thời gian thực thi để tăng hiệu suất của quá trình fuzzing Khi trình fuzzing không thể tạo ra thêm đầu vào mới trong một khoảng thời gian, mô-đun concolic execution sẽ được thực thi để phân tích động mã nguồn và tìm
ra các đầu vào hỗ trợ cho trình fuzzing Việc lựa chọn đường dẫn để tiếp tục
fuzzing sẽ do mô đun hoc tăng cường dam nhận nhằm lay được các đường dẫn
hiệu qua của concolic exection tạo ra hơn Khi thử nghiệm với các chương trình
mẫu của DARPA Cyber Grand Challenge, giải pháp của chúng tôi tăng được
độ bao phủ mã cạnh của chương trình hơn so với các công trình liên quan Với đóng góp nay, hi vọng việc 4p dụng học may vào quá trình fuzzing sẽ được sử
dụng rộng rãi hơn và góp phần giúp cho việc sử dụng các phần mềm được antoàn hơn.
Trang 10CHƯƠNG 1 MỞ ĐẦU
O chương này chúng tôi giới thiệu về vấn đề được đặt ra và các nghiên cứu
liên quan Đồng thời, chúng tôi cũng trình bày phạm vi và cấu trúc của Khóaluận.
1.1 Giới thiệu vấn đề
Sự phát triển mạnh mẽ của công nghệ thông tin đã mở ra một kỷ nguyên mới cho nền công nghiệp trên toàn thế giới Theo sau sự phát triển này là hàng loạt những thay đổi trong cách thức vận hành và hoạt động của các ngành nghề Ngày nay ta có thể thấy máy tính được sử dụng rộng rãi trong khắp các lĩnh
vực Chính vì vậy các phần mềm hỗ trợ công việc trở thành một phần không
thể thiếu và ngày càng gia tăng về mặt số lượng cũng như phát triển về mặt
chất lượng
Đi kèm với sự gia tăng này là những rủi ro về quyền riêng tư và tài sản mà
người dủng phải đối mặt khi sử dụng những phần mềm, dịch vụ được cung cấp
từ các nhà phát hành Các phần mềm phải được đảm bảo an toàn trước khi
được đưa ra thị trường, để phòng tránh thiệt hại cho cả người dùng lan nhà phát triển ứng dung Có thể thấy, việc dò tìm và khắc phục các lỗ hổng của
phần mềm trong giai đoạn phát triển là hết sức cần thiết
Với tốc độ phần mềm được tạo ra như hiện nay, hoạt động kiểm thử đang
phải đối mặt trước thách thức to lớn về nguồn nhân lực Các phương pháp, kỹ
thuật, quy trình hợp lý cần được áp dụng để giảm thiểu thời gian mà vẫn đạt được độ hiệu quả trong quá trình kiểm thử Việc nghiên cứu một giải pháp tự động hóa kiểm thử là một trong những điều cần thiết để gia tăng năng suất và cải thiện chất lượng của việc kiểm thử trong điều kiện hạn chế về nguồn nhân
Trang 11Fuzzing là giải pháp kiểm thử phần mềm tự động được sử dung để tìm ra
lỗi trong chương trình Fuzzing sử dụng các đầu vào được tạo ra ngẫu nhiên và
đưa vào chương trình với mục đích gây ra nhiều lỗi nhất có thể Tuy nhiên các
trình fuzzing hiện tại chỉ dừng lại ở việc tạo ra các đầu vào có khả năng tạo ralỗi mà không quan tâm đến cấu trúc của chương trình Chính vì vậy đối với cácchương trình có chứa những câu lệnh điều kiện phức tạp, các trình fuzzing chothấy sự thiếu hiệu quả trong việc bao phủ các nhánh mã của chương trình
Đã có nhiều giải pháp nhằm cải thiện khả năng của các trình fuzzing hiện tạinhưng hầu hết đều tồn tại các hạn chế nhất định Qua quá trình khảo sát, nhómchúng tôi nhận thấy việc 4p dụng máy học vào trình fuzzing còn khá mới mẻ
Các mô hình máy học chỉ được áp dụng vào quá trình lựa chọn đầu vào hoặc
lựa chọn các bộ biến đổi đầu vào Các nghiên cứu gần đây đã đề xuất những thuật toán lập lịch đầu vào và lựa chọn bộ biến đổi khá hiệu quả có thể cải thiện
độ phủ mã của chương trình dưới đầu vào được lựa chọn, đồng thời giảm thiểu
được gánh nặng phần cứng ((3], [13]) Do đó, nhóm chúng tôi nhận thay rằng
việc áp dụng máy học vào fuzzing là một hướng đi đầy tiềm năng với nhiều khảnăng phát triển Ở nghiên cứu này, chúng tôi đề xuất một mô hình fuzzing kết
hợp concolic execution vận dụng máy hoc tăng cường nhằm tìm ra những dauvào có khả năng vượt qua các điều kiện ràng buộc phức tạp, từ đó gia tăng được
độ bao phủ mã của chương trình.
1.2 Tổng quan nghiên cứu
Với sự phát triển của học máy, đã có nhiều giải pháp kết máy học với fuzzing
có định hướng nhằm cải thiện độ bao phủ mã của chương trình Tuy nhiên các
giải pháp này vẫn tồn tại một số nhược điểm nhất định Giải pháp RLFUZZ
của Zheng Zhang và cộng su [21] 4p dụng thuật toán hoc tăng cường Deep
Deterministic Policy Gradient nhằm lựa chọn bộ biến đổi đầu vào để tăng khả
Trang 12năng đầu vào thực thi được các nhánh mã mới
Giải pháp V-Fuzz của Yuwei Li và cộng sự [11] là một giải phấp fuzzing sử
dụng mạng nơ-ron biểu đồ để dự đoán vị trí các lỗ hồng của chương trình Việc
này giúp tăng khả năng phát hiện các lỗ hồng của chương trình mà không tiêutốn nhiều tài nguyên tính toán Nhưng giải pháp này không đem lại nhiều cảithiện về độ bao phủ mã mà chỉ tập trung vào việc duy trì độ bao phủ mã hiện tại
trong khi tăng cường số lượng lỗ hong có thể phát hiện được, do đó các đường
dẫn thực thi tiềm an lỗ hồng vẫn có khả năng bị bỏ qua
Giải pháp NeuFuzz của Yunchao Wang và cộng sự [17] 4p dụng mạng nơ-ron
học sâu vào bộ lập lịch chọn đầu vào cũng như mạng LSTM vào quá trình xác
định các đường dẫn thực thi của chương trình Phương pháp này làm giảm thiểu
khối lượng đường dẫn phải thực hiện fuzzing, từ đó nâng cao hiệu suất và tìmkiếm được nhiều vi trí chứa lỗ hong hơn Qua đó, NeuFuzz đảm bảo được mục
đích phát hiện lỗ hổng tồn tại trong suốt quá trình fuzzing hơn so với các phương
pháp khác chỉ chú trọng về độ bao phủ mã Tuy nhiên giải pháp này phụ thuộc
vào giải pháp PTfuzz của Gen Zhang và cộng sự [20], vốn chỉ có thể được sử
dụng trên các bộ xử lý có hỗ trợ trình bổ trợ Intel PT Hơn nữa giải pháp này
cho thấy sự thiếu hiệu quả trước các câu lệnh điều kiện kiểm tra đầu vào phức
tạp của chương trình.
Việc tạo ra các đầu vào có cấu trúc cao cũng là một trong những vấn đề
được nghiên cứu trong lĩnh vực fuzzing Một số chương trình nhận vào một tập
tin, hay một đối tượng với kiểu dữ liệu phức tạp, đòi hỏi trình fuzzing phải có khả năng tạo ra các đầu vào tương ứng để có thể bao phủ hiệu quả chương
trình Mạng sinh đối kháng (GAN) là một phương pháp học máy rất hiệu quả
để giải quyết vấn đề này, bao gồm bộ sinh sẽ tạo ra các mẫu đầu vào và bộ phân
biệt sẽ quyết định liệu đầu vào được sinh ra có phù hợp cho chương trình đang
được kiểm thử Giải pháp RapidFuzz của Aoshuang Ye và cộng sự [18] vận dụng
WGAN-GP ở bộ sinh nhằm tối ưu hóa tốc độ sinh đầu vào và cải thiện độ bao
phủ mã Nhờ vào GAN, giải pháp này có khả năng tạo các bộ đầu vào với cấu
Trang 13trúc phức tap Tuy nhiên giải pháp nay chỉ được thử nghiệm trên trình fuzzing
AFL chứ không đề cập đến hiệu năng trên các trình fuzzing khác hiện đại hơn
như AFL++, honggfuzz
1.3 Mục tiêu, đối tượng và phạm vi nghiên cứu
1.3.1 Mục tiêu nghién cứu,
Ứng dụng được phương pháp học máy tăng cường vào giải pháp concolic
execution để tìm kiếm những đường dẫn thực thi tối ưu hơn nhằm tăng cường
độ bao phủ mã cho chương trình khi thực hiện fuzzing và giảm di khả năng xây
ra path explosion, là hiện tượng các đường thực thi của chương trình tăng lên
theo hàm mũ, gây khó khăn cho quá trình concolic execution.
1.3.2 Đối tượng nghiên cứu
Đối tượng của nghiên cứu này là các thành phần cấu tạo nên giải pháp đềxuất, bao gồm các phương pháp fuzzing hiện đại, phương pháp học máy tăng
cường sâu và phương pháp phân tích động concolic execution.
1.3.3 Pham vi nghiên cứu,
Phạm vi của nghiên cứu nay được giới han ở việc fuzzing mã thực thi nhị
phân, tạo ra được trình fuzzing kết hợp concolic execution áp dụng học máy cókhả năng tăng độ phủ mã và đánh giá kết quả, hiệu suất của mô hình đề xuất
với các giải pháp tương tự khác.
1.3.4 Cấu trúc khóa luận tốt nghiệp
Chúng tôi xin phép được trình bày nội dung của khóa luận theo cấu trúc như
sau:
e Chương 1: Giới thiệu tổng quan đề tài và các hướng nghiên cứu liên quan
Trang 14e Chương 2: Trình bày cơ sở lý thuyết các kiến thức liên quan đến đề tài
e Chương 3: Trình bày mô hình fuzzing kết hợp hợp concolic execution và học
tăng cường sâu
e Chương 4: Trình bày kết quả thực nghiệm và các đánh giá liên quan
e Chương 5: Kết luận và trình bày những hướng phát triển của đề tài
Trang 15CHƯƠNG 2 CƠ SỞ LÝ THUYET
Ở chương này, chúng tôi trình bày cơ sở lý thuyết và những kiến thức liên
quan của nghiên cứu, bao gồm Fuzzing, Concolic Execution và Phương pháp
học máy tăng cường sâu.
2.1 Fuzzing
2.1.1 Khai niệm Fuzzing
Fuzzing là một phương pháp tự động hóa kiểm thử thông qua việc đưa vào
chương trình các bộ đầu vào ngẫu nhiên, không hợp lệ so với đầu vào mong muốn
của chương trình nhằm kích hoạt được những dòng mã tiềm ẩn của chương trình
từ đó tăng được độ bao phủ các nhánh mã cũng như khai thác các lỗ hồng của chương trình đang được kiểm thử, đặc biệt là các lỗ hong về bộ nhớ (memory
corruption).
Fuzzing được giới thiệu bởi Miller và cộng sự vào năm 1990 [14], đến nay đã
phát triển và trở thành phương pháp đáng tin cậy để dò tìm lỗ hong phần mềm
bởi mức độ hiệu quả mà nó mang lại Fuzzing hoạt động bằng cách cung cấp cho
chương trình vô số các đầu vào với mục đích gây nên lỗi chương trình Chính
vì vậy, điểm cốt lõi của một trình fuzzing là phương thức sinh đầu vào có khảnăng khiến chương trình mục tiêu thực thi nhiều đoạn mã và tạo ra các ngoại
lệ trái với mục đích ban đầu của người lập trình
2.1.2 Độ phủ ma
Khi kiểm thử chương trình, ngoài lỗ hổng tìm được, ta còn quan tâm đến
lượng mã lệnh trong chương trình đã được thực thi Đây được gọi là độ phủ
Trang 16mã Độ phủ mã là yếu tố thường được sử dung để đánh giá hiệu năng của trình
fuzzing sau số lượng lỗi phát hiện được với ý tưởng rằng độ phủ mã tỉ lệ thuậnvới số lỗi tìm được
Độ phủ mã thường được đo lường bằng cách chèn các đoạn mã đánh dấutrong chương trình nhằm xác định chương trình đã đi qua một đoạn lệnh nhấtđịnh hay chưa Các trình fuzzing hiện nay còn dùng độ phủ mã để tạo ra cácđầu vào hướng luồng thực thi chương trình đến một đoạn mã nhất định
2.1.3 Greuboz fuzzing (Coverage-guided fuzzing)
Các phương pháp fuzzing có thể được phan loại theo nhiều cách: theo phương
thức sinh đầu vào, theo mức độ nhận thức cấu trúc đầu vào hoặc theo mức độ
nhận thức về cấu trúc của chương trình được kiểm thử.
Theo mức độ nhận thức về cấu trúc của chương trình mục tiêu, các phương
pháp fuzzing được chia thành 3 nhóm:
e Blackbox fuzzing: Nhóm phương pháp này được sử dụng khi ta không
có nhiều thông tin về đối tượng kiểm thử Các trình fuzzing thuộc nhóm
này xem chương trình mục tiêu là một hộp đen (blackbox) và phụ thuộc
vào việc quan sát hành vi của chương trình để tạo ra các bộ đầu vào mới Blackbox fuzzing không tiêu tốn nhiều tài nguyên và có thé dé dàng được
triển khai, nhưng phương pháp này khó có thể khai thác được các lỗ hổng
phức tạp, cần sự hiểu biết sâu về chương trình mục tiêu.
e Whitebox fuzzing: Nhóm phương pháp này được sử dụng khi ta có toàn
quyền truy cập đến cau trúc thiết kế và mã nguồn của chương trình Điềunày tạo điều kiện cho các phương pháp phân tích, đánh giá và xác định các
vùng mã tiềm tàng lỗi để sinh các bộ đầu vào có khả năng hướng luồng thực
thi đến các vùng mã này Whitebox fuzzing có khả năng khai thác được các
lỗ hổng phức tạp vốn không thể được khai thác bởi Blackbox fuzzing nhưng cần nhiều tài nguyên để phân tích chương trình đang được kiểm thử Đại
Trang 17diện cho nhóm phương pháp này gồm: SAGE [7], BuzzFuzz [6], KLUZZER
[10],
e Greybox fuzzing: Nhóm phương pháp này kết hợp các đặc điểm của
Blackbox và Whitebox fuzzing, thường được sử dụng khi ta có một phần
thông tin về đối tượng kiểm thử đủ để cho phép một hướng tiếp cận nhắm
đến mục tiêu kiểm thử hơn so với Blackbox fuzzing nhưng cũng không quá
nặng về mặt phân tích chương trình như Whitebox fuzzing Greybox fuzzing
có khả năng tạo ra các đầu vào nhắm đến một mục tiêu nhất định trong
chương trình để cải thiện độ phủ mã cũng như số lượng lỗ hồng khai thác được mà không tiêu tốn quá nhiều tài nguyên tính toán Tiêu biểu cho nhóm
phương pháp này bao gồm: AFL [19], libFuzzer, Honggfuzz,
Greybox fuzzing không phụ thuộc vào các kỹ thuật phân tích chương trình
như Symbolic Execution [9] hay Taint Analysis [15] Thay vào đó, Greybox
fuzzing thực hiện chèn các điểm đánh dẫu (instrumentation) vào các khối mã
nhằm theo dõi quá trình thực thi của chương trình và đánh giá độ phủ mã (code
coverage) của chương trình dưới một đầu vào nhất định Các đầu vào tao ra được
trạng thái mới (ví dụ: thực thi được một đoạn mã mới, ) cho chương trình sẽ
được lưu lại vào hàng đợi và được sử dụng trong các lượt fuzz sau Các đầu vào
không đem lại trạng thái mới sẽ được bỏ qua Đây được gọi là Coverage-guided
fuzzing.
2.1.4 Khối cơ ban - Basic block
Khối cơ ban (Basic block) định nghĩa một đoạn mã bao gồm một điểm bắt đầu (Entry point) và một điểm kết thúc (Exit point) trong đó không tồn tại bất kì lệnh rẽ nhánh nào khác ngoài điểm kết thúc và không tồn tại đích đến rẽ nhánh nào khác ngoài điểm bắt đầu.
Các trình greybox fuzzing chèn các điểm đánh dấu tại các lệnh rẽ nhánh hoặc đầu các khối cơ bản để theo vết luồng thực thi và xác định độ phủ mã của
Trang 18chương trình khi nhận vào một đầu vào nhất định
2.2 Concolic Execution
2.2.1 Symbolic Execution
Symbolic execution là một phương pháp thực thi chương trình sử dung các
giá trị tượng trưng (symbolic value) thay cho các giá trị cụ thể (concrete value) Các giá trị đầu vào và các biến sẽ được thể hiện dưới dạng biểu thức đại diện cho
các điều kiện ràng buộc nhánh của một đường thực thi trong chương trình (pathconstraints) Bằng cách giải các điều kiện ràng buộc này, symbolic execution có
thể tạo ra các đầu vào hướng luồng thực thi đến một đoạn mã mục tiêu nhất
Chon một đường thực thi của chương trình trên, ta sé theo dõi giá tri của
các biến (có thể là cụ thể hoặc tượng trưng) cũng như các điều kiện ràng buộc
để có thể thực thi được đường thực thi đã chọn Với ø =a và b= Ø (a và Ø là
giá trị tượng trưng), bảng 2.1 thống kê giá trị các biến và điều kiện ràng buộc
để câu lệnh assert tại dòng 7 trả về true:
Sau khi đã xác định được các ràng buộc của đường thực thi, một trình giải
các giá trị ràng buộc này sẽ được sử dụng để tìm ra các giá trị cụ thể thỏa mãn
được các điều kiện này nhằm hướng luồng thực thi của chương trình đến đoạn
mã mục tiêu.
Trang 19Dòng | Ràng buộc đường thực thi Giá trị của biến
0 | true ara, bw 8
1 | true , FH0,yH0 2}a<5 2H 0,yH 0 5|œ<ð A œ#0 A ¬8 FH Ì, r>0
7|œ<5 A œZ0 A ABA 1+(-2)=-—l1| ,+z+>l,ut>—2
Bang 2.1: Ví dụ vé symbolic execution
2.2.2 Concolic Execution
Symbolic execution hiệu quả trong việc tìm các đầu vào thỏa mãn một đường
thực thi nhất định Tuy nhiên phương pháp này có những hạn chế Đối với các
đường thực thi dài bao gồm nhiều câu lệnh điều kiện, bộ giải ràng buộc sẽ khó
có thể giải các ràng buộc điều kiện và tìm ra giá trị thỏa mãn đường thực thi
đang được xét Diều này cũng xảy ra tương tự đối với các đường thực thi ngắnnhưng chứa các phép tính nằm ngoài khả năng tính toán của bộ giải ràng buộcnhư các hàm mật mã học hay các hàm toán học phi tuyến tính
Concolic execution có thể giải quyết những vấn đề này bằng cách kết hợp
symbolic execution với concrete execution (thực thi sử dụng giá trị cụ thể) Các
giá tri cụ thể sẽ được sử dụng để thực thi chương trình Tại các điểm rẽ nhánh,
nếu giá trị cụ thể được sử dụng không thỏa mãn điều kiện rẽ nhánh dẫn đến
đoạn mã cần thực thi, điều kiện của nhánh rẽ ngược lại sẽ được ghi nhận và
symbolic execution sẽ được thực hiện theo nhánh rẽ này.
Xem xét đoạn mã nguồn bên dưới:
Trang 20Xem hàm complex_ func là một hàm phức tap mà bộ giải ràng buộc không
thể thỏa mãn Thay vì tính toán giá trị x và y để thỏa mãn nhánh điều kiện dẫn đến ERROR, một giá trị cu thể sẽ được sử dụng cho x Lúc này Symbolic execution chỉ cần tìm giá trị y phù hợp để thỏa mãn nhánh điều kiện trên và
dẫn chương trình đến dòng lệnh ERROR
Concolic execution giải quyết được van đề quá tai tính toán 6 symbolic cution, giúp cho quá trình tìm đầu vào diễn ra nhanh hơn và hiệu quả hơn
exe-2.3 Phương pháp học máy tăng cường sâu
2.3.1 Hoc may tăng cường - Reinforcement Learning
2.3.1.1 Quy trinh quyét dinh Markov - Markov Decision Process
Quy trình quyết định Markov (MDP) là một cấu trúc được sử dung để mô
hình hóa bài toán lựa chọn quyết định trong các môi trường nhất định Các kếtquả nhận được từ môi trường có tính xác suất và phụ thuộc vào hành động đãđược lựa chọn Một MDP bao gồm các thành phần sau:
e State S: Không gian các trạng thai của môi trường
e Action A: Không gian các hành động có thể thực hiện trong môi trường
e Transition probability P,(s;, 5:41): Ti lệ dé hanh động a tai trạng thai s¿
dan đến trang thái s;41
e Immediate reward R,(5;, 5:41): Phan thưởng nhận được khi môi trường
chuyển từ trạng thái s; sang s;,, dưới hành động a
2.3.1.2 Khái niệm học máu tăng cường
Học máy tăng cường (Reinforcement Learning) là một một nhánh của lĩnh
vực may học Phương pháp học máy tăng cường dựa trên phương thức học thông
Trang 21qua phan hồi, được mô hình hóa theo MDP, trong đó, một Tác tử (Agent) sẽtương tác với Môi trường (Environment) bằng Hành động ø (Action) tại mộtTrạng thái s (State) và nhận lại phản hồi dưới hình thức là Phần thưởng r(Reward), từ đó học được hành động tối ưu nhất ở từng trạng thái Hình 2.1
mô tả cách thức hoạt động của phương pháp học may tăng cường.
Action A;
ervormen |
Reward R; Reward Ry+4 |
State S44
Hinh 2.1: Phuong pháp học máu tăng cường
2.8.1.8 Hoc tăng cường dựa trên giá tri - Value-based Reinforcement Learning
Chính sách z (Policy) là cốt lõi của mô hình hoc máy tăng cường Chính sáchquyết định hành động nào sẽ được thực hiện ở trạng thái hiện tại Mục tiêu củahọc máy tăng cường là tìm ra chính sách tối ưu mang lại giá trị phần thưởngtích lũy r lớn nhất Có hai hướng tiếp cận cho việc này: Học dựa trên chính sách
(Policy-based Learning) và Hoc dựa trên giá trị (Value-based Learning):
e Học dựa trên chính sách: Tác tử hình thành chính sách thông qua việc
học các ánh xạ từ một trạng thái đến một hành động (z : s > a) Các thuậttoán đại diện cho nhóm này bao gồm: Policy Gradient, Proximal Policy
Optimization (PPO), Trust Region Policy Optimization (TRPO),
e Hoc dựa trên giá tri: Tác tử hình thành chính sách thông qua việc hoc
các giá trị đạt được khi thực hiện một hành động tại một trạng thái, sau
Trang 22đó lựa chọn hành động tiếp theo thông qua các giá trị đạt được Các thuật
toán tiêu biểu cho nhóm này bao gồm: Q-Learning, Deep Q-Learning,
State-Action-Reward-State-Action (SARSA),
Các thuật toán học tăng cường dựa trên giá tri phụ thuộc vào một hàm giá
trị đánh giá các hành động tại một trạng thái nhất định, các hành động sau đó
sẽ được quyết định dựa trên một hàm chính sách được tối ưu cho một mục tiêu
Có hai hàm giá trị được sử dụng trong học tăng cường dựa trên giá trị Hàm
trạng thái-giá trị (State-value function) và hàm hành động-giá trị (Action-value
function).
Với chính sách z là ánh xa từ trạng thái s và hành động a đến xác suất thực
hiện hành động a tại trang thai s:
e Hàm trạng thái-giá trị: Trả về kì vọng khi bắt đầu tại trạng thái s sau
đó theo chính sách z ở các timestep sau.
®
V"(s) = Ex D2 nen = 4 (2.1)
k=0
e Ham hành động-giá trị: Trả về giá trị kì vọng khi tác tử bắt đầu tại
trạng thái s, thực hiện hành động a, và theo chính sách z ở các timestep
sau.
Q"(s,a) = E„ {Sorte St = 5,4 = | (2.2)
k=0
Trong đó:
— +: Tỉ lệ chiết khẩu (khuyến khích tác tử nhắm đến phần thưởng lâu dai)
— E„: Toán tử kì vọng giá trị trả về theo chính sách +
Mục tiêu cuối cùng của học tăng cường là tìm được chính sách giúp đạt được
giá trị phần thưởng tích lũy cao sau một thời gian dài Một chính sách z có thé
được xem là tốt hơn chính sách khác 7’ nếu hàm giá trị trên chính sách đó trả
Trang 23về giá trị cao hơn so với chính sách khác với mọi trạng thái s € Š và hành động
ac A Chính sách giúp hàm giá trị mang lại giá trị trả về cao nhất được gọi làchính sách tối ưu (Optimal policy) và hàm giá trị dưới chính sách này được gọi
là hàm giá trị tối ưu (Optimal value function) Hàm giá trị tối ưu có thé được
định nghĩa như sau:
e Hàm trạng thái-giá trị tối ưu (Optimal state-value function):
Có thể thấy các thuật toán học tăng cường dựa trên giá trị đem lại hiệu quả
cao hơn đối với các van đề cần sự cân bằng giữa khám phá (exploration) và khai
thác (exploitation) khi có thể xác định một chính sách linh động quyết định
hành động sẽ thực hiện tùy theo mục đích.
2.3.2 Q-learning
Q-learning là thuật toán hoc máy tăng cường dựa trên giá trị thực hiện tim
chính sách tối ưu thông qua tim Q-value (action-value) tối ưu cho từng cặp trangthái-hành động Để làm được điều này, Q-learning vận dụng cấu trúc bảng (Q-
table) lưu trữ các giá trị ánh xạ giữa trạng thái và hành động thực hiện tại trạng
thái đó Hình 2.2 mô tả cách thức hoạt động của thuật toán Q-learning.
Khi bắt đầu, Q-table được khởi tạo với giá trị 0 Trong qua trình tác tử tương
tác với môi trường, giá trị tương ứng của các cặp trạng thái-hành động sẽ được
cập nhật sử dụng biểu thức:
Qnew(St, at) = Q5, at) +O |T¡+1 + 7 max Q(5¿+1; a) — Q(st, at) (2.5)
Trang 24Hình 2.2: Thuật toán học tăng cường Q-learning
Trong đó: a: learning rate
2.3.3 Deep Q-learning
2.8.8.1 Mang nơ-ron hoc sâu - Deep Neural Network
Mang nơ-ron hoc sâu là một hướng tiếp cận trong lĩnh vực máy hoc, mô
phỏng hệ nơ-ron thần kinh của não bộ con người nhằm tìm ra mối liên hệ giữa
các dữ liệu đầu vào nhờ vào thuộc tính của chúng để có thể phân loại hoặc đưa
ra quyết định dựa trên đữ liệu phân tích được Phương pháp học máy này cókhả năng xử lý dữ liệu có số chiều lớn và phức tạp và thực hiện học trên các thểhiện cấu trúc dit liệu có ý nghĩa rút ra được từ dữ liệu đầu vào Chính vì vậy,
mạng nơ-ron học sâu rất phù hợp với những bài toán có dữ liệu đầu vào chứa
nhiều thuộc tính, cần ước lượng tính toán các giá trị đầu ra từ những dit liệu
này.
Kiến trúc một mạng nơ-ron học sâu bao gồm:
e Lớp đầu vào (input layer): Lớp thể hiện dữ liệu đầu vào ở cấu trúc nhất
định
e Các lớp ấn (hidden layers): Dam nhận nhiệm vụ lý luận dữ liệu đầu vào
và thể hiện dữ liệu ở dạng đầu ra
e Lớp đầu ra (output layer): Thể hiện dữ liệu đầu ra, kết quả của mạng
Trang 2517 nơ-ron học sâu
Hình 2.3 miêu tả cấu trúc một mạng nơ-ron học sâu:
Input layer Hidden layers Output layer
+
~.7——————===—=—=—==—=—=—=—=—=—=—=—=—=—=—=—~
Hành 2.3: Mang no-ron hoc sâu
Mỗi lớp có thể bao gồm số nút khác nhau, có thể có nhiều lớp an với số lượng
các nút khác nhau ở mỗi lớp tùy vào thuật toán được sử dụng và bài toán cầngiải quyết Tại mỗi lớp, một hàm phi tuyến tính sẽ được sử dụng để quyết địnhgiá trị ở nút hiện tại, được gọi là hàm kích hoạt (activate function) Điều này
là cần thiết vì một mạng nơ-ron học sâu nhiều lớp tuyến tính không đem lại sựkhác biệt về độ hiệu quả so với một mạng nơ-ron tuyến tính một lớp, nghĩa là
mô hình học sâu không có khả năng phát triển Mặt khác, các dữ liệu đầu vào
thường không nằm trong một khoảng nhất định, biên dưới và biên trên của các
giá trị cách nhau ở một khoảng lớn, khiến mô hình học máy kém chính xác Hàm
kích hoạt được sử dụng để giới hạn giá trị của dữ liệu lại trong một khoảng nhất
định, đồng thời khiến cho mô hình trở nên phi tuyến tính, đem lại khả năng cảithiện cho mô hình học sau.
Một yếu tố cốt lõi khác của mạng no-ron học sâu là hàm mat mát (loss
function) Hàm mat mát được sử dung để đánh giá độ tốt của mạng nơ-ron học
sâu, bằng cách tính toán mức độ khác biệt giữa đầu ra dự đoán và đầu ra kìvọng Dây được gọi là giá trị mất mát Giá trị mất mát lớn đồng nghĩa với việc
Trang 26mô hình học sâu đang thể hiện tệ Mục tiêu của mạng nơ-ron học sâu là giảm thiểu giá trị mất mát để giá trị dự đoán gần với giá trị kì vọng nhất.
2.3.3.2 Deep Q-learning
Han chế của thuật toán Q-learning nằm ở việc sử dung cấu trúc bảng để lưu
trữ các giá trị Q-value Diéu này trở nên bat khả thi đối với các bài toán cókhông gian trạng thái và hành động lớn khi Q-table cần nhiều bộ nhớ để có
thể lưu trữ toàn bộ giá trị Q-value đã tính toán được Hơn nữa, việc truy xuất
những giá trị này cũng sẽ tiêu tốn nhiều tài nguyên và thời gian, khiến cho quá
trình học tăng cường trở nên chậm, kém hiệu quả.
Deep Q-learning vượt qua hạn chế này thông qua việc áp dụng mạng nơ-ron
học sâu vào thuật toán Q-learning Thay vì tính toán giá trị Q-value và cập
nhật bảng Q-table, một mạng nơ-ron sẽ được sử dụng để ước lượng giá trị đầu
ra thay cho quá trình này Điều này giúp giảm tài nguyên bộ nhớ cũng như thờigian thực thi quá trình học tăng cường khi ta không cần phải lưu trữ hay truyxuất bất cứ dữ liệu nào
Mạng nơ-ron học sâu được sử dụng trong Deep Q-learning được gọi là Deep
Q-Network, nhận vào trạng thái hiện tại của môi trường và trả về các giá trị
Q-value tương ứng cho các hành động thực hiện trong trạng thái đó.
Hình 2.4 mô tả cách thức hoạt động của thuật toán Deep Q-learning:
Trang 27Vì Q-network cũng là mạng nơ-ron học sâu, ta cũng cần hàm mat mát để
tính toán độ sai lệch so với giá trị Q-value kì vọng Ham mat mát cho Q-networkđược định nghĩa như sau:
2
L= (rest + + max Q(st41, 4) — Q(s¿.a,)) (2.6)
Tương tự các thuật toán học tăng cường dựa trên giá trị, một chính sách sẽ
được sử dụng sau đó để quyết định hành động sẽ được thực hiện ở trạng thái
tiếp theo tùy thuộc vào giá trị Q-value nhận được
2.8.8.8 Experience replay
Một trong những van đề trong hoc tăng cường sâu chính là sự thay đổi khong đáng kể giữa các trạng thai liên tiếp Deep Q-learning thực hiện cập nhật các
trọng số của mang nơ-ron hoc sâu tại mỗi timestep Điều này tạo nên hiện tượng
overfitting (hiện tượng mô hình hoc máy học quá sát với dit liệu huấn luyện)
nếu sự khác biệt giữa hai trạng thái liên tiếp nhau của môi trường không quá
lớn vì tác tử chỉ quan sát được cái trạng thái tương tự nhau và chỉ học được các
hành động tương ứng với các trạng thái đó Nếu trong môi trường tồn tại các
trạng thái hiếm, ít khi bắt gặp, tác tử sẽ khó có thể học được hành động tối ưu
cho trạng thái này.
Experience replay [12] giải quyết vấn đề này bằng cách lưu trữ các kinh
nghiệm (bao gồm trạng thái, hành động đã thực hiện, phần thưởng đã nhận
được) vào bộ nhớ đệm (replay buffer) thay vì sử dụng ngay cho mạng nơ-ron
học sâu Chỉ khi số lượng kinh nghiệm trong replay buffer đạt đến một ngưỡng
nhất định, các kinh nghiệm này mới được lấy mẫu theo từng mẻ (batch) được
phân bổ đồng đều và cung cấp cho mô hình học tăng cường sâu Bằng cách này tác tử có thể quan sát được đa dạng các kinh nghiệm tích lũy được từ môi
trường và cải thiện được quá trình học của mình.
Trang 28CHƯƠNG 3 MÔ HÌNH FUZZING ÁP DUNG
CONCOLIC EXECUTION VÀ HỌC
TĂNG CƯỜNG SÂU
Ỏ chương này chúng tôi trình bày mô hình chúng tôi xây dựng được đặt
tên là Dr CFuzz, một mô hình fuzzing áp dụng concolic execution va học tăngcường sâu Các trình concolic execution truyền thống thực hiện khám pha cảhai nhánh điều kiện mỗi khi quá trình thực thi rẽ nhánh Điều này dễ dẫn đến
vấn đề path explosion, gây khó khăn trong việc thỏa mãn các biểu thức điều
kiện rẽ nhánh do giới hạn hiện tại của các bộ giải ràng buộc Khác với phương
pháp concolic execution thông thường, giải phấp concolic execution của chúng
tôi được 4p dung học may tăng cường để có thể lựa chọn và thỏa mãn các nhánh
điều kiện dẫn đến đường thực thi dài hơn, qua đó gia tăng độ bao phủ mã mà
không cần phân tích quá nhiều nhánh rẽ điều kiện của chương trình Bên cạnh
đó thuật toán học tăng cường sâu Deep Q-learning được chúng tôi sử dụng nhằmgiải quyết vấn đề không gian trạng thái chương trình lớn và nhiều thuộc tính
Tổng quan mô hình đề xuất được trình bày ở mục 3.1.
3.1 Tổng quan mô hình đề xuất
Tổng quan mô hình Dr CFuzz được thể hiện qua hình 3.1 Trình fuzzingAFL++ là thành phần chính của mô hình Luông thực thi bắt đầu với việc
trình fuzzing nhận vào chương trình mục tiêu và danh sách các đầu vào hạt
giống (seed) Một đầu vào sẽ được chọn và biến đổi thông qua các bộ biến đổi đầu vào để sinh ra test case cung cấp cho chương trình.
Đầu vào được tạo ra sẽ được lưu vào hàng đợi và được sử dụng cho các lượt
fuzzing sau nếu trình fuzzing tìm thấy lỗi chương trình hoặc sự chuyển tiếp mới
Trang 29giữa các khối cơ bản Nếu trình fuzzing không có tiến triển về độ phủ mã hoặc
hàng đợi đầu vào không được cập nhật trong một khoảng thời gian dài, mô-đunconcolic execution Driller học sâu sẽ được thực thi nhằm tìm ra đầu vào mới
cho trình fuzzing.
Mô-đun concolic execution Driller hoc sâu nhận vào hàng đợi đầu vào từ trìnhfuzzing và thực hiện symbolic execution trên chương trình mục tiêu Các đường
thực thi khác với đường thực thi hiện tại của chương trình sẽ được khám phá
và các đầu vào thỏa mãn các đường thực thi này sẽ được tạo ra để bổ sung cho hàng đợi đầu vào của trình fuzzing chính, giúp trình fuzzing chính có thể tiếp
tục khai thác và gia tăng độ phủ mã của quá trình fuzzing.
3.2 Trình fuzing AFL+-+
3.2.1 Giới thiệu
Trình fuzzing AFL++ được sử dụng làm thành phần fuzzing chính cho giải
pháp được đề xuất AFL++ (American Fuzzy Lop plus plus) [5] là trình fuzzingdựa trên American Fuzzy Lop của Michal Zalewski [19] với nhiều cải tiến vềhiệu năng khi được tích hợp các nghiên cứu mới mẻ nhằm cải thiện phiên bản
gốc của AFL Các cải tiến của AFL++ có thể được kể đến như các cơ chế lập lịch đầu vào thong minh của AFLFast [3] và MOPT [13], bộ biến đổi đầu vào
dựa trên Input-To-State của REDQUEEN [I], Thử nghiệm cho thấy AFL++
mang lại hiệu suất cao hơn AFL cả ở số lượng lỗi phát hiện được cũng như độ
bao phủ mã [2] Việc sử dụng AFL++ sẽ tăng kha năng do tìm lỗi ở những đoạn
mã dễ có thé được bao phủ.
3.2.2 Cơ chế theo dõi độ phủ mã
Các trình fuzzing AFL cũng như AEL++ theo dõi quá trình thực thi cũng
như độ phủ mã của chương trình mục tiêu thông qua một bảng ánh xạ 2 chiều
Trang 30Untaken | Annah CC ŸY#“= -—-——-—- ⁄
branch All Pea Deep Reinforcement Learning model
được chèn vào chương trình tại mỗi nhánh rẽ có dạng tương tự như đoạn mã
giả bên dưới: