52 vào với các tiêu chí sau

Một phần của tài liệu Khóa luận tốt nghiệp An toàn thông tin: Phương pháp fuzzing có chỉ dẫn độ phủ trong phát hiện lỗ hổng phần mềm dựa trên học tăng cường (Trang 60 - 65)

e Ưu tiên fuzzing cho các đầu vào có độ phủ mã cao hơn trước

e Dành nhiều lần thử hơn cho các đầu vào có độ phủ mã cao hơn

e Phân phối số lần thử và đảm bảo các đầu vào có độ phủ mã ít hơn vẫn được

thử nghiệm với tần suất hợp lí, cân bằng tính khai thác và khám phá của

mô hình

Đầu tiên để đảm bảo tất cả đầu vào đều được fuzzing, chúng tôi biến đổi các

đầu vào theo vòng lặp. Khi bắt đầu một vòng lặp mới, chúng tôi sắp xếp thứ

tự các đầu vào trong hàng chờ dựa theo độ phủ mã giảm dần, và chia cho mỗi đầu vào một số lần thử tương ứng. Mô hình sẽ thử từng đầu vào cho đến khi kết thúc vòng lặp, các đầu vào mang lại độ phủ mã mới và được thêm vào hàng

chờ sẽ chỉ được biến đổi ở vòng lặp sau, khi vòng lặp hiện tại kết thúc.

Số lần thử của từng đầu vào sẽ được tính theo công thức sau:

total_ energy * (n — 7)

SAP(n) energy; = max( ,min_ energy)

Trong đó:

e i là thứ tự của đầu vào sau khi được sắp xếp lại theo độ phủ mã giảm dan,

bắt đâu từ 0

e energy; là số lần thử tương ứng với đầu vào thứ i

e total_ energy là tong số lần thử cho một vòng lặp

e min_ energy là số lần thử tối thiểu

e ứ là tổng số đầu vào đang cú trong hàng chờ

53

e SAP(n) là tong cấp số cộng n phan tử (1...n)

SAP(n) = S7i

i=1

3

Với cách chia này, các dau vào có độ phủ mã cao hơn sé được thử nghiệm với

số lần thử cao hơn và được ưu tiên thử trước. Các đầu vào có độ phủ mã thấp

hơn sẽ vẫn được thử nghiệm sau với số lần thử không được ít hơn mức tối thiểu. Chúng tôi đặt ra tổng số lần thử cho một vòng lặp để tránh việc một vòng lặp

quá dài và không có cơ hội cho những đầu vào mới được thêm vào sau. Thuật

toán 3.1 là mã giả biểu thị cho thuật toán chọn và lập lịch đầu vào của chúng tôi. Ngoài ra để bổ trợ và tránh lãng phí ở các đầu vào được phân bổ số lần thử

lớn, chúng tôi kết hợp với cơ chế chống lãng phí, chi tiết được trình bay ở phần

3.4.2.

Thuật toán 3.1 Thuật toán chọn và lập lịch đầu vào

Input: Seed queue Q

Output: List of seed and mutation energy in order

function SEED_ SELECTION. AND_SCHEDULE(Q)

Q’=Q

sort(Q’) // Sort seeds in Q’ order by coverage

n = len(Q’) for i+ 0ton-—1do

Q'[i].energy = max(total_ energy + (n — i)/SAP(n), min_ energy) end for

return (’

3.4. Thuật toán biến đổi đầu vào nhiều cấp va chống lãng

phí

Các mô hình fuzzing sử dung hoc tăng cường đang chưa có sự thực tiễn cao

do thiếu đi một số thủ thuật hay các thuật toán tối ưu đơn giản, điển hình có thể kể đến là Co chế biến đổi đầu uào nhiều cấp và Cơ chế chống lãng phí. Day

54

đều là những thuật toán đã được phát triển và sử dụng bởi các công cụ fuzzing hiện đại như AFLplusplus, chúng tôi đơn giản hóa và sửa đổi một chút nhằm tích hợp và bổ trợ mô hình fuzzing của chúng tôi mang tính thực tiễn cao hơn.

3.4.1. Thuật toán biến đổi đều ào nhiều cắp

Dựa trên sự tham khảo của các công cụ fuzzing hiện đại khác như AFLplus-

plus, nhóm nhận thấy AFLplusplus có triển khai biến đổi đầu vào với độ sâu lớn hơn 1. Đó là những lúc khi mà mô hình fuzz cần phải thực hiện nhiều hơn một

hành động liên tục để có thể tìm thấy những mẫu thử "đáng chú ý" mới. Nhóm

nhận thấy đây là một điều khá cần thiết và sẽ là thiếu xót lớn nếu không áp dụng và các mô hình fuzzing sử dụng học tăng cường. Vì thế dựa trên ý tưởng này, nhóm thực hiện một thuật toán biến đổi nhiều cấp mới đơn giản hơn có thể kết hợp với mô hình học tăng cường.

Thuật toán 3.2 là mã giả thế hiện cho thuật toán biến đổi nhiều cấp, với các

ý tưởng chính như sau:

e Dộ sâu biến đổi ban đầu là 1

e Mỗi đầu vào sẽ được lưu cùng một bảng đếm tương ứng số lượng thực hiện

của các hành động biến đổi.

e Mỗi hành động được chọn không quá Œ lần

e Nếu hành động được chọn hơn Œ lần, chọn ngẫu nhiên một hành động khác

chưa chạm ngưỡng để thực hiện biến đổi

e Sau khi toàn bộ hành động của đầu vào được chọn đủ Œ lần, đầu vào được

tách ra khỏi hàng chờ @„ và đưa xuống hàng chờ Q„¿

e Nếu như toàn độ đầu vào ở hàng chờ Q,, đã trống, mô hình chuyển sang độ

sõu mới là ứ + 1 và chuyển sang hàng chờ Q„+Ă

59

Thuật toán 3.2 Thuật toán biến đổi đầu vào nhiều cấp

Input: Input seed, mutation depth depth

Output: List of testcase

function MULTI_LEVEL_ MUTATE(seed, depth)

input = seed.input energy = seed.energy

for step + 1 to depth — 1 do

action = get_action(input) // Get action from RL model

input = mutate(input, action) end for

action = get_action(input) // Get action from RL model

if action_is_maximun_try(seed, action, C) then

// Random pick another valid action

action = pick another _action(seed, C’) end if

testcase _ list = arraylenergy]

for i+ 1 to seed.energy do

testcase = mutate(input, action)

testcase _ list.append(festcase)

end for update _ mutate _count(seed, action)

if all_ mutate_reach_ maximum _try(seed,C) then

remove _ from _queue(Qdepth, seed) add_to_queue(Qdepth+1, Seed)

end if

return testcase_list

56

3.4.2. Co ché chéng lang phi

Một trong những thuật toán đơn giản khác cũng góp phần khiến cho AFLplus- plus hoạt động hiệu quả, đó là cơ chế chống lãng phí (hay ngắt sớm). Khi công

cụ thực hiện một hành động với lượng phép thử lớn trên một đầu vào mà không

có kết quả tốt, rất có khả năng toàn bộ số lần thử còn lại trên cùng hành động với đầu vào đó cũng sẽ không mang lại kết quả dẫn đến lãng phí thời gian và tài

nguyên. Để tránh điều này, công cụ fuzzing hiện đại như AFLplusplus sử dụng một bộ luật khá phức tạp để xác định khi nào cần dừng sớm việc thử nghiệm trên đầu vào và chuyển sang một đầu vào khác (dù số lần thử phân bổ vẫn còn). Với ý tưởng tương tự, chúng tôi đơn giản hóa và triển khai nó cho mô hình của

mình, chúng tôi đặt ra hằng số M gọi là số lần thử không tốt liên tục tối đa. Khi

biến đổi một đầu vào không có sự gia tăng về độ phủ mã hoặc tìm ra các đường

đi mới trong A/ lần liên tục, mô hình sẽ dừng và chuyển sang đầu vào mới, nhờ

đó tiết kiệm được lượng lớn lần thử vô ích. Việc đặt giá trị cho hằng số cũng rất quan trọng, hằng số quá lớn sẽ khiến cho việc chống lãng phí không hiệu quả, hằng số quá nhỏ sẽ khiến cho mô hình bỏ qua tỉ lệ lớn tìm lấy độ phủ mã mới

ở những lần thử sau, vì thế ta cần một hằng số đủ cân bằng để đánh đổi cho

mô hình. Việc chọn này đạt hiệu quả hay không còn phụ thuộc vào 2 hằng số

total_ energy và min __ energu 6 thuật toán phân bổ số lần thử ở phan 3.3, việc đặt M biến thiên dựa theo số lần phân bổ có thé sẽ mang lại hiệu quả cao hon,

tuy nhiên trong mô hình của chúng tôi, chúng tôi muốn giữ sự đơn giản bằng

một hằng số M cố định xuyên suốt quá trình. Ta có thể biểu diễn cơ chế dưới

dạng mã giả như thuật toán 3.3.

3.5. Phương pháp thu thập độ phú mã từ chương trình

Một trong những khâu rất quan trọng của các mô hình fuzzing sử dụng độ

phủ mã là làm sao để trích xuất thông tin về độ phủ mã từ chương trình khi

chạy, điều này ảnh hưởng rất lớn đến hiệu quả của mô hình. Việc trích xuất cần

57

Thuật toán 3.3 Co chế chống lãng phí

Một phần của tài liệu Khóa luận tốt nghiệp An toàn thông tin: Phương pháp fuzzing có chỉ dẫn độ phủ trong phát hiện lỗ hổng phần mềm dựa trên học tăng cường (Trang 60 - 65)

Tải bản đầy đủ (PDF)

(93 trang)