BLOG

Yazılım Güvenliğinde Fuzz Testleri Neden Gerekli?

Yayınlanma Tarihi

4 Şubat 2026

Paylaş

Bugünün birbirine bağlı dünyasında, sadece ABD’deki kötü yazılım kalitesinin maliyeti şaşırtıcı bir şekilde 2,41 trilyon dolara ulaştı (kaynak). İster bağlantılı bir araç bilgi-eğlence sistemi, ister tıbbi cihaz, ister kritik endüstriyel altyapı olsun, her şey bir zafiyete bakıyor. Geleneksel uygulama güvenliği test sistemleri, yazılımı tarayarak içindeki “bilinen” zafiyetleri bulmaya ve düzeltmeye odaklıdır. Peki ya “bilinmeyenler”?

Bilinen ve Bilinmeyen Yazılım Zayıflıkları

Kısaca “bug” olarak adlandırdığımız hatalar, kod güvenlik açıklarıdır. Yazılım dünyasında, güvenlik açığı üç farklı türde gelir:

Önceden bilinen zafiyetler olduğu gibi bilinmeyen ve sıfırıncı gün zafiyetlerini de unutmamak lazım. Sorumlu yazılım üreticileri bilinen güvenlik açıklarını gidermek için yazılımları için yeni sürümler veya yamalar yayınlar. Fuzzing genellikle bilinmeyen kod zafiyetlerini tespit etmek için kullanılırken, kötü tasarım veya yapılandırmadan kaynaklanan zafiyetleri de tetikleyebilir Nedir bu bilinmeyen zafiyetler?

Pozitif ve Negatif Testler

Tarihsel olarak, yazılım testleri işlevselliğe odaklanmıştır. Pozitif testler yazılımın olması gerektiği gibi çalışıp çalışmadığına odaklanırlar. İşlevsel testlerde, yani pozitif test türünde, geliştiriciler hedef yazılıma geçerli girdiler sunan ve doğru çıktıyı kontrol eden kod ve çerçeveler oluşturur. Test geliştirme ekibinin, yazılımın spesifikasyonda tanımlandığı gibi çalıştığını doğrulamak için tasarım gereksinimlerini test vakalarına çevirmek gibi oldukça basit bir görevi vardır.

İşlevsel testin önemi yadsınamaz – hedef yazılım, geçerli girdilerle sunulduğunda beklendiği gibi davranmalıdır. Beklenmedik koşullar ve kötü oluşturulmuş girdilerin olduğu kaotik ve saldırgan bir ortamda, sadece pozitif testlere tabi tutulan yazılımlarda çok çeşitli zafiyetler ve açıklar ortaya çıkabilmektedir. Bu nedenle dayanıklılık testlerine ihtiyaç vardır.

Negatif test, yazılıma yanlış veya beklenmedik girdiler göndermek ve arıza kontrolü sürecidir.
Farklı negatif test araçlarının aynı test hedefi için farklı sonuçlar vereceğini unutmayın. Her araç farklı şekilde çalışır ve hedef yazılımda farklı türde kötü oluşturulmuş girdileri test eder.

Siyah, Beyaz ve Gri Kutu Testleri

Kara kutu testlerinde, test aracı hedefin iç bileşenleri hakkında hiçbir bilgiye sahip değildir. Araç, hedefle yalnızca dış arayüzler aracılığıyla etkileşime girer.

Buna karşılık, beyaz kutu aracı hedefin kaynak kodunu kullanarak zafiyetleri arar. Beyaz kutu testi, kaynak kodu taraması gibi statik teknikleri ve kaynak kodunun daha iyi hedef izleme için yeniden oluşturulduğu dinamik testleri kapsar.

Gri kutu aletleri siyah kutu ve beyaz kutu tekniklerini birleştirir. Bu araçlar, hedefin dış arayüzleri aracılığıyla etkileşime girer, ayrıca ek içgörüler için kaynak kodundan da yararlanır.

Statik ve Dinamik Testler

Güvenlik açığı hem statik hem de dinamik test teknikleriyle araştırılır. Olgun bir geliştirme süreci, riski istenen seviyeye indirmek için çeşitli statik ve dinamik tekniklerden yararlanmalıdır.

Statik teknikler, hedef yazılımı çalıştırmadan da kullanılabilir. Bunlar şunları içerir:

Dinamik test teknikleri, hedef yazılım çalışırken uygulanır ve aşağıdakileri içerir:

Fuzzing ya da Fuzz Testi Nedir?

Fuzz kelimesi – İngilizce olup Türkçe’ye bulanıklık olarak çevrilebilir – belirsiz, gürültülü veya belirsiz bir şeyi ifade eder. Fuzzing, yazılımlardaki güvenlik açıklarını bulmak için mükemmel bir teknik olarak yerleşmiştir. Temel prensip, yazılıma, kasıtlı olarak yanlış biçimlendirilmiş veya geçersiz girdiler göndererek yazılımın bozulup bozulmadığını kontrol etmek, hataları tesbit etmektir.

Bir başka deyişle, fuzzing, sömürülebilir güvenlik açığını ortaya çıkarabilecek bir hata durumu veya hata tetikleme sürecidir. Fuzzing, hem yazılım geliştiren hem de yazılım kullanan organizasyonlar için yazılım güvenlik açıklarını yönetmede kritik bir araçtır. Fuzzing, yazılımın geçerli veri verildiğinde amaçlanan işlevleri yerine getirdiğini doğrulayan geleneksel “pozitif test”in aksine, hata tetikleme odaklı bir “negatif test” türüdür.

Gerçek dünyanın “dağınık ve tehlikeli” olduğunu, gürültü, geliştirici hataları ve kötü niyetli saldırganların kötü niyetli girdiler sağladığını varsayar. Bu kaosu otomatikleştirmek için, tam bir fuzzer üç kavramsal bileşen kullanır.

Çeşitli kahin/oracle yönetemleri mevcuttur. Bunların çalışma yöntemleri, avantaj ve sınırlamalar aşağıda özetlenmiştir.

Oracle YöntemiNasıl Çalışır?AvantajlarıSınırlamaları
İnsan gözlemi Deneyimli gözlemci logları ve davranışı izlerKarmaşık, beklenmedik hataları yakalayabilirÖlçeklenmesi zor, zaman alıcı
Geçerli vaka kahiniGeçerli girdi gönderilir, doğru yanıt kontrol edilirBasit, otomatikleştirilebilirBellek sızıntısı gibi ince sorunları yakalayamaz
Kaynak izleme (Resource monitoring)Bellek, CPU, disk kullanımı takip edilirOtomatikleştirilebilir, SNMP vb. ile entegre edilebilirİşlevsel hataları yakalayamaz
Harici (external script) kahiniKullanıcı script’leri logları ve süreçleri kontrol ederEsnek, özelleştirilebilirScript kalitesine bağlı
Dinamik ikili analiz (DBI)Çalışan yazılımın davranışı izlenir (strace, PageHeap)Kaynak kod gerekmez, derin analiz sağlarPerformans yükü getirebilir
Kaynak kod enstrümantasyonuDebug sembolleriyle derlenmiş yazılım gdb, valgrind, ASan ile izlenirÇok hassas hata tespitiKaynak kod ve özel derleme gerekir
Fonksiyonel/davranışsal kontrollerProtokol veya format kurallarına göre işlevsel hatalar yakalanırGüvenlik açısından kritik hataları ortaya çıkarırKuralların doğru tanımlanması gerekir

Yukarıdaki tabloda göreceğiniz üzere Oracle yöntemleri birbirini tamamlar. Basit otomatik yöntemler (geçerli vaka, kaynak izleme) hızlıdır; gelişmiş yöntemler (DBI, enstrümantasyon) derinlemesine güvenlik sağlar. En iyi sonuç için hibrit yaklaşım önerilir.

Özetle Fuzzing

Yukarıda yazdıklarımızı özetlemek gerekirse, Fuzzing, yazılımdaki zayıflıkları bulmak için önemli bir yere sahip ve diğer uygulama güvenliği test araçlarında bulunmayan özelliklere sahip olması nedeniyle tamamlayıcı bir araçtır. Temel işlev, hedef yazılıma kasıtlı olarak yanlış şekillendirilmiş girdi iletmek ve arızayı tespit etmektir.

Tam bir fuzzer üç bileşenden oluşur. Bir “şair”, yanlış şekillendirilmiş girdiler veya test vakalarını yaratır. Bir “kurye”, test vakalarını hedef yazılıma teslim eder. Son olarak, bir “kahin” hedef başarısızlıklarını tespit eder. Farklı fuzzing teknikleri, fuzzing etkinliği üzerinde önemli bir etkiye sahiptir. Çoğunlukla, “şair” neredeyse doğru ama bir şekilde anormal test vakaları yaratabildiğinde daha etkilidir. Farklı “kehanet” teknikleri, farklı seviyelerde arıza tespit yeteneği sağlar. Birden fazla kehanet tekniği birlikte kullanılarak maksimum arıza sayısını tespit etmeye yardımcı olabilir.

Fuzzing, yazılım zayıflık yönetiminde hem yazılım üreten kuruluşlar hem de yazılım kullanan kuruluşlar için kritik bir araçtır. Yazılım üreticileri fuzzing’i Güvenli Geliştirme Yaşam Döngüsünün ayrılmaz bir parçası olarak kullanırken, kullanıcılar fuzzing’i doğrulama ve doğrulamada kritik bir araç olarak kullanır. Mali açıdan bakıldığında, fuzzing para tasarrufu sağlar çünkü hataları daha erken düzeltmek çok daha ucuzdur. Üretim senaryolarında bulunan ve muhtemelen istismar edilen hatalar son derece pahalı olabilir.

Bu yazımızda, yazılım güvenliğinde Fuzz Testlerinin gerekliliğinden ve ilgili bazı kavramlardan bahsettik. Bundan sonraki yazımızda Black Duck Defensics Fuzz Testing ürününden, ilgili bir vakadan ve kullanım pratiğinden bahsediyoruz.

Kaynak:

Sorularınız için her zaman Forcerta ile iletişim kurabilirsiniz.