Biên dịch lại chương trình: Phương pháp này liên quan đến việc biên

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 31 - 34)

dịch lại mã nguồn của chương trình được fuzzing và chèn mã phụ (instru-

mentation code) vào để ghi lại độ phủ mã. Các công cụ fuzzing có thể thiết

kế trình biên dịch đặc biệt được làm lại để thêm mã phụ để ghi lại các

phần mã được thực thi, hoặc sử dụng các phương pháp khác như tạo bản

đồ trạng thái (state map) để theo dõi độ phủ. Khi tiến hành fuzzing, công

cụ chạy fuzzing với ứng dụng đã được biên dịch lại và tương tac với các mã

phụ được chèn vào để lấy độ phủ mã được ứng dụng ghi lại. Đây là phương

24

pháp mang tính ổn định và hiệu suất tốt nhất, nhưng có thể yêu cầu thời gian, công sức và đặc biệt là yêu cầu mã nguồn để thực hiện.

. Sử dụng cơ chế ảo hóa: Phương pháp này sử dụng việc tạo nên các môi trường fuzzing ảo dé theo déi và ghi lại các hoạt động của chương trình nhờ việc kiểm soát được nhân (kernel) của môi trường ảo. Các công cụ fuzzing

có thể sử dung các phần mềm ảo hóa như QEMU, Unicorn, ... để dựng môi trường fuzzing ảo ghi lại thông tin về độ phủ mã khi chạy. Ưu điểm của phương pháp này là tính linh hoạt cao (có thể kết hợp để fuzzing trên các kiến trúc khác), tuy nhiên điểm yếu lớn nhất là tốc độ chạy chậm và đòi hỏi kiến thức lớn để xử lí nếu gặp các lỗi trong quá trình dựng. Đây là phương pháp có tốc độ chạy chậm nhất trong 3 phương pháp.

. Sử dụng cơ chế móc (hook): Phương pháp này sử dụng các kĩ thuật móc (hook) để tiến hành chèn các mã phụ (instrumentation code) vào chương

trình. Phương pháp này tương tự phương pháp 1 nhưng khác là việc chèn

các mã phụ sẽ được thực hiện khi chạy chương trình, không phải khi biên

dịch. Một trong các công cụ móc phổ biến được sử dụng là frida. Day là một phương pháp khá mới và được phát triển trong thời gian gần đây. Một trong các công cụ fuzzing phổ biến có hỗ trợ phương pháp này là AFLplusplus.

Đây được xem là phương pháp trung hòa giữa 2 phương pháp trên và được

sử dụng rất phổ biến nhờ tính tiện dụng. Phương pháp này không cần mã nguồn để thực hiện biên dịch lại như phương pháp 1, tuy nhiên sẽ chạy chậm hơn phương pháp 1 và yêu cầu thời gian để chèn mã phụ vào đầu

mỗi lần chạy. N6 chạy nhanh hơn phương pháp 2 do không cần phải

dựng môi trường ảo hóa, nhưng cũng đánh đổi bằng sự linh hoạt khi không thể fuzz trên các kiến trúc khác với kiến trúc hệ thống. Tuy nhiên do có tốc

độ tốt và không cần mã nguồn, nó trở thành phương pháp ưu tiên nhất đổi

với fuzzing hộp xám.

25

2.2.5. Các thông số so sứnh của fuzzing

Ở phần này chúng tôi giải thích về ý nghĩa các thông số quan trọng thường

được sử dụng để đánh giá fuzzing, bao gồm độ phủ mã, số đường đi, thời gian thục thi, số lần thử, bảng theo dấu, số lượng hạt giống, độ sâu biến doi.

e Độ phủ ma (Coverage): Dây là số lượng phần mã mà các mau thử đã

đi đến thành công. Do lường sự phủ sóng của các mau thử trong quá trình

fuzzing. Đây là tham số quan trọng nhất trong đánh giá fuzzing hộp xám

dựa trên độ phủ mã. Mục tiêu là tăng cường độ phủ sóng này để khám phá được nhiều lỗi tiềm an hơn.

e Số đường đi (Unique Path): Số lượng các đường đi (path) khác nhau

mà các mau thử đã đi qua. Mỗi đường di đại diện cho một chuỗi các nhánh (edge) hoặc các điểm rẽ nhánh trong mã nguồn. Đếm số lượng đường đi

giúp đánh giá khả năng khám phá các đường đi khác nhau của chương trình.

e Thời gian thực thi (Time Execs): Thời gian đã trôi qua trong quá trình

fuzzing, được tính bằng đơn vị giây. Dây là thời gian thực tế đã dành cho

việc thực thi các mầu thử và tìm kiếm lỗi.

e Số lần thử (Execs Done): Đây là số lần chương trình thực thi một mẫu

thử được tạo ra sau khi biến đổi đầu vào và lấy thông tin độ phủ mã về.

Thông số này phản ảnh tốc độ thực thi của công cụ fuzzing và đồng thời là

độ hiệu quả của cơ chế lấy độ phủ mã mà công cụ sử dụng.

e Bảng theo dấu (Trace Bits): Là một mảng, hoặc một chuỗi các byte/bit

được sử dụng để dánh dấu đường đi của chương trình, mục tiêu là để tính độ

phủ mã cũng như số đường đi của chương trình sau khi chạy. Mỗi byte/bit có

thể tương ứng với một nhánh (edge), một dòng (line), một hàm (function)

hay một khối (block), tùy thuộc và cơ chế tính độ phủ mã mà công cụ sử

26

dụng. Mỗi khi mau thử đi qua một nhánh/dòng/hàm/khối, byte/bit trong

bảng theo dấu tương ứng sẽ được đánh dấu là 1, hoặc được cộng giá trị lên

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 31 - 34)

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

(93 trang)