Cross-Site Request Forgery (CSRF) este una dintre cele mai vechi moduri de exploatare a vulnerabilităților unui site web. Acesta vizează comutatoarele web de pe partea serverului care necesită de obicei autentificări, cum ar fi conectarea. În timpul unui atac CSRF, un atacator urmărește să-și forțeze victima să facă o solicitare web neautorizată și rău intenționată în numele lor.
Practicile slabe sau slabe de securitate a site-ului web și neatenția în calea utilizatorului sunt câteva dintre cauzele comune ale unui atac CSRF de succes.
Să ne uităm la ce este un atac CSRF și la modalitățile posibile prin care te poți preveni ca dezvoltator sau utilizator.
Cum vă afectează atacurile CSRF?
Un CSRF este un atac folosit pentru a implementa solicitări neautorizate în timpul acțiunilor web care necesită autentificarea sau autentificarea utilizatorului. Atacurile CSRF pot profita de ID-urile de sesiune, cookie-urile, precum și alte vulnerabilități bazate pe server pentru a fura acreditările unui utilizator.
De exemplu, activarea procedurilor anti-CSRF previne interacțiunile rău intenționate între domenii.
Odată ce această barieră depășește, un atacator poate profita rapid de ID-ul de sesiune al utilizatorului prin intermediul cookie-urilor create de browserul utilizatorului și poate încorpora o etichetă de script în site-ul web vulnerabil.
Prin manipularea unui ID, atacatorul poate, de asemenea, să redirecționeze vizitatorii către o altă pagină web sau să exploateze metode de inginerie socială, cum ar fi e-mailul, pentru a trimite linkuri, încurajând victima să descarce software rău intenționat.
Odată ce victima efectuează astfel de acțiuni, trimite o solicitare HTTP către pagina de servicii a utilizatorului și autorizează acțiunea de solicitare în favoarea atacatorului. Acest lucru poate fi devastator pentru un utilizator nebănuitor.
Un atac CSRF de succes poate face utilizatorii autorizați să-și piardă acreditările de acces la un atacator, în special în timpul acțiunilor bazate pe server, cum ar fi solicitările de schimbare a parolei sau a numelui de utilizator. În scenarii mai rele, atacatorul preia întreaga sesiune și acționează în numele utilizatorilor.
CSRF a fost folosit pentru a deturna tranzacțiile cu fonduri de pe web, precum și pentru a schimba numele de utilizator și parolele, ceea ce duce la pierderea accesului utilizatorilor la serviciul afectat.
Cum atacatorii vă deturnează sesiunile cu CSRF: exemple
Țintele principale pentru atacurile CSRF sunt acțiunile web care implică autentificarea unui utilizator. Pentru a avea succes, este nevoie de acțiuni neintenționate din partea victimei.
În timpul unui atac CSRF, acțiunile GET, DELETE și PUT, precum și solicitările POST vulnerabile sunt ținta principală a atacatorului.
Să ne uităm la semnificația acelor termeni:
- GET: O solicitare de a colecta un rezultat din baza de date; de exemplu, căutare pe Google.
- POST: De obicei, pentru trimiterea cererilor prin formulare web. O solicitare POST este obișnuită în timpul înregistrării sau autentificării unui utilizator, altfel cunoscut sub numele de autentificare.
- DELETE: Pentru a elimina o resursă din baza de date. Faceți acest lucru ori de câte ori vă ștergeți contul dintr-un anumit serviciu web.
- PUT: O solicitare PUT modifică sau actualizează o resursă existentă. Un exemplu este schimbarea numelui de Facebook .
În practică, atacatorii folosesc deturnarea sesiunii pentru a susține un atac CSRF. Atunci când folosește această combinație, atacatorul poate folosi un hijack pentru a schimba adresa IP a victimei.
Schimbarea adresei IP conectează apoi victima pe un nou site web unde atacatorul a inserat un link înșelător care trimite un formular replicat sau o cerere de server modificată pe care a creat-o prin CSRF.
Un utilizator nebănuitor crede apoi că redirecționarea vine de la furnizorul de servicii și face clic pe linkul de pe pagina web a atacatorului. Odată ce au făcut acest lucru, hackerii trimit un formular la încărcarea paginii fără să știe.
Exemplu de atac CSRF de solicitare GET
Imaginați-vă că încercați să efectuați o plată online printr-o platformă de comerț electronic nesecurizat. Proprietarii platformei folosesc cererea GET pentru a vă procesa tranzacția. Acea interogare GET ar putea arăta astfel:
https://websiteurl/pay?amount=$10&company=[company ABC's account]
Un hijacker vă poate fura tranzacția cu ușurință prin modificarea parametrilor cererii GET. Pentru a face acest lucru, tot ce trebuie să facă este să schimbe numele tău cu al lor și, mai rău, să schimbe suma pe care intenționați să o plătiți. Apoi modifică interogarea inițială la ceva de genul acesta:
https://websiteurl/pay?amount=$20000&company=[attacker's account]
Odată ce faceți clic pe un link către solicitarea GET modificată, ajungeți să faceți un transfer neintenționat în contul atacatorului.
Tranzacția prin solicitări GET este o practică proastă și face activitățile vulnerabile la atacuri.
Exemplu de atac CSRF de solicitare POST
Cu toate acestea, mulți dezvoltatori cred că utilizarea solicitării POST este mai sigură pentru efectuarea de tranzacții web. Deși este adevărat, din păcate, o solicitare POST este susceptibilă și la atacuri CSRF.
Pentru a deturna cu succes o solicitare POST, tot ce are nevoie un atacator este ID-ul sesiunii curente, niște formulare invizibile replicate și, uneori, puțină inginerie socială.
De exemplu, un formular de solicitare POST ar putea arăta astfel:
Cu toate acestea, un atacator vă poate schimba acreditările făcând o nouă pagină și modificând formularul de mai sus în acesta:
În formularul manipulat, atacatorul setează valoarea câmpului de sumă la „30000”, schimbă numărul de cont al destinatarului cu al lor, trimite formularul la încărcarea paginii și, de asemenea, ascunde câmpurile formularului de utilizator.
Odată ce deturnează acea sesiune curentă, pagina dvs. de tranzacție inițiază o redirecționare către pagina atacatorului, care vă solicită să faceți clic pe un link pe care știu că este cel mai probabil să îl vizitați.
Făcând clic pe aceasta, se încarcă trimiterea formularului replicat, care vă transferă fondurile în contul atacatorului. Aceasta înseamnă că nu trebuie să faceți clic pe butoane precum „trimiteți” pentru ca tranzacția să aibă loc, deoarece JavaScript face acest lucru automat la încărcarea următoarei pagini web.
Ca alternativă, un atacator poate, de asemenea, să redacteze un e-mail încorporat în HTML care vă solicită să faceți clic pe un link pentru a efectua aceeași trimitere a formularului de încărcare a paginii.
O altă acțiune care este vulnerabilă la un atac CSRF este schimbarea numelui de utilizator sau a parolei, un exemplu de solicitare PUT. Un atacator replic formularul dvs. de solicitare și înlocuiește adresa dvs. de e-mail cu a lui.
Apoi vă fură sesiunea și fie vă redirecționează către o pagină, fie vă trimit un e-mail care vă solicită să faceți clic pe un link atrăgător.
Apoi trimite un formular manipulat care trimite linkul de resetare a parolei la adresa de e-mail a hackerului în loc de a ta. În acest fel, hackerul îți schimbă parola și te deconectează din cont.
Cum să preveniți atacurile CSRF în calitate de dezvoltator
Una dintre cele mai bune metode de a preveni un CSRF este să utilizați token-uri care se schimbă frecvent în loc să depindeți de cookie-urile de sesiune pentru a rula o schimbare de stare pe server.
Înrudit: Ghiduri gratuite pentru a înțelege securitatea digitală și a vă proteja confidențialitatea
Multe cadre de backend moderne oferă securitate împotriva CSRF. Așadar, dacă doriți să evitați personalitățile tehnice ale întăririi împotriva CSRF, puteți rezolva cu ușurință utilizarea cadrelor pe partea de server care vin cu jetoane anti-CSRF încorporate.
Când utilizați un token anti-CSRF, cererile bazate pe server generează șiruri aleatorii în locul cookie-urilor de sesiune vulnerabile mai statice. În acest fel, puteți să vă protejați sesiunea de a fi ghicit de către atacator.
Implementarea unui sistem de autentificare cu doi factori (2FA) pentru rularea tranzacțiilor în aplicația dvs. web reduce, de asemenea, șansele unui CSRF.
Este posibil să inițiezi un CSRF prin cross-site scripting (XSS), care implică injectarea de script în câmpurile utilizatorului, cum ar fi formularele de comentarii. Pentru a preveni acest lucru, este o practică bună să activați evadarea automată HTML în toate câmpurile formularelor de utilizator de pe site-ul dvs. Această acțiune împiedică câmpurile formularului să interpreteze elemente HTML.
Cum să preveniți atacurile CSRF ca utilizator
În calitate de utilizator al unui serviciu web care implică autentificare, aveți un rol de jucat în a împiedica atacatorii să vă fure acreditările și sesiunile și prin CSRF.
Asigurați-vă că utilizați servicii web de încredere în timpul activităților care implică transfer de fonduri.
În plus, utilizați browsere web securizate care protejează utilizatorii de expunerea la sesiuni, precum și motoare de căutare securizate care protejează împotriva scurgerilor de date de căutare.
Înrudit: Cele mai bune motoare de căutare private care vă respectă datele
În calitate de utilizator, puteți, de asemenea, să vă bazați pe autentificatori terți, cum ar fi Google Authenticator sau alternativele sale pentru verificarea identității dvs. pe web.
Deși s-ar putea să vă simțiți neajutorat să împiedicați un atacator să vă deturneze sesiunea, puteți totuși ajuta la prevenirea acestui lucru, asigurându-vă că browserul dvs. nu stochează informații precum parolele și alte detalii de conectare.
Consolidează-ți securitatea web
Dezvoltatorii trebuie să testeze în mod regulat aplicațiile web pentru încălcări de securitate în timpul dezvoltării și implementării.
Cu toate acestea, este obișnuit să introduceți alte vulnerabilități în timp ce încercați să le preveniți pe altele. Prin urmare, aveți grijă să vă asigurați că nu ați încălcat alți parametri de securitate în timp ce încercați să blocați un CSRF.