19 Eylül 2016 Pazartesi

Web Uygulaması Güvenliği - Authentication Bypass


Authentication bypass, uygulamaya giriş yapma yetkisi olmayan birinin giriş yapabilmesine denir. Saldırı başka bir kullanıcının giriş bilgilerini veya oturumunu çalarak da yapılabilirken, farklı yöntemler de kullanılabilir.

SQL Injection

Kullanıcıya sunulan parametrelerde SQL injection açığı var ise kullanıcı adı ve parola parametrelerine girilen SQL injection komutları ile herhangi bir kullanıcı olarak oturum açılabilir.

Yukarıdaki örnekte DVWA üzerinde X’ OR ‘1’=’1 Komutu ‘Name’ parametresine girilerek, yönetici olarak oturum açılmıştır.

X-Path Injection

X-path injection kullanarak otantikasyon atlatmak sql injection ile otantikasyon atlatmakla aynı prensipleri izler. Tek fark enjeksiyon SQL komutlarını değil XML komutlarını kapsar. 

Aşağıdaki X-path injection komutuna bakacak olursak:
/*[0]/user[username=”admin" or "1"="1” andpassword=”Enjeksiyon”]
X-path komutunda ‘OR’ dan sonra gelen 1 = 1 ifadesi her zaman doğru olacağı için veri sunucuya gönderildiğinde ‘admin’ kullanıcısı olarak oturum açılacaktır. XML' de SQL’de de olduğu gibi, OR ifadesi AND ifadesinden üstündür.

Böylece komut aşağıdaki gibi gözden geçirilecektir:
username=”admin” or FALSE
Böylelikle saldırgan XML injection komutunu karşı tarafa gönderdiğinde, ‘username’ değeri doğru olduğundan, ‘password’ değeri hesaba katılmadan saldırgan admin olarak oturum açacaktır.

Brute-Force Girdi Deneme

Web uygulamalarındaki kullanıcı giriş panelleri doğru yapılandırılmadığı takdirde, saldırganlar otomatik çalışan programlar kullanarak üst üste birçok kullanıcı adı ve parola ile giriş yapmayı deneyebilirler. Dictionary-based veya brute-force parola tahmin saldırıları ile yönetici ve kullanıcı giriş bilgilerini ele geçirebilirler.

Aşağıda görüldüğü gibi, yanlış yapılandırılmış web uygulamasında bruteforce saldırılarını engellemeye yönelik bir captcha kullanımı veya iki faktörlü otantikasyon yoktur.
Yukarıda kaynak kodu belirtilmiş web uygulamasına yapılan parola tahmin saldırısı yönetici parolasının ‘password’ olduğunu ortaya koymuştur.


Örnekte parola tahmin saldırısını yürüten programa bir ‘failure-string’ tanıtmak yerine, her parola denemesi sonucunda geri dönen verinin büyüklüğüne bakılmıştır. 

Görüntüdeki ‘length’ değeri diğerlerinden farklı olan sonuç bize hangi parolanın doğru olduğunu göstermektedir. 

Daha detaylı açıklayacak olursak:
  1. Parolayı her yanlış girdiğimizde bize verilen cevap ‘Parolan yanlış, tekrar dene’ olsun.
  2. ‘Parolan yanlış, tekrar dene’ cevabının boyutu da 100 olsun. 
Denediğimiz parolalar arasından bize gelen cevabın boyutu 100 dışında bir şey olduğu an bu iki şey olabilir:
  1. Error aldık / başka bir sayfaya yönlendirildik.
  2. Denediğimiz parola doğruydu ve başka bir sayfaya yönlendirildik.
Böylece deneye yanıla kullanıcının parolasını bulmuş olduk. Tabii ki bu tür bir saldırı gerçek ortamda her zaman basit bir betik aracılığıyla yapılır. Bruteforce parola tahmin saldırılarını engellemek için aşağıdaki gibi önlemler alınabilir:
  1. Captcha Kullanımı
  2. Telefona SMS ile kod göndermek gibi ikinci bir faktör kullanımı 
  3. Aynı IP adresinden gelen fazla sayıda denemenin, IP adresinin bloke edilmesini sağlaması 
  4. Aynı kullanıcı adı belirli bir sayıdan fazla denendiğinde kullanıcının hesabının geçici olarak kilitlenmesi 

Session Stealing

Bir web uygulamasında her oturum açıldığında oturumu yönetmek için tarayıcıya bir ‘Session ID’ atanır. Eğer siz oturumunuzu kapatmadıysanız ve saldırgan ‘Session ID’ nizi ele geçirirse, web uygulamasına gönderdiği bir form ile sizin oturumunuza erişebilir. 

Bu tür bir saldırı, kullanıcının zararlı bir web sitesini veya üzerinde istismar edilmiş bir XSS açığı olan iyi niyetli bir websitesini ziyaret etmesiyle gerçekleşebilir. 

Zararlı sitenin ziyaret edilmesiyle saldırgan kullanıcının çerezlerini çalabilir ve eğer kullanıcının oturumu açıksa, oturuma erişebilir.

Tahmin Edilebilir Session ID 

Eğer oturumun açıldığı web sitesi kullanıcılara tahmin edilebilir Session ID atıyorsa, saldırgan kullanıcıların Session ID’lerini tahmin ederek oturumlarına erişebilir. 

Web uygulamasının oturumlara atadığı Session ID'lerin kompleks ve tahmin edilemez olmasını sağlamak en önemli adımdır. Sadece rakamlardan oluşan Session ID’leri tahmin etmesi çok kolaydır. Fakat iyi bir Session ID’ye örnek sadece büyük küçük harf ve rakam kullanmak ile olmaz. Session ID uzun, ve tamamen rastgele olmalıdır.

Örneğin: 

Session ID: fj198713BA298331
Kolaylıkla tahmin edilebilir bir session ID olabilir.
Kullanıcı uygulamaya kayıt olurken aşağıdaki bilgileri girmiş olsun:
Kullanıcı Adı: fjitsa_03 
Doğum Yılı: 1987
Ad: Beril 
Soyad: Aydın

Kullanıcı kaydını tamamladığında veri tabanında yeni bir kayıt açılmış ve bu kayıda da yeni bir ID atanmış olsun. Az önce yapılan kayıt, uygulama internete açıldığından beri yapılan 298331. Kayıt olsun.

Şimdi oluşturulan SessionID’yi tekrar gözden geçirelim:

Kullanıcı adının ilk 2 harfi + Doğum Yılı + ? + ? + Adın ilk harfi + Soyadın ilk harfi + Atanan ID

Böylelikle saldırgana sadece 2 haneli ve rakamdan oluşan ilk kısmı ve 6 haneli, yine sadece rakamlardan oluşan ikinci bir kısmı tahmin etmek kalıyor.

Böylece kullanıcının parolasını kırmak, 8 haneli ve sadece rakamlardan oluşan bir parolayı kırmak kadar kolay olacak,

Yani çok kolay.

Authentication bypass saldırılarının birden fazla açığı istismar ederek gerçekleşebileceğini gördük.

Bir sonraki bölüm: SQL İnjection
on 19 Eylül by Berk Cem Göksel |   Edit