Thiết lập thí nghiệm

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 71 - 80)

Q'=SEED_SELECTION_AND_ SCHEDULE(Q)

CHƯƠNG 4. THÍ NGHIỆM VÀ ĐÁNH GIÁ

4.1. Thiết lập thí nghiệm

4.1.1. Mục tiêu của thi nghiệm,

Dựa trên các cải tiền mà nhóm kì vọng ở mô hình được trình bày phía trên, trong phần thí nghiệm này, nhóm sẽ tiến hành tập trung trả lời các câu hỏi sau:

Câu hỏi 1: Dộ hiệu quả của mô hình so với mô hình fuzzing sử dụng học tăng cường cũ (mô hình rlfuzz, được mô tả trong 4.1.2.2)?

Câu hỏi 2: Hiệu quả của mô hình so với 1 công cụ fuzzing hiện đại là như

thé nào (AFLplusplus)?

Cau hỏi 3: Mttc độ đóng góp của mô hình hoc tăng cường được sử dung trong toàn bộ mô hình?

Câu hỏi 4: Nếu cải thiện được sự chênh lệch tốc độ giữa các ngôn ngữ, hiệu quả của mô hình sẽ như thế nào?

Để trả lời 4 câu hỏi đó, chúng tôi tiến hành thiết lập thí nghiệm để đánh giá

hiệu quả của mô hình. Với câu hỏi đầu tiên, chúng tôi tiến hành so sánh mức độ

hiệu quả của mô hình chúng tôi so với mô hình rlfuzz trong cùng khoảng thời

gian thực thi, dựa trên 2 thông số là độ phủ mã và số lượng đường dẫn thực thi, đây là 2 tham số đại diện cho tính khai thác và tính khám phá của mô hình.

Chúng tôi sử dụng cách thức tương tự đối để trả lời cho câu hỏi thứ 2, và đối tượng so sánh lần này sẽ là AFLplusplus. Dé trả lời câu hỏi thứ 3, chúng tôi so sánh CTFuzz với cơ chế ngẫu nhiên được tạo ra để tách mô hình học tăng cường

64

ra khỏi mô hình tổng và đánh giá sự chênh lệch về mặt hiệu suất của việc chọn hành động biến đổi dựa trên học tăng cường so với chọn hành động biến đổi ngẫu nhiên. Tiếp theo ở câu hỏi cuối cùng, đây là một câu hỏi khác đặc biệt mà nhóm chúng tôi đặt ra. Một vấn đề lớn là các mô hình fuzzing sử dụng học tăng

cường thường sử dụng ngôn ngữ python để triển khai vì tính dé sử dụng, trong

đó các công cụ fuzzing thực tế thường dùng các ngôn ngữ như C, điều này dẫn đến sự chênh lệch tốc độ chạy lớn giữa cả 2. Tuy nhiên, tốc độ chạy của python

có thể cải thiện nếu chúng ta chuyển sang ngôn ngữ khác như Rust (thực tế đã

có rất nhiều nghiên cứu sử dụng), việc này thường không dễ để thực hiện, tuy

nhiên vẫn là khả thi. Vì thế, câu hỏi đặt ra là nếu mô hình chúng tôi được viết

bằng các ngôn ngữ có tốc độ cao hơn, liệu nó có thể đạt được hiệu quả so với các công cụ fuzzing thực tế hay không? Để tìm câu trả lời cho điều này, chúng tôi so sánh độ phủ mã và số lượng đường dẫn tìm được ở tất cả các mô hình sau 200000 lần thử đầu, cách so sánh này có thể giúp ta bỏ qua vấn đề về tốc

độ giữa các ngôn ngữ (C, python), mà quan tâm đến hiệu suất sau mỗi lần thử. Câu hỏi cuối cùng giống như một sự đánh giá cho việc liệu có nên bỏ công sức

để triển khai mô hình trên một ngôn ngữ nhanh hơn như Rust hay không.

Tom lại, dựa trên 4 câu hỏi trên, chúng tôi tiến hành thử nghiệm so sánh giữa

4 mô hình bao gồm CTFuzz (mô hình của chúng tôi), rlfuzz (mô hình fuzzing

sử dụng học tăng cường từ nhóm tác giả Zhang, Zheng), AFLplusplus (công

cụ fuzzing hiện đại) và cơ chế ngẫu nhiên (là mô hình của chúng tôi nhưng thay phần học tăng cường bằng cách chọn ngẫu nhiên) dựa trên 3 thông số là

độ phủ mã (coverage), số đường dẫn thực thi (unique_ path) và tốc độ chạy (execution times), theo 2 ngữ cảnh: sau 6 tiếng chạy và sau 200000 lần thử đầu.

4.1.2. Cài đặt các mé hinh so sánh

Ỏ phần này chúng tôi giới thiệu về các mô hình chúng tôi sử dụng để so sánh,

cách cài đặt, các tham số được sử dung, bao gồm AFLplusplus, rifuzz, CT Fuzz,

65

và cơ chế ngẫu nhiên.

4.1.2.1. AFLplusplus

AFLplusplus là một công cụ fuzzing hiện đại, dang được sử dụng cực kì phổ biến và rộng rãi. AFLplusplus được phát triển từ AFL (American Fuzzy Lop) là một công cụ fuzzing nổi tiếng từ google nhưng đã ngưng phát triển. AFLplusplus

là công cụ fuzzing hộp xám sử dụng độ phủ mã và các thông tin khi chạy để tối

ưu hóa fuzzing. AFLplusplus tạo ra các mau thử bằng cách áp dung các hành động biến đổi lên một đầu vào ban đầu được cung cấp từ người dùng, vì vậy nó thuộc dang công cụ fuzzing dựa trên biến đổi, đặc điểm là để tránh các đầu vào tạo ra có sự khác biệt quá lớn từ đó đi sai ra khỏi cấu trúc đặc biệt của đầu vào (ví dụ: định dang PDF, định dạng tệp thực thi, ...). AFLplusplus được thiết kế hướng đến sự hiệu quả trong thực tiễn khi fuzzing thay vì một nguyên lý vận hành cụ thể và không phải là một bằng chứng cho bất kỳ lý thuyết cu thể nào, công cụ có thể được coi như một tập hợp các cách thức giải pháp đã được thử

nghiệm trong thực tế, đạt được hiệu quả tốt và được thực hiện một cách đơn giản, mạnh mẽ nhất, các nguyên tắc thực sự hướng đến chỉ là tốc độ, đáng tin cậy va dễ sử dụng. AFLplusplus còn cung cấp các cơ chế tiện dụng khác như

trình biên dịch đặc biệt (dùng để biên dịch và chèn mã phụ cho việc fuzzing), cơ

chế ảo hóa và cơ chế móc mang lại tính đa dụng và hiệu quả. Việc là một công

cụ mã nguồn mở còn cho phép các nhà nghiên cứu tùy chỉnh, cá nhân hóa cho phù hợp với từng ngữ cảnh fuzzing và dễ dàng nghiên cứu phát triển.

Trong nghiên cứu này của chúng tôi, chúng tôi sử dụng AFLplusplus như là

một đại diện cho nhóm các công cụ fuzzing được sử dụng trong thực tế, so sánh hiệu quả khi chạy của CTFuzz với AFLplusplus sẽ cho ta góc nhìn về tính thực tiễn của mô hình CTFuzz. Chúng tôi biên dịch AFLplusplus phiên bản 4.05e trên

hệ điều hành Ubuntu 20.04.1 LTS, gec/g++ 9.4.0, emake 3.26.3, make 4.2.1, ... tất cả đều là mặc định trên hệ điều hành vào lúc cài đặt. Chương trình mục tiêu được fuzz với chế độ frida và các lựa chọn còn lại là mặc định (sử dụng

66

forkserver, không sử dụng hành động Dictionary). Ngoài ra, chúng tôi thêm một

đoạn mã nhỏ vào mã nguồn AFLplusplus để giúp tính toán số lượng đường dẫn

thực thi (unique_ path).

4.1.2.2. rifuzz

Dây là mô hình fuzzing sử dụng học tăng cường được đề xuất bởi nhóm tác giả Zheng Zhang trong [18]. Trong mô hình này, tác giả sử dung mô hình học

tăng cường DDPG để chọn hành động biến đổi đầu vào khi fuzzing. Thiết kế

về trạng thái và hành động của rlfuzz so với CTFuzz là giống nhau, khác biệt ở

cơ chế điểm thưởng và cấu trúc thiết kế của môi trường tương tác, nơi CTFuzz triển khai thêm các thuật toán tối ưu và thuật toán chọn và lập lịch đầu vào.

Mô hình DDQG trong rifuzz sử dụng gồm 2 lớp mang là actor và critic. Lớp

mạng actor gồm 2 lớp mạng ẩn 1024 và 128 nút, Kích thước của lớp đầu vào

là kích thước của không gian trạng thái và kích thước của lớp đầu ra là kích thước của không gian hành động, hàm kích hoạt ở lớp cuối cùng được sử dụng

là softmax. Lớp mang critic gồm 2 lớp mạng an 1024 và 128 nút, kích thước của

lớp đầu vào là kích thước của không gian trạng thái và kích thước của lớp đầu

ra là 1, hàm kích hoạt ở lớp cuối cùng được sử dụng là sigmoid.

Phương thức lấy độ phủ mã của rlfuzz cũng gần tương tự với CTFuzz nhưng

được triển khai ở phiên ban cũ hơn là AFL, tuy nhiên độ phủ mã được sử dụng van là độ phủ mã theo cạnh và cách tính độ phủ mã vẫn tương tự. Cơ chế điểm thưởng ở mô hình rlfuzz được tính bằng công thức:

N(SHM) L(SHM) reward =

Trong đó:

e SHM: Bảng theo dấu các cạnh đã thực thi từ AFL

eô N(SHM): Số vị trớ trong bảng cú giỏ trị khỏc khụng (số cạnh đó thực thi,

67

không quan trong số lần di qua)

e L(SHM): Tổng số byte trong mang theo dấu (mặc định 65536)

Công thức này chỉ phụ thuộc vào số lượng độ phủ mã mà mẩu thử đó đạt được, điểm số dành cho các độ phủ mã cũ và mới tìm được là như nhau, sự tăng hay giảm so với đầu vào được biến đổi cũng không được đề cập, nói cách khác, rlfuzz chấm điểm chỉ hướng đến việc đạt được độ phủ mã cao nhất đối với từng đầu vào sau khi được biến đổi, không quan trọng là độ phủ mã mới hay không. Các tham số khác của mô hình DDQG được sứ dụng bao gồm 10000 cho kích thước của bộ đệm vòng (ring buffer) dùng để lưu trữ dữ liệu tương tác, nhiễu ngẫu nhiên để khám phá hành động với kích thước được đặt là kích

thước khụng gian hành động với 0 = 0.15, „ = 0 và ứ = 0.3. DDPG cập nhật

mang dự đoán giá trị hành động (critic network) với 7 = 0,99 và cập nhật mềm mạng mục tiêu (target network) với một biên độ nhỏ tai mỗi bước thời gian

09 = 792 + (1 — z)09”. Hàm tối ưu hóa được chọn là hàm tối uu hóa Adam với

tỉ lệ học là 0.001.

Rlfuzz cũng sử dụng một phương pháp để cân bằng tính khai thác và khám phá, bằng cách duy trì một tập các đầu vào "tốt" từng tạo ra độ phủ mới, nếu như mau thử đang được thử nghiệm tìm ra độ phủ mã mới, nó sẽ tiếp tục là trạng thái tiếp theo của mô hình, nếu không, chương trình chọn ngẫu nhiên một đầu vào trong tập "tốt" để tiến hành biến đổi tiếp. Mỗi đầu vào và hành động được chọn tương ứng chỉ biến đổi một lần duy nhất, không có cơ chế phân bổ

số lần thử khác nhau như CTFuzz.

4.1.2.8. CTFuzz

Chúng tôi triển khai mô hình chúng tôi đề xuất ở chương 3 trên ngôn ngữ python, kèm với 1 phần mô hình được viết bằng C để lấy độ phủ mã.

Đối với mô hình học tăng cường, chúng tôi sử dụng DQNAgent từ thư viện keras-rl2 để tạo ra mô hình deep-q-learning, thư viện tensorflow.keras để tạo lớp

68

mạng deep-q-network và tương tác với môi trường fuzzing sử dụng thư viện gym.

Mô hình mạng deep-q-network của chúng tôi sẽ triển khai voi 3 lớp mạng an (hidden layer) với lần lượt là 1024, 128 và 64 nút. Kích thước của lớp mạng đầu

vào (input layer) chính là kích thước của không gian trạng thái (state space) và

kích thước của lớp mạng đầu ra chính là kích thước của không gian hành động (action space). Hàm kích hoạt của lớp cuối cùng là linear. Chúng tôi sử dụng chính sách chọn hành động là EpsGreedyQPolicy và hàm tối ưu (optimizer)

chúng tôi sử dụng là Adam. Chúng tôi đặt kích thước của bộ experience replay

là 1000000 để lưu trữ các trạng thái, hành động và phần thưởng, chúng tôi

chọn giá trị c = 0.7 cho chính sách chọn hành động EpsGreedyQPolicy. Giá trị

+ = 0.9 và tỉ lệ học (learning rate) Ir = 0.001. Đối với các thuật toán còn lại trong mô hình, chúng tôi đặt giá trị cho các hằng số được sử dụng lần lượt là

total_ energy = 1000000 và min_ energy = 50 trong thuật toán chọn và lập lịch

đầu vào, C = 10 cho thuật toán biến đổi đầu vào nhiều cấp và M = 5000 cho cơ chế chống lãng phí. Các thông số trên được tham khảo từ các nghiên cứu khác

và dựa vào thử nghiệm thực tế trên ứng dụng readelf để chọn thông số cho kết quả tốt nhất.

4.1.2.4. Cơ chế ngẫu nhiên

Dé đánh giá được mức độ hiệu qua của mô hình học tăng cường đóng góp trong mô hình của chúng tôi, chúng tôi tiến hành so sánh CTFuzz với co chế ngẫu nhiên. Chúng tôi xây dựng mô hình fuzzing bao gồm toàn bộ cầu trúc mô hình CTEuzz trước đó nhưng sẽ thay mô hình học tăng cường bằng cơ chế chọn hành động biến đổi một cách ngẫu nhiên. Tất cả các tham số sử dụng sẽ giống như được mô tả ở phần CTFuzz. Với việc so sánh này, hiệu quả của mô hình

học tăng cường sẽ được tách ra so với các thuật toán còn lại, và hiệu quả của

mô hình học tăng cường trong việc chọn hành động biến đổi sẽ được so sánh với

việc chọn các hành động một cách ngẫu nhiên.

69 4.1.3. Các ứng dung thử nghiệm,

Dựa vào sự tham khảo của các bài báo khoa học khác, nhóm tiến hành thống

kê và chọn fuzzing trên 2 bộ công cụ là Binutils-2.34 và Poppler-0.86. 1. Day là 2

bộ công cụ thường được sử dụng để thử nghiệm trong các nghiên cứu về fuzzing thuộc nhóm phần mềm thực tế, khác với các ứng dụng thuộc nhóm tập dữ liệu (dataset), hay đánh giá hiệu suất (benchmark). 2 bộ công cụ này được sử dụng

nhiều vì nó là 2 bộ công cụ mã nguồn mở (có thể thử nghiệm các phương pháp cần mã nguồn), có tiềm năng lỗi cao do xử lí các công việc phức tạp (định dạng PDF, ELF), nhưng không quá lớn, quá phức tạp để hiểu và dé sử dung.

e Binutils là một bộ công cu quan trọng trong việc phát triển phần mềm và

làm việc với file nhị phân, cung cấp các tính năng cần thiết để biên dịch, liên kết, gỡ lỗi và quản lý file nhị phân trên nhiều hệ điều hành và kiến trúc khác nhau. Binutils hỗ trợ nhiều kiến trúc vi xử lý và định dang file khác nhau, bao gồm các kiến trúc như x86, ARM, MIPS, PowerPC và các định dang file như ELF (Executable and Linkable Format) và COFF (Common Object File Format).

e Poppler là một thư viện mã nguồn mở mạnh mẽ cho việc làm việc với file

PDE, cung cấp các tính năng như trích xuất nội dung, hiển thị, gỡ lỗi và

chỉnh sửa, và đã được tích hợp vào nhiều ứng dụng và dự án khác nhau. Poppler được xây dựng trên nền tảng Xpdf, một trình doc PDF được phát triển ban đầu bởi Derek B. Noonburg. Poppler đã được tích hợp vào nhiều ứng dụng và du án phổ biến, bao gồm các trình đọc PDF như Evince và

Okular, trình duyệt web như Firefox và Chrome, và các công cu xử lý PDF khác.

Chỉ tiết thông tin về các ứng dụng được thử nghiệm và các tham số sử dụng được ghi trong bảng 4.1, kí tự "@@" biểu thị cho việc đưa mẩu thử vào ứng dụng dưới dạng một tệp. Đối với đầu vào ban đầu, chúng tôi sử 2 tệp đầu vào

70 Bang 4.1: Thông tin các ứng dung thử nghiệm

ID | Target Program Parameters Version Seed Type

1 readelf -a @@ Binutils-2.34 ELF

2 strings -a @@ Binutils-2.34 ELF

3 size -A -x -t @@ Binutils-2.34 ELF

4 objdump -a -f -x -d @@ Binutils-2.34 ELF

5 nm -C @@ Binutils-2.34 ELF

6 pdfinfo -box @@ Poppler-0.86. PDF

7 pdfimages -list -j @@ Poppler-0.86. PDF

8 pdfdetach -list @@ Poppler-0.86. PDF

9 pdftotext -htmlmeta @@ | Poppler-0.86. PDF

10 pdftohtml -stdout @@ Poppler-0.86. PDF

11 pdftoppm -mono @@ Poppler-0.86. PDE

tương ứng với 2 loại dữ liệu được sử dung cho 2 bộ công cụ. Đối với bộ công cu

Binutils làm việc với tệp ELF, chúng tôi sử dụng chính ứng dụng size trong bộ

công cụ làm đầu vào ban đầu, đây là ứng dụng có độ lớn thấp nhất (31kb) trong

bộ công cụ, đồng thời cũng có độ phức tạp vừa phải đủ để chạm vào các nhánh sâu trong các bộ ứng dụng. Một số nghiên cứu khác sử dụng đầu vào rỗng để làm đầu vào ban đầu nhằm mang lại nhằm mang lại mức độ khám phá cao hơn, tuy nhiên nó cũng khiến cho quá trình fuzzing mất nhều thời gian hơn để chạm

sâu hơn vào mô hình. Tương tự phía tệp PDF, chúng tôi sử dụng một tệp mẫu PDF nhỏ, chỉ gồm 1 trang duy nhất chứa chữ, 1 hình ảnh có mau và bảng, gồm

26 object và nặng 31kb.

4.1.4. Các tiêu chi danh giá

Chúng tôi thực hiện đánh giá trên 3 tiêu chí là độ phủ mã (coverage), số đường dẫn thực thi (unique_ path) và tốc độ chạy (execution tỉmes)

và theo 2 ngữ cảnh: Sau 6 tiếng fuzzing và sai 200000 lần thử đầu.

Tiêu chí đầu tiên là độ phủ mã sẽ được tính theo tổng số cạnh tìm được của

từng mô hình (theo phương pháp tính độ phủ mã theo cạnh), mỗi cạnh đi qua

chỉ tính 1 mà không đếm số lần lặp qua các cạnh, đây là phương thức đánh giá

71

cơ bản nhất của 1 công cụ fuzzing sử dụng độ phủ mã. Độ phủ mã sẽ cho thay

mức độ bao phủ của các mẩu thử tạo ra trên các đoạn mã của chương trình.

Phương thức lấy độ phủ mã của chúng tôi sử dụng cho phép duy trì một bảng

theo dấu tổng quát để lưu lại các cạnh đã tìm thấy từ bảng theo dấu trả về sau

các lần thử.

Chúng tôi định nghĩa số đường dẫn thực thi của một mau thử dựa trên tập

các cạnh mà chúng đi qua (không tính đến số lần lặp của từng cạnh), đây cũng

là một phương thức thông dụng được sử dụng để đánh giá hiệu suất fuzzing,

phương thức này giúp đánh giá được mức độ khám phá của mô hình, tức là độ

đa dạng các đường dẫn đã được thực thi. Đối với CTPFuzz, rlfuzz và cơ chế ngẫu nhiên, chúng tôi sử dụng bảng theo dấu được trả về sau khi thực thi chương

trình, lưu nó dưới dạng hash 64-bit vào cấu trúc dit liệu set của python để đếm

số đường dẫn không trùng lặp, thuật toán hash chúng tôi sử dung là zzhổ từ thư viện z#hash. Đối với công cu AFLplusplus, chúng tôi sử dụng hàm hash64

cung cấp sẵn dé và lưu lại bảng theo dấu trong cấu trúc dữ liệu set tương tự.

Cuối cùng là tốc độ thực thi của chương trình, là thông số đánh giá tốc độ chạy giữa các mô hình. Tốc độ chạy ở đây được đo bằng số lần thử chương trình mục tiêu với đầu vào được tạo ra, fuzzing là một công việc mang tính may rủi

khá cao nên việc được thử nhiều cũng sẽ tăng tỉ lệ tìm được lỗi hay tìm ra các

nhanh mới. Ở ngữ cảnh đầu, chúng tôi đếm tổng số lần thực thi của các mô

hình sau 6 tiếng, ở ngữ cảnh sau, chúng tôi đo thời gian mô hình mất để thực

thi 200000 lần thử đầu. Cả 2 thông số đều cho phép tính toán được tốc độ thực thi đơn vị (số lần thử/s).

Để tinh mức độ tăng/giảm của CTFuzz so với các mô hình khác, chúng tôi sử

dụng tham số tỉ lệ gia tang (Enhancing Rate - ER), được tính bằng công thức:

— CT Fuzz_value — Compare _model_value

ER + 100(%)

Compare_model_ value Trong do:

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 71 - 80)

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

(93 trang)