Cómo prevenir los ataques de desbordamiento de buffer (En 4 Pasos)

Por hobie anthony
Cómo prevenir los ataques de desbordamiento de buffer (En 4 Pasos)
Ablestock.com/AbleStock.com/Getty Images

Los ataques de desbordamiento de búfer son una forma común de ataque de un hacker para causar caos en un sistema. Hay un montón de ataques de desbordamiento, que son raros, y ataques basados en pila, que erróneamente restablecen el límite de memoria para una pila, haciendo que se desborde. El desbordamiento mueve los datos a otros búferes, corrompen o sobrescriben los datos válidos allí, lo que puede causar una cascada de búferes dañados, similares a una cascada de copas de champán desbordantes. Para evitar ataques de desbordamiento de búfer, tendrás que tener un conocimiento experto de programación informática, acceso al código en cuestión y el tiempo y paciencia para peinar a través de páginas y páginas de código para implementar los cambios necesarios que protejan tus sistemas.

Paso 1

Escribe el código de seguridad para evitar ataques de desbordamiento. En C, hay una serie de funciones de vulnerabilidad que los hackers pueden explotar para sobrellenar los búferes. Minimiza tu uso de strcpy (), strcat (), sprintf () y vsprintf (), que no se realiza comprobación de límites. Si es posible, evita usar gets (), que no especifica cuántos caracteres se van a leer y así dejan vulnerable tu código. Si utilizas scanf (), asegúrate de especificar un ancho para el formato %s para evitar desbordamientos.

Paso 2

Revisa a ver si puedes utilizar trampolines para evitar desbordamiento de búfer. Desde que ocurre el desbordamiento de búfer en las pilas de memoria y no en el código, la solución más sencilla parece ser prevenir que tus pilas ejecuten cualquier código mediante la inserción de un pequeño fragmento de código para prohibir estas acciones. Esto es posible en Linux, pero es muy difícil. Sólo unos pocos compiladores utilizan los pequeños trozos de código llamados trampolines, que actúan como una barrera entre el código de llamada a una función y la función misma. Por lo tanto, si el código malicioso intenta reemplazar un búfer, el trampolín puede interceptar y neutralizar los intentos de los hackers.

Paso 3

Implementa herramientas de compilación para darte advertencias cuando usas código que te deja vulnerable a los ataques. Algunas de estas herramientas va a generar código que prohíbe que personas ajenas tengan acceso a direcciones ilegales y apaguen código que intenta dicha ejecución. Productos como StackShield y StackGuard son una gran ayuda. StackSheild analizará la dirección de retorno de una función y la terminará en el caso de una irregularidad. StackGuard coloca una palabra canario en la dirección del remitente y comprueba si la palabra ha sido alterada, terminando una función cuando la tiene.

Paso 4

Instala herramientas como libsafe para comprobar la seguridad de una manera dinámica, en tiempo de ejecución medio ambiente. Libsafe se ejecuta en Linux y comprueba la dirección más cercana de retorno de un marco de pila, entonces se asegura de que la dirección no se sobrescriba. Libsafe también reemplazará las funciones no seguras, como gets (), strcpy () y scanf ().