Protección contra desbordamiento de búfer


La protección contra desbordamiento de búfer es cualquiera de las diversas técnicas utilizadas durante el desarrollo de software para mejorar la seguridad de los programas ejecutables mediante la detección de desbordamientos de búfer en las variables asignadas a la pila y evitar que provoquen un mal comportamiento del programa o que se conviertan en una seguridad grave.vulnerabilidades. Se produce un desbordamiento del búfer de pila cuando un programa escribe en una dirección de memoria en la pila de llamadas del programa fuera de la estructura de datos prevista, que suele ser un búfer de longitud fija. Los errores de desbordamiento del búfer de pila se producen cuando un programa escribe más datos en un búfer ubicado en la pila de lo que realmente se asigna para ese búfer. Esto casi siempre da como resultado la corrupción de los datos adyacentes en la pila, lo que podría provocar bloqueos del programa, funcionamiento incorrecto o problemas de seguridad.

Por lo general, la protección contra el desbordamiento del búfer modifica la organización de los datos asignados a la pila para que incluya un valor controlado que, cuando se destruye por un desbordamiento del búfer de la pila, muestra que se ha desbordado un búfer que lo precede en la memoria. Al verificar el valor canario, se puede terminar la ejecución del programa afectado, evitando que se comporte mal o permitiendo que un atacante tome el control sobre él. Otras técnicas de protección contra el desbordamiento del búfer incluyen la comprobación de límites , que comprueba los accesos a cada bloque de memoria asignado para que no puedan ir más allá del espacio realmente asignado, y el etiquetado , que garantiza que la memoria asignada para almacenar datos no pueda contener código ejecutable.

Es más probable que sobrellenar un búfer asignado en la pila influya en la ejecución del programa que sobrellenar un búfer en el montón porque la pila contiene las direcciones de retorno para todas las llamadas a funciones activas. Sin embargo, también existen protecciones similares específicas de la implementación contra los desbordamientos basados ​​en almacenamiento dinámico.

Hay varias implementaciones de protección contra desbordamiento de búfer, incluidas las de GNU Compiler Collection , LLVM , Microsoft Visual Studio y otros compiladores.

Se produce un desbordamiento del búfer de pila cuando un programa escribe en una dirección de memoria en la pila de llamadas del programa fuera de la estructura de datos prevista, que suele ser un búfer de longitud fija. Los errores de desbordamiento del búfer de pila se producen cuando un programa escribe más datos en un búfer ubicado en la pila de lo que realmente se asigna para ese búfer. Esto casi siempre da como resultado la corrupción de los datos adyacentes en la pila y, en los casos en que el desbordamiento se desencadenó por error, a menudo hará que el programa se bloquee o funcione incorrectamente. El desbordamiento del búfer de pila es un tipo de mal funcionamiento de programación más general conocido como desbordamiento del búfer.(o saturación de búfer). Es más probable que sobrellenar un búfer en la pila descarrile la ejecución del programa que sobrellenar un búfer en el montón porque la pila contiene las direcciones de retorno para todas las llamadas a funciones activas. [1]

El desbordamiento del búfer de pila puede ser causado deliberadamente como parte de un ataque conocido como destrucción de pila . Si el programa afectado se ejecuta con privilegios especiales, o si acepta datos de hosts de red que no son de confianza (por ejemplo, un servidor web público ), el error es una posible vulnerabilidad de seguridad que permite a un atacante inyectar código ejecutable en el programa en ejecución y tomar control del proceso. Este es uno de los métodos más antiguos y confiables para que los atacantes obtengan acceso no autorizado a una computadora. [2]