He leído muchos artículos sobre funciones inseguras como strcpy, memcpy, etc. que pueden provocar problemas de seguridad al procesar datos externos, como el contenido de un archivo o datos procedentes de sockets. Esto puede sonar estúpido, pero escribí un programa vulnerable pero no logré "piratearlo".Ejemplo de desbordamiento de búfer que provoca una fuga de seguridad
Entiendo el problema del desbordamiento del búfer. Tome este código de ejemplo:
int main() {
char buffer[1];
int var = 0;
scan("%s", &buffer);
printf("var = 0x%x\n", var);
return 0;
}
Cuando ejecuto el programa y el tipo "ABCDE", los resultados de los programas, que es 0x65646362 "EDCB" en hexadecimal + ascendente hacia la izquierda. Sin embargo, leí que podría modificar el valor de eip que se apretó en la pila para hacer que el programa ejecute algún código no deseado (por ejemplo, justo antes de una llamada a la función del sistema()).
Sin embargo ensamblaje de la función comienza así:
push %ebp
mov %ebp, %esp
and $0xfffffff0, %esp
sub $0x20, %esp
Como el valor de% esp es al azar al comienzo de la función y debido a esto "y", no parece haber ninguna manera confiable para escribir un valor preciso en el valor de eip empujado.
Además, leí que era posible ejecutar el código que escribiste en el búfer (aquí el búfer tiene solo 1 byte de longitud, pero en realidad sería lo suficientemente grande como para almacenar algún código) pero ¿qué valor daría? eip para hacerlo (considerando que la ubicación del buffer es aleatoria)?
¿Por qué los desarrolladores están tan preocupados por los problemas de seguridad (excepto que el programa podría fallar)? ¿Tiene un ejemplo de un programa vulnerable y cómo "piratearlo" para ejecutar código no deseado? Intenté esto en Linux, ¿Windows es menos seguro?
Corrígeme si me equivoco pero, por muy seminal que fuera, no recuerdo este artículo que trate sobre cualquier mecanismo de protección de la pila. – torak
@torak: No, no es así. Sin embargo, no creo que sea un problema de OP, y la pregunta parece más básica que tratar con las salvaguardas del sistema operativo/hardware. Este artículo es un muy buen punto de partida. –
@Moron: Bueno, dado que el OP mencionó específicamente que las instrucciones 'y $ 0xfffffff0,% esp' representan el desplazamiento a la variable EIP, parecería que captan el mecanismo de desbordamiento básico. – torak