0Pricing
C++ Academy · Ders

libFuzzer ile Bulanıklaştırma Testi

Kodunuzu libFuzzer ile bulanıklaştırarak uç durum çökmelerini bulun

libFuzzer ile Bulanıklaştırma Testi, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Rastgele Girdi Sınaması Neden Yapılır?

Rastgele girdi sınaması, çökmeleri, yanıt vermeme durumlarını ve güvenlik hatalarını bulmak için rastgele girdiler üretir. Modern rastgele girdi sınama araçları, yeni kod yollarını keşfeden girdileri geliştirmek için kapsam geri bildirimini kullanır.

libFuzzer

libFuzzer, LLVM'nin bir parçasıdır ve sanitizer araçlarıyla tümleşir. Tek bir giriş noktasını rastgele girdilerle sınayan bir işlev yazın; girdi üretimini çatı yürütür.

Rastgele Girdi Sınama Hedefi Yazma

İmza sabittir: bir bayt dizisi alın ve 0 döndürün.

#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;
}

libFuzzer için Derleme

Clang'ı -fsanitize=fuzzer,address bileşimiyle kullanın. Doğrudan bağlayın; main gerekmez.

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

Kapsam Güdümlü Mutasyon

libFuzzer, her girdinin hangi kod yollarını yürüttüğünü izler. Daha derin yolları keşfetmek için umut vadeden girdiler üzerinde mutasyon yapar; bu, körlemesine rastgele üretimden çok daha verimlidir.

Girdi Korpusu

Rastgele girdi sınama aracını, ilgi çekici olduğu bilinen girdilerden oluşan bir dizinle başlatın. Araç, bu girdiler üzerinde mutasyon yaparak yeni girdiler geliştirir.

./fuzz_target corpus/

Sözlük Dosyaları

Sözdizimine uygun girdilerin (HTML, JSON, protokol iletileri) keşfini hızlandırmak için yaygın belirteçlerden oluşan bir sözlük sağlayın.

Sanitizer Araçlarıyla Birleştirme

AddressSanitizer altında çalıştırmak, sessiz bozulmaları rastgele girdi sınama aracının algılayabileceği anlık çökmelere dönüştürür.

Performans

Tek bir çekirdek, küçük hedeflerde saniyede on binlerce yürütme gerçekleştirebilir. Saatlerce veya günlerce çalıştırın; sürekli entegrasyonun arka planında çalışmasına izin verin.

Çökmeleri Yeniden Üretme

libFuzzer bir çökme bulduğunda girdiyi diske kaydeder. Hata ayıklamak için daha sonra yeniden oynatın.

./fuzz_target crash-abc123

OSS-Fuzz

Google'ın OSS-Fuzz hizmeti, açık kaynak projelerdeki rastgele girdi sınama araçlarını sürekli çalıştırır ve hataları raporlar. Öne çıkan birçok kütüphane bu hizmetle tümleşir.

AFL ve Honggfuzz

Başka rastgele girdi sınama araçları da vardır:

  • AFL/AFL++ — süreç tabanlıdır ve çatallama sunucusuyla hızlanır
  • Honggfuzz — ağ iletişim kurallarını destekler

libFuzzer, C++ ile tümleştirilmesi en kolay seçenektir.

Ne Zaman Rastgele Girdi Sınaması Yapılmalı?

Güvenilmeyen girdileri işleyen her kodu rastgele girdilerle sınayın:

  • Ayrıştırıcılar (JSON, XML, protobuf)
  • Kod çözücüler (görüntü, ses, video)
  • Ağ iletişim kuralı işleyicileri
  • Dış verileri okuyan her şey

Hızlı Kontrol

Kapsam güdümlü rastgele girdi sınamasını tamamen rastgele sınamadan daha etkili yapan nedir?

Özet

libFuzzer, Clang ile tümleşik kapsam güdümlü bir rastgele girdi sınama aracıdır. Küçük bir LLVMFuzzerTestOneInput giriş noktası yazın, -fsanitize=fuzzer,address ile derleyin ve çökmeleri aramasına izin verin. Sanitizer araçları ve girdi korpuslarıyla birleştirin; güvenilmeyen girdilere dokunan her kodu rastgele girdilerle sınayın.

Sıkça Sorulan Sorular

“libFuzzer ile Bulanıklaştırma Testi” dersi ücretsiz mi?

Evet — “libFuzzer ile Bulanıklaştırma Testi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“libFuzzer ile Bulanıklaştırma Testi” dersinde ne öğreneceğim?

Kodunuzu libFuzzer ile bulanıklaştırarak uç durum çökmelerini bulun C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“libFuzzer ile Bulanıklaştırma Testi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Statik Analiz Araçları: clang-tidy, cppcheck
  2. Sanitizer'lar: Address, Thread, UB Sanitizer
  3. libFuzzer ile Bulanıklaştırma Testi
  4. C++ Projeleri için Sürekli Tümleştirme
← C++ Academy Sayfasına Dön