GitHub Security Lab, bulanıklaştırma testi (fuzzing) ve dil modeli ajanlarını kullanarak C/C++ projelerinin test edilmesinin büyük bölümünü otomatikleştirmek üzere tasarlanan, Fuzzing Taskflow adlı açık kaynaklı bir iş akışını açıkladı. İş akışı bir GitHub deposuna yönlendirildiğinde derleme sistemini analiz edebilir, uygun giriş noktalarını belirleyebilir, fuzz harness'leri oluşturabilir, AFL++ çalıştırabilir, kapsam raporlarını okuyabilir, araçları iyileştirebilir, çökmeleri sınıflandırabilir ve olası her sorun için ayrı bir rapor hazırlayabilir.
Proje, iş akışını baştan sona ajan tarafından yürütülen bir dizi yol olarak ifade eden GitHub Security Lab Taskflow Agent çerçevesi üzerine kuruludur. Makalenin yazarı Antonio Morales, amacın araştırmacının rolünü ortadan kaldırmak değil, çok zaman alan tekrarlı işleri ajana aktarmak ve kararlarla yürütmeyi iki ayrı katmanda tutmak olduğunu belirtiyor.
İş akışı nasıl çalışıyor?
Kullanım, örneğin bir Codespace içinde ./scripts/fuzzing/run_fuzzing.sh PROJECT komutunun çalıştırılmasıyla proje deposundan başlıyor. İş akışı araçları kuruyor, depoyu klonluyor, önemli işlevleri analiz ediyor, ardından fuzzing hedefleri oluşturup bunlar üzerinde kampanyalar yürütüyor. Yapısı bir shell çalıştırıcısından, çalışma aşamalarını ve modele yöneltilen talimatları tanımlayan YAML dosyalarından ve AFL'yi çalıştırma, araçları derleme, kapsamı okuma ve çökmeleri depolama gibi işlemleri gerçekleştiren MCP araçlarından oluşuyor.
Ajan AFL'yi veya clang'i doğrudan çağırmıyor; neyin test edilmesi gerektiğine ve hangi kapsam boşluğunun takip edilmeye değer olduğuna karar verirken düşük seviyeli işlemleri MCP araçları gerçekleştiriyor. Durum, fuzz_context.db adlı bir SQLite veritabanında saklanıyor. Bu da sonuçların paylaşılan belleğe dayanmadan aşamalar arasında aktarılmasını sağlıyor.
Kapsam iyileştirme döngüsü
Her harness iki kez derleniyor: AFL'yi uygun enstrümantasyon araçlarıyla yönlendirmek için bir .afl sürümü ve girdi listesini yeniden çalıştırıp satır ve dal kapsamını ölçmek için bir .cov sürümü. Her turun ardından ajan, kapsanmayan dalları inceliyor ve yeni bir seed eklemek, başka bir arayüzü çağırmak üzere harness kaynağını değiştirmek, kod tarafından doğrulanan değerlerle AFL sözlüğünü zenginleştirmek veya maliyetine değmeyecek soğuk bir yolu göz ardı etmek gibi bir eylem seçiyor.
Zaman bütçesi 30'dan başlayarak 60, 120, 240, 480 ve 960 saniyeye yükseliyor; bu da belirtilen üst sınırda hedef başına yaklaşık 32 dakikaya denk geliyor. Ayarlanabilir varsayılan değere göre art arda iki turda satır kapsamı bir yüzde puanından az artarsa iş akışı getiride düşüş tespit ederek başka bir hedefe geçiyor.
Girdiler ve çökmelerle çalışma
İş akışı JSON, XML, düzenli ifadeler, PNG ve uzunlukları içeren ikili TLV biçimleri için özel mekanizmaları destekliyor. Ayrıca C ve H dosyalarında bulunan dize ve sayı sabitlerinden bir sözlük oluşturabiliyor. Bu sözlüğü her kapsam adımından sonra, kapsanmayan satırların yakınındaki koşullara dayanarak zenginleştiriyor. Bunun yanı sıra her harness sabit bir corpus klasörünü koruyor ve turlar ile kampanyalar arasında yararlı girdileri muhafaza ederek boyutunu azaltmak için afl-cmin kullanıyor.
Kampanya tamamlandıktan sonra çökmeler afl-tmin kullanılarak küçültülüyor, ardından AddressSanitizer altında yeniden çalıştırılıyor ve üst yığın çerçevesinin parmak izine göre yinelenenler kaldırılıyor. İş akışı ayrıca düzeltmelerin etkisini doğrulamak için bilinen çökmeleri yeniden test ediyor ve sonuçları güvenlik açığı, kütüphanenin sağlamlaştırılması, harness hatası, bellek tükenmesi, zaman aşımı, assertion başarısızlığı veya yinelenen kayıt kategorilerine ayırıyor.
Bu haber neden önemli?
Buradaki pratik değer, iş akışının sürekli fuzzing'in etkinliğini çoğu zaman sınırlayan döngüyü otomatikleştirmeye çalışmasıdır: harness yazmak, kapsamı okumak, bir sonraki boşluğu seçmek ve çökmeleri sınıflandırmak. Bu, daha önce bulanıklaştırma testine tabi tutulmamış bir projeyi test etmeye başlamanın maliyetini düşürebilir veya mevcut bir projenin kapsamını genişletmeye yardımcı olabilir.
Ancak GitHub Security Lab temel bir kısıt koyuyor: iş akışı, afl-fuzz, clang ve modelin doğrudan seçtiği derleme komutlarını ayrı bir kapsayıcı olmadan ana sistemde çalıştırıyor. Bu nedenle komut enjeksiyonundan etkilenen bir ajan, kullanıcının yürütebileceği komutları çalıştırabilir. Proje, aracın Codespace veya geçici bir sanal makine gibi silinebilir bir ortamda ve yükseltilmiş ayrıcalıklar olmadan çalıştırılmasını öneriyor.
Güvenlik açığı raporları ve önerilen düzeltmeler de nihai sonuçlar değil. Makale, model analizinin hata yapabileceğini ve önerilen yamanın incelenmesi gerektiği şeklinde etiketlendiğini vurguluyor. Bu nedenle Fuzzing Taskflow, erişilebilirlik, istismar edilebilirlik ve kök neden konusunda insan doğrulamasının yerini almayan, araştırmacı için iyi hazırlanmış bir başlangıç noktası niteliğindedir.