Fuzzing

fuzzing, sisteme beklenmedik, yarı geçerli, sıralı verilerin gönderimi gibi yöntemlerle sistemin iç yapısındaki hataları bulmayı hedefleyen kapalı-kutu yazılım test etme yöntemi. fuzzing için çeşitli test yöntemleri isimlendirilmektedir:

 olumsuz test yöntemi;
 protokol mutasyon;
 güvenilirlik test yöntemi;
 sözdizimi test yöntemi;
 hata enjeksiyonu;
 yağmurlu-gün test yöntemi;
 kirli test yöntemi.

fuzzing yöntemlerinin uygulanmasını sağlamak için geliştirilen programlara ise fuzzer denilmektedir.

tarihçe 

fuzzing bazı yazılım mühendisleri tarafından yazılım testlerinde benzer yöntemler kullanılsa da, 1989 yılında prof. barton miller ve öğrencileri tarafından geliştirilmiştir.

fuzzing çalışma yöntemi 

bir fuzzing aracının çalışma prensibi sistemin beklediği geçerli bir cevabın bütünlüğü bozmadan beklenmedik veriler ile değiştirilmesi sonucu sistemin çökmesini sağlamaktır. bu duruma uygun bir senaryo olarak; mobil uygulamaya kullanıcı adı ve parola ile geçerli bir giriş yapıldıktan sonra sunucudan dönen cevabın içerisinde kullanıcının gerçek ismi bulunduğu düşünülsün. geçerli bir giriş işlemi gerçekleştikten sonra kullanıcının gerçek adının yerine bir milyon karakterin mobil uygulamaya gönderilmesi, ortaya bu veriyi tutan değişkenin saklayabileceği veri boyutu sorusunu ortaya çıkartır. bu nedenle mobil uygulamanın çökmesi gerçekleşebilir.

kullanılan yöntemler

bellek taşması hataları 

sistemin programlama aşamasında geçerli veri kontrollerin yapılmasını kontrol etmeyi hedefleyen hafızayı bozma saldırısıdır. fuzzer aracı hafızada kaplayacağı yer olarak büyük veriler gönderir:

    a
    a * 257
    a * 513
    a * 1024
    a * 2049
    a * 524289
    a * 1048577

karakter biçem hataları 

sistemin kullandığı sözdizimini hedef alan ve gelen verinin kontrol edilmemesi ile oluşan hatalardır. bir fuzzer aracı aşağıdaki yapıları kullanarak sistemin çökmesine yol açabilir:

    %p%p%p%p
    %p%p%p%p%p%p%p%p%p%p
    %p * 257
    %p * 513
    %x%x%x%x
    %x%x%x%x%x%x%x%x%x%x
    %x * 257
    %x * 513
    %s%p%x%d
    %s%p%x%d%s%p%x%d%s%p%x%d

sayısal i̇şlem hataları 

hafızada kullandığı alan dışına çıkmasına sebep olan saldırı türlerinden kaynaklanan bir hata türüdür. bellek taşması hatalarının işleyiş mantığı ile benzerdir.

    -1
    0
    0x100
    0x7fffffff
    0x80000000

sql sorguları değişimi 

web uygulamalarının sahip oldukları veritabanlarından sorgu dilini kullanarak hata mesajlarını elde etmek için kullanılır. saldırgan yetkisi olmamasına rağmen elde edilen hata mesajları sayesinde veritabınından bilgi toplar. kullanıcı arayüzünden gelen verilerin kontrol edilmemesinden dolayı bilgilere erişim kolaylıkla sağlanabilir:

    durum:= "select * from kullanıcılar where isim= '" + kullanıcıadı+ "';"
    kullanıcıadı = a' or 'a'='a

    ' or 1=1--
   ) union select%20*%20from%20information_schema.tables;
    password:*/=1--
    uni/**/on sel/**/ect
    '; execute immediate 'sel' || 'ect us' || 'er'

kaynakça 
 fuzzing - https://www.owasp.org/index.php/fuzzing‎
 owasp fuzzing code database - https://web.archive.org/web/20130507082021/https://www.owasp.org/index.php/category:owasp_fuzzing_code_database
 fuzz vectors - https://www.owasp.org/index.php/owasp_testing_guide_appendix_c:_fuzz_vectors 
 ari takanen, jared demott, charlie miller : fuzzing for software - security testing and quality assurance. artech house
 wikipedia article - http://en.wikipedia.org/wiki/fuzz_testing 
 fuzzing-related papers - http://www.threatmind.net/secwiki/fuzzingpapers 

yazılım testi
bilgisayar güvenliği