Makale Özeti

Bir tehlike, iş açısından önemli gizlilik ve veri bütünlüğü gibi konulara yönelik olarak oluşabilme ihtimali olan zarar olarak tanımlanabilir. Bu zararın gerçekleşmesi kesinse bunu tehlike olarak tanımlamak doğru olmaz, doğrudan zarar olarak görmek gerekir. Uygulama geliştiricilerin yapması gereken sadece zarar görülmesi ihtimali kesin olan boşlukları kapatmak değil, zarar olasılığı olan alanları da tespit edip gerekli önlemleri önceden almaktır.

Makale

Bir tehlike, iş açısından önemli gizlilik ve veri bütünlüğü gibi konulara yönelik olarak oluşabilme ihtimali olan zarar olarak tanımlanabilir. Bu zararın gerçekleşmesi kesinse bunu tehlike olarak tanımlamak doğru olmaz, doğrudan zarar olarak görmek gerekir. Uygulama geliştiricilerin yapması gereken sadece zarar görülmesi ihtimali kesin olan boşlukları kapatmak değil, zarar olasılığı olan alanları da tespit edip gerekli önlemleri önceden almaktır.

Tehlikelerin önceliklendirilmesi gerekirse bunu riskle bağlantılı olarak yapmak gerekir. Riskin tanımı ise basitçe şöyle yapılabilir:

Risk = Gerçekleşme olasılığı * Zarar

Bu formülde iki uca dikkati çekmek gerekirse: Gerçekleşme olasılığı düşük olsa bile, zararı çok büyük olan tehlike önemlidir. Benzer şekilde zararı düşük olmakla birlikte gerçekleşme olasılığı çok yüksek bir risk de önemlidir. Ara kademelerdeki riskleri ise formüle göre sıralamak gerekir. Riskleri derecelendirmek, iş planımızda hangi konuların daha öncelikli ve titiz ele alınması gerektiğini belirlemek adına önemlidir. Sayısal ölçütlerle bunu gerçekleştirmezseniz, aslında çok daha riskli konular varken o kadar da önemli olmayan konularla uğraşır duruma düşebilirsiniz.

(Not: Formülde olasılığın birimini yüzde olarak kullanılır ama ya zararın birimi? Bu konuda iki yaklaşım uygundur: Eğer tüm zararları parasal ölçüme vurabiliyorsanız para birimi kullanabilirsiniz. Bu mümkün değilse, 10 ya da 100 üzerinden bir ölçek üzerinden zararları göreli olarak 10 ya da 100’ü en zararlı kabul edecek şekilde puanlayabilirsiniz.)

Güvenli bir uygulama geliştirebilmek için uygulamaya yönelik güvenlik tehditlerini analiz etmiş olmanız şarttır. Aksi taktirde düşmanınızı bilmeden bir savaş hazırlığı içine girmiş olursunuz. Bu durumda büyük olasılıkla büyük riskler için çok küçük emekler ya da küçük riskler için çok büyük emekler harcarsınız. Güvenlik derecesi, verimlilik ve maliyetler açısından içler acısı bir durum.

Tehditleri analiz etmek için iyi bir yaklaşım, uygulamalarda sıklıkla görülen zayıflıklardan yola çıkmaktır. Bu zayıflıklarla ilgili 10 temel kategori ve sömürülme biçimleriyle ilgili bilgileri şöyle sıralayabiliriz:

Geçerliliği kontrol edilmemiş girdi: Hafıza alan taşması (Buffer Overflow), siteler arası programcık çalıştırma(cross-site scripting), SQL aşılaması (SQL injection) ve farklı isimlendirme biçimi kullanımı (Canonicalization)

Kimlik doğrulama sistemi açıkları: Ağda bilgi sızmaları, kaba güç atakları, sözlük atakları, cookie’lerin yeniden kullanımı, kimlik belirteçlerinin çalınması.

Yetkilendirme sistemi açıkları: Ayrıcalığın amaç dışı kullanımı, gizli verilerin açığa çıkması, veri kurcalama, yemleme (luring) atakları.

Ayar yönetiminde güvenlik hataları: Yönetim arayüzlerine yetkisiz erişim, ayarların saklandığı yerlere izinsiz erişim, açık metin olarak saklanan/iletilen ayar verilerinin elde edilmesi, bireysel sorumluluk sağlanamaması, gereğinden yüksek yetkilere sahip süreçler ve servis hesapları.

Hassas verilerin korunmasız bırakılması: Depolama alanında hassas verilere erişim, ağda bilgi sızmaları, veri kurcalama.

Zayıf oturum yönetimi: Oturum çalma, oturum yeniden kullanma, ve ‘ortadaki adam’ (man in the middle)

Zayıf şifreleme: Anahtar oluşturma ya da yönetme zayıflıkları, zayıf ya da özel şifreleme tekniklerinin kullanımı.

Parametre manipülasyonu: Sorgu cümlesi manipülasyonu, form alanı manipülasyonu, cookie manipülasyonu, HTTP header alanlarının manipülasyonu.

İstisna (Exception) yönetimi hataları: Bilgi ifşası, servis reddi.

Denetim ve seyir kayıt sistemlerinde zayıflıklar: Kullanıcıların alması gereken servislerin reddi, bir uygulamanın iz bırakmadan sömürülmesi.

---

Bu dizinin ilerleyen bölümlerinin başlıkları şöyle olacak:

Uygulama güvenliğine yönelik yaygın tehlikeler (2) Hafıza alan taşması

Uygulama güvenliğine yönelik yaygın tehlikeler (3) SQL aşılama

Uygulama güvenliğine yönelik yaygın tehlikeler (4) Siteler arası kodcuk çalıştırma

Uygulama güvenliğine yönelik yaygın tehlikeler (5) Farklı isimlendirme biçimi kullanımı

Dizi boyunca kullanacağımız kaynaklar:

MSDN

Implementing Security for Applications (Microsoft Official Curriculum)

Writing Secure Code, Michael Howard and David LeBlanc (Redmond: Microsoft Press, 2003)

* Yazıda geçen risk tanımı ve önceliklendirmesi konusunda daha fazla bilgi için bkz: www.microsoft.com/msf , Risk Management Discipline