1 poin oleh GN⁺ 2024-10-07 | 1 komentar | Bagikan ke WhatsApp

Fuzzing-101

Struktur

  • Latihan 1: Xpdf, CVE-2019-13288, 120 menit, Afl-clang-fast, Afl-fuzz, GDB
  • Latihan 2: libexif, CVE-2009-3895, CVE-2012-2836, 6 jam, Afl-clang-lto, pustaka fuzz, Eclipse IDE
  • Latihan 3: TCPdump, CVE-2017-13028, 4 jam, ASan, Sanitizers
  • Latihan 4: LibTIFF, CVE-2016-9297, 3 jam, code coverage, LCOV
  • Latihan 5: Libxml2, CVE-2017-9048, 3 jam, kamus, paralelisasi dasar, fuzzing argumen command line
  • Latihan 6: GIMP, CVE-2016-4994, bug bonus, 7 jam, fuzzing persisten, fuzzing aplikasi interaktif
  • Latihan 7: VLC media player, CVE-2019-14776, 6 jam, instrumentasi parsial, harness fuzzing
  • Latihan 8: Adobe Reader, 8 jam, fuzzing aplikasi closed-source, instrumentasi QEMU
  • Latihan 9: 7-Zip, CVE-2016-2334, 8 jam, WinAFL, fuzzing aplikasi Windows
  • Latihan 10 (Tantangan akhir): Google Chrome / V8, CVE-2019-5847, 8 jam, Fuzzilli, fuzzing JavaScript engine

Log perubahan

  • 14 Februari 2022: memperbaiki typo 'wget' di Latihan 5
  • 25 November 2021: pembaruan dan perbaikan pada Latihan 3

Untuk siapa kursus ini?

  • Orang yang ingin mempelajari dasar-dasar fuzzing
  • Orang yang ingin menemukan kerentanan dalam proyek perangkat lunak nyata

Persyaratan

  • Memerlukan sistem Linux dan koneksi internet
  • Disarankan memiliki keterampilan Linux dasar
  • Semua latihan diuji pada Ubuntu 20.04.2 LTS
  • Kursus ini menggunakan AFL++, fork baru dari AFL buatan Michał "lcamtuf" Zalewski

Apa itu fuzzing?

  • Fuzz testing (atau fuzzing): teknik pengujian perangkat lunak otomatis yang memberikan input acak/termutasi ke program dan memantau exception/crash
  • AFL, libFuzzer, HonggFuzz adalah contoh fuzzer yang berhasil pada aplikasi nyata
  • Coverage-guided evolutionary fuzzer: memilih input yang menemukan jalur eksekusi baru dengan mengumpulkan dan membandingkan data code coverage

Coverage-guided evolutionary fuzzer

  • Evolusioner: pendekatan metaheuristik yang terinspirasi dari algoritme evolusi, yang menemukan crash baru melalui evolusi dan mutasi subset awal (seed)
  • Berbasis coverage: memilih input yang menemukan jalur eksekusi baru dengan mengumpulkan dan membandingkan data code coverage

Ucapan terima kasih

  • Orang-orang yang membantu: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes

Kontak

  • Jika memerlukan bantuan atau memiliki saran, bergabunglah ke channel #fuzzing di GitHub Security Lab Slack

Ringkasan GN⁺

  • Kursus ini berguna untuk mempelajari konsep dasar fuzzing dan menemukan kerentanan pada perangkat lunak nyata
  • Dengan menggunakan alat seperti AFL++, Anda dapat mempelajari teknik fuzzing melalui berbagai kasus nyata
  • Fuzzing berperan penting dalam memperkuat stabilitas dan keamanan perangkat lunak, dan kursus ini menawarkan pendekatan praktis untuk itu
  • Alat dengan fungsi serupa mencakup libFuzzer dan HonggFuzz

1 komentar

 
GN⁺ 2024-10-07
Opini Hacker News
  • Tulisan yang ditautkan adalah bacaan sekitar 11 menit, dan perbedaan dengan pendekatan golang terasa menarik

    • Di golang, fuzzing dapat dijalankan semudah menjalankan test, sehingga bagian tertentu dari aplikasi atau library bisa dengan mudah ditargetkan
    • Pendekatan seperti ini membuat banyak teknik lama menjadi tidak diperlukan
  • Ada rasa penasaran tentang teknik untuk memandu fuzzing agar lebih efektif

    • Cara terbaik tampaknya adalah menyediakan seed corpus dan berharap hasil terbaik
  • Mengejutkan bahwa Heartbleed tidak ada dalam daftar

    • Heartbleed sangat mudah untuk direproduksi
  • Ada pendapat yang berterima kasih karena telah membagikannya

    • Ini dianggap sangat berguna