penetration

Web Uygulama Güvenlik Açıklıklarına Giriş

Web Uygulama Güvenlik Açıklıklarına Giriş

İnternetin hızla tüm alanlarda faaliyet göstermesi, güvenlik problemlerini de beraberinde getirmektedir. Web sitelerinin, web uygulamalarının ve web hizmeti için kullanılan ek servislerin güvenlik açıklıkları saldırılar için açık bir hedef oluşturmaktadır.

Günümüzde en çok kullanılan güvenlik açıklıkları “OWASP TOP 10” listesi ile açıklanmaktadır. OWASP (Open Web Application Security Project) kar amacı gütmeyen, web uygulama güvenliği ile ilgilenen bir topluluktur. Her sene, saldırganların en çok kullandığı güvenlik açıklıklarını TOP 10 listesiyle sunmaktadır. Tabi bu liste dışında kullanılan birçok yöntem de mevcut. Fakat web uygulamalarında en sık karşılaşılan saldırı tipleri aşağıdaki gibidir;

Injection: Uzun süredir TOP 10 listesinin birinci sırasındadır. SQL Injection ve Command Injection en popülerleridir. Temel olarak web uygulamalarında, girdiler üzerinden arka plandaki çalışan kod parçasına, zararlı kod enjekte ederek oluşur. Ufak bir örnek ile daha anlaşılır olacaktır.

  • SQL Injection: Web uygulamalarında SQL sorguları, kullanıcıdan aldığı veriyi veritabanında sorgulayıp sonuç/veri döndüren kod parçacıklarıdır. Kullanıcıdan alınan veri (kullanıcı adı, kitap ID numarası vb) arka planda kontrolsüz bir şekilde SQL sorgusuna verildiğinde bu sorgu manipüle edilebilir hal almaktadır. Örn; www.example.com/login.php gibi bir giriş sayfası olsun. Bu sayfanın arka planda yaptığı iş, kullanıcı adı ve parola bilgilerini alıp veritabanında sorguladıktan sonra giriş işlemini yapmak. “SELECT * FROM users WHERE username=’test’ AND password=’test'”. Biz bu sorguyu -> “SELECT * FROM users WHERE username=” OR 1=1 # ….” şeklinde çalışmasını sağlarsak login işlemini başarıyla geçmiş oluruz. <‘ OR 1=1 # > sorguyu manipüle etmeyi sağlar. 1=1 ile sorgunun true sonuç vermesini sağlamış bulunmaktayız. Bu örneği aşağıdaki link üzerinden canlı olarak test edebilirsiniz. Sadece username kısmına payload’ı yazıp login demeniz yeterli. http://testphp.vulnweb.com/login.php
  • Bir diğer SQL Injection zafiyetinin kullanıldığı yöntem, yine kontrolsüz bir sorgu üzerinden veritabanındaki diğer tabloları okumamızı sağlamaktadır.
  • Command Injection: Kontrolsüz bir kod bloğunun çalışmasıyla oluşan zafiyet türüdür. Kullanıcıdan alınan parametre sistem komutu olarak kullanıldığında oluşan zafiyet türüdür. Örn; klasik ping atmayı sağlayan bir web sayfası, “www.example.com/ping.php?ip=8.8.8.8” Bu sayfa kullanıcıdan IP adresini parametre olarak almaktadır. Arka planda çalışan kod aşağıdaki gibdir ;

               <?php

               //

               $parametre = $_GET[“ip”];

               system(“ping $parametre”);

               //

               ?>

Herhangi bir kontrol olmadığından saldırgan, parametre olarak ip adresi ile birlikte başka sistem komutları da çalıştırabilmektedir. Örn; “www.example.com/ping.php?ip=8.8.8.8; pwd” ping atma komutu çalıştıktan sonra pwd komutu da çalışabilmektedir. Pwd yerine bilgi çalabileceği veya sisteme sızmasını sağlayan komutları da çalıştırabilmektedir.

Broken Authentication: Genellikle kimlik doğrulama ya da oturum yönetimi ile ilgili fonksiyonların yanlış uygulanması sonucunda ortaya çıkar.

Bir kullanıcı bir sisteme giriş yaptığında kullanıcıya bir oturum id (session id) atanmaktadır. Bu session id değeri saldırgan tarafından kullanıcıya gönderilip, kullanıcının bu id ile giriş yapmasını bekler. Kullanıcı bu id ile sisteme giriş yaptığında saldırgan da sisteme o kullanıcıymış gibi girebilmektedir.

Bir diğer yöntem de tahmin edilebilir oturum yöntemidir. Servis üzerinden atanan id değerleri kullanıcılar arasında belli aralıklarla artıyor veya kullanıcıların isimlerine göre oluşturuluyorsa bunun üzerinden tahmin yürütülerek kullanıcının hesabı ele geçirilebilir.

Sensitive Data Exposure: Türkçe karşılığı Hassas Verilerin İfşası olarak çevrilebilir. Bu açıklık genel olarak http request yani http istek gönderiminde verilerin şifrelenmeden, clear text olarak gönderilmesinden veya çözülmesi kolay şifreleme metotlarından kaynaklı oluşan zafiyet türüdür. Sql injection zafiyetiyle birlikte veritabanın ele geçirilmesi ile de ortaya çıkabilir. Önemli bilgiler veritabanında zayıf şifreleme veya hiç şifrelenmemesiyle oluşur.

Daha anlaşılır olması için şöyle anlatmakta fayda var. Kullanıcı bir sisteme login işlemi olurken kullanıcı bilgileri açık bir şekilde sunucuya yollanırsa, aynı ağda bulunan saldırgan ağı dinleyerek verileri ele geçirebilir. Facebook, twitter gibi sistemler bu işlemi güçlü şifreleme algoritmaları ile korumakta. Fakat bir çok sistemde karşılaşılabilen açıklıklardandır.

XML External Entities (XXE): Son zamanlarda xml formatını kullanan sistemlerde sıkça karşılaşılabilen zafiyet türüdür. Eski ve zayıf yapılandırılmış XML yapılarının manipüle edilerek, harici zararlı kod ilave edilmesiyle oluşmaktadır. Örn; kullanıcıdan aldığı verileri XML olarak işleyen ve ekrana basan bir sistem düşünelim. HTTP Request işlemi sırasında XML formatında veriler gönderildiği için bu XML formatına <!ENTITY….> kod ekleyerek sistemden dosya okuyabilir, uzaktan kod çalıştırabilir hale gelmektedir.

Broken Access Control: Bu açıklık, sistem kullanıcılarının yetkilendirme işlemlerinin eksik yapılmasından kaynaklanmaktadır. Daha anlaşılır bir tabirle moderatör, admin vb. gibi üst yetkili kullanıcıların yapabileceği işlemleri, görüntülemeleri normal bir kullanıcının yapabiliyor olmasıdır. Örn; sistem kullanıcılarının bilgilerinin listelendiği bir sayfa olsun. www.example.com/user.php?adi=ahmet. Normal şartlarda bu sayfayı sadece admin ve ahmet görüntüleyebiliyor olması gerekmektedir. Fakat arka planda yetkilendirme işleminin yanlış veya hiç yapılmamasından kaynaklı olarak “Enes” kullanıcısı bu sayfaya erişebilir ve ahmet kullanıcısına ait bilgileri görüntüleyebilir.

Security Misconfiguration: Servis ayarlarının güvensiz default ayarları, geçici veya eksik yapılandırılması ile oluşabilen açıklık türüdür. Sistem üzerinden çalışan servislerin eski sürümlerinin çalıştırılması, kullanılmayan zafiyetli eklentilerin varlığını sürdürmesi/silinmemesi veya default kullanıcıların (admin:admin gibi) hala kullanılıyor olması bu güvenlik açığına örnek gösterilebilir.

Cross-Site Scripting XSS: Bir web uygulaması üzerinde kullanıcıdan alınan verilerin kontrolsüz, filtresiz olarak işlenmesinden kaynaklı oluşan açıklıklardır. Saldırganlar girdiler(input) üzerinden zararlı javascript kodu çalıştırarak diğer kullanıcıların oturumlarını ele geçirebilmektedir. 3 farklı XSS türü bulunmaktadır.Reflected XSS: Kullanıcıdan alınan veriler sadece o anlık çalışmayı sağlamaktadır. XSS payloadı sunucu tarafında işlenmediği için bu saldırı türü daha çok zararlı link oluşturularak normal kullanıcıya tıklatılması sonucu oluşmaktadır. Saldırganın normal kullanıcıya zararlı link tıklatarak oturum çalabilir. Bu saldırı metodu saldırganın sosyal mühendislik becerisine göre amacına ulaşabilir. Çünkü normal kullanıcı ile etkileşime girmesi gerekmektedir (Linke tıklatma).

Stored XSS: Sunucu tarafında kayıt altına alınan, kaydedilen açıklık türüdür. Yani zararlı XSS payload’ının veritabanına kaydedilmesi ve kaydedilen tablonun bir web sayfasında gösterilmesi ile oluşur. Sayfa her çalıştığında zararlı XSS payload’ı da çalışmaktadır. Sayfayı görüntüleyen her kullanıcı bu saldırıdan etkilenmektedir.

  • DOM Based XSS: DOM tabanlı XSS türüdür. DOM kısaca web sayfası içerisinde herhangi bir nesnenin özelliğine müdahale edebilmemize olanak sağlar. Bu müdahale, sayfanın yapısına göre Reflected veya Stored saldırısı mantığında işler. DOM Based XSS denmesinin sebebi DOM kaynaklı olmasından gelmektedir.

Insecure Deserialization: Temel olarak serialize edilmiş bir verinin deserialize edilmesiyle oluşabilecek problemlerin genel adıdır. Serialize, bir nesnenin saklanacak/transfer edilecek forma dönüştürülmesine denir. En bilindikleri yöntemler Json ve xml denilebilir. Deseriazalization, serialize edilmiş bilginin tekrar nesneye çevrilmesidir. En bilindik örneği yml dosyaları içinde json kod parçası eklenip deserialize edildiği zaman otomatik çalışır hale gelmektedir. Bu da uzaktan kod çalışmayı etkin kılmaktadır.

Using Components with Known Vulnerabilities: Adından da anlaşılacağı üzere bu zafiyet türü kullanılan servislerin, uygulamaların, eklentilerin eski ve bilindik exploitleri olan sürümlerinin kullanılması sonucu oluşuyor. Birçok web sayfası hali hazırda çalışan sistemlerinin yeni gelen güncellemelerle bozulması, istenildiği gibi çalışamaması, eklentilerin güncel sisteme uyum sağlayamaması sebebiyle eski sürümleri kullanmaya devam edebilmektedir. Bu da saldırganların sistemleri ele geçirmesini kolaylaştırmaktadır.

Bu blog Yalova Üniversitesi Bilgisayar Mühendisliği Bölümü öğrencisi stajyerimiz Abdullah TUTAR tarafından yazılmıştır.

read more