Ce este un Shellcode?

Shellcode este o secvență de cod de mașină, sau instrucțiuni executabile, care este injectată în memoria unui computer cu intenția de a prelua controlul asupra unui program care rulează. Într-un astfel de atac, unul dintre pași este de a obține controlul contorului programului, care identifică următoarea instrucțiune care urmează să fie executată. Fluxul programului poate fi apoi redirecționat către codul introdus. Codul de mașină intruziv se numește sarcina utilă a atacului și este elementul la care se face referire în mod obișnuit prin termenul shellcode. Această metodă a fost adesea folosită pentru a acorda acces atacatorului prin deschiderea unui shell de comandă a sistemului de operare, astfel încât atacurile cu injecție de cod în general au ajuns să fie cunoscute sub numele de shellcode.

Vulnerabilitatea exploatată implică de obicei modul în care un program alocă memorie, verifică validitatea datelor de intrare și gestionează erorile de memorie. Dezvoltatorii de software pot evita de obicei această amenințare prin definirea strictă a datelor de intrare și respingerea valorilor necorespunzătoare. Dacă nu este bifată, valorile care necesită mai mult spațiu de stocare decât memoria alocată pentru acea valoare pot fi acceptate. Acest lucru provoacă o breșă de securitate numită depășire a memoriei tampon, în care o parte a datelor este scrisă în locații de memorie adiacente spațiului alocat valorii. Când este manipulată cu atenție, această anomalie poate permite introducerea unui cod intruziv.

Shellcode este în mod normal scris într-un limbaj de programare cu acces la sistem de nivel scăzut, cum ar fi asamblare, C sau C++. În funcție de vulnerabilitatea vizată, totuși, același rezultat poate fi obținut prin inserarea codului pentru un limbaj de scripting interpretat, cum ar fi PERL, sau cod de octet pentru o mașină virtuală, cum ar fi JAVA. Codul poate fi implantat înainte, în timpul sau după deturnarea contorului de programe. Astfel, codul intruziv poate fi conținut într-un fișier de pe mașina vizată sau transmis printr-o conexiune de rețea în timp real.

Exploaturile locale shellcode sunt concepute pentru a oferi unui atacator controlul asupra unei mașini la care are acces fizic. Un obiectiv în acest caz ar putea fi crearea unui cont cu privilegii de administrator, de exemplu. În mod similar, dacă un proces care rulează are un nivel de privilegii ridicat, o exploatare de succes ar acorda temporar același nivel de acces intrusului.

Procesele care rulează pe o mașină la distanță pot fi exploatate folosind protocoale de rețea standard pentru a comunica cu computerul țintă. Codul shell-ul de conectare indică mașinii țintă să inițieze o conexiune la computerul intrusului. Dacă intrusul inițiază conexiunea, codul se numește bindshell, deoarece încearcă să preia controlul asupra unei conexiuni de rețea numită port pe mașina de la distanță. Metoda de conectare înapoi este utilizată mai pe scară largă, deoarece firewall-urile interzic rareori conexiunile de ieșire.