¿Qué es un desbordamiento de búfer de pila?
Un desbordamiento del búfer de pila es lo que sucede cuando un programa realiza una entrada en la memoria de una computadora que es más larga que el espacio asignado. En algunas circunstancias, esto puede corromper otros datos en la memoria, causando problemas en la ejecución de la computadora. En otros casos, un desbordamiento del búfer de pila puede ser explotado por una aplicación maliciosa para tomar el control de otras partes de la computadora.
El nombre de un desbordamiento de búfer de pila se deriva primero de la pila, que es efectivamente una lista activa en la que se organizan los datos: el término proviene de la analogía de acumular elementos físicos. Una versión de esto, la pila de llamadas , es la lista que utiliza un programa de computadora para realizar un seguimiento de las diversas partes del programa, las subrutinas, que funcionan en cualquier momento en particular. Como la pila de llamadas funciona de manera temporal y debe acceder rápidamente, se encuentra en la memoria de la computadora en lugar de en el almacenamiento permanente, como el disco duro.
Debido a que los sistemas operativos modernos permiten que múltiples programas se ejecuten a la vez, es necesario organizar la forma en que se asigna la memoria, incluso para las pilas de llamadas. Esto se hace de manera eficiente asignando buffers, un espacio en la memoria diseñado para ser lo suficientemente grande como para hacer frente al espacio máximo requerido por un búfer en particular. En la mayoría de los casos, parte del espacio no se utilizará, por lo que actúa como un búfer entre los datos de diferentes aplicaciones, dejando espacio para hacer frente si uno de repente requiere espacio adicional. Una forma de visualizarlo sería pensar en una biblioteca que asignó una cierta cantidad de espacio a cada área temática, asegurándose de dejar algo de espacio adicional para hacer frente si, por ejemplo, todos los libros en una materia estaban en la biblioteca al mismo tiempo, en lugar de que cualquiera de ellos se revisara.
Un desbordamiento del búfer de pila se produce cuando un programa escribe datos de pila de llamadas en el búfer de una manera que excede el espacio asignado. Esto puede suceder por error,a través de un error en un programa. Por ejemplo, si una aplicación está diseñada para permitir que el usuario escriba un número de teléfono, pero no tiene límite en el número de caracteres que se pueden ingresar, un hacker puede usar el campo ilimitado para causar intencionalmente un desbordamiento del búfer de pila. Dependiendo de la forma en que funciona el sistema operativo, esto podría permitir al hacker acceder indirectamente a otra aplicación o al sistema operativo en sí.
Hay varios enfoques para mitigar los efectos del desbordamiento de un búfer de pila. Uno se conoce como aleatorización del diseño del espacio de direcciones. Esto organiza las áreas de datos más importantes en la computadora de manera aleatoria. La idea es que incluso si un hacker causa o explota un desbordamiento del búfer de pila, no podrá explotar la violación de manera confiable.