Home / Cybercrimen / Qué es el Buffer Overflow?

Qué es el Buffer Overflow?

Un buffer overflow o desbordamiento de buffer es un error de sistema causado por un defecto de programación.
Un programa tiene su área de código ejecutable, y organiza su espacio de memoria utilizando una parte para almacenamiento del propio código, otra para el almacenamiento de los datos que vaya a utilizar y otra para los parámetros o datos que el programa recibe y que serán guardados temporalmente en memoria.

buffer overflow

Cuando en la entrada se introduce un volumen de datos demasiado grande, mayor de lo que el programador pudo prever cuando desarrollo el código, y se pretende escribir sobre un área de memoria que no es suficientemente grande para alojarlos, se sobrescribirán otras zonas de memoria, provocando lo que hemos llamado desbordamiento de buffer.

Este fallo puede estar producido porque el programador no introdujo en su código las correspondientes comprobaciones entre la capacidad de buffer y los datos que se pretenden alojar en el mismo. Como consecuencia de este error se produce una excepción de acceso a memoria y la terminación del programa en ejecución.

El problema real bien cuando el desbordamiento sobrescribe datos validos que ya estaban guardados en memoria. Si además tenemos en cuenta que en las arquitecturas comunes de ordenadores el espacio de memoria dedicado a los datos y al programa están reservados de forma consecutiva, es decir, que no hay separación entre ambos, nos podemos dar cuenta de que entre los datos perdidos por la sobre escritura puede haber fragmentos de rutinas o procedimientos necesarios, con lo que se producirá un error en el programa.

El fallo de seguridad nace cuando un usuario malintencionado provoca este desbordamiento de buffer mediante el envío de datos que incluyen porciones de código en el espacio reservado para las variables locales y después modifica la dirección de regreso o a donde regresa la información para que apunte a la posición de memoria donde hemos introducido nuestro código. Este código puede ser lo que se conoce como un shellcode, es decir, un conjunto de ordenes programadas generalmente en lenguaje ensamblador que se inyectan en la pila para conseguir que la maquina en la que reside se ejecute la operación que se haya programado, que generalmente suele ser el lanzamiento de un intérprete de comandos como el bash, sh, etc.

Compruebe También

Qué son los exploits?

Los exploits son pequeños programas maliciosos que aprovechan una inseguridad de un sistema informático, habitualmente …