Vulnerabilitățile de injecție a comenzilor și pericolul pe care îl prezintă

Astăzi vom discuta despre vulnerabilitățile de injecție a comenzilor în sistemul de operare. Cât de mult reprezintă ele o amenințare? Cum puteți preveni aceste vulnerabilități? Cum ajută NexDAST să le remedieze? Vom răspunde la toate aceste întrebări în detaliu mai jos!

Ce sunt Injecțiile de comandă ale sistemului de operare?

Nu confundați injecția de comandă cu injecția de cod. Un cod malițios care este injectat într-un limbaj de programare este o vulnerabilitate de injecție de cod. Injecțiile de comenzi ale sistemului de operare sunt un tip de sarcină utilă pe care hackerul o injectează. Sarcina utilă este apoi executată ca o comandă a sistemului de operare.

Un hacker execută o comandă temporară a sistemului de operare pe serverul aplicațiilor, ceea ce duce la riscul ca aplicația și datele să fie compromise. Vulnerabilitățile de injectare a comenzilor sistemului de operare sunt adesea folosite ca un trepied de către hackeri. Acesta este cel mai rău scenariu cu injecțiile de comenzi de sistem de operare, deoarece începe cu injecțiile de comenzi de sistem de operare și duce la exploatarea altor părți ale infrastructurii de găzduire, ceea ce duce la expunerea unei întregi serii de alte sisteme.

Python, Ruby, Perl, Perl, Java, C, PHP. Toate aceste limbaje de programare permit utilizatorilor să apeleze o comandă shell de sistem. Acest lucru le face vulnerabile la injectările de comenzi ale sistemului de operare. Cu toate acestea, executarea comenzii temporare injectate depinde de privilegiile serverului web. Acesta este motivul pentru care vulnerabilitățile de injectare a comenzilor nu sunt atât de periculoase în sine. Dar un hacker poate exploata escaladarea privilegiilor și poate accesa mai multe informații. Cu aceste informații, pot fi găsite și exploatate mai multe vulnerabilități.

Exemple de vulnerabilități de injectare a comenzilor sistemului de operare

Să spunem că doriți să cumpărați o tastatură de pe un site web. Aplicația trebuie să vă permită mai întâi să vedeți dacă tastatura pe care o doriți este în stoc. Utilizatorii obțin aceste informații prin intermediul unor URL-uri ca acesta:

https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22

Aplicația cere sistemelor existente să furnizeze utilizatorului informații despre stoc. Apelul la o comandă shell reprezintă această funcționalitate. ID-urile produsului și ale magazinului sunt argumente, astfel încât comanda shell arată cam așa:

Keyboards.py 111 22

Utilizatorii văd acum dacă tastatura lor preferată este în stoc. Cu toate acestea, există o problemă aici. Aplicația nu este securizată împotriva injecțiilor de comenzi OS. Hackerii pot trimite acum o intrare care execută o comandă temporară. Aceasta arată ceva de genul „& echo randomstring &” în parametrul storeID. Aplicația execută apoi această comandă:

Keyboards.py & echo randomstring & 22

Ce face această comandă? Ea face ca șirul furnizat să aibă ecou în ieșire. O modalitate eficientă de a testa tipurile de injecții de comenzi OS. Separatorul de comenzi shell ( & ) transformă o comandă în trei. Utilizatorii văd apoi trei rezultate:

Error - productID was not provided
Randomstring
22: command not found

Comanda originală Keyboard.py s-a executat, dar lipseau argumentele așteptate. Acesta este motivul pentru care am primit un mesaj de eroare. Șirul furnizat (Randomstring) a avut ecou în ieșire. Acesta este scopul comenzii echo injectate. Dar, se afișează 22: command not found. De ce? Pentru că argumentul original 22 a fost executat ca o comandă, provocând o eroare.

Acum, să acoperim vulnerabilitățile de injectare a comenzilor blind OS. Aceasta apare atunci când o aplicație nu returnează rezultatul unei comenzi în răspunsul său. În ciuda acestui fapt, hackerii au încă diverse tehnici pentru a exploata aceste vulnerabilități:

  • întârzieri de timp
  • redirecționarea ieșirii

Utilizarea unei comenzi injectate pentru a declanșa o întârziere de timp permite unui hacker să confirme dacă comanda a fost executată. Timpul necesar pentru ca o aplicație să răspundă este cel care vă spune dacă comanda a fost executată sau nu. Una dintre cele mai eficiente comenzi pentru exploatarea acestei vulnerabilități oarbe este un ping. Această comandă vă permite să alegeți un număr exact de pachete ICMP pe care să le trimiteți. Acel număr va fi timpul necesar pentru ca această comandă să fie executată.

Redirecționarea ieșirii este un alt exploit de injectare a comenzilor OS. Se redirecționează ieșirea comenzii injectate direct într-un fișier. Acel fișier se găsește în interiorul webroot-ului care este recuperat prin intermediul browserului dumneavoastră.

Prevenirea injecțiilor de comenzi ale sistemului de operare

Cum puteți preveni injecțiile de comenzi ale sistemului de operare? Cel mai simplu și mai eficient mod este să nu folosiți niciodată shell_exec sau apeluri similare pentru comenzile sistemului de operare gazdă. Aplicați în schimb aceleași comenzi în limbajul de programare pe care îl utilizați. Apare o problemă dacă limbajul dvs. de programare nu are o comandă corespunzătoare celei de care aveți nevoie. În aceste cazuri, ar trebui să folosiți curățarea intrărilor (input sanitization). Vă va ajuta dacă faceți acest lucru înainte de a atribui valoarea comenzii de shell. Utilizarea listei albe este întotdeauna cea mai sigură opțiune atunci când vine vorba de injecții.

Alte opțiuni de validare puternică a intrărilor includ:

  • Validarea caracterelor alfanumerice (Confirmă includerea numai a caracterelor alfanumerice fără spații albe sau sintaxă în intrare)
  • Validarea numerelor (Confirmă că intrarea este un număr)
  • Lista albă a valorilor permise (Confirmă față de listele albe de valori permise)

Nu ar trebui să evitați niciodată metacaracterele shell și să încercați să curățați intrarea în acest fel. Deoarece acest lucru face ca datele de intrare să fie vulnerabile pentru hackerii inteligenți, pe care aceștia le pot ocoli cu ușurință.

Cum poate ajuta NexDAST să prevină injecțiile de comenzi ale sistemului de operare

Cel mai simplu și mai eficient mod de a preveni injecțiile de comenzi ale sistemului de operare este de a utiliza NexDAST. Soluția noastră de testare a securității black-box examinează automat aplicația dvs. Atunci când este detectată o Injecție de comandă a sistemului de operare, orientările de remediere sunt trimise dezvoltatorului sau echipei SecOps. Nu este nevoie de teste manuale lungi și lente cu NexDAST.

Exemplu de identificare de către NexDAST a unei OS Command Injection:

vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd

Partea %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd reprezintă vulnerabilitatea. NexDAST oferă, de asemenea, ghiduri de remediere care vă ajută să remediați această vulnerabilitate cât mai eficient posibil.

Vreți să aflați mai multe despre NexDAST? L-am abordat în profunzime într-unul dintre blogurile noastre anterior, iar dacă aveți o problemă la care NexDAST vă poate ajuta, solicitați o demonstrație aici!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.