Yazılım geliştirirken yapılan en tehlikeli 25 hata!
Bu haberimizde yazılım geliştiricilerin riskleri azaltmak için kullanabileceği yöntemleri ve en çok yapılan hatalar ile ilgili bilgileri bulabilirsiniz.
Teknolojinin gelişmesi en fazla yazılım alanında
etkili oldu. Bu teknolojinin gelişmesi, gerekli insan kaynaklarının
erişilebilir olması ve kurumların bilişim teknolojileri
farkındalığının artması, ülkemizde gerek büyük
ölçekli gerekse de küçük ölçekli kurumları kendi ihtiyaçlarına
uygun yazılımları ürettirmeye ve kullanmaya yöneltti.
Fakat bu yazılımlar geliştirilirken yapılan
yazılım hataları kurumları ve hizmet verdikleri tarafları ciddi
risk altına girmesine enden olacaktır. Bu haberimizde yazılım
geliştiricilerin bu riskleri azaltmak için kullanabileceği
yöntemleri ve en çok yapılan
hatalar ile ilgili bilgileri bulabilirsiniz.
Yazılım geliştirme aşamasında yapılan hatalar çoğunlukla kötü niyetli kişilerin yaptığı saldırılar sonucu ortaya çıkıyor, her ne kadar daha sonra hata giderilse de hem kurumun itibarı zedelenmiş hem de gizlilik derecesinde bilgiler kötü niyetli kişilerin eline geçmiş oluyor. Bu yüzden yazılım geliştiricilerinin bu sorunlar ortaya çıkmadan muhtemel hataları bilmeleri ve önlem almaları gerekiyor.
Bu yüzden CWE(Common Weakness Enumeration) ve SANS(SysAdmin, Audit, Network, Security) tarafından her yıl hazırlanan 'En Tehlikeli 25 Yazılım Hataları' dokümanı bu konuda yardımcı olacak en önemli bilgileri içeriyor.
Bu bilgileri sonraki sayfalarımızda inceleyebilirsiniz.
En Tehlikeli 25 Yazılım Hataları (CWE/SANS Top 25 Most Dangerous Software Errors)
CWE içerisinde 800 den fazla yazılım açıklığı ve geliştirme hatası barındıran bir indekstir. Top 25 ise bu zayıflıkların belirli kriterlere göre puanlandırılması sonucu en tehlikeli olanların belirlenmesiyle oluşturulur. En güncel Top 25 listesi 2011 yılı için 20 den fazla kurumun, hatanın yaygınlığı, önemi ve suistimal edilme olasılığı gibi kriterlere göre değerlendirilmesiyle meydana getirilmiş. Listeyi vermeden önce örnek bir hatayı, listenin birincisi, genel olarak şu şekilde inceleyebiliriz.
Örneğimizdeki hata CWE-89 ID' li SQL Injection
olarak bilinen zayıflık. Birinci alanda hatanın ID'si ve özet bir
tanımı bulunuyor. Örneğimizdeki değerler, CWE-89 ve kısa
tanımı ise: SQL Komutlarında kullanılan özel elemanların
uygunsuz nötrleştirilmesi. İkinci alan olan özet bölümünde ise,
Hatanın Yaygınlığı, Düzeltme Maliyeti, Atak Sıklığı,
Sonuçları, Tespit Edilme Kolaylığı, Saldırganlar Tarafından
Bilinirliği bilgileri sunuluyor. CWE için ise
veriler şöyle;
Üçüncü alanda teknik detaylar, kod örnekleri, tespit metodları ve referanslara değiniliyor. SQL Injection açıklığına ilişkin açıklayıcı bir C# kod örneği aşağıdaki gibi verilmiş.
Bu koddaki SQL sorgusunda "ItemName" alanı kullanıcıdan alınan ve üzerinde kullanıcının tam bir hakimiyeti söz konusu olan bir alan. Bu değer hiç bir kontrole tabi tutulmadan sorguya dahil edilmiş. Kötü niyetli bir kullanıcı bu alan:
şeklinde bir değer girmesi durumunda sorgu şu hale geliyor;
Son kısıma eklenen OR 'a'='a' ifadesi her zaman doğru olduğu için kendinden önceki diğer şartları önemsiz kılıyor ve sorgu aslında şu hale geliyor.
Sonuç olarak aslında kullanıcı sadece kendisine(wiley) ait olan kayıtları görebilecekken, diğer kullanıcılara ait olanları da görebilmiş oluyor ve yazılım güvenliği sağlanamamış oluyor.
Dördüncü alanda ise önlemler ve risk azaltma yöntemleri detaylı bir şekilde işleniyor. Beşinci bölüm ilişkili hatalara ayrılmış ve son olarak da altıncı bölümde ilişkili atak desenleri veriliyor. Listedeki 25 maddenin tamamı ise şöyle:
Risk Minimize İndeksi
Yazılım geliştiricilerin karşı karşıya olduğu yukarıda bahsedilen riskleri azaltmak için alabileceği önlemler mevcut. Bu önlemler her risk için ayrı ayrı incelenebileceği gibi daha genel ve takip edilmesi daha kolay bir Risk Minimize İndeksi yine CWE tarafından sağlanıyor. Bu indekste yer alan önlemler yerine getirildiğinde sadece Top 25 listesindeki açıklıklara karşı değil bunun dışındaki birçok riske karşı da önlem alınmış oluyor.
Son olarak 2011 Haziranında güncellenen Risk Minimize İndeksi, beşi risk azaltıcı ve dördü genel prensip olmak üzere toplamda dokuz maddeden oluşuyor.
Örnek bir önlemin yapısı ise genel olarak şöyle;
"M1: Tüm girdileriniz üzerinde kontrol mekanizması kurup devam ettiriniz" isimli önlemin hedef kitlesi programlayıcılar olarak belirtilmiş. Bu önlemin ilişkili olduğu açıklık olarak ise "CWE-20: Uygunsuz Girdi Doğrulama" olarak belirtilmiş. Bu bölümde ayrıca önlemin nasıl uygulanacağı ile ilgili detaylı bilgiler verilmiş. Örneğimizdeki öneriler şöyle:
Tüm girdileri aşağıdaki özelliklerine göre standart bir girdi doğrulama mekanizmasına tabi tutunuz. Uzunluk, girdinin türü, söz dizimi(syntax), eksik veya fazla girdiler, ilişkili alanlar üzerinde tutarlılık, uygulama işleyiş kuralları. Örnek bir uygulama işleyiş kuralı ise şu şekilde açıklanmış; "boat" kelimesinin alfa-numerik olarak geçerli bir girdi olmasına rağmen eğer uygulamanız "kırmızı" veya "mavi" gibi bir renk değeri bekliyorsa bu girdi geçersiz olacaktır.
Son bölümde ise bu önlemin Top 25 listesindeki hangi hataların düzeltilmesinde uygulanabilir olduğu listelenmiş.
Bunlara ek olarak bu beş risk minimize edici önlemin Top 25 listesindeki uygulanabilirliğini aşağıdaki matriks üzerinden inceleyebiliriz. Bu matrikste uygulanabilirlik dört farklı değere göre sınıflandırılmıştır.
Yüksek: Önlemin iyi bilinen güçlü yönleri ve sınırları var ve açıklığı iyi kapsıyor.
Orta: Önlem birkaç şekilde açıklığı önleyebilir ancak tam güvenlik sağlamıyor.
Sınırlı: Sadece özel durumlarda uygulanabilir ve ileri eğitim ve uyarlama gerektirebilir.
Kademeli Savunma (KS): Önlem açıklığı gidermeyebilir ancak açıklığın sebep olacağı zararları minimize edebilir.
İlave Kaynaklar
Yukarıda bahsedilen önlemler ve yöntemlerin ötesinde yazılım geliştiricilerin başvurabileceği diğer bazı önemli kaynaklar şöyle sıralanabilir;
Adobe Systems Incorporated, EMC Corporation, Juniper Networks, Microsoft Corp., Nokia, SAP AG, Siemens AG and Symantec Corp gibi dünya çapında yazılım üreticilerinin de üyesi olduğu The Software Assurance Forum for Excellence in Code (SAFECode) tarafından hazırlanan "Fundamental Practices for Secure Software Development" dökümanı:
-
http://www.safecode.org/publications/SAFECode_Dev_Practices1108.pdf
Bir yazılım ekibi yöneticisi pozisyonunda olanların veya bir yazılım ekibinin özellikle yazılım güvenliği ile ilgilenen birimindekilere yönelik "International Information Systems Security Certification Consortium" tarafından sağlanan "Ten Best Practices for Secure Software Development" dökümanı:
-
https://www.isc2.org/uploadedFiles/(ISC)2_Public_Content/Certification_Programs/CSSLP/ISC2_WPIV.pdf
Son olarak da daha çok Microsoft teknolojileri ile yazılım geliştirenlere yönelik Microsoft tarafından önerilen "Security Development Lifecycle" :
-
http://www.microsoft.com/security/sdl/default.aspx