XSRF, cunoscut si sub numere de cross site request forgery sau CSRF, poate fi folosit pentru a pacali un utilizator autentificat sa faca anumite modificari neintentionate pe site. Profita de increderea pe care o ofera site-ul tau utilizatorilor deja autentificati.
Pentru ca un astfel de atac sa fie realizat cu succes, site-ul tau trebuie sa identifice utilizatorii inregistrati cu ajutorul cookie-urilor, si acestia trebuie sa fie autentificati la momentul vizitei pe site sau sa acceseze link-ul pe care atacatorul l-a pus la dispozitie.
Adesea, atacatorul nu are neaparat nevoie sa convinga utilizatorii sa dea click fizic pe link-ul care declanseaza atacul. Exista o multime de modalitati prin care un utilizator poate sa “acceseze” link-ul atacatorului. De exemplu, orice site la care atacatorul are acces, cum ar fi un forum sau un site de socializare, poate include anumite tag-uri pe imagine care duc catre link-ul atacatorului. Link-ul poate fi construit astfel incat sa forteze browser-ul web al utilizatorului, sa execute o anumita actiune folosindu-se de sesiunea deja deschisa pe site, impreuna cu alte riscuri care vin cu accesarea acelei adrese web. In acest fel, cand pagina este incarcata, este ca si cand utilizatorul a accesat intentionat link-ul, iar autentificarea si executatea acelei actiuni se va face fara a se mai solicita re-autentificarea utilizatorului.
Daca utilizatorul vizat pentru atac se intampla sa fie administratorul, acest atac ar putea garanta atacatorului controlul complet asupra intregului site.
Imaginati-va urmatorul scenariu:
Acest tip de atac a fost utilizat cu succes in raspandirea virusilor, atat prin intermediul MySpace, cat si Facebook. Atacurile de aceasta natura, faciliteaza autopropagarea, deoarece ataca site-uri unde utilizatorii isi stocheaza informatii personale.
Impactul XSRF poate minim sau critic in functie de natura site-ului tau. Este clasificat ca si un caz cu risc minim in timpul scanarii noastre din cauza lipsei de informatii suplimentare necesare pentru evaluarea completa a securitatii, care poate fi facuta numai de proprietarii site-urilor.
XSFR poate fi folosit pentru orice tip de atac, de la pacalirea unui utilizator pentru schimbarea parolei si pana la retragerea de fonduri, daca site-ul permite tranzactii cu banca. Exista posibilitatea prevenirii atacurilor XSRF prin respectarea recomandarilor din sectiunea solutii.
Prevenirea CSRF presupune modificarea modalitatii de functionare a cererilor de tip GET si POST pe site, pentru a te asigura ca utilizatorii care fac astfel de cereri sunt cei ce le-au facut cu adevarat si ca nu au fost pacaliti in trimiterea acestor cereri. Din cauza modului de operare al atacurilor XSRF, atacatorul nu are niciodata acces la datele din cookie-urile stocate pe calculatoarele tinta si acest lucru poate fi folosit in construirea unui mijloc de aparare.
Profitand de acest lucru, proprietarii de site-uri, pot genera valor unice pentru fiecare formular, astfel incat un atacator sa nu poata ghici aceste valori, inainte ca cererile de tip POST si GET sa fie trimise. Aceasta se numeste nonce sau valoare unica aleatorie.
Pentru implementarea acesteia, trebuie sa incluzi cateva layere logice in site-ul tau :
1. Introdu un camp ascuns in toate formularele de pe site-ul tau, care sunt necesar atunci cand un utilizator se autentifica. De exemplu, in aceasta situatie, il vom numi nonce.
2. Include valoarea nonce in variabilele sesiunii de utilizator, astfel incat utilizatorii sa aiba o copie.
3. Dupa ce toate evaluarile POST sau GET sunt securizate, asigura-te ca variabila nonce din browser (sesiunea) este aceeasi cu variabila nonce din formular (valoarea GET/POST).
4. Daca ele nu conincid, cererea ar putea fi inaintata fraudulos (XSRF).
5. Variabila nonce, poate fi generata pentru fiecare formular nou sau stocata pe server, intr-o baza de date. De retinut este faptul ca, daca este generata una noua de fiecare data, o sa intampinati dificultati cu functionalitatea back din browserele utilizatorilor, sau browserele cu taburi multiple.
Aici este un exemplu de cod PHP, care nu salveaza valorile intr-o baza de date:
Prima Pagina ( formularul )
<?php //start the user session (set session cookie) session_start(); //generate nonce - this nonce will be used for this session only, using random values and the time $nonce=hash("md5",rand().time().rand()); echo "<br />Nonce: ".$nonce."<br />"; $_SESSION['nonce']=$nonce; ?> <!-- Now create the form, and include the same nonce we generated above--> <form name="do_some_action" action="completeAction.php" method="POST"> <input type="hidden" name="nonce" value="<?php echo $nonce?>"/> <input type="submit" value="do Action"/> </form>
Pagina unde userul face click pe buton
<?php
//start session session_start(); //get the POST nonce $post_nonce=$_POST['nonce']; //get the session nonce $session_nonce=$_SESSION['nonce']; //make sure to validate the post input to prevent other types of attacks! Not shown here for brevity if($post_nonce===$session_nonce) echo "Request is safe!"; else echo "Data might be stolen!"; ?>
HackerAdvisor.com include scanari numeroase si diferite, care te vor ajuta sa-ti securizezi site-ul, inclusiv te vor ajuta sa descoperi amenintari legate de Cross Site Scripting Forgery, sau alte tipuri de atacuri cross site scripting.