Yaygın Yazılım Güvenliği Yanılgıları
Şirketler tarafından yapılan en büyük hatalardan birisi de dışarıdan çalışan, yarı zamanlı ya da tam zamanlı yazılım geliştiricilerini işe alırken onların güvenli uygulama geliştirme konusundaki bilgi seviyelerini kontrol etmemeleridir. Genellikle mülakat ya da iş başvurusu değerlendirme evresinde ilgili kişiler tarafından işe alınacak yazılımcılar tarafından yazılan kod parçacıkları güvenlik perspektifi ile değerlendirilmemekte ya da yüzeysel sorular ile geçiştirilmektedir. Bu da yazılımcının bir ürün geliştirirken dikkate aldığı parametrelerde güvenliğin olmamasına veya gereken önemi vermemesine yol açabilir. Bu gibi durumlarda ,güvenliğin yeterince önemsenmediği, ortaya çıkan ürünlerde güvenlik zafiyetlerine rastlamak çok şaşırtıcı olmayacaktır.
Yazılım geliştiricilerin güvenlik perspektifi ve güvenli kod yazma becerilerini geliştirmek için dikkat edilmesi ve izlenmesi gereken bazı adımlar mevcuttur. Biz de bu yazı dizimizde hem yazılım geliştiricilerinin zihninde oluşması gereken bakış açılarına değineceğimiz gibi hem de teknik olarak güvenli yazılım geliştirme yeterliliklerinin nasıl uygulanabileceğini aktarmaya çalışacağız.
Bu yazıda belirli varsayımlara göre uygulamasının güvenli olduğunu düşünen yazılım geliştirici profilini ele alacağız. Yazının devamında belirteceğimiz varsayımlarla kendini güvende hisseden yazılımcı, güvenli kod geliştirmek için bir çaba sarf etmeyecektir çünkü kendi düşüncesine göre zaten güvendedir ve ekstra bir şey yapmasına gerek yoktur.
Şimdi yazılım geliştiriciler tarafından doğruymuş gibi düşünülen ve en sık karşılaşılan yanlış yaklaşımları ele alalım:
- Bir web uygulama geliştirme çatısı (web framework) kullanıyoruz, güvenlik konusunda endişelenmemize gerek yok: Rails ve Django gibi popüler framework’ler uygulamaların güvenli olması düşüncesi ile geliştirildiği için sizi bilinen ve engellemesi framework tarafından mümkün olan güvenlik açıklarına karşı koruyacaktır. Ancak, business logic diye tabir edilen ve uygulamanın işleyişi esnasındaki mantıksal problemler nedeniyle ortaya çıkan sorunları bu framework’ler engelleyemeyecektir. Örneğin bir e-ticaret uygulamasındaki adet değerinin negatif değer alabilmesi uygulamanın işleyiş mantığında problemler oluşturacaktır. Bu tip sorunlar için geliştiricilerin kendileri tarafından önlem alınması gerekmektedir.
- Uygulamam ya da ben yeterince ilginç değiliz, kim beni neden hacklemek istesin: Şirket ya da uygulamanız kayda değer bir katma değere sahip olmasa bile, ilgili uygulamayı kullanan kullanıcıların da hedef alınması mümkündür. Ya da uygulamanızın arama motorları tarafından listeleniyor olması ve bilinen yaygın güvenlik açıklarına sahip olması nedeniyle de uygulamanız otomatik saldırılara karşı hedef olabilmektedir. Örneğin 2008 yılında ASPROX isimli solucan saldırısı nedeniyle bir çok uygulama ve uygulamayı kullanan kullanıcılar zarar gördüğü gibi hala internet üzerinde bir çok zararlı içerik barındıran / bulaştırılmış web sitesi bulunmaktadır.
- Uygulamamın yedeğini alıyorum, endişe etmeme gerek yok: Yedek almak, uygulamanız hacklendikten sonra geri dönüş için yardımcı olacaktır ama hacklenmenize mani olamayacağı için bir güvenlik çözümü değildir. Ayrıca halihazırda elinizde bulunan yedeklerden geri dönüş yaptığınızda mevcut güvenlik açıklarını da aynen korumuş oluyorsunuz.
- Uygulamam iç networkte çalışıyor ve internete açık değil: Tehditlerin / saldırıların çalışanlar tarafından ya da iç network’e erişim sağlayabilen bir saldırgan tarafından gelmeyeceğinin garantisini veremezsiniz. İç networkte çalışan ERP, CRM ve benzeri uygulamalarda bulunan güvenlik açıkları, kritik bilgilerinizin ya kötü niyetli / meraklı şirket çalışanları tarafından ya da iç network’e (Örneğin kablosuz ağ aracılığı ile) erişim sağlayan saldırganlar tarafından elde edilmesini kolaylaştıracaktır.
- Uygulamama sadece VPN üzerinden erişilebiliyor: Güvenli bir bağlantı ardında olmanız ve uygulamanıza bu yol ile bağlanılması uygulamanızı güvenli kılmaz. Bir önceki madde de bahsettiğimiz durumlar bu madde için de geçerlidir.
- Uygulamam SSL kullanıyor, yani güvendeyim: SSL kullanımı ile web sitesi ile kullanıcı arasındaki bağlantıyı şifreleyerek, saldırganlar tarafından ilgili trafiğin okunmasını engellemiş olursunuz. SSL kullanımı ile web sitenizdeki güvenlik açıklarını engellemiş olmazsınız.
- Güvenlik duvarı (firewall) kullanıyorum, benim yerime güvenliği sağlıyorlar: Güvenlik duvarları (firewall’lar) yapıları gereği uygulama katmanında (HTTP) çalışmadıkları için web uygulamalarındaki güvenlik açıklarına herhangi bir koruma sağlayamayacaklardır. Ama spesifik olarak bu iş için geliştirilmiş web uygulama güvenlik duvarları (WAF – web application firewall) ve veritabanı güvenlik duvarları (database firewall) mevcuttur. Web uygulama güvenlik duvarları kısmen koruma sağlasa da, bu güvenlik duvarlarını atlatmak bazı durumlarda mümkün olmaktadır.
- Güvenlik testleri ve kaynak kod analizi yaptırıyoruz yani endişelenmeye gerek yok: Güvenlik testleri (penetration test) ve kaynak kod analizi (source code analyses) güvenli web uygulamaları geliştirme sürecinin önemli bir parçası olsa da her derde deva olmamaktadır. Güvenlik testleri hiçbir zaman tüm zafiyetlerin tespit edileceğinin garantisini vermemektedir. Yani her zaman için öncelikli olan ‘güvenli kod yazımı’ olmalıdır.
- Popüler programlama kitapları nasıl ‘güvenli kod yazılacağını’ öğretmezler: Programlama kitapları ya da yazılım eğitimi sınıflarında güvenli kod yazma ile ilgili bir bölüm bulmak, geçtiğimiz yıllara kadar gerçekten zordu. Uygulama geliştirmeyi bu kitap ya da eğitimlerden öğrenenler; eğer geliştirdikleri uygulamalar saldırganlar tarafından zarar görmediyse ya da bireysel olarak güvenliğe meraklı değillerse, güvenli yazılımlar geliştiremeyeceklerdir.
Sonuç
Yazı dizisinin bu bölümünde güvenlik konusunda yaygın yanlış bakış açılarına değinmeye çalıştık. Biz biliyoruz ki siz bu yazılım geliştirici profiline kesinlikle uymuyorsunuz. Aslında biz de bu yazıyı “o” arkadaşınız için hazırladık Bundan sonraki bölümlerde güvenli uygulama geliştirme sürecinde dikkat edilmesi gereken noktalara değinmeye çalışacağız. Son olarak bir yazılım ekibi içerisinde çalışıyorsanız sadece sizin güvenli kod geliştirmeniz yeterli olmayacaktır, bu yüzden bu yazıyı arkadaşlarınızla paylaşmayı unutmayın.
1 Comment
Ahmet burak
24 Nisan 2017 at 17:51Bilgilendirme için teşekkürler