ce este injecția de cod și cum o puteți evita
vulnerabilitățile de injecție de cod este un termen general care descrie vulnerabilitățile care pot fi exploatate de un atacator pentru a injecta și executa cod rău intenționat.
această vulnerabilitate apare de obicei din cauza lipsei validării datelor de încredere. Aplicațiile care evaluează direct codul fără a-l valida mai întâi ar fi vulnerabile la acest tip de atac.
injectarea codului este uneori confundată cu alte vulnerabilități, cum ar fi injecția de comandă și comandă. Trebuie remarcat faptul că injecția de cod este un alt tip de vulnerabilitate, prin care un atacator injectează cod în loc de comenzi ale sistemului de Operare. Aceasta înseamnă că, în ceea ce privește vulnerabilitățile de injectare a Codului, atacatorul este limitat de funcționalitatea limbajului aplicației.
limitări ale atacatorului
atunci când exploatează astfel de vulnerabilități, atacatorii sunt limitați de funcționalitatea limbajului aplicației (cum ar fi PHP / Python). Cu toate acestea, în majoritatea cazurilor, atacatorul ar putea fi capabil să utilizeze funcționalitatea interpretului pentru a trece de la injecția de cod la injecția de comandă.
de exemplu, dacă un atacator injectează cod PHP într-o aplicație web, atacatorul ar fi limitat de funcționalitatea disponibilă de interpretul PHP. Când are loc atacul de injecție, interpretul PHP ar executa codul injectat și ar depinde de funcționalitatea interpretului, un atacator ar putea folosi funcțiile de execuție a programului care sunt disponibile în PHP, cum ar fi system() sau shell_exec, pentru a executa comenzi de sistem.
impactul unei injecții de cod
impactul pe care l-ar avea un atac reușit poate varia în funcție de mai mulți factori, cum ar fi limba utilizată de aplicație, funcționalitatea disponibilă în funcție de aplicație etc.
cu toate acestea, în majoritatea cazurilor, un atac reușit ar putea compromite complet confidențialitatea, integritatea și disponibilitatea aplicației și a datelor sale.
exemplu
Imaginați-vă o aplicație web care transmite date de încredere, cum ar fi intrarea utilizatorului într-o funcție PHP eval (). Funcția eval () evaluează pur și simplu un șir ca cod PHP atâta timp cât are sintaxă PHP validă și se termină cu punct și virgulă.
<?php
$ backup = “”;
$input = $_GET;
eval (“\$backup = \ $input;”);
?>
deoarece aplicația trece intrarea utilizatorului în funcția PHP EVAL() periculoasă și nu se efectuează nicio validare, aplicația ar fi vulnerabilă la atacurile de injecție de cod.
un atacator ar putea exploata această slăbiciune prin furnizarea de intrare 1; phpinfo (); așa cum se arată mai jos:
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; phpinfo();
Execute comenzi de sistem OS
după verificarea vulnerabilității, un atacator ar putea continua cu executarea comenzilor de sistem prin utilizarea funcțiilor interpretului care permit executarea comenzii. În acest caz, se utilizează funcția system ().
https://example.com/index.php?arg=1;https://example.com/index.php?arg=1; sistem (‘whoami’);
comanda whoami imprimă numele de utilizator al utilizatorului curent atunci când este invocat. Aceasta înseamnă că atunci când aplicația
trece intrarea utilizatorului la funcția eval (), interpretul PHP ar executa comanda whoami pe sistemul de operare subiacent
.
odată ce atacatorul poate executa comenzi de sistem, ar putea continua să obțină un shell interactiv pe sistemul vulnerabil
și să efectueze alte atacuri împotriva altor sisteme din rețeaua internă a sistemului compromis.
prevenire
indiferent de limba utilizată, vulnerabilitățile de injectare a Codului pot fi evitate urmând cele mai bune practici
descrise mai jos:
- Evitați evaluarea datelor care nu sunt de încredere
◦ cu excepția cazului în care este strict necesar, Nu Evaluați direct datele de încredere utilizând funcții nesigure, cum ar fi eval(). * Tratați toate datele ca fiind de încredere
rețineți că datele de încredere nu se referă numai la intrările furnizate prin intermediul formularelor HTML. Informațiile care sunt controlate de utilizatori, cum ar fi cookie-urile, anteturile de solicitare HTTP și fișierele încărcate, ar trebui tratate ca fiind de încredere.
- Validatedate de încredere
◦ validați întotdeauna intrarea utilizatorului pe partea serverului.
XV dacă utilizatorul ar trebui să trimită intrări într-un format specific, cum ar fi data, codul poștal, numerele, adresa de e-mail
etc., Asigurați-vă că intrarea utilizatorului se potrivește cu formatul așteptat.
XV dacă aplicația așteaptă o valoare într-un set limitat de opțiuni, urmați o abordare pe lista albă și asigurați-vă că
intrarea trimisă este una dintre opțiunile permise.
- întăriți interpretul
◦ de exemplu, funcționalitatea interpretului PHP ar trebui să fie limitată la funcționalitatea minimă necesară pentru ca aplicația să funcționeze. Acest lucru ar putea face mult mai dificil pentru atacatori să execute comenzi de sistem. De exemplu, funcțiile de execuție a programului PHP ar putea fi dezactivate prin modificarea php.fișier ini.
- analiza statică
◦ efectuați activități de analiză statică pentru a identifica vulnerabilitățile legate de evaluarea nesigură.
- VAPT
◦ efectuați activități regulate de evaluare a vulnerabilității și de testare a penetrării pentru a identifica și a atenua astfel de deficiențe.