1 điểm bởi GN⁺ 2024-10-07 | 1 bình luận | Chia sẻ qua WhatsApp

Fuzzing-101

Cấu trúc

  • Bài thực hành 1: Xpdf, CVE-2019-13288, 120 phút, Afl-clang-fast, Afl-fuzz, GDB
  • Bài thực hành 2: libexif, CVE-2009-3895, CVE-2012-2836, 6 giờ, Afl-clang-lto, thư viện fuzz, Eclipse IDE
  • Bài thực hành 3: TCPdump, CVE-2017-13028, 4 giờ, ASan, Sanitizers
  • Bài thực hành 4: LibTIFF, CVE-2016-9297, 3 giờ, code coverage, LCOV
  • Bài thực hành 5: Libxml2, CVE-2017-9048, 3 giờ, từ điển, song song hóa cơ bản, fuzzing đối số dòng lệnh
  • Bài thực hành 6: GIMP, CVE-2016-4994, lỗi bonus, 7 giờ, fuzzing liên tục, fuzzing ứng dụng tương tác
  • Bài thực hành 7: VLC media player, CVE-2019-14776, 6 giờ, partial instrumentation, fuzzing harness
  • Bài thực hành 8: Adobe Reader, 8 giờ, fuzzing ứng dụng mã nguồn đóng, QEMU instrumentation
  • Bài thực hành 9: 7-Zip, CVE-2016-2334, 8 giờ, WinAFL, fuzzing ứng dụng Windows
  • Bài thực hành 10 (thử thách cuối cùng): Google Chrome / V8, CVE-2019-5847, 8 giờ, Fuzzilli, fuzzing JavaScript engine

Nhật ký thay đổi

  • 14 tháng 2, 2022: sửa lỗi gõ nhầm 'wget' ở bài thực hành 5
  • 25 tháng 11, 2021: cập nhật và chỉnh sửa bài thực hành 3

Khóa học này dành cho ai?

  • Những người muốn học nền tảng cơ bản về fuzzing
  • Những người muốn tìm lỗ hổng trong các dự án phần mềm thực tế

Yêu cầu

  • Cần có hệ thống Linux và kết nối Internet
  • Khuyến nghị có kỹ năng Linux cơ bản
  • Tất cả bài thực hành đã được kiểm thử trên Ubuntu 20.04.2 LTS
  • Khóa học này sử dụng AFL++, một nhánh fork mới của AFL do Michał "lcamtuf" Zalewski tạo ra

Fuzzing là gì?

  • Fuzz testing (hoặc fuzzing): kỹ thuật kiểm thử phần mềm tự động bằng cách cung cấp đầu vào ngẫu nhiên/đã biến đổi cho chương trình và theo dõi ngoại lệ/sự cố crash
  • AFL, libFuzzer, HonggFuzz là những ví dụ về fuzzer thành công trong các ứng dụng thực tế
  • Coverage-guided evolutionary fuzzer: thu thập và so sánh dữ liệu code coverage để chọn đầu vào tìm ra các đường thực thi mới

Coverage-guided evolutionary fuzzer

  • Tính tiến hóa: cách tiếp cận metaheuristic lấy cảm hứng từ thuật toán tiến hóa, tìm crash mới thông qua việc tiến hóa và biến đổi tập con ban đầu (seed)
  • Dựa trên coverage: thu thập và so sánh dữ liệu code coverage để chọn đầu vào tìm ra các đường thực thi mới

Lời cảm ơn

  • Những người đã giúp đỡ: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes

Liên hệ

  • Nếu cần hỗ trợ hoặc có đề xuất, hãy tham gia kênh #fuzzing trên GitHub Security Lab Slack

Tóm tắt của GN⁺

  • Khóa học này hữu ích để học các khái niệm cơ bản về fuzzing và tìm lỗ hổng trong phần mềm thực tế
  • Có thể rèn luyện kỹ thuật fuzzing qua nhiều tình huống thực tế bằng các công cụ như AFL++
  • Fuzzing đóng vai trò quan trọng trong việc tăng cường độ ổn định và bảo mật của phần mềm, và khóa học này cung cấp một cách tiếp cận thực tiễn cho mục tiêu đó
  • Các công cụ có chức năng tương tự gồm libFuzzer và HonggFuzz

1 bình luận

 
GN⁺ 2024-10-07
Ý kiến Hacker News
  • Bài viết được liên kết là nội dung đọc trong khoảng 11 phút, và sự khác biệt so với cách tiếp cận của golang khá thú vị

    • Trong golang, có thể chạy fuzzing đơn giản như chạy test, nên có thể dễ dàng nhắm mục tiêu vào một phần cụ thể của ứng dụng hoặc thư viện
    • Cách làm này khiến nhiều kỹ thuật hiện có trở nên không còn cần thiết
  • Thắc mắc về các kỹ thuật giúp định hướng fuzzing hiệu quả hơn

    • Có vẻ như cách tốt nhất là cung cấp seed corpus và kỳ vọng vào kết quả tốt nhất
  • Thật bất ngờ khi Heartbleed không có trong danh sách

    • Heartbleed rất dễ tái hiện
  • Có ý kiến cảm ơn vì đã chia sẻ

    • Tôi thấy điều này rất hữu ích