Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como programación segura

Desbordamiento de enteros (Integer Overflow)

Ya os he hablado en este blog de posibles problemas potenciales que se pueden dar en los programas y que son susceptibles de ser explotados para hacer que dichos programas se comporten de forma diferente a la que deberían. Uno de estos problemas es el del desbordamiento de la pila . Sin embargo, hay otros posibles errores de programación que, aunque menos obvios, son igual de peligrosos. Uno de ellos es el desbordamiento de enteros o integer overflow. Para entender cómo funciona os presento un ejemplo muy sencillo pero didáctico.

Evitando la protección de ejecución en la pila con ROP (Return Oriented Programming)

En un artículo anterior ya hice una introducción a la explotación de vulnerabilidades por buffer overflow . Durante mucho tiempo, este tipo de ataques era muy común pero, afortunadamente, cada vez es más difícil explotar este tipo de vulnerabilidades gracias a mejoras como NX (también conocido como DEP o PAX). Básicamente consiste en evitar que se pueda ejecutar código dentro del marco de la pila. Entonces problema solucionado -estarás pensando. Pues no.

La pila y las llamadas a funciones

Me sorprende la frecuencia con la que cada día aparecen nuevas vulnerabilidades en software hecho por buenos programadores. Conste que nos puede pasar a cualquiera (el que esté libre de pecado que tire la primera piedra), así que me gustaría dedicar un par -o tres, ya veremos- de artículos a tratar de concienciar (y concienciarme) sobre la programación de código seguro. Antes de entrar en harina voy a dedicar este artículo a aclarar cómo funciona la llamada a una función y el papel que juega la pila en todo esto. El ejemplo que voy a mostrar están desarrollados sobre arquitectura x86 y GNU/Linux.