Web Uygulamaları Güvenliği
ve
Web Uygulamalarında Zayıflık Tespiti
Onur YILMAZ, <contact at onuryilmaz dot info>, webguvenligi.org, 07/05/2009
Giriş
Dizinin ilk yazısında web uygulamalarında güvenliğin önemine değinmiştik. Bu yazımızda da uygulamalardaki güvenlik problemlerinin nedenleri ve bu problemlerin tespiti konularında teorik bilgilere yer vereceğiz.
Uygulamalar Neden Güvensiz?
Teknik Nedenler
Programlama Dili / Çatısı Seçimi: Bir dilin ya da platformun güvenlik analizi yapılırken genel olarak; platformun kendisinden çıkan açıklar, platform tarafından geliştiriciye sunulan güvenlik kütüphaneleri, güvenlik önlemleri almak için yapılması gereken işlemlerin kolay olması ve varsayılan ayarlar kriter olarak gözetilmektedir. Bu noktada geliştirici, ilgili kriterlere göre platform / dil seçimini yaptığı takdirde uygulamanın güvenliğini büyük ölçüde zahmetsiz bir şekilde sağlamış olacaktır [5].
Yetersiz Güvenlik Farkındalığı: Proje yöneticisinin veya geliştiricinin; web uygulamalarına yönelik saldırılar ve web uygulamaları güvenliği konusunda bilgisiz olması, uygulamalarda oluşan hataların en büyük sebebidir. Uygulamanın geliştirilme sürecinde, uygulamaya, yazılımsal olarak katkı sağlayan geliştiriciler veya proje yöneticilerinin uygulamaya ne tür saldırılar gelebileceği konusunda bilgisiz olması, saldırının nerelerden gerçekleşebileceğini görememesi gibi nedenlerden ötürü uygulamalar saldırılara açık hale gelmektedir. Bu noktada bu sürece katkıda bulunan kişilerde "güvenlik farkındalığının oluşması", "saldırılar konusunda bilgi edinilmesi" ve "uygulamanın bu donelere göre revize edilip güvenli hale getirilmesi" sorunları büyük ölçüde çözmektedir.
- Sektörün Takip Edilmemesi: Yeni teknolojilerin geliştirilmesine paralel olarak bu teknolojilere zarar vermek amaçlı geliştirilen yeni tekniklerin bilinmemesi, web güvenliği sektöründeki gelişmelerin takip edilmemesi ise geliştirme sürecinden sonra uygulamaya gelebilecek saldırıları açıklamaktadır.
Sosyal Nedenler
Geliştirme Döngüsünün İzlenmemesi: Müşterilerden gelen taleplere göre projenin çoğu zaman yeniden şekillenmesi, bu süreç esnasında yapının bozulması ve güvenlik açıklarının oluşması, uygulamaya yönelik gelebilecek saldırıların niceliğini ve niteliğini doğrudan etkilemektedir. Standart bir geliştirme döngüsünün izlenmesi, bu sorunu ortadan kaldırmaya yardımcı olacaktır.
- Proje Deadline: Projenin geliştirme ve test süreçlerinin yeterince uzun olmaması nedeniyle yapıda bozukluklar ortaya çıkmaktadır. İyi bir proje ve zaman yönetiminin uygulanması, her zaman için faydalı olacaktır.
Diğer Nedenler
- Kötü Niyetli Yazılımcılar: Outsourcing bir metod izleyerek, projenizi ilgili alanda branşlaşmış kişi ya da kurumlara yaptırabilirsiniz ki bu sektörde karşılaşılan bir durumdur. Outsourcing`in birçok avantajı olsa da uygulamayı geliştiren kişilerce kötü niyet gözetilerek uygulamanızda güvenlik açıkları bırakılabilir. Bu nedenden ötürü outsourcing proje çalışmalarınızda projeyi geliştirecek firma seçimini iyi yapmanız ve proje tesliminin akabinde de uygulamanızı güvenlik riskleri kriterlerine göre test ettirmeniz faydanıza olacaktır.
Genel olarak uygulamalarda karşılaşılan güvenlik açıklarının nedenleri yukarıdaki gibidir. Biz yazı dizimizde "programlama dili / çatısı seçimi" ve "yetersiz güvenlik farkındalığı" maddeleri üzerine yoğunlaşacağız.
Güvenli Web Uygulamaları Geliştirmek için Neler Yapılmalı?
- En iyi savunma, saldırının nereden ve nasıl geleceğini bilmektir: Evet, can alıcı noktamız bu! Eğer saldırının nereden ve ne şekilde geleceğini kestirebilirsek, önlemlerimizi de ona göre almış oluruz. Çok basite indirgenmiş haliyle; en iyi kaleciler, futbol hayatlarına forvet oyuncusu olarak başlamış olanlardır. Kaleye geçtikleri zaman topun nereden ve nasıl geleceğini tahmin edebilir, forvet oyuncusu gibi düşünebilir ve kalede yerini ona göre alır. Biz de "saldırgan" gibi düşünüp, uygulamamızdaki önlemleri ona göre almalıyız [6].
- Güvenlik farkındalığının artırılması: Uygulamaların "neden güvenli olması gerektiği" bilincinin diri tutularak, geliştirme sürecine güvenlik açısından beslemeler yapılması gerekmektedir.
- Geliştirme döngüsü ve güvenlik: Projenin düşünüldüğü şekilde mimarisinin kurulması boyunca, değişiklikler yapıldığı takdirde güvenlik kriterlerinin tekrar gözden geçirilmesi ve düzenlemelerin yapılması gerekmektedir.
- Geliştirme ve test sürecine güvenlik testlerinin eklenmesi: Geliştirici veya yönetici güvenlik konusunda ne kadar bilgisi olsa da kendi uygulamalarında hata olduğunu düşünmeme veya gözden kaçırma gibi durumlar nedeniyle, geliştirme ve test süreçlerine güvenlik testlerinin eklenmesi ve sonuçlarına göre gözden geçirilmelerin yapılması, bir çok sorunu ortadan kaldıracaktır.
Web Uygulamalarında Zayıflık Tespiti
- Penetration Test Nedir: Sisteminizdeki güvenlik açıklarının tespiti, saldırganların sisteminize verebileceği zararları görebilmeniz ve gerekli önlemleri alabilmeniz için yapılan bir saldırı simülasyonudur. Üç çeşit penetration test metodolojisi bulunmaktadır; [1]
- White Box: Güvenlik uzmanına firma içindeki tüm sistemler hakkında bilgi verilir. Bu metod önceden firmada çalışmış ve ayrılmış saldırganın firmaya saldırı yapma olasılığını ve sonuçlarını test etme amacıyla tasarlanmıştır.
- Black Box: Bu metod ile güvenlik uzmanına hiç bir bilgi verilmez. Tamamen zarar vermek, kişisel tatmin ve bilgi çalmak amacıyla dışarıdan gelebilecek bir saldırganın verebileceği zararı görmek ve önlem almak için tasarlanmıştır.
- Gray Box: Firma içerisinde düşük yetkilere sahip kullanıcının sisteme ve firmaya verebileceği zararı test etmek amaçlı düşünülmüştür. Güvenlik uzmanı firma içinde belirli süre bulunup sistem açıklarını tarar ve bunları raporlar.
- Görüldüğü üzere 'penetration test' sonucunda hazırlanan raporlar; uygulamamızda bulunan açıkları barındırdığından, uygulamaya gelebilecek zararlı göz önüne serdiğinden ve alınması gereken önlemleri gösterdiğinden, güvenli bir web uygulaması için gerekli olmaktadır.
- Penetration Testing vs Vulnerability Assessment: Penetration testing; 'bir sistemi dışarıdan genelde ekstra hiçbir ekstra bilgi sahibi olmadan güvenlik açıklarına karşı test etmek ve bu açıkları mümkün olduğu kadar exploit etmek' iken, Vulnerability Assessment ise 'aynı penetration testing gibidir ama açıklar exploit edilmez'. VA`nın yaptığı analiz daha çok false positive değer verse de (ki bu açığın gerçek etkisini ortaya koyamayabilir), sonuçları her zaman işe yarayacaktır. [2]
- OWASP Testing Guide: "Bizler OWASP olarak dünyada güvensiz ve uygunsuz yazılımları düzeltmeye çalışıyoruz ve OWASP Testing Guide bulmacanın çok önemli bir parçasıdır" diye ifade edilen OWASP Testing Guide içeriğinde; web uygulamalarının neden, ne zaman ve ne şekilde test edileceği, denetim prensipleri ve ilkeleri, denetim teknikleri ve OWASP Denetim Mekanizmasıyla ilgili bilgiler içermektedir [3,4].
Sonuç
İkinci yazımızın sonuna geldik. Üçüncü yazımızdan itibaren (Code Injection) teorik konulardan ziyade teknik-pratik konulara başlayacağız.
Referanslar
[1]
http://en.wikipedia.org/wiki/Penetration_testing#Black_box_vs._White_box