Ders 3 - Brute Force (Medium Level)
Bu yazıda güvenlik düzeyi Medium seviyesine yükseltilmiş DVWA'ya karşı Brute Force saldırısı ve güvenlik önlemleri incelenecektir.

Dersin Hedefi

DVWA'da güvenlik Medium Level'ken Brute Force için ne gibi bir güvenlik önlemi alındığını keşfedin.

Brute Force'a Karşı Önlem

Bir önceki derste Brute Force saldırısının nasıl düzenleneceğine değinmiştik. Eğer dikkat ettiyseniz güvenliğin g'sinden dahi bahsetmemiştik o yazıda. İşte şimdi Brute Force'a karşı web sitelerinizi nasıl daha güvenli hale getirebileceğimizin vakti geldi. Öncelikle güvenlik seviyesi Low Level iken kullanılan kaynak kodu inceleyelim (Kaynak kodu görüntülemek için DVWA'nın ders ekranındaki sağ alt köşede yer alan View Source butonuna basıp ardından açılan penceredeki Compare All Levels butonuna basmalısınız).

<?php 

if( isset( $_GET[ 'Login' ] ) ) { 
    // Get username 
    $user = $_GET[ 'username' ]; 

    // Get password 
    $pass = $_GET[ 'password' ]; 
    $pass = md5( $pass ); 

    // Check the database 
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $result = mysql_query( $query ) or die( '
' . mysql_error() . '
' ); if( $result && mysql_num_rows( $result ) == 1 ) { // Get users details $avatar = mysql_result( $result, 0, "avatar" ); // Login successful echo "

Welcome to the password protected area {$user}

"; echo ""; } else { // Login failed echo "

Username and/or password incorrect.
"; } mysql_close(); } ?>


Yukarıdaki kodu ele alacak olursak $user değişkeni ders ekranındaki ilk metin kutusuna girilen veriyi tutmaktadır. $pass değişkeni ise ders ekranındaki ikinci metin kutusuna girilen verinin Hash'e dönüşmüş şeklini tutmaktadır. Bir SQL sorgusu ile metin kutularına girilen verileri tutan değişkenlerin tuttukları veriler veritabanında taranır ve eğer eşleşme gerçekleşirse bu durumda 15. satırdaki if koşuluna girilir. Eğer eşleşme gerçekleşmezse bu durumda 23. satırdaki else koşuluna girilir ve ona göre ekrana hata bildirimi yansıtılır.

Yukarıdaki kod güvenlik seviyesi Low Level'ken kullanılan kaynak koddur. Brute Force'a karşı hiçbir önlem içermemektedir. Şimdi bir de güvenlik seviyesi Medium Level'ken Brute Force'a karşı önleme sahip kaynak koda bakalım:

<?php 

if( isset( $_GET[ 'Login' ] ) ) { 
    // Sanitise username input 
    $user = $_GET[ 'username' ]; 
    $user = mysql_real_escape_string( $user ); 

    // Sanitise password input 
    $pass = $_GET[ 'password' ]; 
    $pass = mysql_real_escape_string( $pass ); 
    $pass = md5( $pass ); 

    // Check the database 
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; 
    $result = mysql_query( $query ) or die( '
' . mysql_error() . '
' ); if( $result && mysql_num_rows( $result ) == 1 ) { // Get users details $avatar = mysql_result( $result, 0, "avatar" ); // Login successful echo "

Welcome to the password protected area {$user}

"; echo ""; } else { // Login failed sleep( 2 ); echo "

Username and/or password incorrect.
"; } mysql_close(); } ?>


Güvenlik önlemi Medium'ken kullanılan yukarıdaki kaynak kodda fark ettiyseniz yeni eklenen satırlar vardır. Bunlardan 6. ve 10. satırdaki kodlar SQL Injection saldırılarına karşı alınmış bir tür tedbirdir. SQL Injection saldırısı sonraki derslerin konusu olduğu için şimdi değinilmeyecektir. Brute Force saldırısına karşı alınmış tedbir ise 27. satırdadır. 27. satırda sleep() adlı bir fonksiyon kullanılmıştır. Bu fonksiyon sunucudaki php kodunun çalışmasını geciktirmeye yarar. sleep(2) ile kastedilen şey 2 saniye boyunca PHP kodunun çalışmasını duraklat. Dikkat ederseniz bu fonksiyon else koşulu içerisine konmuş. Bu şu anlama gelmektedir: Eğer ki istemci yanlış şifre girerse bu durumda else koşuluna girilir ve hata bildirimi hemencecik istemciye gönderilmez. Bunun yerine 2 saniye sonra hata bildirimi gönderilir. Peki bunun Brute Force'la ne alakası var? Alaka şu: Brute Force yapan yazılımlar daha önceki derste de bahsedildiği gibi oldukça uzun süreler sonunda anca sonuca ulaşabilmektedirler. İşte sleep() fonksiyonu bu zaafın üzerine gitmektedir ve web sitesi sahibi brute force yazılımlarının bu zaafını kullanarak onların hesaplamalarını daha da geciktirmektedir.

Yukarıdaki kullanılan güvenlik önlemi DVWA'da aktifken bir önceki derste bahsedilen BurpSuite ile yeni bir sözlük saldırısı yapmayı denerseniz bu durumda açılan deneme ve yanılma penceresindeki deneme yanılma işlemlerinin ne kadar ağır ilerlediğini görebilirsiniz (Bu süreci gözlemlemek için öncelikle DVWA'nın sol sütunundaki DVWA Security butonuna tıklayın ve güvenlik seviyesini Medium Level'a yükseltip Submit'leyin. Ardından BurpSuite ile önceki derste bahsedilen sözlük saldırısını tekrarlayın).

Sonuç

Daha önceki derste dendiği gibi kırılamayacak şifre yoktur. Bu laf olsun diye söylenmiş bir şey değildir. Gerçekten kırılamayacak şifre yoktur. Bu durumda yapılacak en iyi şey kırılma süresini olabildiğince uzatmaktır. Tabi sleep() komutuyla oluşturulacak bekletilme süresi güvenlik daha da iyi olsun diye abartılmamalıdır. Sonuçta normal kullanıcıyı sinir hastası edebilir ve sitenizden uzaklaştırabilirsiniz.

Yakın zamanda Google'da şahit olduğum Brute Force'a karşı yapılmış bir önlemle bu yazıyı noktalayalım. Eğer google'ın hizmeti Gmail'e yakın zamanlarda giriş yaptıysanız fark etmişsinizdir iki aşamalı bir login mekanizmasıyla karşılaşılıyor. Önce bir ekran geliyor ve o ekrandaki metin kutusuna gmail adresinin girilmesi isteniyor. Ardından ikinci ekrana yönlendiriliyorsunuz ve bu sefer şifrenizi girmeniz isteniyor.









Hatırlarsanız DVWA'nın ekranında username ve password kutucukları aynı ekrandaydı. Çoğu sitede de zaten böyledir. Fakat google böyle bir taktik kullanarak piyasadaki yazılmış Brute Force yazılımlarının hatırı sayılır kadarını püskürtmüştür. Bu taktiğe elbette kalıcı bir önlem denemez. Çünkü bir yazılımcının ya da güvenlik uzmanının böyle bir mekanizmaya göre çalışacak Brute Force programı yazması çok da zor bi'şey değildir (Tabi yazılım geliştirme tecrübesine sahip olanlar için...). Ancak daha önce dendiği gibi olabildiğince sınırları zorlamak gerek ve Google da zaten böyle yapmış.
Bu yazı 12.01.2016 tarihinde, saat 12:46:40'de yazılmıştır. 27.03.2016 tarihi ve 17:01:48 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 3452
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :