¿Qué es un desbordamiento del 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 dañar otros datos en la memoria, causando problemas en el funcionamiento de la computadora. En otros casos, una aplicación malintencionada puede aprovechar un desbordamiento del búfer de pila para tomar el control de otras partes del equipo.

El nombre de un desbordamiento del búfer de pila 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 usa un programa de computadora para realizar un seguimiento de las diversas partes del programa, las subrutinas, que están operando en un momento particular. Dado que la pila de llamadas funciona de forma temporal y es necesario acceder a ella rápidamente, se encuentra en la memoria de la computadora en lugar de en un almacenamiento permanente como el disco duro.

Debido a que los sistemas operativos modernos permiten que se ejecuten varios programas a la vez, es necesario organizar la forma en que se asigna la memoria, incluso para llamar a las pilas. Esto se hace de manera eficiente mediante la asignación de búferes, un espacio en la memoria diseñado para ser lo suficientemente grande 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 de repente se requiere espacio adicional. Una forma de visualizarlo sería pensar en una biblioteca que asignara una cierta cantidad de espacio a cada área temática, asegurándose de dejar un espacio adicional para hacer frente si, por ejemplo, todos los libros sobre un tema estuvieran en la biblioteca de la mismo tiempo, en lugar de que cualquiera de ellos sea revisado.

Un desbordamiento del búfer de pila ocurre cuando un programa escribe datos de la pila de llamadas en el búfer de una manera que excede el espacio asignado. Esto puede suceder por error, generalmente debido a un error en un programa. Por ejemplo, si una aplicación está diseñada para permitir al usuario escribir un número de teléfono, pero no tiene límite en la cantidad 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 funcione el sistema operativo, esto podría permitir que el pirata informático acceda indirectamente a otra aplicación o al propio sistema operativo.

Hay varios enfoques para mitigar los efectos de un desbordamiento del 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 forma aleatoria. La idea es que incluso si un pirata informático causa o explota un desbordamiento del búfer de pila, no podrá explotar la brecha de manera confiable.