Fuzzing 101 cơ bản
(github.com/antonio-morales)- Fuzzing-101 là khóa học được tạo ra để người mới bắt đầu học fuzzing luyện tập quá trình tìm lỗ hổng trên các mục tiêu phần mềm thực tế
- Khóa học gồm 10 mục tiêu thực tế và 10 bài thực hành, bao gồm Xpdf, libexif, TCPdump, LibTIFF, Libxml2, GIMP, VLC media player, Adobe Reader, 7-Zip, Google Chrome/V8
- Mỗi bài thực hành hướng tới việc tái hiện hoặc phát hiện CVE, và sử dụng AFL++, ASan, LCOV, WinAFL, Fuzzilli cùng các lỗ hổng như CVE-2019-13288, CVE-2016-2334, CVE-2019-5847
- Điều kiện tham gia là một hệ thống Linux có kết nối Internet, khuyến nghị có kỹ năng sử dụng Linux cơ bản, và mọi bài thực hành đều đã được kiểm thử trên Ubuntu 20.04.2 LTS
- Fuzzing là kỹ thuật kiểm thử tự động đưa dữ liệu ngẫu nhiên hoặc đã biến đổi vào chương trình và theo dõi ngoại lệ hay crash, và khóa học này lấy hoạt động cơ bản của coverage-guided evolutionary fuzzer làm đối tượng học tập
Mục đích và đối tượng của khóa học
- Fuzzing-101 là khóa học dành cho những ai muốn học fuzzing một cách bài bản nhưng chưa biết bắt đầu từ đâu
- Khóa học gồm 10 mục tiêu thực tế và 10 bài thực hành
- Độc giả mục tiêu gồm:
- Những người muốn học kiến thức cơ bản về fuzzing
- Những người muốn học cách tìm lỗ hổng trong các dự án phần mềm thực tế
Cấu trúc bài thực hành
- Mỗi bài thực hành trình bày phần mềm cụ thể, CVE cần tìm, thời gian dự kiến và chủ đề chính
| Bài thực hành | Mục tiêu | CVE cần tìm | Thời gian dự kiến | Chủ đề chính |
|---|---|---|---|---|
| Exercise 1 | Xpdf | CVE-2019-13288 | 120 phút | Afl-clang-fast, Afl-fuzz, GDB |
| Exercise 2 | libexif | CVE-2009-3895, CVE-2012-2836 | 6 giờ | Afl-clang-lto, fuzzing thư viện, Eclipse IDE |
| Exercise 3 | TCPdump | CVE-2017-13028 | 4 giờ | ASan, Sanitizers |
| Exercise 4 | LibTIFF | CVE-2016-9297 | 3 giờ | độ bao phủ mã, LCOV |
| Exercise 5 | Libxml2 | CVE-2017-9048 | 3 giờ | dictionary, song song hóa cơ bản, fuzzing đối số dòng lệnh |
| Exercise 6 | GIMP | CVE-2016-4994, lỗi bonus | 7 giờ | fuzzing liên tục, fuzzing ứng dụng tương tác |
| Exercise 7 | VLC media player | CVE-2019-14776 | 6 giờ | partial instrumentation, harness fuzzing |
| Exercise 8 | Adobe Reader | không có | 8 giờ | fuzzing ứng dụng mã nguồn đóng, QEMU instrumentation |
| Exercise 9 | 7-Zip | CVE-2016-2334 | 8 giờ | WinAFL, fuzzing ứng dụng Windows |
| Exercise 10 | Google Chrome / V8 | CVE-2019-5847 | 8 giờ | Fuzzilli, fuzzing engine JavaScript |
Môi trường chạy và công cụ
- Yêu cầu là một hệ thống Linux có thể kết nối Internet
- Có cung cấp image VMware để sử dụng trong bài thực hành
- Rất khuyến nghị có kỹ năng sử dụng Linux cơ bản
- Tất cả bài thực hành đều được kiểm thử trên Ubuntu 20.04.2 LTS
- Khóa học sử dụng AFL++
- AFL++ được giới thiệu là một bản fork mới hơn và tốt hơn từ AFL của Michał “lcamtuf” Zalewski
Khái niệm cơ bản về fuzzing
- Fuzz testing hay fuzzing là kỹ thuật kiểm thử phần mềm tự động đưa đầu vào ngẫu nhiên hoặc đã biến đổi vào chương trình và theo dõi ngoại lệ hoặc crash
- Các ví dụ về fuzzer thành công trên ứng dụng thực tế gồm AFL, libFuzzer, HonggFuzz
- Cả ba công cụ này đều là ví dụ của coverage-guided evolutionary fuzzer
Coverage-guided evolutionary fuzzer
- Cách tiếp cận evolutionary là một phương pháp metaheuristic lấy cảm hứng từ thuật toán tiến hóa
- Tập đầu vào ban đầu là seed sẽ được tiến hóa và biến đổi theo thời gian
- Coverage được dùng làm một ví dụ về tiêu chí lựa chọn
- Coverage-guided fuzzer thu thập và so sánh dữ liệu độ bao phủ mã theo từng đầu vào để tăng khả năng tìm ra crash mới
- Việc thu thập coverage thường được thực hiện thông qua instrumentation
- Các đầu vào dẫn đến đường thực thi mới sẽ được chọn
Lịch sử thay đổi
- 2022-02-14: Đã sửa một số lỗi gõ nhầm
wgettrong Exercise 5 - 2021-11-25: Exercise 3 được cập nhật cùng một số chỉnh sửa
1 bình luận
Ý kiến trên Hacker News
Một giai thoại liên quan đến fuzzing: https://threadreaderapp.com/thread/1799457232607985698
Đây là bài đọc rất đáng xem nếu bạn muốn phí khoảng 11 phút
Tôi không hiểu lắm văn hóa thi nhau tìm lỗi trong sản phẩm của công ty khác, rồi tình cờ tìm được một lỗi trong Microsoft Publisher và khoe khoang để hạ thấp Microsoft
Có lẽ tất cả chúng ta đều may mắn nếu có một công ty mà việc thức trắng cả tuần để kiểm thử sản phẩm của mình là “quy trình tiêu chuẩn”
Kiểm tra tác giả thì có thể là người tôi từng biết trên IRC, và “Mantis” với “infosec” khớp vừa đúng
Điều thú vị là cách tiếp cận này khác biệt rõ rệt với cách của Go
Trong Go, bạn có thể chạy fuzzing đơn giản như chạy test, nên rất dễ nhắm vào các phần cụ thể của ứng dụng hoặc thư viện
Vì vậy khá nhiều kỹ thuật trong số này trở nên không cần thiết
Tôi tò mò về các kỹ thuật dẫn hướng fuzzing tốt hơn, nhưng hiện tại có vẻ cách tốt nhất là cung cấp seed corpus rồi hy vọng mọi chuyện ổn
Tôi khá ngạc nhiên khi Heartbleed không có trong danh sách. Nó rất dễ tái hiện