- Fuzzing-101 adalah kursus yang dibuat agar orang yang baru pertama belajar fuzzing dapat berlatih proses menemukan kerentanan pada target perangkat lunak nyata
- Kursus ini terdiri dari 10 target nyata dan 10 latihan, mencakup Xpdf, libexif, TCPdump, LibTIFF, Libxml2, GIMP, VLC media player, Adobe Reader, 7-Zip, dan Google Chrome/V8
- Setiap latihan bertujuan mereproduksi atau menemukan CVE, serta menggunakan AFL++, ASan, LCOV, WinAFL, Fuzzilli, dan lainnya bersama kerentanan seperti CVE-2019-13288, CVE-2016-2334, CVE-2019-5847
- Syarat mengikuti kursus adalah sistem Linux yang terhubung ke internet; kemampuan dasar menggunakan Linux direkomendasikan, dan semua latihan telah diuji di Ubuntu 20.04.2 LTS
- Fuzzing adalah teknik pengujian otomatis yang memasukkan input acak atau termutasi ke program dan memantau exception atau crash; kursus ini mempelajari perilaku dasar fuzzer evolusioner berbasis coverage
Tujuan dan sasaran kursus
- Fuzzing-101 adalah kursus untuk orang yang ingin belajar fuzzing seperti ahli, tetapi tidak tahu harus mulai dari mana
- Kursus ini terdiri dari 10 target nyata dan 10 latihan
- Pembaca yang dituju adalah sebagai berikut
- Orang yang ingin mempelajari dasar-dasar fuzzing
- Orang yang ingin mempelajari cara menemukan kerentanan dalam proyek perangkat lunak nyata
Susunan latihan
- Setiap latihan menyajikan perangkat lunak tertentu, CVE yang akan dicari, estimasi waktu, dan topik utama
| Latihan | Target | CVE yang dicari | Estimasi waktu | Topik utama |
|---|---|---|---|---|
| Exercise 1 | Xpdf | CVE-2019-13288 | 120 menit | Afl-clang-fast, Afl-fuzz, GDB |
| Exercise 2 | libexif | CVE-2009-3895, CVE-2012-2836 | 6 jam | Afl-clang-lto, fuzzing library, Eclipse IDE |
| Exercise 3 | TCPdump | CVE-2017-13028 | 4 jam | ASan, Sanitizers |
| Exercise 4 | LibTIFF | CVE-2016-9297 | 3 jam | coverage kode, LCOV |
| Exercise 5 | Libxml2 | CVE-2017-9048 | 3 jam | dictionary, paralelisasi dasar, fuzzing argumen command line |
| Exercise 6 | GIMP | CVE-2016-4994, bug bonus | 7 jam | fuzzing berkelanjutan, fuzzing aplikasi interaktif |
| Exercise 7 | VLC media player | CVE-2019-14776 | 6 jam | instrumentasi parsial, fuzzing harness |
| Exercise 8 | Adobe Reader | Tidak ada | 8 jam | fuzzing aplikasi closed-source, instrumentasi QEMU |
| Exercise 9 | 7-Zip | CVE-2016-2334 | 8 jam | WinAFL, fuzzing aplikasi Windows |
| Exercise 10 | Google Chrome / V8 | CVE-2019-5847 | 8 jam | Fuzzilli, fuzzing mesin JavaScript |
Lingkungan eksekusi dan alat
- Yang dibutuhkan adalah sistem Linux yang dapat terhubung ke internet
- Tersedia image VMware yang dapat digunakan di dalam latihan
- Kemampuan dasar menggunakan Linux sangat direkomendasikan
- Semua latihan telah diuji di Ubuntu 20.04.2 LTS
- Kursus ini menggunakan AFL++
- AFL++ diperkenalkan sebagai fork yang lebih baru dan lebih baik dari AFL karya Michał “lcamtuf” Zalewski
Konsep dasar fuzzing
- Fuzz testing atau fuzzing adalah teknik pengujian perangkat lunak otomatis yang memasukkan nilai input acak atau termutasi ke program dan memantau exception atau crash
- Contoh fuzzer yang sukses pada aplikasi nyata mencakup AFL, libFuzzer, dan HonggFuzz
- Ketiga alat ini semuanya merupakan contoh fuzzer evolusioner berbasis coverage
Fuzzer evolusioner berbasis coverage
- Pendekatan evolusioner (evolutionary) adalah metode metaheuristik yang terinspirasi oleh algoritma evolusi
- Kumpulan input awal, yaitu seed, dievolusikan dan dimutasi seiring waktu
- Coverage digunakan sebagai contoh kriteria seleksi
- Fuzzer berbasis coverage (coverage-guided) mengumpulkan dan membandingkan data coverage kode untuk setiap input guna meningkatkan kemungkinan menemukan crash baru
- Pengumpulan coverage biasanya dilakukan melalui instrumentasi (instrumentation)
- Memilih input yang mengarah ke jalur eksekusi baru
Riwayat perubahan
- 2022-02-14: Beberapa typo
wgetdi Exercise 5 telah diperbaiki - 2021-11-25: Exercise 3 diperbarui dengan beberapa perbaikan
1 komentar
Komentar Hacker News
Anekdot terkait fuzzing: https://threadreaderapp.com/thread/1799457232607985698
Bacaan yang bagus jika Anda ingin membuang sekitar 11 menit
Sulit memahami budaya yang setelah berlomba mencari bug di produk perusahaan lain, lalu kebetulan menemukan satu di Microsoft Publisher dan membanggakannya sambil merendahkan Microsoft
Mungkin kita semua termasuk beruntung jika ada perusahaan yang “proses standarnya” adalah begadang seminggu penuh untuk menguji produk kita
Setelah memeriksa penulisnya, sepertinya bisa jadi orang yang saya kenal dari IRC, dan “Mantis” serta “infosec” terasa sangat cocok
Yang menarik adalah betapa berbedanya ini dengan pendekatan Go
Di Go, Anda bisa menjalankan fuzzing semudah menjalankan tes, jadi sangat mudah menargetkan bagian tertentu dari aplikasi atau library
Karena itu, banyak teknik seperti ini menjadi tidak perlu
Saya penasaran dengan teknik untuk mengarahkan fuzzing dengan lebih baik, tetapi untuk saat ini tampaknya yang terbaik adalah menyediakan seed corpus dan berharap hasilnya bagus
Cukup mengejutkan Heartbleed tidak ada dalam daftar. Sangat mudah direproduksi