Desbordamiento de buffer

Post date: Feb 6, 2011 1:20:16 PM

Anomalía en la que un proceso almacena datos en un buffer excediendo la memoria que el programador ha reservado para él.

En un ataque por desbordamiento de buffer, los datos que desbordan generalmente contienen instrucciones específicas para realizar acciones preparadas por el atacante. Por ejemplo, los datos pueden generar una respuesta que daña contenidos de archivos, cambia datos o muestre información privada.

El atacante puede utilizar un ataque de desbordamiento de buffer contra una aplicación web que recibe datos de sus usuarios.

En los ataques por desbordamiento de buffer el atacante envía a una aplicación web datos de entrada que desbordan la capacidad del buffer que los almacena. Un atacante experimentado buscan estas vulnerabilidades con acciones especialmente escritas para producir el desbordamiento, lo que desencadena el ataque. El atacante debe además cambiar la dirección de retorno de alguna llamada que actualmente se ejecuta para que apunte al inicio del código del ataque.

Al ejecutarse el código de ataque el programa piensa que todavía está ejecutando, de manera que mantiene sus privilegios de ejecución. Así, el atacante puede tomar control del equipo en donde corre el servidor.

Para protegerse de este tipo de ataques, primero que nada hay que utilizar en las aplicaciones sólo librerías de uso muy extendido, que sea mantenida y cuyas condiciones de seguridad sean conocidas. Una vulnerabilidad en una librería utilizada se convierte en una vulnerabilidad de la aplicación. En segundo lugar, hay que verificar los datos recibidos desde el exterior de la aplicación, rechazar datos cuyo tamaño no sea razonable, si se espera un texto, evitar que contengan secuencias que no corresponden a caracteres imprimibles. En tercer lugar, realizar pruebas antes de poner la aplicación a disposición.

Algunos lenguajes de programación como Java o C++ no son vulnerables a este tipo de ataques, al momento de recibir textos. Los programas en PHP no son vulnerables, salvo cuando utilizan funciones de librería escritas en otro lenguaje y que contienen esta vulnerabilidad.

Traducciones:

Fuente: Omegawiki

Cursos relacionados