Hackerii pot prelua controlul asupra unui sistem maximizând capacitatea de stocare a unui serviciu. Deci, cum efectuează hackerii astfel de atacuri de depășire a tamponului?
Cum atacă hackerii sistemele folosind viruși și programe malware? Uneori, poate fi un ransomware; uneori, poate fi un atac care consumă cerințele de sistem. Buffer overflow este una dintre aceste metode de atac, dar ce este de fapt? Cum funcționează aceste atacuri?
Ce este un buffer overflow?
Deci, ce sunt de fapt un buffer și o stivă? Buffer-ul este un câmp în care unele informații de intrare pe care le oferiți computerului dvs. așteaptă înainte ca acestea să ajungă în memorie. Rechemarea datelor din memorie este o operațiune obositoare de sistem. Deci, când există suficient spațiu în zona tampon, apelați datele direct de aici. Aceasta înseamnă o creștere a performanței dispozitivului dvs. Desigur, când spațiul disponibil pentru buffer este plin, devine necesar să îl scrieți în memorie.
Stack este în esență o structură de date în care au loc operațiunile de împingere (adăugare) și pop (eliminare) de date. Conceptele de buffer și stack sunt destul de asemănătoare; cu toate acestea, tamponul funcționează ca o stivă care stochează temporar datele primite.
Depășirile de buffer pot fi un subiect provocator, dar, după cum sugerează și numele, apare atunci când există o supraîncărcare de date. De exemplu, doriți să vă conectați la un sistem. Dezvoltatorii pot aloca 250 de octeți de spațiu pentru numele de utilizator. Dacă introduceți 300 de octeți de date, tamponul se depășește. Acest depășire poate afecta alte date din memorie, provocând daune.
Acest lucru este grozav pentru hackeri. Infractorii cibernetici pot combina această mizerie cu diferiți vectori de atac, de exemplu, pentru a pirata sistemul și a se conecta ca administrator.
Pentru a înțelege depășirea tamponului, principalele subiecte pe care trebuie să le recunoașteți vor fi Arhitectura internă a procesorului, registrele de memorie și modul în care memoria procesează datele. Iată câțiva termeni despre CPU pe care trebuie să îi cunoașteți.
Cod de asamblare |
Un limbaj de programare de nivel scăzut, adică aproape de limbajul mașinii. |
Tampon |
O dimensiune fixă spațiu de memorie alocat. |
Cod octet |
O formă de cod compilabilă în limbaj intermediar scris într-un limbaj de nivel înalt. |
Compilator |
Un program care convertește limbajul de programare în cod de mașină. |
Morman |
Spațiu de memorie dinamic, variabil. |
Fundamentele teoriei memoriei
Fără înțelegerea teoriei memoriei, poate fi dificil să abordăm problemele de depășire a tamponului în practică. Te poți gândi la asta ca și cum ai încerca să construiești o casă fără să știi cum să faci un perete.
Imaginați-vă că doriți să rulați un buffer overflow din punctul de vedere al unui hacker. Pentru asta, trebuie să manipulați memoria și să solicitați procesorului să vă execute codul. Dacă ați fi cineva cu intenții rău intenționate, scopul dvs. aici ar fi să supraîncărcați memoria și să manipulați și zonele de memorie adiacente.
Dar, mai întâi de toate, trebuie să vă concentrați asupra conceptelor de heap, stack și text segment.
În timp ce stiva este creată, memoria folosește adrese mari de memorie. Adresele cu memorie mare înseamnă zona de memorie extinsă. Apoi, valorile adresei încep să scadă. Stiva de memorie folosește o metodă numită LIFO (Last In, First Out) în timpul utilizării memoriei. Variabilele din memoria stivei sunt valide numai în domeniul în care sunt definite. Dacă se află în afara acestui domeniu, va apărea o eroare.
Memoria stivă, pe de altă parte, funcționează dinamic și nu trebuie să înceapă la adrese mari. Nu există o limită stabilită pentru memoria heap; toate limitele sunt stabilite de sistemul de operare. Este posibilă modificarea dinamică a memoriei heap și aceste limite se pot modifica în funcție de nevoile utilizatorului în timpul utilizării heap-ului. Limitele memoriei heap depind de factori determinați de sistemul de operare și hardware. Cu alte cuvinte, oferă o utilizare dinamică în aceste limite.
Segmentul de text conține codul programului, iar segmentele de date conțin date globale. Cota de adrese mare memorie stivă și heap printre ei. Sistemul alocă ambele memorie în timpul rulării.
Pentru a înțelege mai bine depășirea tamponului, ar trebui să examinați registrele de date de uz general pe care arhitectura computerului le folosește pentru a stoca date. În loc să analizați fiecare înregistrare individual, concentrați-vă pe elementele esențiale.
- ESP (Extended Stack Pointer): Acest registru deține adresa din partea de sus a stivei.
- EBP (Extended Base Pointer): Acesta deține indicatorul de bază.
- EIP (Extended Instruction Pointer): Și acest registru conține adresa următoarei instrucțiuni care urmează să fie executată.
Acești termeni tehnici pot suna puțin confuzi, dar imaginați-vă pe toți ca niște partiții mici pe memorie.
Cum funcționează atacurile Buffer Overflow?
Când adăugați date noi la orice stivă, aceste date vor fi introduse în partea de sus. Toate datele noi sunt apoi mutate în jos. ESP este în partea de sus a stivei. Deci, în acest caz, ESP merge la o adresă de memorie inferioară. Imaginați-vă că datele adăugate mai sus împing ESP-ul în jos.
Când un program începe să ruleze, sistemul creează un cadru de stivă cu variabile locale. Scopul principal al unui atac de buffer overflow este de a obține acces la adresa EIP sau de retur. Un hacker cu acces la această adresă îi poate comanda să indice orice cod rău intenționat pe care îl dorește, care va afecta apoi sistemul mai larg.
Cu fiecare nou bit de date, stiva crește spre EBP. Adevărata întrebare aici este, dacă introducem prea multe date, putem împinge EBP către EIP? În acest fel, datele sau codul dorit se află pe EIP și puteți vedea rezultatele dorite. Tot ce rămâne este să-l rulezi. Când rulați programul, acesta indică codul dvs. EIP și începe execuția. Drept urmare, dacă ai fost un hacker, ai fi efectuat primul atac de depășire a bufferului.
Pentru a lua exemplul dintr-un unghi diferit, puteți lua în considerare lichide de diferite densități, numite ESP, EBP și EIP, într-un recipient. Imaginați-vă că ESP este situat în partea de sus a containerului, deoarece densitatea acestuia este mai mică. La fel ca uleiul de măsline și apa, nu trebuie să se amestece. Codul rău intenționat, deci, este un alt lichid - atunci când îl adăugați în recipient, acesta încurcă acest echilibru, înlocuiește puțin lichid și se amestecă cu EIP. Acest lucru va indica o depășire a tamponului.
Cum să vă protejați împotriva atacurilor de depășire a tamponului
Deci, cum împiedici acest lucru să se întâmple?
În primul rând, este important să adoptați bune practici de codare pe tot parcursul procesului de dezvoltare a software-ului pentru a minimiza vulnerabilitățile de securitate. Codul scris cu atenție poate reduce probabilitatea depășirilor de buffer.
Un alt pas este utilizarea mecanismelor de apărare pentru a permite monitorizarea regiunilor de memorie, verificarea limitelor bufferelor și detectarea atacurilor. În cele din urmă, trebuie să actualizați în mod regulat sistemele și să aplicați patch-uri. Actualizările care remediază vulnerabilitățile îngreunează atacatorii să exploateze vulnerabilitățile cunoscute. De asemenea, utilizarea instrumentelor de apărare precum software și firewall oferă un nivel suplimentar de securitate.
Luați măsuri împotriva depășirilor de tampon
Atacurile de depășire a tamponului reprezintă o amenințare semnificativă la adresa securității dvs. cibernetice și luarea măsurilor de precauție împotriva acestora este în mod natural importantă. Din fericire, este posibilă blocarea acestor atacuri și consolidarea mecanismelor de apărare. Multe practici bune de securitate, cum ar fi menținerea actualizată a software-ului pentru a remedia corecțiile, ajută la protejarea împotriva unor astfel de atacuri, precum și a altor vulnerabilități.