1 poin oleh GN⁺ 2024-10-07 | 1 komentar | Bagikan ke WhatsApp
  • 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 wget di Exercise 5 telah diperbaiki
  • 2021-11-25: Exercise 3 diperbarui dengan beberapa perbaikan

1 komentar

 
GN⁺ 2024-10-07
Komentar Hacker News
  • Anekdot terkait fuzzing: https://threadreaderapp.com/thread/1799457232607985698
    Bacaan yang bagus jika Anda ingin membuang sekitar 11 menit

    • Di Google muncul artikel CNET tahun 2007, mungkin karena eEye “menyebarkan siaran pers ke segala arah”: https://www.cnet.com/news/privacy/flaw-found-in-office-2007/
      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
    • Gaya penulisannya jelas menambah keseruan
      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

    • Beberapa alat fuzzing seperti libFuzzer memanfaatkan LLVM intermediate representation untuk membuat metrik code coverage, lalu mengumpankannya kembali ke algoritme fuzzing guna meningkatkan cakupan pengujian
    • Saya pernah mengusulkan ide memakai reinforcement learning untuk mengarahkan coverage sebagai topik doktoral, tetapi akhirnya tidak menempuh jalur itu, jadi saya tidak tahu apakah itu akan berhasil
  • Cukup mengejutkan Heartbleed tidak ada dalam daftar. Sangat mudah direproduksi

    • Sepertinya itu tidak dimasukkan karena tutorial di sini semuanya memakai file lokal atau data lokal dan tidak membahas network-based fuzzing