WEB UYGULAMA GÜVENLİĞİ HAKKINDA Mesut Güngör İzmir Yüksek Teknoloji Enstitüsü Bilgi İşlem Daire Başkanlığı
İçindekiler Bilinen en popüler web uygulama atakları Güvenli yazılım geliştirme Prosedürler
Bilinen en popüler ataklar XSS (Cross Site Scripting) SQL Injection CSRF (Cross Site Request Forgery) LFI (Local File Inclusion) & RFI (Remote File Inclusion)
XSS (Cross Site Scripting) Atak yapan kişi sayfanızı input öğelerine javascript, vb script, html(onchange,onclick), kodlarını gömerek saldırır. En genelde ikiye ayrılır ; Kalıcı olmayan XSS : Sayfada herhangi bir değişiklik olmaz link 1 kere çalışır ve atak yapan istediğini aldıktan sonra işini bitirir. Açığı olan link sosyal mühendislikle email atılır ve kurbanların tıklanması sağlanır. Kalıcı XSS : Kullanıcı forum postu veya profiline girdiği script veritabanına saklanır ve her sayfa çağrıldığında çalıştırılır.
XSS Örnekler guest<script>alert('attacked')</script> guest<script>alert(document.cookie)</script> guest <script>document.cookie="security=low";alert (document.cookie)</script>
SQL INJECTION Temel SQL Injection Kör-Karambole (Attır-Tuttur) (Blind) SQL Injection
SQL Injection Örnekleri 1' OR ' 1=1; -- 3' and 1=0 union select null, version()# 3' and 1=0 union select null, user()# 3' and 1=0 union select null, database()# low.php $id = $_GET['id']; $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
Güvenli Yazılım Geliştirme ESAPI (Enterprise Security API) Microsoft Design Guidelines for Secure Web Applications (Eski bir dökümantasyon ama günümüze uyarlanabilir.) SANS Security Checklist OWASP Web Uygulama Güvenliği Kontrol Listesi
Güvenli Yazılım için Yapılması Gerekenler Girdilere Dikkat!!! Kullanıcı girdilerine güvenmeyin (textbox, checkbox, vb.) Girdilerin kontrolünü sadece istemci taraflı yapmayın. Girdileri sırasıyla Constraint -> Reject -> Sanitize kuralına göre eleyin.
Güvenli Yazılım için Yapılması Gerekenler Kimliklendirme Kullanıcılara şifre ve kullanıcı adını sorarken kesinlikle düz metin (http) protokolünü kullanmayın. Https Kullanın!!! Şifreleri kesinlikle düz metin olarak saklamayınız. Şifre hashi üretirken hashin tuzunu rassal olarak üretin. Oturum yönetimi için cookielerini secure olarak işaretleyin. (protokol https dahi olsa cookie secure olmadığında cookie hırsızlığıyla oturum çalınabilir.) Oturum kapanana kadar aynı cookie yi kullanmayın. Şifreyi geçersiz kılma süresini belirleyebilmeyi mümkün kılın. Hesabı kitleme veya geçersiz kılma politikalarını belirleyin.(örnek: 5 kere aynı ipden yanlış şifre girerse hesabı 1 günlüğüne engelle) Şifre uzunluğu ve karmaşıklığını kuvvetli tutun. (En az 8 karakter alfanumerik, özel karakter, büyük küçük harf vb.)
Güvenli Yazılım için Yapılması Gerekenler Oturum Güvenliği Oturum Kimliklendirme Cookilerini korumak için SSL kullanın. Kimliklendirme Cookielerinin içeriğini şifreleyin. Cookie ömürlerini kısa tutun. Oturum durumunu yetkisiz kişilere karşı koruyun. (Büyük sistemler için)
Zaafiyetler ve Oluştukları Sorunlar Özet Tablo Zaafiyet Kategorisi Giriş Doğrulaması Kimlikliklendirme Yetkilendirme Yönetim Ayarları Gizli Hassas Veri Oturum yönetimi Şifreleme Parametre ile Oynama Exception Yönetimi Denetim ve Kayıt tutma(log) Kötü Dizayn edildiğinde olası karşılaşılacak problemler Ataklar form alanlarına, cookielere, http başlıklarına ve sorgulara zararlı stringler gömerek gerçekleştirilir. Bu ataklar XSS, SQL Injection, ve tampon taşırma ataklarını içerir. Kimlik kandırma, şifre kurma, hak yükseltme, yetkisiz erişim gibi sorunlar doğurur. Gizli ve hizmete özel verilere yetkisiz erişim, bu verilerle oynama, veya yetkisiz işlemlerin gerçekleştirilmesi gibi sorunlara sebep vermektedir. Yönetim arayüzüne yetkisiz erişim, ayaların güncellenmesi kullanıcı hesaplarına yetkisiz erişim. Gizli verinin açığa çıkması ve veri ile oynanması Oturum bilgilerinin dinlenerek elde edilerek oturum hırsızlığı ve kimlik kandırma giibi sorunlara yol açmaktadır. Gizli veri ve kullanıcı hesaplarına erişim Dizin atakları, Komut Çalıştırma atakları, giriş kontrol mekanizmalarını atlatma, bilgi açığa çıkartma, hak yükseltme, dos (denial of service) ataklarına yol açmaktadır. Dos, hassas sistem düzey detaylarının ortaya çıkması. Atağın nereden geldiğinin tespitinin yapılamaması, kullancının yaptığı bir işlemi ispatlayamama, problemlerin nerden kaynaklanabileceğini tespit edememe gibi sorunlara meydan vermektedir.
ESAPI (Enterprise Security API) Web Uygulamaları için Güvenlik Kontrol Kütüphanesi Java,.Net, PHP, Javascript sürümleri mevcuttur. Ücretsiz ve Açık Kaynak Kodludur.
ESAPI (Enterprise Security API)
OWASP TOP 10 & ESAPI OWASP Top Ten OWASP ESAPI A1. Cross Site Scripting (XSS) A2. Injection Flaws A3. Malicious File Execution A4. Insecure Direct Object Reference A5. Cross Site Request Forgery (CSRF) A6. Leakage and Improper Error Handling A7. Broken Authentication and Sessions A8. Insecure Cryptographic Storage A9. Insecure Communications A10. Failure to Restrict URL Access Validator, Encoder Encoder HTTPUtilities (Safe Upload) AccessReferenceMap, AccessController User (CSRF Token) EnterpriseSecurityException, HTTPUtils Authenticator, User, HTTPUtils Encryptor HTTPUtilities (Secure Cookie, Channel) AccessController
Fonksiyonlar User Controller Business Functions Data Layer Backend isvalidcreditcard isvaliddatafrombrowser isvaliddirectorypath isvalidfilecontent isvalidfilename isvalidhttprequest isvalidlistitem isvalidredirectlocation isvalidsafehtml isvalidprintable safereadline encodeforjavascript encodeforvbscript Validator Encoder encodeforurl Canonicalization Double Encoding Protection Sanitization Normalization encodeforhtml encodeforhtmlattribute encodeforldap encodefordn encodeforsql encodeforxml encodeforxmlattribute encodeforxpath
ESAPI Örnek