Atacurile prin injecție sunt una dintre cele mai comune moduri prin care hackerii atacă sistemele, deoarece le permite să ruleze cu ușurință multe comenzi și coduri. Injecția de comandă a sistemului de operare este un astfel de atac de injecție de care trebuie să fii conștient. Acest lucru exploatează o vulnerabilitate pe care administratorii de sistem, baze de date și aplicații web ar trebui să o ia foarte în serios.
Deci, ce este un atac de injecție de comandă a sistemului de operare?
Definiția OS Command Injection
Injecția de comandă a sistemului de operare permite unui atacator rău intenționat să execute orice comandă pe care o dorește prin exploatarea unui sistem de operare, program, aplicație, bază de date sau plug-in vulnerabil. Se întâmplă atunci când aplicațiile nu reușesc să valideze și să igienizeze corespunzător parametrii pe care îi folosesc atunci când apelează funcții shell, cum ar fi
sistem() sau exec() pentru a executa comenzile sistemului.Pentru a înțelege mai bine detectarea și exploatarea injectării comenzii OS, este util să examinăm această problemă în trei categorii principale.
1. Injecție cu comandă directă
Luați în considerare acest lucru din perspectiva atacatorului. Atacatorul cibernetic descoperă că o aplicație rulează o anumită comandă de sistem; ei introduc comanda rău intenționată ca parte a argumentelor așteptate. Aplicația execută apoi comanda originală urmată de cea rău intenționată.
Atacatorul folosește o varietate de abordări pentru a găsi o astfel de vulnerabilitate. Cea mai ușoară metodă de a combate acest lucru este de a menține sistemul de operare la zi în orice moment; ai putea face acest lucru în colaborare cu o echipă IT competentă. Ar trebui să evitați toate aplicațiile și programele care ar putea cauza vulnerabilități ale sistemului, deoarece atacatorul poate introduce direct cod, iar daunele sunt imprevizibile.
2. Injecție de comandă indirectă
În cazul injectării de comandă indirectă, atacatorul nu introduce direct un cod sau o comandă în sistem. Pentru aceasta, folosesc o aplicație sau un program vulnerabil din sistem. Vulnerabilitatea creează o punte între atacator și sistemul de operare. Profitând de această comunicare, atacatorul urmărește să execute coduri și comenzi rău intenționate pe țintă.
Atacatorul execută o serie de teste pentru a identifica această vulnerabilitate și descoperă că software-ul utilizează date dintr-o sursă externă, cum ar fi un fișier sau o variabilă de mediu, pentru a apela o comandă de sistem. Atacatorul modifică apoi conținutul sursei externe, astfel încât acum conține o comandă rău intenționată. Aceasta este apoi executată împreună cu instrucțiunile aplicației originale.
Principala diferență între injecția directă și indirectă de comandă este că atacatorul folosește o aplicație pentru a comunica cu sistemul de operare. Dar nu există nicio diferență reală între daunele pe care cele două forme de injecție le pot provoca, așa că ambele trebuie abordate. De aceea ar trebui să vă asigurați că programele din rețeaua dvs. sunt fiabile și necesare. Nu păstrați aplicațiile în care nu aveți încredere pe dispozitiv.
3. Blind Command Injection
Un alt tip de injectare de comandă a sistemului de operare este injectarea orb de comandă. Aceasta înseamnă că aplicația nu returnează nicio ieșire de la comandă în răspunsul HTTP. Atacatorul folosește diferite tehnici, cum ar fi întârzierea și rutarea ieșirii pentru a exploata această vulnerabilitate.
Imaginați-vă că căutați un site web, iar valoarea „/?search=id” din adresa URL se modifică cu fiecare căutare. Valoarea id-ului de aici poate fi o pagină de utilizator, adresa unei fotografii de produs sau orice pagină de pe site. Atacatorul poate obține rezultate diferite prin schimbarea valorii id. Este dificil să o faci manual, dar există instrumente precum Burp Suite pentru aceasta. Mai târziu, atacatorul descoperă o ciudățenie pe o pagină: ar putea fi returnată o valoare id care, deși nu a arătat niciun rezultat, Răspunsul site-ului a fost 200, ceea ce indică faptul că totul este în regulă. Într-un astfel de caz, atacatorul ar putea folosi o injecție de comandă oarbă.
O tehnică precum întârzierea este deosebit de utilă. Deoarece pagina care se deschide va fi goală, nu veți primi niciun răspuns, dar este posibil să puteți aduna în continuare informații despre ceea ce este stocat într-o bază de date bazată pe întârzieri care încarcă pagina doar dacă un anumit caracter este prezent. Acest lucru necesită prea mult timp pentru a fi un proces manual, dar o mulțime de instrumente pot automatiza atacul.
Un exemplu de scenariu de atac
Să revizuim toate cele de mai sus printr-un exemplu. Imaginați-vă că aveți o aplicație de cumpărături care îi permite utilizatorului să vadă dacă produsele sunt în stoc. Să folosim o adresă URL ca cea de mai jos pentru a accesa toate aceste informații:
example_unsafe_store.com/stockStatus? productID=245&storeID=
Imaginați-vă să transmiteți ID-urile produsului și al magazinului ca argumente către o comandă shell, cum ar fi „stockstat.pl 245 38”, deoarece aplicația ar trebui să caute înregistrări vechi. Dacă dezvoltatorul nu ia nicio măsură împotriva injecțiilor de comandă, un atacator poate trimite o intrare pentru a executa comanda dorită:
& ecou aceasta_o_comandă_dăunătoare &
Dacă această intrare intră în parametrul productID, comanda executată de aplicație va fi:
stockstat.pl & ecou aceasta_o_comandă_dăunătoare & 38
Comanda echo este o metodă utilă pentru detectarea injecțiilor de comandă, precum și pentru a vă asigura că șirul dat apare în ieșire. Caracterul „&” este a separator de comenzi shell, deci ceea ce se execută sunt trei comenzi separate, una după alta. Ca rezultat, rezultatul returnat utilizatorului va fi:
Eroare -productID nu a fost găsit
aceasta_o_comandă_dăunătoare
38: comanda nu a fost găsit
Aici, fișierul „stockstat.pl” a executat comanda fără argumentele pe care le aștepta și, prin urmare, a returnat un mesaj de eroare. Apoi, comanda ecou injectată de atacator a rulat și atacatorul a văzut pe ecran expresia pe care a introdus-o. Argumentul original, „38”, a rulat ca o comandă care provoacă erori.
Cum să vă protejați împotriva injecțiilor de comandă OS
Deși injecția de comandă este un vector de atac puternic și dăunător, există câteva trucuri pentru a o evita. Motivul din spatele atacurilor de injectare a comenzii sistemului de operare este de a executa anumite comenzi ale sistemului de operare folosind o aplicație. Trebuie să opriți acest lucru să se întâmple. Există câteva aspecte de luat în considerare:
- Trebuie să împiedicați oricine cu acces la aplicație să poată rula cod.
- Ar trebui să împiedicați oricine cu acces la aplicație să facă cereri către server cu expresii sintactice.
- Trebuie să criptați expresiile pe care oricine are acces le face solicitări.
Să parcurgem fiecare articol unul câte unul. O soluție bună la prima problemă este să utilizați metoda listei albe pentru a împiedica oricine ajunge la nivelul aplicației să ruleze anumite coduri sau solicitări. Orice persoană pe care nu o identifici nu va putea rula cod.
Soluția pentru a doua este să nu acceptați unele expresii text utilizate în comenzi. Utilizatorul poate introduce doar valori numerice. Aplicați aceasta împreună cu metoda listei albe și veți avea un sistem mult mai sigur.
Al treilea articol este despre criptarea parametrilor sintactici, cum ar fi caracterul introdus și spațiile. Ca rezultat, metoda de înscriere în lista albă, verificarea sintactică a intrărilor și criptarea intrărilor ar trebui să vă protejeze de injectarea comenzii sistemului de operare.
Atacurile prin injecție evoluează în fiecare zi
Există multe metode de injectare cu diferite tehnici de atac, cum ar fi comanda OS, SQL, SSI și XPath. Nu este ușor să încerci să previi fiecare dintre ele. Rețineți că toate aceste atacuri evoluează în fiecare zi și profită de micile vulnerabilități pe care dezvoltatorii le-au trecut cu vederea. De aceea, este vital să fii mereu la curent și să urmărești îndeaproape evoluțiile actuale din lumea securității cibernetice.