Web Uygulama Güvenliğinde Doğru Bilinen Yanlışlar! Deniz Çevik Güvenlik Testleri Yöneticisi deniz.cevik@biznet.com.tr
Gündem Kısaca Biznet Web Uygulama Mimarisine Kısa Bir Bakış Uygulama Güvenliği Sağlamada Sıkça Yapılan Hatalar Alınabilecek Tedbirler
Kısaca Biznet Biznet Bilişim kurulduğu 2000 yılından bu yana ağ ve bilgi güvenliği alanında projelendirme, danışmanlık ve denetim hizmetleri sunmaktadır. Ar-Ge yatırımları ile elektronik imza, elektronik fatura, ISO 27001 Bilgi Güvenliği Yönetim Platformu gibi özgün ve yenilikçi yazılımlar geliştirir. Türkiye de PCI Security Standards Council tarafından PCI güvenlik denetimleri yapmak üzere yetkilendirilmiş olan tek Türk firmadır. Web uygulama güvenliği konularında danışmanlık hizmeti vermektedir.
Web Uygulama Mimarisi Çok sayıda bileşen demektir! Web sunucuları Çeşitli browser yazılımları Uygulama sunucuları Uygulama framework ve dilleri Farklı veri iletim yöntemleri (HTTP, XML, SOAP) İstemci tabanlı frameworkler Veri tabanı sistemleri Diğer ağ ekipmanları ve entegrasyon
GÜVENLİK DUVARI Web Uygulama Mimarisi Web Sunucular Uygulamalar Veri Tabanları HTTP/HTTPS Apache Microsoft-IIS nginx lighttpd Apache-Coyote IBM_HTTP_Server Jetty Sun-ONE-Web-Server Lotus-Domino Sun GlassFish JBOSS Kullanıcı XMLRPC Web Sunucu Uygulama Sunucuları SQL Database İstemci Web Sunucu Web Servisleri XML Database (WSDL) SOAP XML Web Sunucu Diğer Bağlantılar LDAP
Sık Yapılan Hatalar Geliştiricilerin Web Uygulama kodlarında problem gidermede yaptığı hatalar. Sistem yöneticilerinin aldığı önlemlerdeki hatalar. Güvenlik denetçilerinin zafiyetleri belirlemede yaptıkları hatalar. Proje Yöneticilerinin uygulama tasarım ve planlama aşamasında yaptığı hatalar.
Geliştiricilerin Kullandığı Hatalı Yöntemler Kara listeler (Blacklist) ile sorunu gidermeye yönelme XSS, SQL Injection gibi problemleri gidermek için keyword veya regex bazlı uygulama filtreleri Script, alert, select, and 1=1, <,>, ifadeleri istekten silmek veya çıktılar oluşturulurken silmek Rapor edilen soruna yönelik çözüm üretme
Geliştiricilerin Kullandığı Hatalı Yöntemler Kara listeler ile çözüm üretmek sorunu ortadan kaldırmayacaktır <script>prompt(123)</script> <scrscriptipt>alert(1)</scscriptript> «+onmouseover=alert(123)+» %00 yerine - %20 %09 %0a %0b %0c %0d %a0 abc = 0 616263 And, or yerine 1+length(1), 2-len(1) http://websec.wordpress.com/2010/12/
Geliştiricilerin Kullandığı Hatalı Yöntemler PHP magic_quotes SQL Injection i engeller mi? SELECT * FROM tablo WHERE sifre='\' OR 1=1 --'; İstemci tarafında istekleri şifreleyerek ve imzalayarak yollamak Oturum yönetimini istemcideki imzalama ile gerçekleştirmek.
Geliştiricilerin Kullandığı Hatalı Yöntemler PHP Include Fonksiyonu kullanımındaki hatalar Null Byte için gerekli koruma mevcut <?php $file = $_GET['file']; if (file_exists('/home/www/'.$file.'.php')) { include '/home/www/'.$file.'.php';}?> Ancak hala sistem üzerindeki diğer PHP uygulamaları include edilebilir.
Geliştiricilerin Kullandığı Hatalı Yöntemler ASP.NET Request Validation XSS Koruması için tek başına yeterli mi? Parametre adı olarak XSS «+onmouseover=alert(1234)+» Kritik verileri VIEWSTATE içinde aktarabilirim, nasıl olsa değiştirilemez, Her zaman değil (http://technet.microsoft.com/enus/security/bulletin/ms10-070) MAC Kontrolü Devre Dışı Kalmış Olabilir Replay Edilebilir mi? (http://eaglesite.blogspot.com/2010/01/viewstate-replay-attack.html) Viewstate içinde kritik bilgi aktarımı Client-Side Trust Javascriptlere güvenmek
Yazılım Geliştiricilere Öneriler Kara listeler kullanışlıdır ama her zaman etkin koruma sağlamaz. (neleri engellerim / nelere izin veririm) Güvenlik önlemleri mutlaka sunucu tarafında alınmalıdır, istemci tabanlı her türlü kontrol atlatılabilir. Veri tipi, büyüklüğü mutlaka kontrol edilmelidir. Uygulama frameworkleri her zaman etkin koruma sağlamayabilir. XSS saldırılarına alınabilecek en etkin önlem çıktılar üretilirken encode edilmesidir. SQL Injection için en etkin çözüm Prapared Statement (PDO) veya Parametize Sorgular kullanımıdır.
Sistem Yöneticilerinin Yaptığı Hatalar Temel Hata: Uygulamadan ve yazılımcıdan bağımsız çözüm arayışı WAF sistemini yanlış adama emanet etmek. WAF ve IPS sistemleri uygulama güvenliğini sağlama konusunda yeterli mi? Sistem yöneticisi web teknolojileri veya kullanılan sistem hakkında gerekli yetkinliğe sahip mi? WAF/IPS sistemi doğru yapılandırılmış mı?
Sistem Yöneticilerinin Yaptığı Hatalar Temel yapılandırma hataları SSL trafiği için gerekli ayarlar yapılmış mı? Web sunucu tarafından desteklenen tüm cipher lar için WAF/IPS sistemi kontrol gerçekleştirebiliyor mu? http://ttlexpired.com/blog/?p=121 WAF sistemi etkin durumda mı? Aşırı yük altında nasıl davranıyor. (Fail Open vs Fail Close) Güvenlik mi / Erişilebilirlik mi
Sistem Yöneticilerinin Yaptığı Hatalar WAF/IPS sistemlerinin eksiklikleri GET/POST kabul edilebilir http istek uzunlukları web sunucu ve waf üzerinde aynı mı? HTTP isteği içindeki tüm alanlar kontrol ediliyor mu? GET/POST parametre değerleri, Tüm URL, parametre adı, User-Agent, VIA, XMLRPC istekleri http://en.wikipedia.org/wiki/list_of_http_header_fields Tüm HTTP metotları için WAF kontrol yapıyor mu? OPTIONS, GET, HEAD,POST,PUT,DELETE, TRACE, CONNECT, PATCH
Sistem Yöneticilerinin Yaptığı Hatalar WAF/IPS sistemleri bypass edilebilir mi? HTTP Parameter Pollution http://www.site.com.tr/uyg.asp?id=123+select+1&id=2,3+from+table HTTP Parameter Fragmantation uyg.asp?brandid=123+union/*&prodid=*/select+user,pass/*&price=*/from users-- XSS sadece script tag i ile mi yapılabilir? (http://ttlexpired.com/blog/?p=334) <INPUT+TYPE="checkbox"+onDblClick=confirm(XSS)> <APPLET+CODE=""+CODEBASE="http://url/xss"> Uygulama geliştiricilerin eklediği hatalı filtreler «+onmonmouseoverouseonmouseoverover=alert(1234)+» URL Re-Write http://localhost/uyg/id/123+or+1=1/tp/456 SQL Injection Sadece and 1=1 den ibaret değildir. Farklı Mantıksal Operatorler kullanmak (uyg.asp?id=1' 1='1) Aritmetiksel Fonksyionlar (uyg.asp?id=123+len(@@server)-len(@@server)) Açıklama Alanları (uyg.php?id=1/*union*/union/*select*/select+1,2,3/*) Boşluk Karakteri Gerekli mi (uyg.php?id=union(select(version()))--) (MySQL, PostgreSQL) Diğer Pek çok alternatif yöntem - http://ttlexpired.com/blog/?p=190
Sistem Yöneticilerinin Yaptığı Hatalar WAF/IPS sistemleri bypass edilebilir mi? Parameter Manipulation (custid=123, custid=124) Encoded/Encrypted/Hash li Parametre Değerleri Protokol Sorunları (TCP/IP den kaynaklanan problemler) Advanced Evasion Technics http://www.stonesoft.com/en/press_and_media/releases/en/2010/16122010.html http://www.stonesoft.com/en/press_and_media/releases/en/2011/10102011.html WAF/IPS sisteminiz web saldırıları için ne kadar etkin çalışıyor. http://ttlexpired.com/blog/?p=234
Sistem Yöneticilerinin Yaptığı Hatalar WAF/IPS sizi her türlü uygulama problemine karşı koruyabilir mi? Learning Mode??? WAF Uygulama geliştiricilerde yanlış güven etkisi doğurabilir. Uygulama ile ilgili sorunları en etkin bir şekilde giderileceği yer uygulamanın kendisidir.
Güvenlik Denetçilerinin Yaptığı Hatalar Araç tercihindeki hatalar. Yapıdaki tüm unsurlar kontrol ediliyor mu? Diğer Unsurlar (Reverse Proxy, LB, Firewall Sistemleri vb) Veri Tabanı Uygulama Uygulama Sunucu/Framework Web Sunucu İşletim Sistemi TCP/IP Alt Yapısı Bir araç ile her türlü uygulamayı kontrol edebilir misiniz? Flash/Flex tabanlı uygulamalar Web 2.0 Uygulamaları (JAVA ZK, Google GWT vb.) Web Servisleri Scriptlerin Kontrolü
Güvenlik Denetçilerinin Yaptığı Hatalar Bir araç ile her türlü uygulamayı kontrol edebilir misiniz? POST /zkau HTTP/1.1 Host: localhost Connection: keep-alive Content-Length: 143 ZK-SID: 5609 User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.78 Safari/535.11 Content-Type: application/x-www-formurlencoded;charset=utf-8 Accept: */* Accept-Encoding: gzip,deflate,sdch Accept-Language: en-gb,en-us;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 dtid=z_i6l&cmd_0=onclick&uuid_0=zk_comp_664 HTTP/1.1 200 OK Content-Length: 22349 Content-Type: text/plain;charset=utf-8 ZK-SID: 5609 X-Powered-By: Servlet/2.5 JSP/2.1 {"rs":[["rm",["zk_comp_783"]],["rm",["zk_comp_868"]],["rm",[ "zk_comp_886"]],["rm",["zk_comp_794"]],["rm",["zk_comp_78 4"]],["rm",["zk_comp_867"]]} POST /uyg.gwt HTTP/1.1 Host: localhost Connection: keep-alive X-GWT-Module-Base: /uyg/ User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19 Content-Type: text/x-gwt-rpc; charset=utf-8 X-GWT-Permutation: 1F4EA12941 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-gb,en-us;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 5 0 7 http://localhost/uyg.gwt/ 29F4EA1240F157649C12466F 01F46F60 com.test.client.greetingservice greetserver java.la ng.string myinput1 myinput2 1 2 3 4 2 5 5 6 7 HTTP/1.1 200 OK Content-Length: 22349 Content-Type: text/plain;charset=utf-8 X-Powered-By: Servlet/2.5 JSP/2.1 [{"s1":"abc",«i1":81.284083,"change":-0.007986}]
Güvenlik Denetçilerinin Yaptığı Hatalar Otomatik Zafiyet Tespit İşleminin Eksik Kaldığı Noktalar DOM Tabanlı sorunlar (DOM tabanlı XSS) Yeni nesil web uygulamalarının kontrolü (Google GWT, Java ZK vb) Captcha kullanılan uygulamalar Tek seferlik işlem gerçekleştiren uygulamalar (Sepete Ekle, Sil vb) Veri kaydı yapıp, çıktı olarak detay sunmayan uygulamalar. (Stored, Second Order) Oturum yönetimi problemleri (Hak yükseltme, yetkisiz erişim, vb) Hash/Encoded/Encrypted parametre değerleri Parameter Manipulation problemleri URL Re-Write kullanılan uygulamalar (GET /guzel_uygulama,1-57/3,[9-0]/12;abc/) Sıralı işlem yapılmasını gerektiren uygulamalar. (istek kaydet ok görüntüle - ok) Uygulama geliştirici tarafından eklenen kara listelerin bulunduğu uygulamalar Viewstate gibi alanlarda aktarılan veriler Crawler sorunu Veri bütünlüğü kontrolünün yapıldığı uygulamalar.
Güvenlik Denetçilerinin Yaptığı Hatalar Otomatik tarama modeli web uygulama zafiyetlerinin ortaya çıkartılması konusunda eksikliklere sahiptir. https://www.owasp.org/images/8/81/closing_the_gap_ap psecdc_shelly.ppt Pek çok unsur bir uzman tarafından elle kontrol edilmelidir http://www.webguvenligi.org/docs/web_uygulama_guvenl igi_kontrol_listesi_2010.pdf
Planlama Aşamasında Yapılan Hatalar Denetim çalışmasının proje takvimindeki yeri Kapsamlı testler için yeterli süre var mı? Bulunan bulguların kapatılma süreleri Testi yapacak ekip belirlenmiş mi? Test ekibinin programı
Planlama Aşamasında Yapılan Hatalar Yazılım ekibinin sorunu giderme hızı, doğrulama için dönüş süreleri
Planlama Aşamasında Yapılan Hatalar Denetim Ekibinin Seçim Kriteri Şartnameler Sahip olunan sertifikalar Aynı ekip / Farklı bakış açısı Test edilecek uygulamanın tipi ve ekibin bu tip uygulamalardaki uzmanlığı / Fiyat POC Denetim Maliyetini Kim Karşılamalı Denetim Bütçesinin Belirlenmesi Önceki projelerdeki fiyatlar Bütçe belirlemeden önce uzman görüşü Uygulama veya IP başına / Adam-gün
Teşekkürler! Deniz Çevik deniz.cevik@biznet.com.tr