Classic exploiting I: Buffer Overflows

Buffer Overflow

Els atacs mitjançant els anomenats Buffer Overflows es remonten a l’any 1988 quan el cuc informàtic Morris va infectar un 10% d’internet.

Els atacs de buffer overflow, es basen en l’execució de codi maliciós fent ús d’un programa lícit que pateix aquesta vulnerabilitat. D’aquesta manera el codi maliciós passa desapercebut davant els antivirus d’arxius ja que s’executa de forma directa sense pasar per disc.


Funcionament

Els programes que s’executen en un ordinador, no són més que una sèrie d’instruccions codificades en binari les quals el processador interpreta i executa de manera secuencial.

A vegades aquestes instruccions són les anomenades instruccions de salt, les quals indiquen al processador l’adreça de memòria on llegir la següent instrucció.

Un atacant pot abusar d’aquesta funcionalitat canviant l’adreça de salt a un destí on es trobi carregat el codi maliciós. En el moment en que el processador executi l’instrucció de salt, saltarà a l’inici del codi maliciós.

Explotació

Un exemple de vulnerabilitat que es pot trobar, son programes de línia de comandes en els quals es guarda en memòria un paràmetre de la comanda sense fer cap tipus de revisió sobre la seva llargada.

Normalment els programes s’estructuren per funcions essent una funció una part de codi que pot ser reutilitzada. Les funcions de codi acaben sempre amb una instrucció de retorn, la qual és un salt cap a la part del codi que ha cridat la funció.

Analitzant el codi de l’aplicació a explotar (dirèctament des de memòria) podem passar un paràmetre de línia de comandes que contingui el següent:

 

El programa assigna un espai de memòria on guardar el paràmetre i hi escriu. Aquest espai de memòria, el qual anomenarem buffer, té un tamany prefixat que s’especifica en el moment de demanar la memòria al sistema operatiu.

Si es dona el cas que el programa assigna un buffer de tamany arbitràri i el paràmetre és més llarg que el buffer, es donarà l’anomenat buffer overflow. En un buffer overflow s’escriuen dades fora del buffer assignat, i per tant es poden sobreescriure altres dades i instruccions del programa.

Amb el paràmetre maliciós, escrivim el codi maliciós a la memòria del programa, plenem la resta del buffer amb dades de replenament (qualsevol valor) fins a causar un buffer overflow. Seguim escrivint aquestes dades de replenament fins arribar a l’instrucció de retorn i en l’instrucció de retorn el valor que s’escriurà és l’instrucció de retorn que apunta cap al codi maliciós.

Hi ha altres maneres d’explotar una vulnerabilitat d’aquest tipus com ara pipes o sockets. D’aquesta manera es podria explotar un buffer overflow remotament creant una vulnerabilitat RCE (Remote Code Execution).

 

Protegeix-te!

Mantenir l’entorn empresarial segur s’ha convertit en un requisit essencial davant la creixent aparició d’amenaces.

Si creieu que poder ser atacats o necessiteu assesorament en ciberseguretat…