Siber güvenliğin diyalektiği için sistemlere saldıranlar varsa onları koruyanların da var olduğu söylenebilir. Her ne kadar taban tabana zıt amaçlara hizmet eden iki farklı grup olsa da kullandıkları araçlar, testler, yöntemler ortaklık taşıyabilir. Bunlar, aynı anda iki grubun zıt fikirlerine göre hizmet verebilir; bir taraf sistemlerini korumak için bu araçları, testleri veya yöntemleri kullanırken diğer grup da bunlarla korunan sistemlere sızmanın yollarını arayabilir.
Kökleri 1989’a dayansa da son yıllarda da yaygın olarak kullanılan “Fuzzing” siber güvenlik dünyasında iki gruba iki farklı amaçla hizmet edebilen önemli ve geliştirici test yöntemlerinden biri olarak karşımıza çıkıyor. Bu yazımızda da Fuzz veya Fuzzing’in ne olduğunu, nasıl çalıştığını, ne anlama geldiğini, neden önemli olduğunu anlatmaya çalışacağız.
Kolay Erişim
FUZZ TESTİ NEDİR?
İlk olarak 1989 yılında Wisconsin Üniversitesi’nde Barton Miller tarafından yanlışlıkla geliştirilen Fuzzing, hem istismar etmek için güvenlik açıkları arayan siber tehdit unsurları hem de zafiyetleri daha önce bulup düzeltmeye çalışan siber güvenlik ekipleri için eski ama giderek yaygınlaşan bir süreçtir.
Siber güvenlik dünyasında, Fuzz testi veya Fuzzing, yazılım, işletim sistemleri veya ağlardaki kodlama hatalarını, güvenlik açıklarını, buglarını, hatalarını vs. keşfetmek için kullanılan bir test tekniğidir.
Fuzz testi tipik olarak, test edilmekte olan yazılıma veya sisteme, yazılımın çökmesini veya savunmasını aşmasını sağlamak için fuzz adı verilen büyük miktarlarda rastgele veri girilmesini içerir. Bir güvenlik açığı bulunursa, olası nedenleri belirlemek için fuzzer adı verilen bir yazılım aracı kullanılır.
FUZZ TESTİ NE İŞE YARAR?
Fuzzing, her şeyden önce otomatik hata algılama sanatıdır. Fuzzing’in amacı, uygulamayı keşfetmek, beklenmeyen davranışlara, kaynak sızıntılarına ve çökmelere neden olmaktır.
Fuzzing, bir bilgisayara girdi olarak geçersiz, beklenmedik veya rastgele veriler atmayı içerir. Fuzzer’lar bu işlemi tekrarlar ve bir güvenlik açığı tespit edene kadar ortamı izlerler.
Tehdit aktörleri, arabellek taşması, DoS (hizmet reddi), siteler arası komut dosyası çalıştırma ve SQL Injection için istismar edilebilecek güvenlik açıklarını veya sıfırıncı gün zafiyetlerini bulmak için fuzzing’i kullanır. Bu literatürde, “fuzzing saldırıları” olarak bilinir. Güvenlik uzmanları ise uygulamaların güvenliğini ve kararlılığını değerlendirmek için Fuzzing tekniklerinden yararlanır.
Fuzz testi, genellikle yazılım kodlanırken gözden kaçan ciddi kusurları ortaya çıkarabilir. Kendi başına da etkili olan Fuzz testleri yine de bir sistemin güvenliğinin, kalitesinin, etkinliğinin tam resmini çıkaramaz. Fuzz testleri, Blackbox, beta veya diğer testlerle birlikte yürütüldüğünde oldukça etkin bir sonuç ortaya koyar.
FUZZ TESTİ NASIL YAPILIR NASIL GÖRÜNÜR?
Yukarıda belirttiğimiz gibi, fuzz testleri, sıfırıncı gün güvenlik açıklarını bulabilir fakat bir fuzzer nasıl çalışır? Negatif sayılar, boş karakterler ve hatta özel karakterler bazı giriş alanlarına gönderilirse bir uygulamaya ne/neler olacağını tahmin edebilir misiniz?
1. Test Durumları Oluşturma
İlk olarak test senaryoları oluşturulur. Her bir güvenlik testi durumu, rastgele veya yarı rastgele bir veri seti olarak oluşturulabilir ve ardından uygulamaya girdi olarak gönderilebilir.
Veri seti, sistem girişinin format gereksinimlerine uygun olarak veya sistemin anlaması veya işlemesi amaçlanmayan, tamamen hatalı biçimlendirilmiş bir veri yığını olarak da oluşturulabilir
2. Girdiyi Sağlamak için Hedefle Arayüz Oluşturma
Fuzz testi sırasında bir fuzzer; bir uygulama, bir protokol veya bir dosya formatı ile arayüz oluşturabilir. Bunu yaparken, bir fuzzer, ağ üzerinden veya çalışan bir uygulamanın komut satırı aracılığıyla hedefe test senaryoları gönderir
3. Sistemi İzleme
Bir fuzz testinin başarısı, bir fuzzer’ın hedeflenen uygulama üzerindeki etkisini doğrulama yeteneği ile ölçülür. Sistemdeki açıkları kayıt altına alınır.
Bir fuzzing aracının çalışma prensibi ise sistemin beklediği geçerli bir cevabın bütünlüğünü 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ülebilir. 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 çıkarır. Bu nedenle mobil uygulamanın çökmesi gerçekleşebilir. Yani, bir ağacı ne kadar sallarsanız, düşüreceğiniz ürün o kadar fazla olur.
FUZZ TESTLERİNİN AVANTAJLARI NELERDİR?
Fuzz testlerinin oldukça avantajlı yönleri bulunur.
Bunları sıralayacak olursak;
- Fuzzing sadece sorunu tanımlamaz, aynı zamanda sorunun nedenini ve bir saldırganın gerçek hayattaki bir saldırıda bununla nasıl etkileşime girebileceğini de gösterir.
- Fuzzing, bir güvenlik açığının varlığını bularak sorunları tespit eder.
- Diğer araçlar ile görülemeyen güvenlik açıklarını veya çökmeleri bulur.
- Maliyeti ucuzdur.
- Ciddi derecede olan açıkları veya sistem çökmelerini tespit eder. Kurulumu çok kolaydır.
- Fuzzing, geliştiriciler için oldukça faydalıdır. Geliştiricilerin rolü, ürün özelliklerini geliştirmek ve iyileştirmektir. Geleneksel güvenlik araçları yalnızca kusurlara işaret ederken, fuzzer’lar kusurun sonucunu ve onu çözmenin etkisini gösterir.
DÜNYACA ÜNLÜ ŞİRKETLER FUZZ TESTLERİ UYGULUYOR
Dünyanın en büyük ve en saygın kuruluşlarından bazıları, kalite kontrol ve siber güvenlik operasyonlarının bir parçası olarak fuzzing uyguluyor:
Örneğin Google, Chrome’daki milyonlarca kod satırını kontrol etmek ve korumak için fuzzing kullanıyor. 2019’da Google, fuzz testi yoluyla Chrome’da 20.000’den fazla güvenlik açığı keşfetmişti.
Bir başka örnek olarak Microsoft, güvenlik açıklarını bulmak ve ürünlerinin kararlılığını artırmak için fuzzing’i kullanıyor diyebiliriz. Bu ve diğer birçok kuruluş, çeşitli nedenlerle fuzz testlerini kullanırken git gide bu sayı artıyor.