Giới thiệu
American Fuzzy Lop, được viết tắt là AFL là một công cụ kiểm thử mờ thông minh. Được dùng để tìm các lỗ hổng phần mềm bằng cách gửi dữ liệu đầu vào có định đạng sai tới ứng dụng. Nếu phần mềm crash hoặc hoạt động không đúng dự kiến, nó có thể là dấu hiệu của lỗ hổng an ninh
Cài đặt
Bước 1: Công cụ kiểm thử AFL có thể được tải về từ Github tại địa chỉ https://github.com/google/AFL
Bước 2: Cài đặt công cụ
Cài đặt thành công
Ví dụ cụ thể
Để thực hiện thực nghiệm, nhóm chọn Fuzzgoat làm đối tượng được kiểm thử. Fuzzgoat là một chương trình C này đã được cố tình tạo ra chứa lỗi với một số lỗi hỏng bộ nhớ để kiểm tra tính hiệu quả của các fuzzer và các công cụ phân tích khác. Sử dụng AFL làm Fuzzer để kiểm thử.
Bước 1: Cài đặt Fuzzgoat (https://github.com/fuzzstati0n/fuzzgoat)
Bước 2: Tạo một thư mục để lưu giữ tất cả các trường hợp thử nghiệm. Đặt tên thư mục này là “afl_in”
Thêm testcase bằng cách chuyển một số giá trị ngẫu nhiên/rác vào thư mục ở trên:
Bước 3: Tạo thư mục để lưu trữ các tệp dẫn đến sự cố hoặc bị treo
Bước 4: Tiến hành kiểm thử, chạy câu lệnh afl-fuzz -i afl_in -o afl_out — fuzzgoat/fuzzgoat
Trong đó:
-i afl_in : chỉ ra đường dẫn với đầu vào testcase
-o afl_out : chỉ ra đường dẫn đầu ra các tệp gây ra crash
— : phân tách cấu trúc câu lệnh. Phía bên trái là nơi các cờ của AFL được chuyển qua và bên phải là nơi đặt lệnh chạy của mục tiêu, trong trường hợp này là fuzzgoat/fuzzgoat.
Kết quả thực nghiệm và đánh giá
Sau khi sử dụng AFL để kiểm thử fuzzgoat, ta thu được kết quả như sau:
– Giao diện và thông tin khá dễ hiểu nhưng có một số trường cần chú ý:
+ Process Timing Section: Nếu “last new path” hiển thị một khoảng thời gian lớn, điều đó có nghĩa là AFL không thể tìm thấy đường dẫn mới.
+ Overall Results Section: Khuyến cáo ít nhất 50 chu kỳ.
– Kiểm tra đầu ra ở thư mục /afl_out trong các mục /crash hoặc /hang
Bây giờ, chúng ta có thể xem xét các tệp này để biết chính xác AFL đã biến đầu vào thành gì và sau đó tìm ra lý do tại sao nó khiến ứng dụng bị treo hoặc bị treo.
– Trong màn hình theo dõi có rất nhiều thông tin. Có một thông tin mà cần phải chú ý đến đầu tiên khi thực hiện kiểm thử là: cycles done. Con số này thể hiện cho số lượng vòng lặp thực hiện kiểm thử hoàn thành, con số này ít nhất phải lớn hơn 1. Vì lúc đó mới chắc chắn được có ít nhất 1 lần thực hiện kiểm thử chương trình hoàn thành.
Theo như thông số ở trên khi sau khi đi qua 4 lần kiểm thử, chương trình đã bị crash 17 lần. Qua theo dõi con số này không tăng lên ở các lần kiểm thử tiếp theo.