Seguridad en Internet: buffer overflow

Si leemos los boletines de seguridad notaremos que "buffer overflow" es un invitado casi permanente. Y debe ser algo muy versátil, porque es "utilizado" en todo sistema operativo, en todo tipo de procesador. Veamos de qué se trata.

Si ha programado computadoras alguna vez le será familiar este escenario: asumió que el apellido del usuario no debe pasar de 12 letras, porque después de todo el suyo es largo y es de solamente 8 letras. Así que reservó espacio para 12 letras. Hizo unas pocas pruebas y el programa funcionó perfectamente. Y continuó con el resto del programa porque faltaba mucho y el jefe estaba impaciente. Cuando hizo la demostración... perfecto, ningún problema. Pero cuando los usuarios empezaron a utilizar el programa, uno de ellos se queja de que se cae cuando escribe su apellido, María de Jesús (un apellido verdadero). El programa intentó almacenar 14 letras en un espacio de 12, ¡bum!

Para los no programadores, un buffer es un espacio de memoria donde almacenamos datos temporalmente. Por ejemplo, cuando escribimos, el código de cada tecla es añadido en un buffer, hasta que presionamos la tecla Return (o Enter o hacemos click en el botón OK o Listo), y el programa toma todo el buffer como una sola respuesta. Overflow se refiere al error descrito en el párrafo anterior: es cuando intentamos añadir más datos de lo que puede contener un buffer.

Lo que hace la computadora con los datos excedentes es lo que causa los problemas de seguridad. Idealmente, la computadora debería detectar el error y advertir al programador o usuario. Pero este mundo no es perfecto. El excedente puede almacenarse sobre el buffer contiguo, alterando su información, o hacer que el programa se "caiga", o hacer que la computadora se "caiga", ...o permitir que un hacker se apodere del control de su máquina.

La pila

Realmente el término es stack buffer overflow porque un buffer overflow para que sea útil para un hacker debe estar en la pila (stack). Si ya está familiarizado con la pila, salte a la siguiente página.

Una pila es una zona de memoria (el término técnico es estructura de datos) que nos permite almacenar y leer (o recuperar) datos utilizando dos operaciones: push, que nos permite guardar un dato en la pila; y pop, que nos dá el último dato que fué guardado. Esto es todo.

En la figura, la pila de la izquierda muestra el resultado de introducir (operación push) los números 28, 62, 70 y 5. Fijémonos que el último número introducido, 5, queda en el tope de la pila, y el primer número introducido, 28, queda de último. Si queremos el tope de la pila, efectuamos una operación pop, que nos dá 5 y la pila resultante se muestra a la derecha. Si quisiéramos el número 28, tendríamos que hacer 4 operaciones pop antes de conseguirlo.

Aunque los diagramas muestran lo contrario (para mayor claridad), la pila normalmente "crece hacia abajo", de direcciones altas a direcciones bajas.

¿Para qué sirve una pila? >>>>

 

Última actualización: 4/11/02