İyi Yazılım Testi Nasıl Yapılır?

Yazılım testleri başarılı yazılım firmalarını diğerlerinden ayıran en önemli faktörlerden biridir. Bu bölümde yazılım testinin neden önemli olduğunu ve test yöntemlerinden bir olan “Fuzzing” tekniğini inceleyeceğiz.

Programcılık ile amatör ya da profesyonel ilgilenen herkes yazılım testi tekniklerinden birkaçını bilir ya da programcılığın getirdiği iç güdülerle farkında olmadan uyguluyor olabilirler. Yazılım testleri birçok alt kategoriye ayrılır. Birim testleri küçük parçaların biraraya gelmeden önce analiz edilmesini sağlar. Sistem ve entegrasyon testleri modüllerin birbirleriyle uyumunu onaylar. Regresyon testleri kod üzerinde yapılan değişikliklerden sonra da her bir parçanın uyum içerisinde çalıştığını kontrol eder. Güvenlik testi tahmin edebileceğiniz gibi verilerin korunduğundan emin olur.

İnternette bulabileceğiniz kaynak kodu tarayıcıları, güvenli derleyiciler ve uygulama tarayıcıları yazılım geliştiricilerinin uygulama üzerindeki açıkları bulmasına yardımcı olur. Bu bölümde üzerinde duracağımız “fuzz” testi gibi teknikler de uygulamaların beklenmedik girdiler karşısında tepkilerini ortaya koyar. Fuzzing tekniği ile programcının amacı rastlantısal girdiler karşısında uygulamanın zayıflığını ve beklenmedik tepkilerini ölçmektir. Fuzz testleri web uygulamalarının geliştirilmesinde ayrı bir önem taşır. Bu nedenle yeni yüzyılın web firmaları tarafından büyük bir titizlikle uygulanır. Çünkü uygulama internet üzerinden çok daha geniş ve takibi imkansız büyüklükte bir kitleye ulaşır.

Fuzz testleri uygulama kalite kontrol uzmanlarının bile gözünden kaçabilecek çok karmaşık açıkları ortaya çıkarabilir.
Karmaşık uygulamalarda hatalı olabilecek her kodu önceden tahmin etmek neredeyse imkansızdır. Örneğin Windows 7’da ortalama 50 milyon satır program kodu bulunduğu düşülürse Microsoft’u sıkça konuşulan Windows güncellemeleri ile yargılamadan önce iki kez düşünmemiz gerekir.

Çekiç etkisi
Fuzz testleri sürekli olarak anlamsız girdilerle uygulamanın adeta büyük bir çekiçle dövülmesine benzetilebilir. Fuzz testleri girdilerin yapılacağı kullanıcı gereksinimi duymadığından yazılım firmalarına kalite kontrol bütçesinden tasarruf da sağlar. Microsoft, Apple ve Google gibi yazılım devleri bu nedenle masrafsız kabul edilen fuzz testlerini yazılımın destek ömrü tamamlanana dek devam ettirirler. Fuzz testlerinin bir diğer avantajı da basit olmasıdır. Belirlenen noktaları hedef alan fuzz testleri kolayca uygulanabilir. Kısa süre önce fuzzing testleri sayesinde Windows 7 üzerinde önemli bir güvenlik açığı ve iPhone üzerinde SMS ile ilgili bir hatanın ortaya çıkarıldığı rapor edildi.

Kola makinelerinde fuzz testi deneyimi
Geçen sene katıldığım Microsoft Web 2.0 yazılım geliştiricileri fuarında kulak misafirimi olduğum yaşanmış bir örneği anlatmadan geçemeyeceğim. Şimdilerde hayatını yazılım güvenliği danışmanı olarak devam ettiren uzman dostumuzun yaşadığı bu olay 1980 yıllarında kola makinelerinin Bahama’larda ilk kez kullanılmaya başlandığı zamanda geçiyor. Bahama adalarına Amerika’dan ithal edilen kola makineleri doğal olarak üzerlerinde sadece 25 cent kabul eder uyarısı taşıyor. Bahama para birimi Amerikan dolarıyla aynı değere sahip ve her ikisi de her yerde kabul görüyor. Kola makinesiyle o yıllarda ilk kez karşılaşan uzmanımız meraklı denemelere koyuluyor ve eline geçen her metal parçasını makine üzerinde deniyor. Ardı ardına metal pul, 25 Bahama centi, 10 Amerikan centi, hepsi makineden geri düşüyor. Ta ki 10 Bahama centini deneyene dek. Makine 10 Bahama centini 25 Amerikan centi olarak algılıyor ve makineye ard arda 30 Bahama centi daha attığında ekranda 1 dolar kabul edildiğini görüyor.

Yeni Türk Lirası’nın ilk kullanıma geçtiği zamanlarda benzer bir örneğin Avrupa’da kola makineleriyle yaşandığı da sıkça anlatılır. Bu yöntem teorik olarak gayet basit bir işlem gibi görünmesine rağmen pratikte bir o kadar da karmaşık hale geldiği görülüyor.

Fuzzing nasıl uygulanır?
Piyasada bu iş için hazırlanmış çok sayıda ürün bulabilirsiniz. Örneğin Micheal Eddington tarafından geliştirilmiş Peach Fuzzing platformu (http://peachfuzzer.com), Immunity firmasının Spike (http://www.immunitysec.com/resources-freesoftware.shtml) ve Microsoft’un MiniFuzz (http://go.microsoft.com/?linkid=9678112) yazılımlarından ücretsiz olarak yararlanabilirsiniz. Codemıcom Defensics firmasının Codemicom ve Beyond Security’nin BeStrom yazılımları da fuzz testi yazılımlarına verebileciğimiz ticari örnekler.
Web uygulamaları için kullanılan fuzzing yazılımları çok daha gelişmiş. Çoğu test yazılımı uygulamanın girdilere vermesi gereken normal cevapları anlayarak sapma ve hata belirtilerini ortaya çıkarabiliyor. Örneğin meşhur SQL Injection açığını test etmek için girdi tırnak içerinde bir metin olabiliyor. Eğer girdiye veritabanı hatası ile karşılık verilirse testçi potansiyel bir hatanın varlığını belirlemiş oluyor.
Web tabanlı olmayan uygulamalar için fuzz testleri belirsizler içeriyor. Bu testler dosyaların, ağ trafiğinin ve API parametrelerinin değiştirilmesi yöntemiyle gerçekleştiriliyor.

Pages: 1 2

Leave a Reply

Your email address will not be published.