0Pricing
C++ Academy · Pelajaran

Fuzzing dengan libFuzzer

Temukan kerusakan pada kasus tepi dengan melakukan fuzzing pada kode menggunakan libFuzzer

Fuzzing dengan libFuzzer adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Mengapa Pengujian Fuzz?

Pengujian fuzz menghasilkan masukan acak untuk menemukan kerusakan, kebuntuan, dan kutu keamanan. Penguji fuzz modern menggunakan umpan balik cakupan untuk mengembangkan masukan yang menjelajahi jalur kode baru.

libFuzzer

libFuzzer adalah bagian dari LLVM dan terintegrasi dengan pemeriksa sanitasi. Tulis satu fungsi yang menguji satu titik masuk; kerangka kerja tersebut mengatur pembuatan masukan.

Menulis Target Fuzz

Tanda tangannya sudah ditetapkan: terima larik byte, lalu kembalikan 0.

#include <cstdint>
#include <cstddef>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
    parse_input(reinterpret_cast<const char*>(data), size);
    return 0;
}

Mengompilasi untuk libFuzzer

Gunakan Clang dengan kombinasi -fsanitize=fuzzer,address. Tautkan secara langsung — tidak diperlukan main.

clang++ -g -O1 -fsanitize=fuzzer,address fuzz.cpp parser.cpp -o fuzz_target
./fuzz_target

Mutasi Berpanduan Cakupan

libFuzzer melacak jalur kode yang dijalankan oleh setiap masukan. Alat ini memutasi masukan yang menjanjikan untuk menjelajahi jalur yang lebih dalam — jauh lebih efisien daripada pembuatan acak tanpa panduan.

Korpus

Berikan kepada penguji fuzz sebuah direktori berisi masukan menarik yang telah diketahui sebagai benih. Penguji fuzz mengembangkan masukan baru dengan memutasinya.

./fuzz_target corpus/

Berkas Kamus

Sediakan kamus berisi token umum untuk mempercepat penjelajahan masukan yang mengikuti tata bahasa (HTML, JSON, pesan protokol).

Gabungkan dengan Pemeriksa Sanitasi

Menjalankan program menggunakan AddressSanitizer mengubah kerusakan diam-diam menjadi kerusakan langsung yang dapat dideteksi oleh penguji fuzz.

Kinerja

Satu inti dapat melakukan puluhan ribu eksekusi per detik pada target kecil. Jalankan selama berjam-jam atau berhari-hari; biarkan proses tersebut berjalan di latar belakang CI.

Mereproduksi Kerusakan

Saat libFuzzer menemukan kerusakan, alat ini menyimpan masukan ke media penyimpanan. Putar ulang nanti untuk melakukan debug.

./fuzz_target crash-abc123

OSS-Fuzz

OSS-Fuzz milik Google menjalankan penguji fuzz pada proyek sumber terbuka secara terus-menerus dan melaporkan kutu. Banyak pustaka terkenal terintegrasi dengannya.

AFL dan Honggfuzz

Penguji fuzz lainnya juga tersedia:

  • AFL/AFL++ — berbasis proses, dengan percepatan peladen fork
  • Honggfuzz — mendukung protokol jaringan

libFuzzer adalah integrasi C++ yang paling mudah.

Kapan Melakukan Pengujian Fuzz

Lakukan pengujian fuzz pada kode apa pun yang menangani masukan tidak tepercaya:

  • Pengurai (JSON, XML, protobuf)
  • Pendekode (gambar, audio, video)
  • Penangan protokol jaringan
  • Apa pun yang membaca data eksternal

Pemeriksaan Cepat

Apa yang membuat pengujian fuzz berpanduan cakupan lebih efektif daripada pengujian fuzz yang sepenuhnya acak?

Ringkasan

libFuzzer adalah penguji fuzz berpanduan cakupan yang terintegrasi dengan Clang. Tulis titik masuk LLVMFuzzerTestOneInput kecil, bangun dengan -fsanitize=fuzzer,address, lalu biarkan alat tersebut mencari kerusakan. Gabungkan dengan pemeriksa sanitasi dan korpus; lakukan pengujian fuzz pada kode apa pun yang menyentuh masukan tidak tepercaya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fuzzing dengan libFuzzer” gratis?

Ya — teks lengkap “Fuzzing dengan libFuzzer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fuzzing dengan libFuzzer”?

Temukan kerusakan pada kasus tepi dengan melakukan fuzzing pada kode menggunakan libFuzzer Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Fuzzing dengan libFuzzer” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Alat Analisis Statis: clang-tidy, cppcheck
  2. Sanitizer: Address, Thread, UB Sanitizer
  3. Fuzzing dengan libFuzzer
  4. Integrasi Berkelanjutan untuk Proyek C++
← Kembali ke C++ Academy