1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khóa luận tốt nghiệp An toàn thông tin: Nghiên cứu phương pháp fuzzing trong tự động hóa phát hiện lỗ hổng phần mềm dựa trên học tăng cường

61 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu phương pháp fuzzing trong tự động hóa phát hiện lỗ hổng phần mềm dựa trên học tăng cường
Tác giả Trần Nguyễn Đức Huy
Người hướng dẫn TS. Phạm Văn Hậu, ThS. Đỗ Thị Thu Hiền
Trường học Đại học Công nghệ Thông tin - DHQG TP.HCM
Chuyên ngành An Toàn Thông Tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2023
Thành phố TP.HCM
Định dạng
Số trang 61
Dung lượng 29,24 MB

Nội dung

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 1

TRAN 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 2

LỜ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 3

MUC 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 4

2.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 5

4.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 6

DANH 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 7

Phươ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 8

DANH 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 9

TÓ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 10

CHƯƠ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 11

Fuzzing 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 12

nă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 13

trú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 14

e 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 15

CHƯƠ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 16

mã Độ 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 17

diệ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 18

chươ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 19

Dò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 20

Xem 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 21

qua 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 23

về 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 24

Hì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 25

17 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 26

mô 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 27

Vì 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 28

CHƯƠ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 29

giữ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 30

Untaken | 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:

Ngày đăng: 02/10/2024, 04:06

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w