9 tipuri populare de atacuri cu injecție de aplicații web

Aplicațiile web se confruntă cu o provocare majoră: expunerea la miliarde de utilizatori online, dintre care mulți pot avea intenția de a ocoli măsurile de securitate, indiferent de motivațiile lor.

În perioada de început a internetului, o metodă de atac frecvent întâlnită era forța brută, o tehnică simplă. Atacatorii, adesea roboți sau persoane cu timp nelimitat, încercau nenumărate combinații de nume de utilizator și parole până când reușeau să obțină acces la aplicația vizată.

În prezent, atacurile de tip forță brută nu mai reprezintă o amenințare majoră, datorită implementării politicilor privind complexitatea parolelor, limitării încercărilor de conectare și utilizării sistemelor captcha. Cu toate acestea, infractorii cibernetici sunt în continuă căutare de noi vulnerabilități și modalități de a efectua atacuri inovatoare. Ei au descoperit că, prin introducerea sau injectarea de text neașteptat în câmpurile de text ale aplicațiilor web, pot manipula comportamentul acestora, forțându-le să efectueze acțiuni neintenționate. Astfel au apărut atacurile prin injecție.

Atacurile prin injecție pot fi utilizate nu doar pentru a obține acces neautorizat la o aplicație, ci și pentru a expune informații confidențiale, a deturna servere sau chiar a compromite alte aplicații și servicii conectate. Aceste atacuri reprezintă o amenințare serioasă atât pentru aplicațiile web, cât și pentru utilizatorii ale căror date sunt stocate în aceste aplicații.

Injecția de cod

Injecția de cod este un tip comun de atac prin injecție. Atacatorii, cunoscând limbajul de programare, framework-ul, baza de date sau sistemul de operare al unei aplicații web, pot injecta cod malițios în câmpurile de text. Acest cod poate forța serverul să execute acțiuni neautorizate.

Aceste atacuri sunt posibile în aplicațiile care nu validează corect datele introduse. Permițând utilizatorilor să introducă orice text, o aplicație devine vulnerabilă. Pentru a preveni aceste atacuri, este necesar să se restricționeze tipul și cantitatea de date permise la introducere.

Este esențial să se limiteze volumul datelor, să se verifice formatul acestora înainte de a fi acceptate și să se restricționeze setul de caractere permis.

Vulnerabilitățile la injecția de cod sunt relativ ușor de identificat prin testarea câmpurilor de introducere cu diverse tipuri de conținut. Deși exploatarea acestor vulnerabilități poate fi dificilă, impactul unui atac reușit poate fi major, ducând la pierderea confidențialității, integrității, disponibilității sau funcționalității aplicației.

Injecția SQL

Similară injecției de cod, injecția SQL presupune introducerea unui script SQL într-un câmp de introducere text. Acest script, odată executat de aplicație în baza sa de date, poate permite atacatorului să ocolească autentificarea sau să execute acțiuni mai periculoase, precum citirea, modificarea sau ștergerea datelor, ori executarea operațiunilor administrative.

Aplicațiile PHP și ASP sunt mai vulnerabile la atacurile de injecție SQL, datorită interfețelor lor funcționale mai vechi. Aplicațiile J2EE și ASP.Net oferă, de regulă, o protecție mai bună. Odată identificată o vulnerabilitate SQL, consecințele unui atac pot fi extrem de grave, fiind limitate doar de priceperea și inventivitatea atacatorului.

Injecția de comandă

Acest tip de atac este cauzat tot de validarea insuficientă a intrărilor. Spre deosebire de injecția de cod, atacatorul introduce comenzi de sistem în loc de cod de programare sau scripturi. Nu este necesar ca atacatorul să cunoască limbajul de programare al aplicației sau limbajul bazei de date, ci sistemul de operare al serverului.

Comenzile de sistem sunt executate de sistemul de operare gazdă cu privilegiile aplicației. Astfel, atacatorul poate accesa conținutul fișierelor, vizualiza structura directoarelor, schimba parolele utilizatorilor sau efectua alte acțiuni dăunătoare. Un administrator de sistem poate preveni aceste atacuri prin limitarea nivelului de acces al aplicațiilor web la sistem.

Cross-Site Scripting (XSS)

O aplicație devine vulnerabilă la XSS atunci când inserează date primite de la un utilizator în ieșirea generată, fără validare sau codificare adecvată. Un atacator poate profita de această situație pentru a injecta scripturi malițioase în site-uri web de încredere, scripturi care ajung ulterior la alți utilizatori ai aplicației, transformându-i în victime.

Browserul victimei va executa scriptul malițios, permițând accesul la informații sensibile, precum jetoane de sesiune, cookie-uri sau date stocate. În anumite cazuri, scripturile pot rescrie chiar și conținutul unui fișier HTML.

Atacurile XSS pot fi clasificate în două categorii principale: stocate și reflectate.

În atacurile XSS stocate, scriptul malițios este stocat permanent pe serverul țintă, într-un forum, o bază de date, un jurnal al vizitatorilor etc. Victima îl primește odată cu informațiile solicitate de browser. În atacurile XSS reflectate, scriptul este inclus în răspunsul trimis de server, ca rezultat al introducerii utilizatorului, de exemplu, un mesaj de eroare sau rezultatul unei căutări.

Injecția XPath

Acest tip de atac apare atunci când o aplicație utilizează informațiile furnizate de un utilizator pentru a construi o interogare XPath pentru date XML. Similar cu injecția SQL, atacatorii trimit date modificate pentru a determina structura datelor XML și apoi atacă pentru a accesa aceste date.

XPath este un limbaj standard, asemănător SQL, utilizat pentru a specifica atributele dorite. Aplicațiile web folosesc introducerea utilizatorului pentru a crea un model de potrivire a datelor. Prin trimiterea unor date neformate, atacatorii pot transforma modelul într-o operație specifică pe care o doresc aplicată datelor.

Spre deosebire de SQL, XPath nu are versiuni diferite, ceea ce înseamnă că injecția XPath poate fi realizată pe orice aplicație care utilizează date XML, indiferent de implementare. Acest lucru permite automatizarea atacului și lansarea lui împotriva unui număr mare de ținte.

Injecția de comandă prin e-mail

Această metodă de atac poate fi folosită pentru a exploata serverele de e-mail și aplicațiile care construiesc instrucțiuni IMAP sau SMTP cu date furnizate de utilizator, validarea fiind incorectă. Serverele IMAP și SMTP pot fi mai vulnerabile decât serverele web, deoarece nu au același nivel de protecție împotriva atacurilor. Printr-un server de e-mail, atacatorii pot ocoli restricții precum captcha sau numărul limitat de solicitări.

Pentru a exploata un server SMTP, atacatorii au nevoie de un cont de e-mail valid pentru a trimite mesaje cu comenzi injectate. Dacă serverul este vulnerabil, va răspunde cererilor atacatorilor, permițându-le să depășească restricțiile și să utilizeze serviciile serverului pentru a trimite spam. Injecția IMAP se poate efectua în principal pe aplicații de webmail, folosind funcția de citire a mesajelor. În aceste cazuri, atacul poate fi realizat prin simpla introducere a unui URL cu comenzi injectate în bara de adrese a browserului.

Injecția CRLF

Introducerea caracterelor de retur de cărucior și avans de linie (CRLF) în câmpurile de introducere ale unui formular web este o metodă de atac cunoscută sub numele de injecție CRLF. Aceste caractere invizibile semnalează sfârșitul unei linii sau al unei comenzi în diverse protocoale de internet, precum HTTP, MIME sau NNTP.

De exemplu, inserarea unui CRLF într-o solicitare HTTP, urmată de cod HTML, ar putea determina afișarea unor pagini web personalizate utilizatorilor site-ului web.

Acest atac poate fi efectuat pe aplicații web vulnerabile care nu filtrează adecvat datele introduse de utilizator. Vulnerabilitatea CRLF deschide calea pentru alte atacuri prin injecție, cum ar fi XSS sau injecția de cod, și poate proveni dintr-un site web compromis.

Injecția de antet Host

În serverele care găzduiesc mai multe site-uri sau aplicații web, antetul Host este crucial pentru a determina ce site sau aplicație (cunoscută drept gazdă virtuală) trebuie să proceseze o solicitare. Antetul indică serverului cărei gazde virtuale trebuie trimisă solicitarea. Un antet Host nevalid este de obicei trimis primei gazde virtuale din listă, ceea ce reprezintă o vulnerabilitate pe care atacatorii o pot folosi pentru a trimite antete arbitrare către prima gazdă virtuală a unui server.

Manipularea antetului Host este adesea legată de aplicațiile PHP, dar poate fi realizată și cu alte tehnologii. Atacurile cu antetul Host pot fi folosite ca declanșatoare pentru alte tipuri de atacuri, cum ar fi otrăvirea cache-ului web, iar consecințele pot include executarea unor operațiuni sensibile de către atacatori, precum resetarea parolelor.

Injecția LDAP

LDAP este un protocol folosit pentru a facilita căutarea resurselor într-o rețea (dispozitive, fișiere, utilizatori). Este util în intranet și, ca parte a unui sistem de autentificare unică, pentru a stoca nume de utilizator și parole. Interogările LDAP folosesc caractere speciale de control care îi afectează funcționarea. Atacatorii pot modifica comportamentul interogărilor LDAP introducând aceste caractere.

Cauza principală a atacurilor de injecție LDAP este validarea incorectă a datelor introduse de utilizator. Dacă textul trimis de utilizator este folosit într-o interogare LDAP fără a fi curățat, aceasta ar putea lista toți utilizatorii și să-i arate atacatorului, utilizând un asterisc în locul potrivit al șirului de introducere.

Prevenirea atacurilor de injecție

După cum s-a discutat, toate atacurile prin injecție vizează servere și aplicații accesibile de pe internet. Prevenirea acestor atacuri este o responsabilitate comună a dezvoltatorilor și administratorilor de servere.

Dezvoltatorii trebuie să înțeleagă riscurile cauzate de validarea incorectă a intrărilor utilizatorilor și să învețe cele mai bune practici pentru a curăța aceste intrări. Administratorii de servere trebuie să efectueze audituri periodice pentru a identifica și a corecta vulnerabilitățile. Există numeroase opțiuni pentru aceste audituri, fie la cerere, fie în mod automat.