11.07.2015 Views

owasp ilk 10 en kritik 10 web uygulaması güvenlik zayıflıkları 2007 ...

owasp ilk 10 en kritik 10 web uygulaması güvenlik zayıflıkları 2007 ...

owasp ilk 10 en kritik 10 web uygulaması güvenlik zayıflıkları 2007 ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

OWASP İlk <strong>10</strong> <strong>2007</strong>İÇİNDEKİLERİÇİNDEKİLER...................................................................................................................................................... 3TANITIM............................................................................................................................................................. 4ÖZET.................................................................................................................................................................. 6METODOLOJİ................................................................................................................................................... 7A1- SİTELER ARASI BETİK YAZMA (XSS)......................................................................................................... 11A2- ENJEKSİYON AÇIKLARI........................................................................................................................... 15A3- ZARARLI DOSYA ÇALIŞTIRMA................................................................................................................ 18A4- EMNİYETSİZ DOĞRUDAN NESNE REFERANSI........................................................................................23A5- SİTELER ÖTESİ İSTEK SAHTECİLİĞİ (CSRF)...............................................................................................26A6- BİLGİ SIZINTISI VE UYGUNSUZ HATA IŞLEME..........................................................................................29A7- IHLAL EDILMIŞ KİMLİK DOĞRULAMA VE OTURUM YÖNETİMİ............................................................31A8- GÜVENSİZ KRİPTOGRAFİK DEPOLAMA................................................................................................34A9- GÜVENSİZ İLETİŞİMLER............................................................................................................................37A<strong>10</strong>- URL ERİŞİMİNİ KISITLAMADA BOZUKLUK.............................................................................................40BURADAN NEREYE DEVAM ETMELİ.............................................................................................................. 43REFERANSLAR................................................................................................................................................ 46MİNİ SÖZLÜK................................................................................................................................................... 483


TANITIMOWASP İlk <strong>10</strong> <strong>2007</strong>’ye hoş geldiniz. Tümüyle y<strong>en</strong>id<strong>en</strong> yazılmış bu basım, <strong>en</strong> önemli <strong>web</strong>uygulaması zayıflıklarını, bunlara karşı nasıl tedbir alınacağını ve daha fazla bilgiye erişmek içinbağlantıları içermektedir.HEDEFOWASP İlk <strong>10</strong> <strong>2007</strong>’nin birincil amacı; geliştiricileri, tasarımcıları, yazılım mimarlarını ve kurumları<strong>en</strong> çok rastlanılan <strong>web</strong> uygulaması güv<strong>en</strong>lik zayıflıklarının önemi konusunda eğitmektir. İlk <strong>10</strong>, buzayıflıklara karşı korunmanın basit yöntemlerini içermektedir, “Güv<strong>en</strong>li kodlama” güv<strong>en</strong>likprogramına başlamanız için mükemmel bir noktadır.Güv<strong>en</strong>lik bir süreçtir (Güv<strong>en</strong>lik tek anlık bir olay değildir). Kodunuzu bir seferde güv<strong>en</strong>li halegetirmek mümkün değildir. 2008 yılı itibari ile bu İlk <strong>10</strong> listesi değişmiş olacak, kodunuzda tek satırbile bir değişiklik yapmadan tüm güv<strong>en</strong>lik açıklarına karşı korunmanız mümkün olmayacak vegüv<strong>en</strong>lik zayıflıklarınız olacaktır. Daha fazla bilgi için Buradan nereye devam etmeli bölümündekiönerileri gözd<strong>en</strong> geçirin.Bir güv<strong>en</strong>li kodlama birimi program yaşam döngüsünün tüm basamakları ile ilgil<strong>en</strong>melidir.Güv<strong>en</strong>li <strong>web</strong> uygulamalarının geliştirilmesi sadece güv<strong>en</strong>li bir SDLC ( Yazılım geliştirme yaşamdöngüsü) kullanıldığında mümkündür. Güv<strong>en</strong>li yazılımlar tasarım sürecinde, geliştirme sürecindeve çıktığı anda güv<strong>en</strong>lidir. Bir <strong>web</strong> uygulamasının güv<strong>en</strong>liğini etkiley<strong>en</strong> <strong>en</strong> az 300 etk<strong>en</strong>mevcuttur. Bu 300+ etk<strong>en</strong> her <strong>web</strong> uygulama geliştiricisinin okuması gerek<strong>en</strong> OWASPKlavuzu’nda belirtilmiştir.Bu doküman bir standart değil, her şeyd<strong>en</strong> önce bir eğitim dokümanıdır. Lütf<strong>en</strong> bu dokümanıbizimle iletişime geçmed<strong>en</strong> bir politika ya da standart olarak b<strong>en</strong>imsemeyin. Eğer bir güv<strong>en</strong>likodlama politikasına ya da standardına ihtiyacınız varsa, OWASP tarafından yürütülmekte olangüv<strong>en</strong>li kodlama politikaları ve standartları belirleme projeleri bulunmaktadır. Lütf<strong>en</strong> bunlarakatılın ya da bu çalışmaları maddi olarak destekleyin.TEŞEKKÜRLERMITRE’ye CVE verisindeki Zayıflık Tip Dağılımlarını serbest kullanımaaçtığı için teşekkürler. OWASP Top T<strong>en</strong> projesi Aspect Security’ninönderliği ve sponsorluğunda yürütülmüştür.Proje Yöneticisi: Andrew van der Stock (Yürütücü Direktör, OWASP Kuruluşu)Alt Yürütücüler: Jeff Williams (Üye, OWASP Kuruluşu), Dave Wichers (Konferans Üyesi, OWASPKuruluşu)D<strong>en</strong>etm<strong>en</strong>lerimize teşekkür etmek istiyoruz:• Raoul Endres’e Top T<strong>en</strong> projesinin tekrar yürütülmesine yardımcı olduğu için ve değerliyorumları için4


OWASP İlk <strong>10</strong> <strong>2007</strong>• Steve Christey’e (MITRE) g<strong>en</strong>iş kapsamlı ve önemli değerl<strong>en</strong>dirmeleri ve MITRE verilerinieklediği için• Jeremiah Grossman’a (White Hat Security) önemli değerl<strong>en</strong>dirmeleri ve otomatikalgılama sistemlerinin başarısı( yada tam tersi) hakkında eklediği bilgiler için• Sylvan von Stuppe’ye önemli değerl<strong>en</strong>dirmeleri için• Colin Wong, Nigel Evans, Andre Gironda, Neil Smithline e-posta ile ulaştırdıkları yorumlarıiçin5


ÖZETA1 – Siteler Arası Betik Yazma(XSS)A2 – Enjeksiyon Tasarım HatasıA3 – Zararlı Dosya ÇalıştırmaA4 – Güv<strong>en</strong>siz DoğrudanNesne BaşvurusuA5 – Siteler Ötesi İstekSahteciliği (CSRF)A6 – Bilgi Sızıntısı ve UygunsuzHata İşlemeA7 – İhlal Edilmiş KimlikDoğrulama ve OturumYönetimiA8 – Güv<strong>en</strong>siz KriptografikDepolamaA9 – Güv<strong>en</strong>siz İletişimlerA<strong>10</strong> – URL Erişimini KısıtlamadaBozuklukXSS açıkları uygulama kullanıcıdan veri alıp, bunları herhangi bir kodlamaya da doğrulama işlemine tabi tutmadan sayfaya göndermesi ile oluşur.XSS saldırganın kurbanın tarayıcısında kullanıcı oturumları bilgilerinçalınmasına, <strong>web</strong> sitesinin tahrif edilmesine veya solucan yükl<strong>en</strong>mesinesebep olan betik çalıştırmasına izin verir .Enjeksiyon saldırılarına , özellikle SQL <strong>en</strong>jeksiyonu, <strong>web</strong> sitelerinde sıkçarastlanmaktadır . Enjeksiyon, kullanıcı tarafından alınan verininyorumlayıcıya (interpreter) komut ya da sorgunun bir parçası olarakgönderilmesi durumda oluşur. Saldırganın düşmanca gönderdiği verileryorumlayıcının ist<strong>en</strong>mey<strong>en</strong> komutları çalıştırmasına veya veriyideğiştirmesine sebep olur.Uzaktan Dosya Ekleme (RFI) ataklarına karşı zayıflıkları olan kod, saldırganınsunucunun güv<strong>en</strong>liğini tehlikeye düşürebilecek kadar tehlikeli düşmancakodlar ve veriler yüklemesine yol açar. Kötü amaçlı dosya çalıştırılmasıkullanıcıdan dosya adı veya dosya kabul ed<strong>en</strong> PHP, XML veya herhangi birçerçeveyi (framework) etkileyebilir.Doğrudan Nesne Referanslama; geliştirici dosya, dizin, veritabanı kaydı gibibir bilgiyi URL veya form parametresi olarak alıp bunu uygulamayareferans olarak tanımladığı zaman oluşur. Böylece saldırgan referansımanipule ederek yetkisi olmayan nesnelere erişebilir.CSRF saldırıları; sisteme girişi yapmış mağdura ait tarayıcının, bir <strong>web</strong>uygulamasına sonradan saldırganın yararına olacak, düşmancahazırlanmış ve önced<strong>en</strong> doğrulanmış bir istek göndermesine sebep olur.CSRF, saldırdığı <strong>web</strong> uygulaması kadar güçlü olabilir.Uygulamalar istemed<strong>en</strong> de olsa yapılandırmaları, iç işleyişleri hakkında bilgisızdırabilir veya uygulama sorunlarından dolayı güv<strong>en</strong>lik ihlallerine yolaçabilir.Saldırganlar bu zayıflıkları daha ciddi saldırılar gerçekleştirmek veya önemlibilgileri çalmak için kullanabilir.Hesap Bilgileri ve oturum anahtarları çoğu zaman düzgün olarakkorunmamaktadır. Saldırganlar şifreleri ve kimlik d<strong>en</strong>etimi anahtarlarınıkullanıcının diğer bilgilerini elde etmek için kullanabilirler.Web uygulamaları verilerin ve bilgilerin güv<strong>en</strong>liğini sağlamak için nadir<strong>en</strong>kriptografik fonksiyonları kullanırlar. Saldırganlar zayıfça korunan veriyi,kimlik hırsızlığı ve kredi kartı dolandırıcılığı gibi diğer suçları işlemek içinkullanırlar.Uygulamalar önemli iletişim bilgilerini ve veri alış verişlerini korumalarıgerekirk<strong>en</strong>, çoğu zaman ağ trafiğini şifrelemekte yetersiz kalmaktadırlar.Çoğu zaman uygulamalar, bağlantı ve URL satırlarını yetkili olmayankullanıcılara sadece göstermeyerek hassas işlevselliği korumaktadırlar.Saldırganlar bu URL’lere doğrudan erişerek, yetkisi olmayan işlemlerigerçekleştirmek için bu zayıflığı kullanabilirler.Tablo 1: <strong>2007</strong> için İlk <strong>10</strong> Web uygulama açıkları6


OWASP İlk <strong>10</strong> <strong>2007</strong>METODOLOJİİlk <strong>10</strong> <strong>2007</strong> için metodolojimiz basitti: 2006 için MITRE Zayıflık Eğilimlerini aldık ve İlk <strong>10</strong> <strong>web</strong>uygulama güv<strong>en</strong>lik sorununu tespit ettik. Dereceye gir<strong>en</strong> sonuçlara ait grafik aşağıdadır.Figür 2: 2006 için İlk <strong>10</strong> <strong>web</strong> uygulama açıkları için MITRE verisiMITRE ham açıklar verisi ile bölüm başlıklarının birebir uyuşmasına öz<strong>en</strong> göstermiş olsak da, kasıtlıolarak son bölümleri temel etk<strong>en</strong>leri işaret etmesi için değiştirdik. MITRE’nin 2006 ham verileri ileilgil<strong>en</strong>iyorsanız, OWASP İlk <strong>10</strong> <strong>web</strong> sitesinde verileri içer<strong>en</strong> bir Excel çalışma sayfası bulunmaktadır.Bütün korunma önerileri <strong>en</strong> yaygın 3 <strong>web</strong> uygulama altyapısı olan Java EE, ASP.NET ve PHP içinçözümler içermektedir. Ruby on Rails veya Perl gibi altyapılarda ise önerilerimiz belirligereksinimlere kolayca adapte edilebilecek yapıdadır.NEDEN BAZI ÖNEMLİ SORUNLARI LİSTEDEN ÇIKARTTIKKontrol Edilmemiş değer, her geliştirme ekibi için zorlu bir uğraştır ve çoğu uygulama güv<strong>en</strong>likaçığının temelinde yer alır. Nitekim diğer konuların büyük çoğunluğu çözümün bir parçası olarakdeğerlerin kontrolünü önermektedir. Hal<strong>en</strong> sıkı bir biçimde <strong>web</strong> uygulamalarının bir parçasıolarak merkezi bir değer kontrol mekanizmasının geliştirilmesini önermekteyiz. Daha fazla bilgi için,aşağıdaki linkleri takip ederek OWASP sitesinde bulunan değer kontrol makalelerini okuyunuz: http://www.<strong>owasp</strong>.org/index.php/Data_Validation http://www.<strong>owasp</strong>.org/index.php/Testing_for_Data_ValidationArabellek taşmaları, tam sayı taşmaları ve metin biçimleme sorunları, C ve C++ dillerindeyazılmış uygulamalar için çok ciddi zayıflıklardır. Bu sorunlar için çözümler, <strong>web</strong> uygulaması dışıkonularda oluşturulmuş SANS ve CERT gibi güv<strong>en</strong>lik toplulukları ve programlama dili araçgeliştiricileri tarafından ele alınmıştır. Eğer kodunuz bu sorunlara sebep olabilecek bir dildeyazılmış ise, size OWASP’da bulunan aşağıdaki makaleleri okumanızı tavsiye ediyoruz: http://www.<strong>owasp</strong>.org/index.php/Buffer_overflow http://www.<strong>owasp</strong>.org/index.php/Testing_for_Buffer_Overflow7


Hizmet dışı bırakma (DOS), herhangi bir dilde yazılmış siteyi etkileyebilecek ciddi bir saldırdır.MITRE verilerine göre DOS bu s<strong>en</strong>e İlk <strong>10</strong> sıralamasına girmek için yeterli değildir. DOS ileilgil<strong>en</strong>iyorsanız OWASP sitesinde bulunan makale ve d<strong>en</strong>eme yönergelerini inceleyebilirsiniz: http://www.<strong>owasp</strong>.org/index.php/Category:D<strong>en</strong>ial_of_Service_Attack http://www.<strong>owasp</strong>.org/index.php/Testing_for_D<strong>en</strong>ial_of_ServiceGüv<strong>en</strong>li olmayan yapılandırma yönetimi, başta PHP olmak üzere tüm sistemleri etkiler. FakatMITRE’deki sıralaması bu s<strong>en</strong>e bu konuya değinmemize izin vermiyor. Uygulamanızı sunucuüzerine koyark<strong>en</strong> güv<strong>en</strong>li yapılandırma yönetimi ve d<strong>en</strong>emesi hakkında OWASP sitesinde yazılmışolan makaleleri inceleyin: http://www.<strong>owasp</strong>.org/index.php/Configuration http://www.<strong>owasp</strong>.org/index.php/Testing_for_infrastructure_configuration_managem<strong>en</strong>tNEDEN BAZI ÖNEMLİ KONULARI EKLEDİKSiteler Ötesi İstek Sahteciliği (CSRF), OWASP İlk <strong>10</strong>’un bu sürümüne ekl<strong>en</strong><strong>en</strong> <strong>en</strong> büyük y<strong>en</strong>iliktir.Ham verilerde 36. sırada görünmesine rağm<strong>en</strong>, biz uygulamaların, özellikle de önemli verilerleuğraşan ve değerli uygulamaların, korunma girişimlerine bugünd<strong>en</strong> başlaması gerektiğineinanıyoruz. CSRF sıralamasının belirttiğind<strong>en</strong> daha yaygın ve çok tehlikeli bir açıktır.Kritografinin güv<strong>en</strong>lik kaygısı gütmeksizin kullanılması, ham MITRE verisine göre 8. ve 9. sıradakigüv<strong>en</strong>lik açıklarının sebebi değildir, fakat birçok bilgi sızması ve uyumluluk sorunun temeletk<strong>en</strong>idir. (Özellikle PCI DSS 1.1 uyumluluğu ile beraber)ATAKLAR DEĞİL ZAYIFLIKLARİlk <strong>10</strong>’un bir önceki versiyonu; zayıflıklar, ataklar ve korunma yöntemlerinin bir karışımını içeriyordu.Bu sefer tümüyle zayıflıklar üzerine yoğunlaştık fakat kullanılan terminoloji çoğu zaman atak vezayıflığı birleştiriyor. Eğer kuruluşlar, bu dokümanı uygulamalarının güv<strong>en</strong>liğini arttırmak ve riskleriazaltmak için kullanırlarsa büyük olasılıkla aşağıdakilerde azalma yaşayacaklardır:Parola Balıkçılığı (Phishing) saldırıları bu zayıflıklardan herhangi birini tetikleyebilir. ÖzellikleXSS ve zayıf güv<strong>en</strong>lik kontrolleri ya da kimlik doğrulama işlemleri (A1, A4, A7, A<strong>10</strong>) Gizlilik ihlalleri zayıf kontrol, iş süreçleri ve zayıf kimlik doğrulama işlemleri (A2, A4, A6, A7,A<strong>10</strong>)Kimlik hırsızlığı zayıf ya da bulunmayan kriptografik kontroller (A8 ve A9), uzak dosya dahiletme (A3) zayıf güv<strong>en</strong>lik kontrolleri ya da kimlik doğrulama işlemleri (A4, A7, A<strong>10</strong>)Sistem uyuşmazlığı, veri değiştirme veya veri bozma saldırıları Enjeksiyon (A2) ve uzakdosya dahil etme ile (A3) Finansal kayıp yetkisiz hareketler ve CSRF atakları ile (A4, A5, A7, A<strong>10</strong>) İtibar kaybı yukarıdaki herhangi bir zayıflığın istismarı ile (A1 … A<strong>10</strong>)Bir kuruluş tepkisel (reactive) kontroller hakkında <strong>en</strong>dişe duymayı bırakıp işlerindekarşılaşabilecekleri riskleri insiyatifi ele alarak (proaktive) azaltma yoluna giderse; düz<strong>en</strong>leyici8


OWASP İlk <strong>10</strong> <strong>2007</strong>rejimlerle olan uyumluluğunu arttır, işlemsel giderleri azaltır ve sonuç olarak arzulanan çok dahasağlıklı ve güv<strong>en</strong>li bir sisteme sahip olurlar.EĞİLİMLERYukarıda tanımlanan metodoloji, güv<strong>en</strong>lik araştırma topluluklarının keşiflerine göre İlk <strong>10</strong>’untanımlanmasına yön vermiştir. Bu keşif modeli gerçek saldırı metodlarıyla özellikle giriş seviyesi(script kiddy) saldırganlarla ilgili olması bakımından b<strong>en</strong>zerlik gösterir. Uygulamanızı İlk <strong>10</strong>’a karşıkorumak, sık rastlanan saldırı çeşitlerine karşı bir parça da olsa güv<strong>en</strong>liğinizi sağlayacaktır; fakatdaha önemlisi, uygulamanızın güv<strong>en</strong>liğini arttırmak için bir yön belirlem<strong>en</strong>ize yardımcı olacaktır.9


KONUMLANDIRMAKonularda bir önceki yıla göre bile büyük değişiklikler oldu. Artık y<strong>en</strong>i zayıflıkları, saldırıları veönlemleri karşılayacak şekilde güncell<strong>en</strong>mediği için WAS XML adlandırma şemasını kullanmıyoruz.Aşağıdaki tablo, İlk <strong>10</strong> 2004 ve ham MITRE verilerine göre bu versiyonun konumunu belirtmektedir:OWASP İlk <strong>10</strong> <strong>2007</strong> OWASP İlk <strong>10</strong> 2004 MITRE 2006Ham SıralamaA1. Siteler Arası Betik Yazma (XSS) A4. Siteler Arası Betik Yazma (XSS) 1A2. Enjeksiyon Saldırıları A6. Enjeksiyon Saldırıları 2A3. Kötü amaçlı Dosya Çalıştırılması (YENİ) 3A4. Güv<strong>en</strong>li olmayan Direk NesneReferanslamaA5. Sunucu Taraflı Çapraz Kod Çalıştırma(CSRF) (YENİ)A2. İhlal Edilmiş Erişim Kontrolü (<strong>2007</strong> T<strong>10</strong> daayrıldı)536A6. Bilgi Sızdırma ve Uygun olmayan HataKontrolüA7. Uygun olmayan Hata Kontrolü 6A7. İhlal Edilmiş Kimlik Doğrulama veOturum YönetimiA3. İhlal Edilmiş Kimlik Doğrulama ve OturumYönetimi14A8. Güv<strong>en</strong>liği Sağlanmamış KriptografikDepolamaA8. Güv<strong>en</strong>siz Depolama 8A9. Güv<strong>en</strong>siz İletişimler (YENİ) A<strong>10</strong> Güv<strong>en</strong>siz Yapılandırma Yönetimi konusualtında tartışıldı8A<strong>10</strong>. URL’ye Erişimi Engelleyememe A2. İhlal Edilmiş Erişim D<strong>en</strong>etimi (<strong>2007</strong> T<strong>10</strong> daayrıldı)< <strong>2007</strong> de kaldırıldı>< <strong>2007</strong> de kaldırıldı>< <strong>2007</strong> de kaldırıldı>A1. Kontrol Edilmemiş Değerler 7A5. Arabellek Taşması 4, 8 ve <strong>10</strong>A9. Servis Reddi 17A<strong>10</strong>. Güv<strong>en</strong>siz Yapılandırma Yönetimi 2914<strong>10</strong>


OWASP İlk <strong>10</strong> <strong>2007</strong>A1- SİTELER ARASI BETİK YAZMA (XSS)Siteler Arası Betik Yazma (Cross Site Scripting), çoğunlukla XSS olarak bilin<strong>en</strong>, HTML <strong>en</strong>jeksiyonyönteminin bir alt kümesidir. XSS, çok yaygın ve zararlı bir <strong>web</strong> uygulaması güv<strong>en</strong>lik sorunudur. XSS, biruygulamadaki eksiklikt<strong>en</strong> kaynaklı olarak, bir kullanıcıdan <strong>web</strong> tarayıcı aracılığı ile veri alındığında,kullanıcının içeriği onaylamasından ve kodlamasından bağımsız olarak gerçekleşir.XSS, saldırgana kurbanın tarayıcısında betik çalıştırmaya izin verip, kullanıcının oturum bilgilerini çalabilir,<strong>web</strong> sitesine zarar verebilir, saldırgana ait içerik siteye girilebilir, site parola balıkçılığı (phishing)saldırılarını iletir duruma getirilebilir ve kötü niyetli yazılım çalıştırılabilir.Kötü niyetli betiklerde çoğunlukla JavaScript kullanılır, fakat kullanıcının <strong>web</strong> tarayıcısının desteklediğiherhangi bir betik dili de saldırgan için potansiyel hedef dildir.ETKİLENEN ORTAMLARBütün <strong>web</strong> uygulama yapıları, Siteler Arası Betik Yazma için saldırıya uygun ortamlardır.ZAYIFLIKSiteler Arası Betik Yazma'nın bilin<strong>en</strong> üç türü bulunmaktadır: Yansıyan, Depolanmış ve DOM <strong>en</strong>jeksiyonu.Yansıyan XSS, <strong>en</strong> basit yapıda gerçekl<strong>en</strong>miş açıktır (exploit). Burada kullanıcı veri kaynakları bir <strong>web</strong>sayfasıyla doğrudan yansıtılacaktır:echo $_REQUEST['userinput'];Depolanmış XSS, saldırganın verilerini alarak, bir dosyanın içerisine, bir veritabanına veya herhangi birdiğer arka planda çalışan sisteme yazarak, bir sonraki aşamada bu bilgileri filtrelemeksizin kullanıcılaragöstermesi sonucunda ortaya çıkar. Bu CMS'ler, bloglar ve forumlar için son derece tehlikelidir. Buyöntemle çok sayıda kullanıcının bilgileri diğer kişiler tarafından görülebilir.DOM tabanlı XSS saldırıları ise, sitelerin Javascript kod ve değişk<strong>en</strong>lerinin değiştirilmesi ile ortaya çıkar.Alternatif olarak, saldırgan, üç XSS tipini melez (harmanlanmış) olarak da kullanabilir. Tehlike, XSS'intipind<strong>en</strong> değil, XSS'd<strong>en</strong> kaynaklıdır. Ancak bazı durumlar daha tehlikeli olabilir. XSS, standart olmayanveya bekl<strong>en</strong>ilmedik <strong>web</strong> tarayıcı davranışlarının zekice yönl<strong>en</strong>dirilmesi ile ortaya çıkar. XSS ayrıca <strong>web</strong>tarayıcının kullandığı bileş<strong>en</strong>lere de karşılıklı olarak ulaşma imkanı verir.Saldırılarda çoğunlukla çok güçlü olan betik dili olan Javascript kullanılır. Javascript'in kullanılması,saldırgana sayfanın görünümü değiştirmesine, y<strong>en</strong>i bir öğe ekl<strong>en</strong>mesine (Örneğin saldırganın sitesinekullanıcı bilgileri gönderecek bir oturum açma elemanı ekl<strong>en</strong>mesine) olanak verir. Dahili DOM ağaç yapısıkullanılarak sayfanın doku ve görünümü değiştirilebilir veya silinebilir. Javascript XmlHttpRequestkomutunun kullanımına izin verir ve tipik olarak bu komut AJAX teknolojilerinde kullanılmasına rağm<strong>en</strong>,günümüzde AJAX kullanmayan siteler de hedef durumundadır.XmlHttpRequest kullanımıyla, baz<strong>en</strong> bir <strong>web</strong> tarayıcının izin verdiği kaynaklarının etrafından dolaşmasısağlanarak; kurbanın verileri saldırganın sitesine yönl<strong>en</strong>dirilebilir ve karmaşık worm ve zararlı zombikodları oluşturularak <strong>web</strong> tarayıcısı çalıştığı sürece kullanılabilir. AJAX saldırıları, tehlikeli "cross siterequest forgery" (CSRF) (Siteler Ötesi İstek Sahteciliği) yapmak için görünür olmak zorunda değildir veyakullanıcı etkileşimi gerektirmemektedir (A-5 bölümüne bakınız.)11


GÜVENLİĞİN DOĞRULANMASIBurada amaç, HTML sayfalarının içeriğinin şifrel<strong>en</strong>med<strong>en</strong> veya onaylanmadan önce, uygulamadakullanılabilecek bütün parametreler doğrulanmalıdır.Otomatik yapılan yaklaşımlar : Otomatik zayıflık araçlar, XSS <strong>en</strong>jeksiyon parametrelerini kullanarakzayıflıkları saptayabilir, ancak sürekli değiş<strong>en</strong> XSS saldırılarında başarılı olamaz, özellikle XSS<strong>en</strong>jeksiyonu, Kimlik kontrolü yöntemi ile <strong>en</strong>gell<strong>en</strong>ir (örneğin, eğer bir kullanıcı girişleri, saldırgan kodiçeriyorsa bunu ancak sistem yöneticisi görebilir). Otomatikleştirilmiş kaynak kodu tarama araçları zayıf vetehlikeli kodları bulabilir, fakat çoğunlukla onaylanmış veya şifrel<strong>en</strong>miş tehlikeleri saptayamaz, bununyanında yanlış uyarılar verebilir. Hiçbir araç tipi DOM tabanlı XSS saldırılarını bulamaz, bunun anlamıyalnızca otomatik test araçları ile taranan Ajax tabanlı uygulamaların çoğunlukla risk altında olduğudur.El ile yapılan yaklaşımlar: Eğer merkezi bir doğrulama ve kodlama mekanizması kullanıldığında,çoğunlukla kodların güv<strong>en</strong>liğini el ile kontrol etmek de bir yoldur. Eğer dağınık bir uygulama yapısıkullanılıyorsa, doğrulama çok fazla zaman alacaktır. Test süresi çok fazla zaman alacaktır, çünkü çoğuuygulama çok g<strong>en</strong>iş bir saldırı yüzeyine yayılmıştır.KORUNMAXSS için <strong>en</strong> iyi korunma, bir kontrol listesi ile, bütün gel<strong>en</strong> verileri ve kodlayarak gid<strong>en</strong> verilerin tümünükarşılaştırarak zararlı verileri bulmaktır. Kontrold<strong>en</strong> geçmeyi başaran saldırılar ve kodlanmış bölümlerd<strong>en</strong>gel<strong>en</strong> betik <strong>en</strong>jeksiyonları <strong>web</strong> tarayıcıda çalışacaktır.XSS'in tamam<strong>en</strong> önüne geçmek için yapısal tutarlılığı kontrol edecek bir uygulama gerektirir. Buuygulamalar aşağıdaki gibidir:●●●●Gel<strong>en</strong> verilerin doğrulanması : Bunun için, öncelikle gel<strong>en</strong> verilerin uzunluğu, tipi, söz dizimi veyerine göre kullanım kurallarını kontrol edildikt<strong>en</strong> sonra verinin görüntül<strong>en</strong>ebileceği veya kayıtedilebileceği, standart bir doğrulama mekanizması kullanılır. Bunun için "Bilginin iyi niyetli olduğukabul edildi" doğrulama stratejisi kullanılmalıdır. Potansiyel kötü niyetli veriler reddedilerek,sistemd<strong>en</strong> sterilize edilmelidir. Unutulmaması gerek<strong>en</strong> bir nokta hata mesajlarının içeriğisaldırganın işine yarayacak bilgi içermemelidir.Çıkan verilerin güçlü bir şekilde şifrel<strong>en</strong>mesi : Garantiye almak için, bütün kullanıcı kaynaklıveriler gönderilmed<strong>en</strong> önce (HTML veya XML'e bağlı bir çıkış mekanizmasına) uygun bir şekildekodlanmalıdır. Kodlanan tüm verilerin dışında kalması gerek<strong>en</strong> verilerde bir araç ile kontroledilmelidir. Bunun için Microsoft Anti-XSS kütüphanesi ve yakında yayınlanacak olan OWASPPHP Anti-XSS kütüphanesi kullanılabilir. Bunun yanında her sayfanın karakter kodlamasının daönced<strong>en</strong> ayarlanması riskleri azaltacaktır.Belirli Çıkış verisi kodlaması : (Örneğin IS0 8859-1 veya UTF 8). Bu sayede saldırganın,kullanıcılarınız için kodlamayı seçmesine izin verilmemiş olunur.Kara liste araçları kullanmayın : Kodlanmış çıktıların, sisteme girişindeki XSS'leri saptamak içinkara liste kullanmayın. Yanlızca birkaç karakterd<strong>en</strong> oluşan ("" ve diğer b<strong>en</strong>zer karakteröbekleri veya betik gibi) kodları kontrol ederek sil<strong>en</strong> yapılar zayıf ve saldırılmaya uygundur.Örneğin böyle bir uygulamada çift"" etiketi kontrol edilemez ve bu durum b<strong>en</strong>zer içerikleriçinde geçerlidir. XSS çok sayıda sürpriz yöntemler içereceğind<strong>en</strong> kolaylıkla kara liste kontrolügeçilebilir.12


OWASP İlk <strong>10</strong> <strong>2007</strong>●Varsayılan hata çıktılarını izl<strong>en</strong>mesi : Çoğunlukla sisteme gel<strong>en</strong> verilerin kodun çözülmesininardından kullanılan dahili yazılım ile gösterilmed<strong>en</strong> önce kontrol edilmelidir. Elbette kiuygulamanız iki kez giril<strong>en</strong> b<strong>en</strong>zer veri girişlerinin kodu çözülemeyecektir. Bu şekilde tehlikeli verigirişleri ile hatalar kullanılarak, kontrol işlemini gerçekleştir<strong>en</strong> beyaz liste şemaları atlatılabilir.Kullanılan dil için belirli öneriler:● Java : Veri çıkış mekanizmasını destekleyecek kod kullanmak. Örneğin ,veya standart olarak kullanılan JSTL escapeXML="true" bağlı olan . yapısını iç içe kullanmayın (Diğer bir yandan, bu tam anlamıyla kodlanmış bir veri çıkışmekanizması olacaktır.)●●.NET: Microsoft Anti-XSS Kütüphanesinin kullanımı : MSDN'd<strong>en</strong> 1.5 sürümüne rahatlıklaerişebilirsiniz. Bu kütüphan<strong>en</strong>in kullanımıyla, “Request” nesnesi ile atanmamış form alanlarındakiveriler: : username.Text = Request.QueryString("username"); bu kütüphaneyi kullanacaktır. Yani.NET kontrollerind<strong>en</strong> çıkan verileri otomatik olarak kodlanacaktır.PHP: Çıktı verilerine güv<strong>en</strong>memek : html<strong>en</strong>tities() veya htmlspecialchars() veya tercihanOWASP PHP Anti-XSS kütüphanesini kullanın. H<strong>en</strong>üz kapatmamışsanız register_globals'ikapatın.ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-4206 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2005-3966 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-5204REFERANSLARCWE: CWE- 79, Siteler Arası Betik Yazma (XSS)WASC Tehlike sınıflandırması : http://www.<strong>web</strong>appsec.org/projects/threat/classes/crosssite_scripting.shtmlOWASP- Siteler Arası Betik Yazma, http://www.<strong>owasp</strong>.org/index.php/Cross_Site_ScriptingOWASP- XSS için d<strong>en</strong>eme yapmak,http://www.<strong>owasp</strong>.org/index.php/Testing_for_Cross_site_scriptingOWASP Stinger Projesi (Java EE kontrol filtresi),http://www.<strong>owasp</strong>.org/index.php/Category:OWASP_Stinger_ProjectOWASP PHP Filtre Projesi http://www.<strong>owasp</strong>.org/index.php/OWASP_PHP_FiltersOWASP Kodlama projesi - http://www.<strong>owasp</strong>.org/index.php/Category:OWASP_Encoding_ProjectRSnake, XSS Aldatma Katmanı, http://ha.ckers.org/xss.htmlKlein, A.,DOM Tabanlı Siteler Arası Betik Yazma,http://www.<strong>web</strong>appsec.org/projects/articles/071<strong>10</strong>5.shtml13


.NET Anti-XSS Kütüphanesi,http://www.microsoft.com/downloads/details.aspx?FamilyID=efb9c819-53ff-4f82-bfafe11625130c25&DisplayLang=<strong>en</strong>14


OWASP İlk <strong>10</strong> <strong>2007</strong>A2- ENJEKSİYON AÇIKLARIEnjeksiyon açıkları, özellikle SQL <strong>en</strong>jeksiyon, <strong>web</strong> uygulamalarında ortak bir açıktır. Çok fazla tipte<strong>en</strong>jeksiyon tipi vardır: SQL, LDAP, Xpath, XSLT, HTML, XML, OS komutları ile <strong>en</strong>jeksiyon ve dahafazlası.Enjeksiyon, kullanıcı kaynaklı veri içerisinde bir komut veya sorgunun bir bölümünün yorumlayıcıyagönderilmesiyle gerçekleştirilir. Saldırganlar, ustalıkla planlanmış komutlar aracılığıyla, yorumlayıcıyaçalışabilir komutlar göndererek özel veri alanlarına erişim sağlarlar. Enjeksiyon açıkları, uygulamaüzerind<strong>en</strong> saldırganların isteğine bağlı olarak, oluşturma, okuma, güncelleştirme veya silme izinlerind<strong>en</strong>herhangi birini verir. En kötü durum s<strong>en</strong>aryosu, bu açıklardan yararlanan saldırganın tamam<strong>en</strong> uygulamave önemli sistem bileş<strong>en</strong>leri ile güv<strong>en</strong>lik duvarı katmanına erişebilmesidir.ETKİLENEN ORTAMLARYorumlayıcıları kullanan bütün <strong>web</strong> uygulamaları veya <strong>en</strong>jeksiyon saldırılarına açık diğer işlemler busaldırıdan etkil<strong>en</strong>irler. Saldırganlar, <strong>en</strong>jeksiyon yöntemi ile kullanılan uygulamalardan yararlanarak, arkaplandaki yorumlayıcılara da erişebilirler.ZAYIFLIKEğer kullanıcı, onaylanmış veya kodlanmış verinin dışındaki bir veriyi yorumlayıcıya gönderiyorsa,uygulama saldırıya açıktır. Örnek için, aşağıdaki kullanıcı kaynaklı dinamik sorguları kontrol ediniz:PHP:$sql = "SELECT * FROM table WHERE id = '" . $_REQUEST['id’] . "’";Java:String query = "SELECT user_id FROM user_data WHERE user_name = '" +req.getParameter("userID") + "' and user_password = '" + req.getParameter("pwd") +"'";GÜVENLİĞİN DOĞRULANMASIBurada amaç, kullanıcı verisi değiştirilmed<strong>en</strong>, uygulama aracılığıyla yorumlayıcıya komut veya sorgugönderilip gönderilmediğini kontrol etmektir.Otomatik Yapılan Yaklaşımlar: Çoğu zayıflık tarama aracı <strong>en</strong>jeksiyon problemlerini tarar, Özellikle deSQL Enjeksiyonunu. Statik analiz araçları, güv<strong>en</strong>li olmayan yorumlayıcı API'lerini taramak için oldukçakullanışlıdır, fakat sıklıkla doğrulanmış veya kodlanmış koruma yöntemlerine karşı zayıflıklarıyakalayamazlar. Eğer uygulama 501 veya 500 dahili sunucu hatası veya detaylı veritabanı hatalarıveriyorsa, otomatik araçlar ile önlem alınabilir, fakat kod hala risk altında olabilir. Otomatik araçlarLDAP/XML <strong>en</strong>jeksiyonları ile /XPAth Enjeksiyonlarını saptayabilir.Elle Yapılan Yaklaşımlar: Bu yorumlayıcıya gönderil<strong>en</strong> kodlar ile çok etkili ve tam bir kontrol sağlar. Buişlemin eleştirilecek yanı ise Güv<strong>en</strong>li API'lerin kullanımının, kodlanmış ve doğrulanmış bölgeler için kontroledilmelidir. Bu test işlemi son derece fazla zaman alacaktır ve düşük kapsamlı olacaktır, çünküuygulamaların büyüklüğü ned<strong>en</strong>iyle saldırı yüzeyi çok g<strong>en</strong>iş olacaktır.15


KORUNMAYorumlayıcıların kullanımından kaçınılmalıdır. Eğer yorumlayıcıya istek göndereceks<strong>en</strong>iz, <strong>en</strong>jeksiyondankaçınmanın anahtar yöntemi API'lerin kullanımıdır, Örneğin güçlü sorgu ve ilişkili nesne haritalamakütüphaneleri (ORM) kullanılabilir.Bu arayüzler, bütün verileri gözd<strong>en</strong> geçirir veya bu geçişleri gerektirmeyebilir. Önemli olan arayüzleringüv<strong>en</strong>liğine karşın, problem saldırıları saptamak için belirli bir metodun olmamasıdır.Yorumlayıcıların kullanımı tehlikelidir, öyle ki bu kullanımın önemi, ek dikkat gerektirir:●●●●●●●●●Giril<strong>en</strong> verilerin doğrulanması: Bunun için, öncelikle gel<strong>en</strong> verilerin uzunluğu, tipi, sözdizimi veyerine göre kullanım kurallarını kontrol edildikt<strong>en</strong> sonra verinin görüntül<strong>en</strong>ebileceği veya kayıtedilebileceği, standart bir doğrulama mekanizması kullanılır. Bunun için "Bilginin iyi niyetli olduğukabul edildi" doğrulama stratejisi kullanılmalıdır. Potansiyel kötü niyetli veriler reddedilerek,sistemd<strong>en</strong> sterilize edilmelidir. Unutulmaması gerek<strong>en</strong> bir nokta hata mesajlarının içeriğisaldırganın işine yarayacak bilgi içermemelidir.API'lerde güçlü sorgu parametre tipleri kullanılmalıdır. Depolanmış prosedürler çağrıldığında,işaretçilerin yerine güçlü tipteki sorgular koyulmalıdır.En düşük ayrıcalık verilmeli. Veritabanına ve diğer arka plan uygulamalarına bağlanıldığında <strong>en</strong>düşük imtiyaz ile bağlanılmalıdır.Detaylı hata mesajlarından kaçınılmalı. Saldırganın kullanabileceği detaylı hata mesajlarındankaçınılmalıdır.Kayıt edilmiş prosedürler kullanılmalıdır. Çünkü g<strong>en</strong>ellikle SQL <strong>en</strong>jeksiyonda bu yöntemgüv<strong>en</strong>lidir. Bunun yanında, dikkatli bir şekilde <strong>en</strong>jeksiyon yapılabilir (Örneğin exec() kullanılarakveya kayıtlı prosedürleri içer<strong>en</strong> argümanlar birbirine bağlanması ile...)Dinamik sorgu arayüzlerini kullanmayın. (Örneğin mysql_query() veya b<strong>en</strong>zerleri...)Basit kaçış fonksiyonlarını kullanmayın. Örneğin PHP'nin addslashes() veya yerine koymafonksiyonu str_replace("’", "’’"). Bu fonksiyonlar saldırganlar için zayıflık oluşturacaktır. PHP için,MySQL kullanılıyorsa mysql_real_escape_string() kullanılır veya tercihan PDO kullanılabilir,böylece escape gerektirmez.Basit escape mekanizması kullanıldığı zaman , basit escape fonksiyonları, escape tabloisimleri olmamalıdır. Tablo isimleri SQL'e uygun isimlerde olmalı ve bu kullanıcı kaynaklı verigirişleri ile ilgili olmamalıdır.Varsayılan hata çıktılarını izl<strong>en</strong>mesi : Çoğunlukla sisteme gel<strong>en</strong> verilerin kodu çözüml<strong>en</strong>meli veardından kullanılan dahili yazılım ile gösterilmed<strong>en</strong> önce kontrol edilmelidir. Elbette kiuygulamanız iki kez giril<strong>en</strong> b<strong>en</strong>zer veri girişlerinin kodu çözüml<strong>en</strong>emeyebilecektir. Bu şekildetehlikeli veri girişleri ile hatalar kullanılarak, kontrol işlemini gerçekleştir<strong>en</strong> beyaz liste şemalarıatlatılabilir.Kullanılan dil için belirli öneriler:●Java EE- Güçlü tipte PreparedStatem<strong>en</strong>t kullanılmalı veya ORM'lerdeki Hibernate veya spring...16


OWASP İlk <strong>10</strong> <strong>2007</strong>●●.NET- Güçlü tipte sorgular kullanılmalıdır, örneğin SqlCommand ile SqlParameter veya ORMb<strong>en</strong>zeri hibernate'ler.PHP- PDO ile güçlü tipteki sorgular kullanılmalı (bindParam() kullanılabilir)ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-5121 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-4953 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-4592REFERANSLARCWE: CWE- 89 (SQL Enjeksiyonu), CWE- 77 (Komut Enjeksiyonu), CWE- 90 (LDAP Enjeksiyonu),CWE- 91 (XML Enjeksiyonu), CWE- 93 (CRLF Enjeksiyonu), diğerleri.WASC Tehlike sınıflandırması:http://www.<strong>web</strong>appsec.org/projects/threat/classes/ldap_injection.shtmlhttp://www.<strong>web</strong>appsec.org/projects/threat/classes/sql_injection.shtmlOWASP, http://www.<strong>owasp</strong>.org/index.php/SQL_InjectionOWASP Rehberi, http://www.<strong>owasp</strong>.org/index.php/Guide_to_SQL_Injection OWASP Kod gözd<strong>en</strong> geçirme rehberi ,http://www.<strong>owasp</strong>.org/index.php/Reviewing_Code_for_SQL_InjectionOWASP Test rehberi, http://www.<strong>owasp</strong>.org/index.php/Testing_for_SQL_InjectionSQL Enjeksiyon, http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdfGelişmiş SQL Enjeksiyon, http://www.ngssoftware.com/papers/advanced_sql_injection.pdfÇok gelişmiş SQL Enjeksiyonu,http://www.nextg<strong>en</strong>ss.com/papers/more_advanced_sql_injection.pdfHibernate, gelişmiş bir nesne ilişkil<strong>en</strong>dirme yönetimi (ORM) için J2EE ve .NET,http://www.hibernate.org/J2EE Hazırlanmış anlatımlar, http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.htmlASP.Net'de SQL Enjeksiyonlardan nasıl korunurum,http://msdn2.microsoft.com/<strong>en</strong>-us/library/ms998271.aspxPHP PDO fonksiyonları, http://php.net/pdo17


A3- ZARARLI DOSYA ÇALIŞTIRMAZararlı dosya çalıştırma zayıflığı, çok sayıda uygulamada bulunur. Bu açık, geliştiricilerin çoğunluklasisteme giril<strong>en</strong> dosyalara güv<strong>en</strong>melerind<strong>en</strong> kaynaklı olduğundan, potansiyel olarak zararlı olabilecekgirişler ile buna bağlı fonksiyonları da beraberinde kabul etmelerind<strong>en</strong> kaynaklanır. Birçok platformdakullanılan uygulamalarda, URL'ler veya sistem kaynakları gibi, dış kaynaklı nesnelerin kullanımına izinverilir. Veriler yeterince incel<strong>en</strong>mediğinde, izinsiz erişimlere ve kötü niyetli içerik ile <strong>web</strong> sunucuya istekgöndermeye ned<strong>en</strong> olur.Bu saldırgana aşağıda belirtil<strong>en</strong>leri yapma izni verir:Uzaktan kod çalıştırmaUzaktan rootkit kurma ve sistemin tamamını ele geçirmeWindows üzerinde, PHP'nin SMB dosyası kullanılarak dahili sistem ele geçirilebilir.Bu saldırı özellike PHP'de yaygındır, ve üst düzeyde dikkat gerektirir. Bu açık tipi, stream veya dosyafonksiyonu kullanılması ile önem kazanmaktadır. Burada kullanıcı kaynaklı dosya isimleri kullanıcınıninisiyatifine bırakılmaması gerekir.ETKİLENEN ORTAMLARKullanıcıdan dosya alan veya dosya isiml<strong>en</strong>dirmeye izin ver<strong>en</strong> tüm <strong>web</strong> uygulama platformları uzaktandosya çalıştırma açığına sahip olabilir. Tipik örnek içeriği : .NET platformunda, URL dosya isimlerininözellikleri ve yerel olarak seçtiği dosya ile aynı isimde olup olmamasını belirlemek kullanıcının isteğinebağlıdır.PHP özellikle saldırıya açıktır: PHP, uzaktan dosya içerik (RFI) saldırıları ile herhangi bir dosya veyaakış (stream) tabanlı API ile sisteme zarar verilebilir.ZAYIFLIKOrtak zayıflık yapısı:include $_REQUEST['fil<strong>en</strong>ame’];Bu sadece uzaktaki saldırgan betiklerin değerl<strong>en</strong>dirilmesini sağlamaz,aynı zamanda yerel dosyasunucularına erişmesini (Eğer PHP Windows işletim sistemi üzerinde çalışıyorsa) PHP'nin dosyasistemindeki SMB desteğind<strong>en</strong> dolayı sağlar.Saldırı içer<strong>en</strong> diğer yöntemler:1. Kötü niyetli oturum dosyaları, günlük verileri veya resimler sisteme yükl<strong>en</strong><strong>en</strong> platformlar (Tipikforum yazılımları)2. Sıkıştırma veya gerçek zamanlı ses yayını yapmakta kullanılan, zlib://veya ogg://gibi PHP URLbayrağının incel<strong>en</strong>mediği ve uzaktan kaynak kullanımına ( _url_fop<strong>en</strong> veya allow_url_include )izin verildiği platformlar.3. php://input veya POST isteğind<strong>en</strong> veri alınan PHP wrapper'ları kullanıldığında18


OWASP İlk <strong>10</strong> <strong>2007</strong>4. PHP verisi kullanıldığında : wrapper, data:;base64,PD9waHAgcGhwaW5mbygpOz8+ gibi…Bu liste daha da uzatılabilir. (ve periyodik olarak güncell<strong>en</strong>ebilir). Burada önemli olan, güv<strong>en</strong>liği sağlamolarak tasarlanmış bir yapıda, kullanıcı kaynaklı veri girişlerinin, sunucu tarafındaki dosya isimleri veerişimleri ile etkileşimini göz önünde bulundurmaktır.PHP örneklerine karşın bu saldırılar farklı yollarla .NET ve J2EE platformlarına da yapılabilir. Buplatformlarda uygulamalar yazılırk<strong>en</strong> özellikle kod erişim güv<strong>en</strong>liği mekanizmasına dikkat edilmeli,dosyaisimleri ihtiyacı karşılayacak biçimde yapılandırılmalı ve kullanıcıya güv<strong>en</strong>lik kontrollerine etki edebileceğiizinler verilmemelidir.Örneğin, bir saldırgan XML ayrıştırıcısını kullanarak kötü niyetli bir DTD nesnesini yükleyebilir. BirAvustralyalı güv<strong>en</strong>lik firması bu yöntemi kullanarak, güv<strong>en</strong>lik duvarının ardındaki ağ kapılarının (port)nasıl tarandığını göstermiştir. Bunun için bölüm referanslarına [SIF01] bakınız.Bu zayıflıktan kaynaklı oluşacak hasar, kullanıcının erişim bölgeleri ile sistemin arasındaki izolasyonunkontrolü ile direk ilişkilidir. PHP çok düşük bir izolasyona sahiptir ve kullanıcı erişim bölgesi yapısındaveya güv<strong>en</strong>lik mimarisinde böyle bir izolasyon yoktur.Zararlı olabilecek saldırılar diğer platformlarda sınırlı veya kısm<strong>en</strong> güv<strong>en</strong>lidir. Kapsamlı bir kullanıcı erişimbölgesi bir JVM platformunda, güv<strong>en</strong>lik yöneticisi çalışır durumda ve doğru bir şekilde yapılandırılmış isemümkündür (ki buda nadir<strong>en</strong> olur).GÜVENLİĞİN DOĞRULANMASIOtomatik yapılan yaklaşımlar: Zayıflık tarama araçları, bir dosya içeriği veya sistemde çalışması içindüz<strong>en</strong>l<strong>en</strong>miş söz dizimi kullanmak suretiyle güçlü bir tanımlama yet<strong>en</strong>eğine sahip olacaktır. İstatistikanaliz araçları API'lerin tehlikeli kullanımını tarayabilir, fakat güv<strong>en</strong>li bir alanda olduğu düşünülmesinekarşın, onaylanmış, kodlanmış alanlardaki açıkları saptayamaz.Elle yapılan yaklaşımlar: Zayıflığın bulunması için uygulama içerisine izin verilmiş özel kod taşıyan birdosya dahil edilebilir, fakat bu bilin<strong>en</strong> hataların bulunmasını sağlayacaktır. Bu şekilde zayıflıklar testedilebilir, fakat zayıflığın tanımlanması, özel parametreler ve doğru söz dizimi gerektirdiğind<strong>en</strong> zor biryöntemdir.KORUNMAUzaktan çalışabilir içeriğin önl<strong>en</strong>mesi için uygulama mimarisinin ve tasarım evrelerinin dikkatleplanlanması ve tam bir testt<strong>en</strong> geçmesi gerekmektedir. G<strong>en</strong>ellikle, iyi yazılmış uygulamalar kullanıcıkaynaklı veri girişlerinde dosya ismi ve herhangi sunucu tabanlı kaynakların ( örneğin resimler, XML veXLS dönüştürülmüş dokümanlar veya betik ekl<strong>en</strong>tileri) kullanımına izin vermem<strong>en</strong>in yanında, güv<strong>en</strong>likduvarına, İnternet veya yerel ağ ile diğer sunuculara y<strong>en</strong>i bağlantılar oluşturulmasını <strong>en</strong>gelley<strong>en</strong> kurallarekl<strong>en</strong>melidir. Bununla beraber, kullanıcı kaynaklı girişlerde ihtiyaç duyulan uygulamalar çalışmaya devamedecektir.Dikkat edilmesi gerek<strong>en</strong> noktalar :●Bir dolaylı nesne referans haritası kullanın (Indirect Object Refer<strong>en</strong>ce Map)(Daha fazla bilgi için A4 bölümüne bakınız). Örneğin, bir dosya ismi bir kez kullanılsın ve referansolarak kullanılacak bir bölüm HASH değerini sağlasın.19


EnglishYukarıdaki “tag” yerineEnglishkullanımı gibi.Dolaylı nesne referanslarının birer birer d<strong>en</strong>eme (brute force) saldırısı ile zayıflayacağı dikkatealınmalıdır. Buna alternatif olarak, 1,2,3 gibi bir indeks değeri kullanan ve sıralı bir şekilde devamed<strong>en</strong> parametreler kontrol edilebilir.●Belirgin bir kusur kontrol mekanizması kullanın: Kullandığınız dil destekliyorsa, kusur kontrolmekanizması kullanın. Başka bir şekilde bir değişk<strong>en</strong> isiml<strong>en</strong>dirme şeması yardımıyla kusurlarıkontrol edin :$hostile = &$_POST; // refer to POST variables, not $_REQUEST$safe[‘fil<strong>en</strong>ame’]= validate_file_name($hostile[‘unsafe_fil<strong>en</strong>ame’]); //make it safeBu yüzd<strong>en</strong>, kötü niyetli operasyonlar açıkça tanımlanmalı:require_once($_POST[‘unsafe_fil<strong>en</strong>ame’] . ‘inc.php’); (Yanlış)require_once($safe[‘fil<strong>en</strong>ame’] . ‘inc.php’); (Doğru)●●●●●●Kullanıcı girişlerini kontrol edecek güçlü mekanizmalar kullanın ve gel<strong>en</strong> verinin "iyi olduğukabul edildi" stratejisi oluşturun.Firewall'a kurallar ekleyin : Harici <strong>web</strong> sitelerine ve dahili sistemlere y<strong>en</strong>i bağlantıları<strong>en</strong>gelleyecek firewall kuralları oluşturun. Yüksek güv<strong>en</strong>likli sistemler için, VLAN veya özel alt ağ(subnet) ile <strong>web</strong> sunucusunu izole edin.Kullanıcı kaynaklı dosyaları ve dosya isimlerini kontrol edin: Kontrol etm<strong>en</strong>in yanında diğerkontrolleri devre dışı bırakın, örneğin oturum nesnesindeki veriler bir kusurdur. Bunun yanındadeğişk<strong>en</strong>ler, resimler, PDF raporları ,geçici dosyalar,vb. içerikte kusur içerecektir.Bir chroot veya diğer kullanıcı alanı tanımlama mekanizmaları kullanılmalı. Diğeruygulamalardan kullanıcıları izole edebilecek sanal makine yapısı kullanılabilir.PHP: allow_url_fop<strong>en</strong> ve allow_url_include değerlerini, php.ini dosyasından kapalı durumagetirin ve PHP'nin bu fonksiyonu yerel olarak içermediğini de kontrol edin. Birkaç uygulama için,bu işlev ve ayarlar açık olması gerekebilir.PHP: register_globals değerini kapatın, E_STRICT değerini kullanarak başlangıç değerindeolmayan değişk<strong>en</strong>leri bulun.20


OWASP İlk <strong>10</strong> <strong>2007</strong>●PHP: Bütün dosyaları ve stream fonksiyonlarını (stream_*) dikkat ile inceleyin. Bufonksiyonlar kullanıcıların gönderdiği veriler içerisinde herhangi bir dosya ismi argümanıalmamasını sağlamak amacıyla kontrol edilmelidir:include() include_once() require() require_once() fop<strong>en</strong>()imagecreatefromXXX() file() file_get_cont<strong>en</strong>ts() copy() delete()unlink() upload_tmp_dir() $_FILES move_uploaded_file()Kullanılan dil için belirli öneriler:●●●PHP: system() eval() passthru() veya backtick operatörü içer<strong>en</strong> veriniz varsa çok dikkatliolmanız gerekmektedir.J2EE için "güv<strong>en</strong>lik yönetimi" çalışır durumda olmalı ve düzgün bir biçimde yapılandırılmalı,uygulamanın izinleri gözd<strong>en</strong> geçirilmelidir.ASP.NET için lütf<strong>en</strong> referans dokümanlarına bakın. Uygulamanızı tasarlark<strong>en</strong> parçalara ayırarakgüv<strong>en</strong>liğini sağlayın, böylece uygulamanızın büyük bölümü içerisindeki olası zayıflıkları izoleedebilirsiniz.ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- <strong>2007</strong>-0360 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-5220 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-4722REFERANSLARCWE:CWE- 98 (PHP dosya alma), CWE- 78(OS Komut <strong>en</strong>jeksiyonu), CWE- 95(Eval Enjeksiyonu),CWE- 434 (Sınırsız dosya yükleme)WASC Tehlike sınıflandırması:http://www.<strong>web</strong>appsec.org/projects/threat/classes/os_commanding.shtml●OWASP Rehberi, http://www.<strong>owasp</strong>.org/index.php/File_System#Includes_and_Remote_filesOWASP Test rehberi, http://www.<strong>owasp</strong>.org/index.php/Testing_for_Directory_Traversal OWASP PHP Top 5,http://www.<strong>owasp</strong>.org/index.php/PHP_Top_5#P1:_Remote_Code_ExecutionStefan Esser,http://blog.php-security.org/archives/45-PHP-5.2.0-and-allow_url_include.html [SIF01] SIFT, Web Servisleri: Kuralların değişimi,http://www.ruxcon.org.au/files/2006/<strong>web</strong>_services_security.ppt21


http://www.<strong>owasp</strong>.org/index.php/OWASP_Java_Table_of_Cont<strong>en</strong>ts#Defining_a_Java_Security_PolicyMicrosoft - Kısm<strong>en</strong> etkili güv<strong>en</strong>lik için programlama,http://msdn2.microsoft.com/<strong>en</strong>-us/library/ms364059(VS.80).aspx22


OWASP İlk <strong>10</strong> <strong>2007</strong>A4- EMNİYETSİZ DOĞRUDAN NESNE REFERANSIBir doğrudan nesne referansı, geliştiricinin, URL olarak veya parametre yoluyla, dosya, dizin, veritabanıkaydı veya anahtar gibi, iç uygulama nesnesine ait bir referansı açığa çıkardığı zaman meydana gelir.Saldırgan, eğer erişim kontrol d<strong>en</strong>etimi yoksa, izinsiz diğer nesnelere erişmek için doğrudan nesnereferanslarını kullanabilir.Örneğin, İnternet bankacılık uygulamalarında, birincil anahtar (primary key) olarak hesap numarasınıkullanmak oldukça yaygındır. Bu sebeple İnternet arayüzünde doğrudan hesap numarası kullanımımevcuttur. Geliştiriciler, SQL saldırılarını <strong>en</strong>gellemek için parametreli sorgulama kullanmış olsalar dahieğer hesabı görmeye yetkili kullanıcı veya hesap sahibi için hiçbir fazladan d<strong>en</strong>etim yoksa, hesapnumarası parametresiyle oynayan saldırgan, bütün hesapları görebilir veya değiştirebilir.Saldırının bu tipi, Avustralya vergil<strong>en</strong>dirme ofisi GST’nin başlangıç yardımcı sitesinin başına 2000 yılındageldi; kayıtlı fakat kötü niyetli olan bir kullanıcı, URL içinde veril<strong>en</strong> (şirket vergi tanıtıcısı olan) ABN’yibasitçe değiştirdi. Kullanıcı, sistemd<strong>en</strong> yaklaşık 17,000 şirkete ait tüm bilgilere el koydu ve sonrasaldırısının ayrıntılarını 17,000 şirketin her birine e-posta ile gönderdi. Saldırıya açıklığın bu tipi oldukçayaygındır, ama birçok uygulamada büyük ölçüde d<strong>en</strong><strong>en</strong>memiştir.ETKİLENEN ORTAMLARBütün İnternet uygulama yapıları, emniyetsiz doğrudan nesne referanslarında, saldırılara karşı saldırıyaaçıktır.SALDIRIYA AÇIKLIKBirçok uygulama, kullanıcılara iç nesne referanslarını açıklar. Saldırganlarda referansları değiştirmek içinparametrelerle oynarlar ve tasarlanmış fakat güçl<strong>en</strong>dirilmemiş erişim kontrol politikasını bozarlar.G<strong>en</strong>ellikle bu referanslar dosya sistemlerini ve veritabanlarını işaret eder, fakat açığa vurulan herhangi biruygulama yapısının saldırıya açık olma ihtimali de vardır.Örneğin, eğer kod, dosya adları veya yolları belirtmesi için kullanıcı girişine izin veriyorsa, uygulamanınçalışma dizinind<strong>en</strong> dışarı ulaşması ve diğer kaynaklara erişmesi için saldırganlara da izin verebilir.Türkçe…require_once ($_REQUEST['language’]."lang.php");Böyle bir koda, İnternet sunucusunun dosya sistemindeki herhangi bir dosyaya (Daha çok bilgi içinOWASP rehberine bakın) erişmek için "../../../../etc/passwd%00" gibi bir dizgi kullanarak, null byte injectionyöntemiyle (boş byte saldırısı) saldırılabilir.B<strong>en</strong>zer şekilde, veritabanı anahtarlarına olan referanslar da sık sık açığa çıkar. Bir saldırgan, basitçetahmin ederek veya başka bir geçerli anahtar arayarak bu parametrelere saldırabilir. Çoğunlukla bunlardoğada sıralıdır. Aşağıdaki örnekte, uygulama, yetkisiz kartlar için herhangi bir bağlantıyı sunmasa vehiçbir SQL saldırısı mümkün olmasa da saldırgan cartID parametresini değiştirerek istediği herhangi birkartı elde edebilir.int cartID = Integer.parseInt( request.getParameter( "cartID" ) );23


String query = "SELECT * FROM table WHERE cartID=" + cartID;GÜVENLİĞİ DOĞRULAMAKAmaç, uygulamanın, bir saldırgan tarafından yönetilmesi için doğrudan nesne referanslarına izinvermediğini doğrulamaktır.Otomatik yapılan yaklaşımlar: Saldırıya açıklık tarama araçları, hangi parametrelerin hile karıştırılmayayatkın olduğunu veya hile karıştırmanın çalışıp çalışmadığını anlamakta sorun yaşayacaktır. Saldırıyaaçıklık tarama araçları, parametrelerin, yönetilmeye hassas olduğu veya değiştirilerek çalışıpçalışmadığını anlayacak zorlu tanımalara sahip olmalıdır. Statik analiz araçları kullanımdan önce hangiparametrelerin erişim kontrol d<strong>en</strong>etimine sahip olması gerektiğini bilemez.Elle yapılan yaklaşımlar: Kod incelemesi, <strong>kritik</strong> parametreleri izleyebilir, birçok olayda yönetilmeyehassas olup olmadığı teşhis edebilir. İçeri sızma testi, yönetilebilirliğin mümkün olup olmadığını dadoğrulayabilir. Yine de, bu tekniklerin her ikisinin çalışması da zaman alabilir ve yetersiz olabilir.KORUMAEn iyi koruma, indeksleme, dolaylı referans haritası veya onaylanması kolay diğer dolaylı metotlarkullanılarak kullanıcılara doğrudan nesne referanslarını açığa vurmaktan kaçınmaktır. Eğer doğrudannesne referansı kullanılması şart ise, kullanıcının referansı kullanmadan önce kimlik doğrulamadangeçtiğind<strong>en</strong> emin olunmalıdır.Uygulama nesnelerine başvurmanın standart bir yolunu kurmak önemlidir:●●●Kullanıcılara mümkünse özel nesne referanslarını açıklamadan kaçının, örneğin birincil anahtarlarveya dosya adları gibi;Herhangi bir özel nesne referansını "iyi bilin<strong>en</strong>i kabul et" yaklaşımı ile yaygın olarak geçerli kıl;Bütün referans gösteril<strong>en</strong> nesnelerde kimlik doğrulamasını doğrula.Parametre yönetimi saldırılarını <strong>en</strong>gellemek için <strong>en</strong> iyi çözüm, indeks değeri veya referans haritasıkullanmaktır.http://www.example.com/application?file=1Eğer veritabanı yapılarına olan doğrudan referanslar açığa vurulmak zorundaysa, SQL ifadelerinde vediğer veritabanı erişim metotlarında sadece kimlik doğrulama yapılmış kayıtlara izin verildiğind<strong>en</strong> eminolunmalı:int cartID = Integer.parseInt( request.getParameter( "cartID" ) );User user = (User)request.getSession().getAttribute( "user" );String query = "SELECT * FROM table WHERE cartID=" + cartID + " ANDuserID=" + user.getID();ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-<strong>2007</strong>-0329 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2006-436924


OWASP İlk <strong>10</strong> <strong>2007</strong>http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2005-0229REFERANSLARCWE: CWE-22 (Path Traversal), CWE-472 (İnternet Parameter Tampering)WASC Threat Classification:http://www.internetappsec.org/projects/threat/classes/abuse_of_functionality.shtmlhttp://www.internetappsec.org/projects/threat/classes/insuffici<strong>en</strong>t_authorization.shtmlOWASP Testing Guide, http://www.<strong>owasp</strong>.org/index.php/Testing_for_business_logicOWASP Testing Guide, http://www.<strong>owasp</strong>.org/index.php/Testing_for_Directory_TraversalOWASP, http://www.<strong>owasp</strong>.org/index.php/Category:Access_Control_VulnerabilityGST Assist attack details, http://www.abc.net.au/7.30/stories/s146760.htm25


A5- SİTELER ÖTESİ İSTEK SAHTECİLİĞİ (CSRF)Siteler ötesi istek sahteciliği (Cross Site Request Forgery) y<strong>en</strong>i bir saldırı türü değildir fakat basittir vezarar vericidir. CSRF saldırısı, saldırıya açık bir İnternet uygulamasına bir isteği yollaması içinkurbanın tarayıcısına zorla giriş yapar, sonra kurbanın adına seçil<strong>en</strong> hareketi yapar.Bu saldırıya açıklık aşırı derecede yaygındır, herhangi bir İnternet uygulaması şu ned<strong>en</strong>lerd<strong>en</strong>dolayı risk altındadır;Saldırıya açık işlemler için hiçbir kimlik doğrulama kontrolü yoktur,Eğer orijinal giriş bilgileri (kullanıcı adı & şifre) geçerliyse, işlem gerçekleşecektir, (Örneğinhttp://www.example.com/admin/doSomething.ctl?username=admin&passwd=admin)Yetkil<strong>en</strong>dirilmiş istekler, eğer oturum açılmış uygulama varsa oturum çerez bilgileri, eğeroturum açılmamışsa "B<strong>en</strong>i hatırla" fonksiyonu, veya eğer aktif dizinle açılmış oturumdakatılımcı bir Intranet'in parçası ile bütünleşmişse Kerberos işareti gibi otomatik olarakyollanan kimlik bilgilerine dayanır.Maalesef bugün birçok İnternet uygulaması sadece, otomatik olarak yollanan, oturum çerezleri,temel kimlik doğrulama bilgileri, kaynak IP adresleri, SSL sertifikaları veya Windows alan güv<strong>en</strong>belgelerine güv<strong>en</strong>mektedir.Bu saldırıya açıklık ayrıca “Session Riding, One-Click Attacks, Cross Site Refer<strong>en</strong>ce Forgery, HostileLinking, and Automation Attack” gibi birkaç başka isim ile de anılır. Baş harflerinin kısaltması olanXSRF de sıklıkla kullanılır. OWASP ve MITRE, Cross Site Request Forgery (siteler ötesi istek sahteciliği)ve CSRF terimlerinin her ikisini de standartlaştırmıştır.ETKİLENEN ORTAMLARBütün İnternet uygulama yapıları, CSRF'e karşı saldırıya açıktır.SALDIRIYA AÇIKLIKTipik olarak bir foruma karşı yapılan CSRF saldırısında bazı fonksiyonları çağırmak için, oturum kapatmasayfasında olduğu gibi, yönl<strong>en</strong>dir<strong>en</strong> kullanıcı formunu alabilir. Kurban tarafından görül<strong>en</strong> aşağıdaki etiketesahip herhangi bir İnternet sayfasında oturum kapatma isteği oluşturacaktır:Eğer İnternet hizmeti ver<strong>en</strong> bir banka, gel<strong>en</strong> istekleri işlemek için uygulamaya izin verseydi, örneğin paratransferi gibi, b<strong>en</strong>zer bir saldırıya izin vermiş olurdu:“BlackHat-2006” da “Intranet sitelerine dışarıdan saldırmak” konusunda konuşan Jeremiah Grossman,kullanıcı, DSL yönl<strong>en</strong>diricisinin bir İnternet arayüzü olduğunu bilmezse dahi, rızası olmadan DSLyönl<strong>en</strong>diricisinde istediği değişiklikleri yapmak için bir kullanıcıyı zorlamanın mümkün olduğunu gösterdi.Jeremiah saldırıyı gerçekleştirmek için yönl<strong>en</strong>diricinin hazır gel<strong>en</strong> hesap ismini kullandı.26


OWASP İlk <strong>10</strong> <strong>2007</strong>Bu saldırıların hepsi işe yarar, çünkü saldırgan izin belgesini sağlamasa da, kullanıcının izin belgesiotomatik olarak tarayıcının isteğine dahil olur (g<strong>en</strong>ellikle oturum çerezi).Eğer saldırıyı içer<strong>en</strong> etiket, saldırıya açık uygulamaya gönderilebilirse, o zaman kurbanlarda kaydedil<strong>en</strong>ibulmanın olasılığı, depolanan ve yansıtılan XSS (Cross Site Scripting – siteler arası betik yazma)kusurları arasındaki riskteki artışa b<strong>en</strong>zer şekilde artar. XSS kusurları, XSS kusurlu uygulamanın CSRF'ehassas olmasına rağm<strong>en</strong>, CSRF saldırısını çalıştırabilmek için gerekli değildir. Çünkü CSRF saldırısı,k<strong>en</strong>disine karşı koymak için basamak olabil<strong>en</strong> elle gönderil<strong>en</strong> herhangi bir izin belgesini çalmak için XSSkusurunu kullanabilir. Birçok uygulama solucanı, her iki tekniğin birleşimini kullanmıştır.CSRF saldırısına karşı savunma inşa etmek için, uygulamada XSS açıklıklarını ortaya çıkarmayaodaklanmalı, çünkü böyle kusurlar, CSRF savunmalarını aşmak için kullanılabilir.GÜVENLİĞİ DOĞRULAMAKAmaç, CSRF saldırılarına karşı uygulamayı, tarayıcı tarafından otomatik olarak yollanmayan kimlikdoğrulama işaretlerini oluşturarak ve isteyerek korumaktır.Otomatikleştiril<strong>en</strong> yaklaşımlar: CSRF’nin uygulama tarama motorları tarafından tespiti mümkünolmasına rağm<strong>en</strong> bugün az sayıda otomatik tarayıcı CSRF saldırısı açıklığını tespit edebilmektedir. Ancakeğer uygulama tarayıcısı, siteler arası betik yazma saldırısına açıklığı algılasa da ve CSRF’e karşıkoruma yoksa, önced<strong>en</strong> hazırlanmış paket CSRF saldırılarına karşı risk büyük olasılıkla vardır.Elle yapılan yaklaşımlar: Yayılma testi, CSRF korumasının yerinde doğrulaması için hızlı bir yoldur. Bumekanizmanın kuvvetli ve uygun şekilde olduğunu doğrulamanın <strong>en</strong> verimli yöntemi kodu kontrol etmektir.KORUMAUygulamalar, tarayıcılar tarafından otomatik olarak yollanan izin belgesi veya işaretlerine güv<strong>en</strong>memelidir.Uygulamanın CSRF saldırısına karşı koruma içermesinin tek çözümü, tarayıcının hatırlayamayacağı özelbir işareti kullanmaktır.Takip ed<strong>en</strong> stratejiler, bütün İnternet uygulamalarında zat<strong>en</strong> olmalıdır:●●Uygulamada hiçbir XSS saldırıya açıklığı olmamalıdır (Bakınız A1 – Siteler Arası Betik Yazma)URL ve her form için tarayıcı tarafından otomatik olarak ist<strong>en</strong>meyecek rastgele işaretlerekl<strong>en</strong>melidir. Örneğin,…Ve sonra güncel kullanıcı için gönderil<strong>en</strong> işaretin doğru olduğunu kanıtlanmalıdır. Bunun gibiişaretler kullanıcı için bazı özel sayfa veya fonksiyonlarda ya da basitçe bütün oturumdab<strong>en</strong>zersiz olabilir. İşaretlerin özel bir fonksiyon ve/veya özel veri takımı olmasına odaklanmakdaha kuvvetli bir koruma sağlasa da yapıyı inşa etmek ve sürdürmek daha zor olacaktır.27


●●●●Hassas veri veya değer işleri için, tekrar kimlik doğrulanmalı, veya isteğin gerçek olduğunugaranti etmesi için işlem işareti kullanılmalıdır. İstekleri doğrulamak veya kullanıcı isteğini iletmekamacıyla e-posta veya telefon irtibatı gibi dış mekanizmalar kurulmalıdır.Önemli işler veya hassas veriler için GET isteği (URLs) kullanılmamalıdır. Kullanıcı tarafındanhassas verinin işleme tabi tutulduğu zamanlarda sadece POST metodu kullanılmalıdır. Yine de,b<strong>en</strong>zersiz bir URL'i yaratmak için rastgele işaret içer<strong>en</strong> URL, CSRF'i gerçekleştirmeyi neredeyseimkansız kılar.POST metodu tek başına yetersiz bir korumadır. CSRF'e karşı uygun şekilde korunmak için bantdışı kimlik doğrulamasıyla, tekrar kimlik doğrulamayla veya rastgele işaretlerle birleştirilmelidir.ASP.NET için, ViewStateUserKey kurulmalı (Bakınız Referanslar). Bu işlem, yukarıdatanımladığını gibi rastgele bir işareti b<strong>en</strong>zer yöntemle kontrol etmeyi sağlar.Bu öneriler, saldırılara maruz kalmayı önemli ölçüde azaltacaksa da, gelişmiş CSRF saldırıları, bukısıtlamaların birçoğunu geçebilir. En kuvvetli teknik, b<strong>en</strong>zersiz işaretleri kullanmak ve uygulamadakibütün XSS saldırıya açıklıklarını yok etmektir.ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-<strong>2007</strong>-0192 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2006-5116 MySpace Samy Interview: http://blog.outer-court.com/archive/2005-<strong>10</strong>-14-n81.html An attack which uses Quicktime to perform CSRF attackshttp://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9005607&intsrc=hm_listREFERANSLARCWE: CWE-352 (Cross-Site Request Forgery)WASC Threat Classification: No direct mapping, but the following is a close match:http://www.internetappsec.org/projects/threat/classes/abuse_of_functionality.shtmlOWASP CSRF, http://www.<strong>owasp</strong>.org/index.php/Cross-Site_Request_ForgeryOWASP Testing Guide, https://www.<strong>owasp</strong>.org/index.php/Testing_for_CSRFOWASP CSRF Guard, http://www.<strong>owasp</strong>.org/index.php/CSRF_GuardOWASP PHP CSRF Guard, http://www.<strong>owasp</strong>.org/index.php/PHP_CSRF_GuardRSnake, "What is CSRF?", http://ha.ckers.org/blog/2006<strong>10</strong>30/what-is-csrf/Jeremiah Grossman, slides and demos of “Hacking Intranet sites from the outside”http://www.whitehatsec.com/pres<strong>en</strong>tations/whitehat_bh_pres_08032006.tar.gzMicrosoft, ViewStateUserKey details,http://msdn2.microsoft.com/<strong>en</strong>-us/library/ms972969.aspx#securitybarriers_topic228


OWASP İlk <strong>10</strong> <strong>2007</strong>A6- BİLGİ SIZINTISI VE UYGUNSUZ HATA IŞLEMEUygulamalar, yapılandırmaları ve iç çalışmaları ile ilgili bilgiyi istemeyerek sızdırabilir, veya çeşitliuygulama problemleriyle gizliliği bozabilir. Uygulamalar ayrıca, belli işlemleri yürütm<strong>en</strong>in ne kadarsürdüğüyle, ya da farklı girişlere farklı çıkışlar vermekle, örneğin farklı hata numaralarıyla aynı hatametnini göstermek gibi durumlarda, iç durumu sızdırabilir. İnternet uygulamaları çoğunlukla ayrıntılı hatamesajları veya hata ayıklama modundaki hata mesajları vasıtasıyla iç durumları hakkında bilgi sızdırırlar.Çoğunlukla bu bilgi daha güçlü saldırıları gerçekleştirmekte veya hatta saldırıları otomatikleştirmektekullanılabilir.ETKİLENEN ORTAMLARBütün İnternet uygulama yapıları, bilgi sızmasına ve uygunsuz hatayı işlemeye karşı saldırıya açıktır.SALDIRIYA AÇIKLIKUygulamalar sık sık hata mesajı üretir ve bunları kullanıcılara gösterir. Birçok defa bu hata mesajları,saldırganlar için çok faydalıdır, çünkü bu hata mesajları saldırıya açıklığı sömürmek için faydalı olan bilgiyiveya uygulama ayrıntılarını gösterir. Bunun birkaç yaygın örneği vardır:●●Hatanın çok fazla bilgiyle, örneğin yığın izleme, başarısız SQL ifadeleri veya diğer hata ayıklamabilgileriyle, gösterilmesini sağlayan Detaylı Hata İşleme (Detailed Error Handling)Farklı girişlere farklı sonuçlar üret<strong>en</strong> fonksiyonlar. Giriş fonksiyonuna sağlanan aynı kullanıcı ismive farklı şifrelerde, var olmayan kullanıcı veya hatalı şifreler için aynı metni üretmelidir. Ancakbirçok sistem, farklı hata kodları üretir.GÜVENLİĞİ DOĞRULAMAKAmaç, uygulamanın, hata mesajlarıyla veya diğer yollarla bilgiyi sızdırmadığını doğrulamaktır.Otomatik yapılan yaklaşımlar: Saldırıya açıklık tarama araçları g<strong>en</strong>ellikle hata mesajları oluşturulmasınasebep olur. Statik analiz araçları, bilgiyi sızdıran API’nin (uygulama programlama arabirimi) kullanımı içinarama yapabilir fakat o mesajların anlamını doğrulayamayacaktır.Elle yapılan yaklaşımlar: Bir kod incelemesi, bilgiyi sızıntısı ve uygunsuz hata işl<strong>en</strong>mesi ve diğerörnekler için araştırma yapılabilir fakat bu çok zaman alacaktır. Ayrıca test ederek de hata mesajlarıoluşturulabilir, fakat hangi hata yollarının kapsandığını bilmek oldukça zordur.KORUMAGeliştiriciler OWASP'ın WebScarab gibi araçlarını uygulamalarına hata ürettirmek için kullanmalı. Bu yollatest edilmey<strong>en</strong> uygulamalar kesinlikle, bekl<strong>en</strong>ilmey<strong>en</strong> hata çıktıları oluşturacaktır. Ayrıca uygulamalar,saldırganlara ist<strong>en</strong>mey<strong>en</strong> bilgiyi sızdırmaması için standart kural dışı durum işleme mimarisini içermelidir.Bilgi sızmasını <strong>en</strong>gellemek, disiplini gerektirir. Aşağıdaki örnekler, etkili bir şekilde kanıtlanmıştır:Tüm yazılım geliştirme takımının kural dışı durum işlemesi için ortak yaklaşımı paylaştığı garantiedilmeli;Detaylı hata işleme sınırlandırılmalı veya iptal edilmeli. Özellikle son kullanıcıya ayrıntılanmışbilgi, yığın bilgileri veya yol bilgisi gösterilmemeli29


Yaklaşık aynı zamanda b<strong>en</strong>zer veya aynı hata mesajlarını ver<strong>en</strong>, çeşitli sonuçlara sahip olangüv<strong>en</strong>lik yolları sağlanmalı. Eğer bu mümkün değilse, saldırgan'dan bu ayrıntıyı saklamak adınabütün kayıtlar için rastgele bir bekleme zamanı konulmalı;Çeşitli katmanlar, ölümcül veya olağan dışı sonuçlar verebilir, örneğin veritabanı katmanı, temelİnternet sunucusu (IIS, Apache, gibi). Bütün tabakalardaki hataların, saldırgan tarafındansömürülmesini <strong>en</strong>gellemek için, yeterince kontrol edilmiş ve yapılandırılmış olması çok önemlidir;Yaygın yapıların hatanın iskelet kodunun içinde veya g<strong>en</strong>el kodun içinde olmasına göre farklıHTTP hata kodları verdiğinin bilincinde olunmalı. Kullanıcıların büyük kısmı için, tüm hata üretimyollarında, uygun bir şekilde zarar verici bilgilerd<strong>en</strong> arındırılmış bir varsayılan hata işleyiciyaratmak oldukça faydalıdır.Tanımlı hata işleyiciyi daima “200” (OK) hata ekranını döndürmesi için geçersiz kılmak, otomatiktarama araçlarının ciddi hataları tespit yet<strong>en</strong>eğini azaltır. Bununla birlikte, bu "gizlilik üzerind<strong>en</strong>güv<strong>en</strong>lik" savunmaya fazladan bir savunma katmanı sağlayabilir;Bazı büyük organizasyonlar, bütün uygulamaların arasına rastgele/b<strong>en</strong>zersiz hata kodlarıeklemeyi seçebilir. Bu, özel bir hata için doğru çözümü bulmakta yardım masasına (help desk)yardımcı olabilir, ama uygulamanın hangi yolda başarısız olduğu tam olarak belirleyebilmesi içinsaldırganlara da fırsat verebilir.ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-4899 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-3389 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2002-0580REFERANSLAR CWE: CWE- 200 (Information Leak), CWE- 203 (Discrepancy Information Leak), CWE- 215(Information Leak Through Debug Information), CWE- 209 (Error Message Information Leak),others. WASC Threat Classification:http://www.internetappsec.org/projects/threat/classes/information_leakage.shtml OWASP, http://www.<strong>owasp</strong>.org/index.php/Error_Handling OWASP,http://www.<strong>owasp</strong>.org/index.php/Category:S<strong>en</strong>sitive_Data_Protection_Vulnerability30


OWASP İlk <strong>10</strong> <strong>2007</strong>A7- IHLAL EDILMIŞ KİMLİK DOĞRULAMA VE OTURUM YÖNETİMİUygun kimlik doğrulama ve oturum yönetimi, İnternet uygulama güv<strong>en</strong>liği için <strong>kritik</strong>tir. Bu alandaki kusurlarsıklıkla, kimlik bilgisi ve oturum işaretlerini k<strong>en</strong>di döngüleri boyunca korumada bozukluğu ihtiva eder. Bukusurlar, kullanıcı veya idare hesapları korsanlığına, kimlik doğrulama ve hesap sorumluluğukontrollerinin çökmesine ve gizlilik ihlallerine sebep olabilir.ETKİLENEN ORTAMLARBütün İnternet uygulama yapıları, kimlik doğrulama ve oturum idare kusurlarına karşı korunmasızdır.SALDIRIYA AÇIKLIKAna kimlik doğrulama mekanizmasında kusurlar, seyrek değildir, fakat zayıf noktalar daha çok, çıkış,parola yönetimi, zaman aşımı, b<strong>en</strong>i hatırla, gizli soru ve hesap güncelleştirmesi gibi yardımcı kimlikdoğrulama fonksiyonları boyunca ortaya çıkar.GÜVENLİĞİ DOĞRULAMAKAmaç, uygulamanın, kullanıcıların kimliklerini uygun şekilde doğruladığını ve kimlikleri ve kimlik bilgileriniuygun şekilde koruduğunu doğrulamaktır.Otomatik yapılan yaklaşımlar: Saldırıya açıklık tarama araçları, özel kimlik doğrulama ve oturumyönetim planlarında çok zor zaman tespiti saldırı açıklarına sahiptir. Statik analiz araçları da, özel koddaoturum yönetim ve kimlik doğrulama problemleri bulmak için muhtemel değildir.Elle yapılan yaklaşımlar: Kod incelemesi ve test etme, özellikle de bileşimi, uygun şekilde yerinegetiril<strong>en</strong> kimlik doğrulama, oturum yönetimi ve yardımcı fonksiyonları doğrulamakta oldukça etkilidir.KORUMAKimlik doğrulama, güv<strong>en</strong>li haberleşme ve kimlik bilgileri depolamasına dayanır. İlk olarak, SSL’inuygulamanın tüm kimlik doğrulanmış parçaları için tek seç<strong>en</strong>ek olduğu garanti edilmeli, (bakınız A9—emniyetsiz iletişim), ve bütün kimlik bilgileri, kriptografik özet veya şifrel<strong>en</strong><strong>en</strong> formda depolanmalıdır,(bakınız A8 — Güv<strong>en</strong>siz kriptografik depolama).Kimlik doğrulama kusurlarını <strong>en</strong>gellemek, dikkatli bir plan gerektirir. Göz önüne alınması gerek<strong>en</strong> <strong>en</strong>önemliler arasındakiler olarak aşağıdakiler sayılabilir :●●●●Sadece yerleşik oturum yönetim mekanizması kullanılmalı. Herhangi bir koşul altında ikinciloturum d<strong>en</strong>etimcisini yazmamalı veya kullanılmamalı;URL ile veya istekle gel<strong>en</strong> y<strong>en</strong>i, önced<strong>en</strong> ayarlanmış veya geçersiz oturum tanıyıcıları kabuledilmemeli. Bu saldırı türü, oturum tespit saldırısı olarak isiml<strong>en</strong>dirilir.Kimlik doğrulama veya oturum yönetimi amaçları için özel (custom) çerezlerin kodu sınırlanmalıveya defedilmeli, örneğin "B<strong>en</strong>i Hatırla" tipi veya kurum bilgi sistemleri için tek giriş (sigle sign on)fonksiyonları gibi. Bu, güçlü, iyice kanıtlanmış SSO (Single Sign On – tek imzayla giriş / WebÇoklu Oturum Açma) veya birleşmiş kimlik doğrulama çözümlerini uygulanmaz;Uygun dayanıklılığa ve etm<strong>en</strong>e bağlı tek bir kimlik doğrulama mekanizması kullanılmalı. Bumekanizmanın, kolayca yanıltmaya veya tekrarlanan saldırılara maruz bırakılamadığına emin31


olunmalı. Bu mekanizma fazla karmaşık olmamalıdır, sonra bu karmaşıklık esas saldırı şeklinedönüşebilir.●●●●●●●●●Şifrel<strong>en</strong>memiş bir sayfadan oturum açma işleminin başlamasına izin verilmemelidir. Kimlik veyaoturum bilgilerini çalmayı, parola balıkçılığı (phishing) ve oturum belirleme saldırısını <strong>en</strong>gellemekiçin y<strong>en</strong>i veya güncel oturum jetonu (tok<strong>en</strong>) ile şifrel<strong>en</strong>miş ikinci bir sayfadan oturum açma işlemiyapılmalıdır.Başarılı kimlik doğrulama veya hak seviye değişikliği üzerine y<strong>en</strong>i bir oturum oluşturma gözönüne alınmalıdır.Her sayfada bir oturumu kapatma bağlantısı olduğu garanti edilmelidir. Oturum kapatma işlemi,bütün sunucu tarafı oturum durumunu ve kullanıcı tarafı çerezlerini yok etmelidir. İnsan faktörleridüşünülmeli: Doğrulama için soru sorulmamalı çünkü kullanıcılar, başarılı bir şekilde oturumukapatmak yerine, p<strong>en</strong>cere veya sekme kapatmayı seçecektir.Korunan verinin değerine göre etkin olmayan bir oturumdan otomatik olarak dışarı çıkartan birzaman aşımı periyotu kullanılmalı. (Kısa periyot her zaman daha iyidir)Sadece kuvvetli yardımcı kimlik sorgulama fonksiyonları kullanılmalı (soru ve cevaplar, parolay<strong>en</strong>ilemesi gibi), çünkü bunlarda kullanıcı isimleri, parolaları veya jetonlar gibi kimlik bilgisidir.Açığa çıkarma saldırılarını <strong>en</strong>gellemek için cevaplara tek yönlü kriptografik özeti kullanılmalıdır.Herhangi bir oturum tanımlayıcısı veya URL veya günlük kayıtları içindeki geçerli kimlik bilgileriherhangi bir kısmı açıklanmamalıdır (günlük dosyalarına kullanıcının şifresi depolanmamalı veyahiçbir oturum tekrar yazılmamalıdır).Kullanıcı, şifresini değiştireceği zaman, eski şifresi kontrol edilmelidir.Kimlik doğrulamanın biricik biçimi olarak hileli olabilecek kimlik bilgilerine güv<strong>en</strong>ilmemeli, örneğinIP adresleri veya adres aralığı, DNS veya ters DNS aramaları, başvuru başlığı ve b<strong>en</strong>zerleri.Kaydedil<strong>en</strong> e-posta adreslerine, şifre y<strong>en</strong>ilemesi için mekanizma olarak, gizli bilgileri yollark<strong>en</strong>dikkatli olunmalı (Referanslarda RSNAKE01’e bakınız). Erişimi y<strong>en</strong>ilemek için sadece-sınırlızaman(limited-time-only) rastgele sayıları kullanılmalı ve şifre y<strong>en</strong>il<strong>en</strong>ir y<strong>en</strong>il<strong>en</strong>mez takip ed<strong>en</strong>(bilgil<strong>en</strong>dirici) e-posta gönderilmelidir. E-posta adresini değiştir<strong>en</strong> kullanıcılar k<strong>en</strong>di kaydettikleri e-postayı kullanırk<strong>en</strong> dikkatli olunmalı, değişikliği uygulamadan önce, önceki e-posta adresine birmesaj yollanmalıdır.ÖRNEKLER http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-6145 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-6229 http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE- 2006-6528REFERANSLAR CWE: CWE- 287 (Auth<strong>en</strong>tication Issues), CWE- 522 (Insuffici<strong>en</strong>tly Protected Cred<strong>en</strong>tials), CWE- 311 (Reflection attack in an auth<strong>en</strong>tication protocol), others. WASC Threat Classification:http://www.internetappsec.org/projects/threat/classes/insuffici<strong>en</strong>t_auth<strong>en</strong>tication.shtmlhttp://www.internetappsec.org/projects/threat/classes/cred<strong>en</strong>tial_session_prediction.shtmlhttp://www.internetappsec.org/projects/threat/classes/session_fixation.shtml32


OWASP İlk <strong>10</strong> <strong>2007</strong>OWASP Guide, http://www.<strong>owasp</strong>.org/index.php/Guide_to_Auth<strong>en</strong>ticationOWASP Code Review Guide,http://www.<strong>owasp</strong>.org/index.php/Reviewing_Code_for_Auth<strong>en</strong>ticationOWASP Testing Guide, http://www.<strong>owasp</strong>.org/index.php/Testing_for_auth<strong>en</strong>ticationRSNAKE01 - http://ha.ckers.org/blog/<strong>2007</strong>0122/ip-trust-relationships-xss-and-you33


A8- GÜVENSİZ KRİPTOGRAFİK DEPOLAMAHassasiyet derecesi yüksek olan verileri kriptografi ile korumak, birçok <strong>web</strong> uygulaması içinanahtar konuma gelmiştir. Basitçe hassasiyet derecesi yüksek verileri şifreleyememek oldukçayaygın bir konudur. İçeriğini sık sık kötü bir şekilde şifreley<strong>en</strong> uygulamalar da hem uygun olmayanbir şekilde şifreleme kullanılmakta hem de güçlü şifreleme hataları yapılmaktadır. Bu kusurlar,hassas verinin ortaya çıkmasına ve uyumsuzluk sorununa yol açabilir.ETKİLENEN ORTAMLAR:Bütün <strong>web</strong> uygulamalarının mimarisi, güv<strong>en</strong>siz şifrel<strong>en</strong>miş veri depolanmasına karşı savunmasızdır.ZAYIFLIKŞifreleme sorunlarını önlemek için dikkatli bir planlama yapmak gerekmektedir. Yaygınca görül<strong>en</strong>sorunları şöyle sıralayabiliriz;●●●●●Hassas verileri şifrelememekBasit algoritmalar kullanmakGüçlü algoritmaları güv<strong>en</strong>siz bir şekilde kullanmakZayıflığı ispatlanmış algoritmaları kullanmaya devam etmek (MD5, SHA-1, RC3, RC4,etc…)Güçlü kodlanmış şifrelerin ve bunların korunmasız olarak depolanması.GÜVENLİK DOĞRULAMA:Amaç depolanan düzgünce şifrel<strong>en</strong>miş hassas uygulama verisinin onaylanmasıdır.Otomatik Yapılan Yaklaşımlar: Zayıflık tarama araçları şifrel<strong>en</strong>miş veri depolarını asladoğruluğunu kontrol edemeyecektir. Kod tarama araçları bilin<strong>en</strong> şifrel<strong>en</strong>miş API’lerin kullanımınıbulabilir ancak veri depolama birimind<strong>en</strong> farklı bir yerde şifrel<strong>en</strong>miş olarak tutuluyorsa düzgünolarak bulunamayabilir.Elle Yapılan Yaklaşımlar: Sunucular sınanırk<strong>en</strong> şifrel<strong>en</strong>miş depo birimi onaylanamayabilir(taramalar gibi). Kodu gözd<strong>en</strong> geçirmek, şifre yönetim mekanizmasının düzgüncegerçekleştirilmesi için hassas veriyi şifreleme uygulamaları <strong>en</strong> iyi yoludur. Bu, bazı durumlarda dışsistemlerin yapılandırmasının kontrol edilmesine yol açar.KORUNMA:En önemli görüş, gerçekte şifrel<strong>en</strong>miş her şey emniyete alınmıştır. Ve siz kriptografinin düzgünceyapıldığından emin olmak zorundasınız. Kriptografinin düzgünce kullanılmadığı bir çok yol vardır.Aşağıdaki öneriler kriptografik materyallerin güv<strong>en</strong>li şifrel<strong>en</strong>mesine yardımcı olmak için sizintarama sisteminiz bir parçası olabilir:34


OWASP İlk <strong>10</strong> <strong>2007</strong>Kriptografik algoritma oluşturmayın: Halka açık (Public) algoritmaları kullanmak (AES, RSA,SHA-256 yada daha iyi bir hash algoritması).Zayıf algoritmalar kullanmayın. MD5/SHA-1 gibi zayıf algoritmalar kullanmayın. Dahagüv<strong>en</strong>li alternatifleri olarak SHA-256 yada daha iyisi kullanın.Anahtarlarınızı offline üretin ve saklark<strong>en</strong> ekstra öz<strong>en</strong> gösterin. Güv<strong>en</strong>li olmayankanallarda asla kişisel anahtarlarınızı yayınlamayın.MQ kuyruk erişim detayları yada veritabanı bilgileri gibi yapı bilgileri garantil<strong>en</strong>erekdüzgün bir şekilde (sıkı dosya izin ve kontrolleri ile) güv<strong>en</strong> altına alınmalıdır veya güv<strong>en</strong>libir şekilde şifrel<strong>en</strong>miş ve şifresi lokal veya uzak kullanıcılar tarafından açılamamalıdır.Disk üzerinde depolanmış şifreli verinin şifresinin çözüml<strong>en</strong>mesi kolay değildir. Örnekolarak, eğer veritabanı bağlantı havuzu şifrel<strong>en</strong>memiş erişime açıksa veritabanışifrel<strong>en</strong>mesi de önemsizdir.PCI veri güv<strong>en</strong>liği standart gereksinim 3 altında, cardholder verisini korumalısınız. PCI DSSuyumluluğu, kredi kartı dağıtımıyla ilgil<strong>en</strong><strong>en</strong> herkesin yada tüccarların 2008’d<strong>en</strong> itibar<strong>en</strong>uyma zorunluluğu olacaktır. En iyi pratik asla gereksiz veriyi depolama, manyetik şeritbilgisi veya birincil hesap numarası (PAN, bir diğer deyişle bilindiği adıyla kredi kartınumarası) . Eğer PAN saklanmışsa, DSS uyumluluk gereksinimleri işaret olamlıdır. Örnekolarak, hangi koşul altında olursa olsun CVV numarasını asla depolayamazsın. Daha fazlabilgi için, lütf<strong>en</strong> PCI DSS Guideline’ına ve gerekli olan kontrolleri yerine getirin.ÖRNEKLERhttp://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2006-6145http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2005-1664http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-1999-1<strong>10</strong>1REFERANSLARCWE: CWE-311 (Failure to <strong>en</strong>crypt data), CWE-326 (Weak Encryption), CWE-321 (Use ofhard-coded cryptographic key), CWE-325 (Missing Required Cryptographic Step),others.WASC Threat Classification: No explicit mappingOWASP, http://www.<strong>owasp</strong>.org/index.php/CryptographyOWASP Guide, http://www.<strong>owasp</strong>.org/index.php/Guide_to_CryptographyOWASP, http://www.<strong>owasp</strong>.org/index.php/Insecure_Storage35


OWASP, http://www.<strong>owasp</strong>.org/index.php/How_to_protect_s<strong>en</strong>sitive_data_in_URL’sPCI Data Security Standard v1.1,https://www.pcisecuritystandards.org/pdfs/pci_dss_v1-1.pdfBruce Schneier, http://www.schneier.com/CryptoAPI Next G<strong>en</strong>eration, http://msdn2.microsoft.com/<strong>en</strong>-us/library/aa3762<strong>10</strong>.aspx36


OWASP İlk <strong>10</strong> <strong>2007</strong>A9- GÜVENSİZ İLETİŞİMLERUygulamalar sıklıkla hassas bağlantıların korunması gerektiğinde ağ trafiğini şifrelemede başarısızolurlar. Şifreleme (g<strong>en</strong>ellikle SSL) bütün bağlantıların kimlik doğrulaması için özellikle hem interneterişimi olan <strong>web</strong> sayfaları için hem de sunucu uygulamarı için kullanılmak zorundadır. Diğer birdeyişle, uygulama ya kimlik doğrulaması yada oturum şifrelemeye mecbur bırakılacaktır. Ekolarak, şifreleme hassas veri için her zaman kullanılmalıdır. Kredi kartı veya sağlık bilgileri aktarıldığızamanlar gibi.PCI standartları tüm kredi kartı bilgilerinin şifrel<strong>en</strong>erek internet üzerind<strong>en</strong> gönderilmesini gerektirir.ETKİLENEN ORTAMLARBütün <strong>web</strong> uygulama yapıları güv<strong>en</strong>siz iletişime karşı savunmasızdır.SALDIRIYA AÇIKLIKHassas veri iletişimini şifreleme hatasından kasıt, ağ trafiğini koklayan bir saldırganın hassasverilerin iletimind<strong>en</strong> ya da delilleri içer<strong>en</strong> konuşmalardan verilere ulaşabileceğidir. Göz önündebulundurulması gerek<strong>en</strong> bir diğer şey ise, farklı ağlar hattın koklanmasına karşı daha az yadafazla duyarlıdır. Ancak, her ağda tehlike oluşturabilecek bir sunucu sayesinde saldırganlarkolayca sistemi ele geçirmek amacıyla sunucuya koklayıcı (sniffer) kuracak ve trafiğidinleyebileceklerdir.Son kullanıcı ile aranızda SSL bağlantısı kurmanız son derece önemlidir. Muhtemel<strong>en</strong> onlaruygulamalara erişmek için güv<strong>en</strong>siz ağları kullanacaklardır. Çünkü HTTP her tekil istekte ya oturumaçma ya da kimlik doğrulaması isteyecektir. Doğrulanmış (onaylanmış), login isteklerindeolduğunun aksine bütün trafik SSL üzerind<strong>en</strong> gidecektir.Sunucu uygulamalarıyla şifrel<strong>en</strong>miş iletişim de ayrıca önemlidir. Muhtemel<strong>en</strong> bu ağların dahagüv<strong>en</strong>li olmasına rağm<strong>en</strong> onların taşıdığı bilgi ve veriler çok daha hassas ve çok daha pahalıdır.Bu sebeple, sunucu uygulamalarında SSL kullanımı oldukça önemlidir.GÜVENLİĞİ DOĞRULAMAAmaç uygulamanın bütün kimlik doğrulaması yapılmış ve hassas bağlantıların düzgünceşifrel<strong>en</strong>diğini onaylamaktır.Otomatik Yapılan Yaklaşımlar: Zayıflık tarama araçları <strong>ilk</strong> başlangıçta SSL kullanımı doğrulayabilirve birçok SSL’le ilintili hata bulabilir. Ancak, bu araçlar sunucu uygulama yazılımlarına erişimiolmaz ve onların güv<strong>en</strong>li olup olmadığını kontrol edemeyebilir. Statik analiz araçları bazı sunucuuygulama çağrılarının analizi ile yardımcı olabilir. Ancak muhtemel<strong>en</strong> tüm sistem türlerinin özelmantıksal istekleri anlaşılamayacaktır.Elle Yapılan Yaklaşımlar: Test yapmak SSL’in kullanılabildiğini ve SSL’d<strong>en</strong> kaynaklanan programhatalarını doğrulayabilmektir. Ancak otomatik yapılan yaklaşımlar muhtemel<strong>en</strong> daha etkili biryöntemdir. Kodu gözd<strong>en</strong> geçirme bütün sunucu uygulamalarının düzgün ve oldukça etkin SSLkullanımını sağlar.37


KORUMAEn önemli koruma kullanıcı doğrulaması gerektir<strong>en</strong> bağlantılarda ve önemli sayılabilecek verilerintransferi sırasında SSL kullanımıdır. Web uygulamasının düzgünce çalışması için SSL’inyapılandırmasını içer<strong>en</strong> birçok detay vardır. Bu ned<strong>en</strong>le k<strong>en</strong>di çalışma alanınızı anlamak veanaliz etmek önemlidir. Örnek olarak IE 7.0 yüksek derecede güv<strong>en</strong>ilir SSL sertifikalarını yeşil birbarla göstermektedir. Ancak bu kriptografiyi tek başına güv<strong>en</strong>li kullanmak için uygun bir kontroldeğildir.Bütün hassas veri içer<strong>en</strong> transferlerde yada kullanıcı doğrulaması gerektir<strong>en</strong> bağlantılardaSSL kullanın. Kimlik, kredi kartı ve sağlık bilgileri gibi...Bütün sunucu dışı bağlantıların yani <strong>web</strong> sunucu ile veritabanı sunucusu arasında taşımakatmanının güv<strong>en</strong>lik önlemlerinin alındığından emin olun.PCI Data Security Standart ihtiyaçları 4’ün altında, geçiş sırasında kart sahibinin verilerinikorumak zorundasınız. PCI DSS uyumu kredi kartlarıyla herhangi birinin para çekmesiaşamasında 2008 yılında zorunlu hale gelecektir. G<strong>en</strong>el olarak, müşteri, ortak, personel veyöneticilerin online erişim sistemleri mutlaka şifrel<strong>en</strong>miş SSL erişimi ile yada b<strong>en</strong>zeryöntemlerle olmalıdır. Daha fazla bilgi için, PCI DSS yönetmeliğini inceleyiniz.ÖRNEKLERhttp://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2006-6430http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2005-4704http://www.schneier.com/blog/archives/2005/<strong>10</strong>/scandinavian_at_1.htmlREFERANSLARCWE: CWE-311 (Failure to <strong>en</strong>crypt data), CWE-326 (Weak Encryption), CWE-321 (Use ofhard-coded cryptographic key), CWE-325 (Missing Required Cryptographic Step),others.WASC Threat Classification: No explicit mappingOWASP Testing Guide, Testing for SSL / TLS,https://www.<strong>owasp</strong>.org/index.php/Testing_for_SSL-TLSOWASP Guide, http://www.<strong>owasp</strong>.org/index.php/Guide_to_CryptographyFoundstone - SSL Digger,http://www.foundstone.com/index.htm?subnav=services/navigation.htm&subcont<strong>en</strong>t=/services/overview_s3i_des.htm38


OWASP İlk <strong>10</strong> <strong>2007</strong>NIST, SP 800-52 Guidelines for the selection and use of transport layer security (TLS)Implem<strong>en</strong>tations, http://csrc.nist.gov/publications/nistpubs/800-52/SP800-52.pdfNIST SP 800-95 Guide to secure <strong>web</strong> services,http://csrc.nist.gov/publications/drafts.html#sp800-9539


A<strong>10</strong>- URL ERİŞİMİNİ KISITLAMADA BOZUKLUKSıklıkla, bir URL’in tek koruması yetkisiz girişlere izin verilmey<strong>en</strong> bir sayfaya yönl<strong>en</strong>dirmedir. Ancak,motive edilmiş, yet<strong>en</strong>ekli yada gerçekt<strong>en</strong> şanslı saldırganlar bu adreslere erişebilir, fonksiyonlarıçağırabilir veya verileri görüntüleyebilir. Belirsiz güv<strong>en</strong>lik hassas fonksiyonları ve uygulamaiçerisindeki verileri korumak için yeterli değildir. Hassas fonksiyonlara erişimd<strong>en</strong> önce erişimkontrolü mutlaka yapılmalıdır ki kullanıcının o fonksiyona erişim yetkisi olduğu kontrolü yapılabilsin.ETKILENEN ORTAMLARBütün <strong>web</strong> uygulama çerçevelerinin (framework), URL erişimlerini sınırlayamamak konusundazayıflık vardır.ZAYIFLIKBu zayıflık için <strong>ilk</strong> saldırı yöntemi “forced browsing” olarak adlandırılmaktadır. Korunmasız sayfalarıbulmak için birer birer d<strong>en</strong>eme (brute force) atakları ya da linkleri tahmin etme yöntemleri ileuygulama çevrel<strong>en</strong>ebilir. Uygulamalar sıklıkla codebase tarafından kod kontrol erişimine, koduyaymak ve açmak için izin verir. Karmaşık bir modeli sonuçlandırmak güv<strong>en</strong>lik uzmanları gibigeliştiriciler için de anlamayı zorlaştırır.Bu kusuru içer<strong>en</strong> bazı yaygın örnekler:“Gizl<strong>en</strong>miş” veya “Özel” URL’ler, sadece sunum katmanındaki yetkil<strong>en</strong>dirilmiş kullanıcı veyöneticilerin işleyebilirdi. Ancak bunun varlığını bil<strong>en</strong> diğer kullanıcılar tarafından da/admin/adduser.php veya /aproveTranser.do gibi sayfalara erişilebilir. Buna özellikle <strong>en</strong>çok m<strong>en</strong>ü kodlarında rastlanılır.Uygulamalar g<strong>en</strong>ellikle “Gizli” dosyalara erişime izin verir, statik XML yada sistemin ürettiğiraporlar, güv<strong>en</strong>ilir güv<strong>en</strong>lik uygulamalarının gizledikleri gibi.Erişim kontrol tedbirini güçl<strong>en</strong>dir<strong>en</strong> koddur. Ancak eski veya yetersiz olabilir . Örnek olarak,/approveTransfer.do kodunun tüm kullanıcılar tarafından erişilebildiğini düşünün, yetkisiolmayan kullanıcılar bu kod ile yetkisiz işlemler yapabilir.Sunucu üzerinde değil ama istemci üzerinde yetkil<strong>en</strong>direbil<strong>en</strong> kod, attack on MacWorld<strong>2007</strong>’de olduğu gibi, sunucu aksine <strong>web</strong> tarayıcısı üzerind<strong>en</strong> javascript kodu ile 1700$değerinde “Platinium” kullanıcı geçişi onaylanmıştır.GÜVENLIK DOĞRULAMAAmaç sunum katmanında yada uygulamadaki tüm URL’ler içinde erişim kontrolü onayıgüçl<strong>en</strong>dirilmelidir.Otomatik Yapılan Yaklaşımlar: zayıflık tarama sistemleri ve statik analiz araçlarının her ikisi de URLerişim kontrolünü onaylama ile ilgili sorunlara sahiptir. Ancak farklı sebeplerd<strong>en</strong> dolayı bu sıkıntılarvardır. Zayıflık tarama programlarının gizl<strong>en</strong>miş sayfaları tahmin etme ile herkese açık sayfaları40


OWASP İlk <strong>10</strong> <strong>2007</strong>birbirind<strong>en</strong> ayırmada bazı sıkıntıları vardır. Statik analiz araçları özel erişim kontrollerini uğraşarakbulmaya çalışır.Elle Yapılan Yaklaşımlar: En etkili ve gerçek yaklaşım kod inceleme ve güv<strong>en</strong>lik testlerininkombinasyonunu kullanmaktır. Eğer mekanizma dışardan güçl<strong>en</strong>dirildiyse yapılandırmaincel<strong>en</strong>meli ve test edilmelidir.KORUMAUygulamanın fonksiyon ve rol haritasını matris oluşturarak zaman alan yetkil<strong>en</strong>dirmesi,yasaklanmamış URL erişimlerine karşın başarılı korumada anahtar adımdır. Web uygulamalarınınher URL üzerinde erişim kontrolü güçl<strong>en</strong>dirilmek zorundadır. Business logic korunmasız bırakılıp vesunum katmanı içine erişim kontrolü koymak yeterli değildir. Ayrıca işlem boyunca kullanıcının birkere yetki kontrolünün yapılması da yeterli değildir. Aksi takdirde, saldırgan yetkil<strong>en</strong>dirm<strong>en</strong>inkontrol edildiği bölgeyi geçip saldırıya diğer aşamalardan gerekli parametreleri göndererekdevam diğer aşamalara devam edebilir.URL erişim kontrolünü açmak dikkatli planlamayı gerektirir. En önemli görüşler arasında şunlarvardır:●●●●●●●Erişim kontrol matrislerinin; işinizin, mimarinin ve uygulama dizaynının bir parçası olmasınısağlayın.Tüm URL ve iş fonksiyonlarının güv<strong>en</strong>liğini sağlamak efektif erişim kontrolü mekanizmasıtarafından korunduğundan emin olun. Bu ise herhangi bir işlem gerçekleşmed<strong>en</strong> önce,kullanıcı rolü ve yetkil<strong>en</strong>dirmesini doğrulamak demektir. Bu işlemin her aşamadatekrarlandığından emin olun.Uygulama konuşlanmadan önce saldırı testi uygulayın. Böylece saldırıya motive edilmişbecerili saldırgan tarafından uygulamanın kötüye kullanılması <strong>en</strong>gell<strong>en</strong>ecektir.Özellikle çalıştırılabilir uzantılara sahipse .php gibi include/library dosyalarını çok yakındantakip edin. Bunları daha güv<strong>en</strong>li olabilecekleri <strong>web</strong> ana dizinind<strong>en</strong> uzakta tutun. Onlaradirekt olarak erişilemeyeceğini kontrol edin. Direkt olarak erişilemeyeceğini kontrol edinve sadece sistem kütüphanelerinin çağırabilmesini sağlayın.Kullanıcıların, özel veya gizli URL’lerin veya API’lerin farkında olmayacağını sanmayın.Daima yönetici ve yetkileri yüksek öncelikli işlerin korunduğundan emin olunmalıdır.İlerde kullanılmayacak bütün dosya türlerine ve uzantılarına erişimi bloklayın. İdealolarak, kullanmaya niyetli olduğunuz .html, .php, .pdf gibi uzantılara sadece izin vererekbilin<strong>en</strong> iyilere izin ver “accept known good” politikasını izleyebilirsiniz. Bu uygulamasayesinde herhangi bir şekilde log dosyalarına, xml dosyalarına, vb istemediğiniz direkterişim girişimini bloklamış olursunuz.Virüs korumanızı güncel tutun ve güv<strong>en</strong>lik yamalarınızı zamanında yaparak, kullanıcıuygulama verilerini elinde tutan XML işlemci, kelime işlemci, resim işleyici programlarınızıgüncel tutunuz.41


ÖRNEKLER●●●http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-<strong>2007</strong>-0147http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-<strong>2007</strong>-0131http://cve.mitre.org/cgi-bin/cv<strong>en</strong>ame.cgi?name=CVE-2006-1227REFERANSLAR●●●●CWE: CWE-325 (Direct Request), CWE-288 (Auth<strong>en</strong>tication Bypass by Alternate Path),CWE-285 (Missing or Inconsist<strong>en</strong>t Access Control)WASC Threat Classification:http://www.<strong>web</strong>appsec.org/projects/threat/classes/predictable_resource_location.shtmlOWASP, http://www.<strong>owasp</strong>.org/index.php/Forced_browsingOWASP Guide, http://www.<strong>owasp</strong>.org/index.php/Guide_to_Authorization42


OWASP İlk <strong>10</strong> <strong>2007</strong>BURADAN NEREYE DEVAM ETMELİOWASP Top <strong>10</strong> dokümanı sizin <strong>web</strong> uygulama güv<strong>en</strong>liği seyahatinizin sadece başlangıçnoktasıdır.Dünya üzerindeki 6 milyar insan ikiye bölünebilir: birinci grup, bütün iyi yazılım şirketlerininbilin<strong>en</strong> hatalarla ürünlerini gönderdiğini bil<strong>en</strong>lerdir. İkinci grup ise bunu bilmey<strong>en</strong>lerdir.Eric Sink, Guardian 15 Mayıs 2006Sizin kullanıcılarınızın yada müşterilerinizin birçoğu ikinci gruptadır. Bu sorunun sizin için g<strong>en</strong>elolarak <strong>web</strong> uygulama güv<strong>en</strong>liğinin durumunu ve kodunuzu geliştirmek için bulduğunuz fırsatolduğunu nasıl bilebilirler. Her yıl milyarca dolar ve milyonlarca insanın birçoğu bu dokümandatartışılan zayıflıklar yüzünd<strong>en</strong> kimlikleri çalınıyor ve bunların cezasını çekiyorlar.TASARIMCILAR IÇINDüzgün bir şekilde uygulamalarınızın güv<strong>en</strong>liğini sağlamak için neyin güv<strong>en</strong>liğini sağladığınızı(değer sınıflandırması) bilm<strong>en</strong>iz gerekiyor. Gel<strong>en</strong>eksel olmayan her hangi bir dizayn uygulaması iyidozda bir güv<strong>en</strong>lik gerektirir.●●●●●●Risk seviyesi modeline ve güv<strong>en</strong>lik sınıflandırmasına uygun “yeterli” güv<strong>en</strong>likuyguladığınızdan emin olun. Ancak, yükü (SOX, HIPAA, Sasel gibi) kurallara bağlı kalarakhafifletin. O bugünün minimum memnuniyetind<strong>en</strong> daha fazla kaynak ve zamana ihtiyacıolması için sahipl<strong>en</strong>ecektir.İş ihtiyaçları ile ilgili olarak sorular sorun, özellikle fonksiyonel olmayan gözd<strong>en</strong> kaçanihtiyaçlar için.OWASP Secure Software Contract Annex aracılığıyla müşterilerinizle çalışın.Daha güv<strong>en</strong>li bir tasarımı destekleyin – tehdit modelini (kitap referansları içindeki [HOW1]‘e bakınız ) kullanarak basit ama savunması daha kolay tasarımları içersin.Güv<strong>en</strong>li, herkesin gözü önünde olmayan, sağlam olduğunu göz önündebulundurduğunuzdan emin olun.Tasarımınızın güv<strong>en</strong>lik planı ve standartlar ile uyumlu olduğundan emin olun. COBIT yadaPCI DSS 1.1 standartlar gibi.GELİŞTİRİCİLER İÇİNBirçok geliştirici hali hazırda temel <strong>web</strong> uygulama güv<strong>en</strong>liği üzerine iyi bir bilgi sahibidir. Daha ileriseviyede daha efektif bir <strong>web</strong> uygulama güv<strong>en</strong>liği pratik gerektirmektedir. Herhangi biri zararverebilir. (etkili bir içeri sızma (p<strong>en</strong>etration) testi gibi) – Güv<strong>en</strong>li bir yazılım inşa etmek ustalık ister.Usta olma amacını güdün.• OWASP’ a katılımı yada yerel grup toplantılarına katılmayı düşünün.43


• Eğer eğitim için bütç<strong>en</strong>iz varsa güv<strong>en</strong>li kod yazma için eğitim arayın. Eğer eğitim içinayrılmış bütç<strong>en</strong>iz yoksa yöneticilerinizle bu konuyu görüşün.• Geleceğinizi güv<strong>en</strong>li bir şekilde tasarlayın – Tasarımda basitliği ve derin savunmayıdüşünün• Standart kodlamayı b<strong>en</strong>imseyin. Bu sizi daha güv<strong>en</strong>li kodlamaya yönl<strong>en</strong>dirir.• Var olan kodu y<strong>en</strong>id<strong>en</strong> daha güv<strong>en</strong>li teknikleri kullanarak seçtiğiniz platformda y<strong>en</strong>id<strong>en</strong>oluşturun,• OWASP Rehberini gözd<strong>en</strong> geçirerek kodunuza seçil<strong>en</strong> kontrolleri uygulamaya başlayın.Birçok güv<strong>en</strong>lik rehberind<strong>en</strong> farklı olarak, o güv<strong>en</strong>li yazılım oluşturmayı size yardım etmekiçin tasarladı.• Kodunuzu güv<strong>en</strong>lik sorunlarına karşın test edin. Bunu k<strong>en</strong>dinizde alışkanlık haline getirin.• Sizin ortamınıza uygun olanları görmek için Kitabın referanslarını gözd<strong>en</strong> geçirinAÇIK KAYNAK KODLU PROJELER İÇİNAçık kaynak, <strong>web</strong> uygulama güv<strong>en</strong>liği için bir nevi meydan okumadır. Tek kişi tarafındangeliştiril<strong>en</strong> kişisel projelerd<strong>en</strong>, Apache, Tomcat gibi büyük projelere, PostNuke gibi büyük ölçekli<strong>web</strong> uygulamalarına kadar milyonlarca açık kaynak projesi bulunmaktadır.• OWASP’ a katılımı yada yerel grup toplantılarına katılmayı düşünün.• Eğer proj<strong>en</strong>iz 4'd<strong>en</strong> fazla geliştiriciye sahipse, <strong>en</strong> azından bir geliştiriciyi güv<strong>en</strong>likt<strong>en</strong>sorumlu olarak atamayı düşünün,• Özelliklerinizi güv<strong>en</strong>li olarak tasarlayın – derinliğine güv<strong>en</strong>lik ve tasarımda basitlikkavramlarını göz önünde tutun,• Daha güv<strong>en</strong>li kod yapılarını öz<strong>en</strong>dir<strong>en</strong> kodlama standartlarını kabul edin,• Güv<strong>en</strong>lik kusurlarının düzgün olarak ele alınmasını sağlayan, sorumluyu söyleme politikasınıkabul edin,• Sizin ortamınıza uygun olanları görmek için Kitabın referanslarını gözd<strong>en</strong> geçirinUYGULAMA SAHİPLERİ İÇİNTicari hayatın içindeki uygulama sahipleri zaman ve kaynak konusunda sıkıntılıdır. Uygulamasahiplerinin şunları yapmalıdır:• Yazılım üreticilerle OWASP Secure Software Contract Annex vasıtasıyla çalışmalı• İş ortamının istekleri fonksiyonel ihtiyaçlar olmadığından (NFRs) güv<strong>en</strong>lik ihtiyaçları gibiemin olsunlar.44


OWASP İlk <strong>10</strong> <strong>2007</strong>• Varsayılan özellik olarak güv<strong>en</strong>liği içer<strong>en</strong> tasarımları destekleyin, tasarımda basitliksavunmada derinlik sağlarlar.• Geliştiriciler içinde Güçlü güv<strong>en</strong>lik bilgi birikimine sahip personel alın yada personelinizi buşekilde eğitin.• Proj<strong>en</strong>in başından sonuna güv<strong>en</strong>lik sorunlarına karşın testler yapın: tasarım, test vedağıtım aşamalarında.• Güv<strong>en</strong>lik amaçlı projelerde kaynak, bütçe ve zamana izin verin.C-SEVİYE YÖNETİM İÇİNOrganizasyonunuz güv<strong>en</strong>li geliştirme yaşam döngüsüne (SDLC) sahip olmak zorundadır. Zayıflıklarürününüzü piyasaya sürdükt<strong>en</strong> sonra değil geliştirme aşamasında daha ucuza çözüm bulabilir.Makul bir SDLC sadece İlk <strong>10</strong> testleri içermez aynı zamanda şunları da içerir:• Ödeme poliçesi ve kontratının güv<strong>en</strong>lik ihtiyaçlarını da içerdiğind<strong>en</strong> emin olun.• Özel kodlar için, sizin poliçe ve standartlarınızdaki güv<strong>en</strong>li kodlama pr<strong>en</strong>siplerinib<strong>en</strong>imseyin.• Geliştiricilerinizi güv<strong>en</strong>li kodlama teknikleri hakkında yetiştirin ve bu yet<strong>en</strong>ekleriningeliştiğind<strong>en</strong> emin olun.• Bütç<strong>en</strong>iz güv<strong>en</strong>liğe uygun kod analiz araçlarını da içersin• Yazılım üreticinizi güv<strong>en</strong>liğinizin alt sınırının önemini hakkında uyarın.• Mimarlarınızı, tasarımcılarınızı ve iş yeri personelinizi <strong>web</strong> uygulama güv<strong>en</strong>liği temellerihakkında eğitin.• Kod d<strong>en</strong>etleyici olarak bağımsız düşünebilecek üçüncül kişileri düşünün• Sorumluyu ortaya çıkarma çalışmalarını b<strong>en</strong>imseyin ve düzgün bir süreç oluşturacakzayıflık raporlama sistemini k<strong>en</strong>di ürünleriniz için oluşturun.45


REFERANSLAROWASP PROJELERİOWASP <strong>web</strong> uygulama güv<strong>en</strong>liği için birinci sitedir. OWASP sitesi birçok projeyi, forumu, blogu,sunumu, aracı ve dokümanı barındırmaktadır. OWASP her yıl iki ana <strong>web</strong> uygulama güv<strong>en</strong>liğikonferansına ve 80 üzerinde yerel bölüme sahiplik yapar.Aşağıdaki OWASP projeleri büyük ihtimalle kullanışlı olacaktır.● OWASP Guide to Building Secure Web Applications● OWASP Testing Guide● OWASP Code Review Project (geliştirilme aşamasında)● OWASP PHP Project (geliştirilme aşamasında)● OWASP Java Project● OWASP .NET ProjectKITAPLARZorunluluk ned<strong>en</strong>iyle bu liste çok uzun tutulamamıştır. Bu referansları kullanarak bazıbaşlıklarda k<strong>en</strong>di bölg<strong>en</strong>izdeki kitapçılarda istediğiniz kitapları bulma şansınız var.● [ALS1] Alshanetsky, I. “php|architect's Guide to PHP Security”, ISBN 0973862<strong>10</strong>6● [BAI1] Baier, D., “Developing more secure ASP.NET 2.0 Applications”, ISBN 978-0-7356-2331-6●●●●●●[GAL1] Gallagher T., Landauer L., Jeffries B., "Hunting Security Bugs ", Microsoft Press, ISBN073562187X[GRO1] Fogie, Grossman, Hans<strong>en</strong>, Rager, “Cross Site Scripting Attacks: XSS Exploits andDef<strong>en</strong>se”, ISBN 1597491543[HOW1] Howard M., Lipner S., "The Security Developm<strong>en</strong>t Lifecycle", Microsoft Press, ISBN0735622140[SCH1] Schneier B., "Practical Cryptography", Wiley, ISBN 047122894X[SHI1] Shiflett, C., “Ess<strong>en</strong>tial PHP Security”, ISBN 059600656X[WYS1] Wysopal et al, The Art of Software Security Testing: Id<strong>en</strong>tifying Software Security Flaws,ISBN 032130486146


WEB SITELERIOWASP İlk <strong>10</strong> <strong>2007</strong>●●●●●●●OWASP, http://www.<strong>owasp</strong>.orgMITRE, Common Weakness Enumeration – Vulnerability Tr<strong>en</strong>ds,http://cwe.mitre.org/docum<strong>en</strong>ts/vuln-tr<strong>en</strong>ds.htmlWeb Application Security Consortium, http://www.<strong>web</strong>appsec.org/SANS Top 20, http://www.sans.org/top20/PCI Security Standards Council, publishers of the PCI standards, relevant to allorganizations processing or holding credit card data,https://www.pcisecuritystandards.org/PCI DSS v1.1, https://www.pcisecuritystandards.org/pdfs/pci_dss_v1-1.pdfBuild Security In, US CERT, https://buildsecurityin.us-cert.gov/daisy/bsi/home.html47


MİNİ SÖZLÜKbuffercommunicationCross Site Request ForgeryCross site ScriptingCryptographicd<strong>en</strong>ial of serviceerror handlingexploitFailure to Restrict URL AccessflawframeworkInformation leakage and Improper Error HandlinginjectionInjection flawsInsecure CommunicationsInsecure Cryptographic StorageInsecure Direct Object Refer<strong>en</strong>celeakageMalicious File Executionphishingscriptsessiontok<strong>en</strong>jetontop <strong>10</strong> <strong>ilk</strong> <strong>10</strong>vulnerabilityarabellekiletişimsiteler ötesi istek sahteciliğisiteler arası betik yazmaKriptografikhizmet dışı bırakmahata işlemegerçekl<strong>en</strong>miş açıkURL Erişimini kısıtlamada bozukluktasarım hatasıçerçeveBilgi sızıntısı ve Uygunsuz hata işleme<strong>en</strong>jeksiyonEnjeksiyon tasarım hatasıGüv<strong>en</strong>siz iletisimlerGüv<strong>en</strong>siz Kriptografik DepolamaGüv<strong>en</strong>siz Doğrudan Nesne Başvurususızıntızararlı dosya çalıştırmaparola balıkçılığıbetikoturumzayıflıkTercümede kullanılan sözlükler:●●●●http://www.<strong>web</strong>guv<strong>en</strong>ligi.org/sozluk/http://www.tur<strong>en</strong>g.com/http://www.zargan.comhttp://www.tbd.org.tr/g<strong>en</strong>el/sozluk.php48

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!