Dacă există un lucru pe care infractorii cibernetici le place, acestea sunt datele. Datele furate sunt foarte valoroase pe piețele ilicite, iar accesul la bazele de date private poate fi o modalitate excelentă pentru actorii rău intenționați de a obține profit din acțiunile lor. O modalitate de a accesa datele private este prin injectare SQL. Dar ce este exact o injecție SQL, cum funcționează și poate fi prevenit un astfel de atac?
Ce este o injecție SQL?
Programele software se bazează pe cod pentru a funcționa. Codul este, de asemenea, limbajul pe care mașinile îl folosesc pentru a efectua operațiuni și poate fi sub mai multe forme (Python, JavaScript, C++ etc.). De multe ori prin intermediul codului infractorii cibernetici pot ataca victimele, iar injecțiile SQL (sau SQLis) nu sunt diferite. Acestea permit actorilor rău intenționați să „injecteze” cod dăunător într-o instrucțiune SQL.
Să trecem mai întâi peste ce înseamnă SQL.
SQL înseamnă Structured Query Language. Acesta este un alt tip de limbaj de programare utilizat în mod special atunci când se ocupă cu baze de date. Dezvoltat în anii 1970 de IBM, SQL poate manipula, stoca și prelua informațiile bazei de date. Multe sisteme de comunicare cu baze de date din întreaga lume folosesc SQL, așa că nu este surprinzător faptul că actorii amenințărilor au conceput modalități de a abuza de el pentru a ținti bazele de date.
Instrucțiunile SQL formează o parte cheie a comunicării bazei de date. O instrucțiune SQL este o comandă care vine în multe forme diferite. Unii modifică datele, alții le preiau sau le șterg, iar unii pot schimba structura bazei de date în sine. Când are loc o injecție SQL, codul rău intenționat este injectat într-o instrucțiune SQL.
Desigur, un site web sau o aplicație trebuie să utilizeze limbajul de programare SQL pentru ca o injecție SQL să fie posibilă. Dar cum funcționează acest vector de atac?
Să presupunem că aveți o linie obișnuită de cod folosită de o aplicație. Atunci când un criminal cibernetic introduce o injecție SQL rău intenționată, se adaugă o linie de cod care poate interfera cu interogările pe care aplicația însăși le trimite către baza sa de date. Făcând acest lucru, baza de date poate fi exploatată într-un mod care să permită actorului amenințării să vadă date la care altfel nu ar avea acces.
De aici, criminalul cibernetic ar putea fura date pentru a le exploata direct sau vinde-l pe dark web sau în altă parte. De asemenea, ar putea modifica, adăuga sau șterge date din baza de date vizată. În funcție de gradul atacului de injecție SQL, s-ar putea produce o mulțime de daune. Dacă sunt accesate detalii de plată, numere de securitate socială sau alte tipuri de date private, multe persoane ar putea fi expuse riscului de a fi exploatate.
Pe de altă parte, dacă atacatorul reușește să modifice în mod semnificativ baza de date, cantități mari de date ar putea fi pierdute definitiv. Una peste alta, injecțiile SQL pot distruge baze de date întregi printr-un singur atac. Deși există din 1998, ele sunt încă relevante și periculoase în zilele noastre.
După cum a constatat Proiect de securitate pentru aplicații web deschise (OWASP), 274.000 de instanțe de injecții SQL au fost identificate la testarea aplicațiilor pentru prezența unui astfel de atac în 2021.
Tipurile de injecție SQL
Există câteva tipuri diferite de injecție SQL, principalele trei fiind injecțiile oarbe, în bandă și în afara benzii.
O injecție SQL oarbă (sau inferențială) are loc atunci când aplicația sau site-ul este atacat de către injectare, dar răspunsurile HTTP (Hypertext Transfer Protocol) furnizate nu conțin rezultatul interogare SQL. Cu alte cuvinte, nicio dată din baza de date atacată nu este dată criminalului cibernetic. Deci, ce rost are asta?
Folosind o injecție oarbă SQL, un atacator trimite date către serverul țintă și apoi poate discerne anumite lucruri despre o bază de date prin natura răspunsului HTTP în sine. În plus, factorii asociați cu răspunsul HTTP îl pot ajuta pe atacator să creeze o altă injecție SQL mai eficientă pentru a accesa baza de date.
Există două tipuri cheie de injecție SQL oarbă, cunoscute sub numele de time-based și boolean. Aceste două variante sunt destul de asemănătoare în natura lor. Atât o injecție SQL booleană, cât și cea bazată pe timp trimite o serie de întrebări cu răspunsuri da sau nu, deși acestea din urmă vor solicita ca baza de date să aștepte puțin înainte de a răspunde la interogări.
În continuare, există injecții SQL în bandă. Injecțiile SQL în bandă permit operatorului să efectueze atacul și să obțină rezultatul dorit folosind același canal. Injecțiile SQL în bandă sunt cele mai frecvent utilizate, pur și simplu pentru că sunt cel mai ușor de efectuat datorită faptului că necesită un singur canal.
În cele din urmă, aveți o injecție SQL în afara benzii. Aceasta este în esență versiunea alternativă a unei injecții SQL în bandă, în care atacatorul nu poate efectua atacul în totalitate folosind un singur canal. Alternativ, un atac poate fi necesar să recurgă la o injecție SQL în afara bandă dacă serverul țintă pur și simplu nu este suficient de rapid pentru a oferi rezultate.
Acești factori fac procesul puțin mai dificil, ceea ce înseamnă că trebuie să se bazeze pe anumite caracteristici pentru a fi activ în baza de date vizată pentru succes. De exemplu, platforma atacată trebuie să aibă o lipsă de igienizare de intrare. Din această cauză, injecțiile SQL în bandă sunt mult mai frecvente decât injecțiile SQL în afara bandă. Dar încă se întâmplă.
Pot fi evitate injecțiile SQL?
Injecțiile SQL sunt mai mult o preocupare pentru întreprinderi și organizații decât pentru persoanele obișnuite. Dar există lucruri pe care aceste potențiale ținte le pot face pentru a reduce șansele de a fi lovite de un astfel de atac.
Sanitizarea intrărilor este practica cheie comună pentru evitarea injecțiilor SQL. Acesta este un proces de filtrare care scanează și curăță introducerea de caractere periculoase. Dacă codul SQL este procesat înainte de a fi igienizat, șansa unei injecții SQL va crește în mod natural.
În plus, interogările parametrizate vă pot ajuta să evitați injecțiile SQL. Acestea sunt interogări care necesită cel puțin un parametru pentru execuție. Aplicarea parametrilor îngreunează infractorii cibernetici să efectueze cu succes un atac cu injecție SQL.
Dar nu există o modalitate sigură de a preveni o injecție SQL. Așa cum este cazul multor atacuri cibernetice, este aproape imposibil să vă păstrați dispozitivele și sistemele complet etanșe. Când vine vorba de injecții SQL, cel mai bun lucru pe care îl puteți face este să igienizați toate intrările și să stabiliți interogări parametrizate.
Injecțiile SQL sunt vechi, dar sunt încă o amenințare
În timp ce injecțiile SQL există de peste 20 de ani, ele încă reprezintă un risc pentru multe site-uri web și aplicații. Prin urmare, este o idee bună să țineți cont de această formă de atac și să luați măsurile necesare pentru a încerca să o preveniți, deoarece ar putea reprezenta o amenințare pentru bazele de date la un moment dat în viitor.