Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: Usuario887 en 4 Junio 2020, 13:20 pm



Título: Desbordamiento de pila moderno
Publicado por: Usuario887 en 4 Junio 2020, 13:20 pm
Hola,

Hay algo que me da mucha curiosidad ultimamente... y es que, si en los sistemas modernos (es decir, sistemas que funcionan en modo protegido) existe toda la integridad que permiten las entradas de la tabla GDT, ¿como es posible explotar un desbordamiento de pila?. Es decir, es facil deducir que tanto la pila como los datos del programa se accederan atraves de entradas en la estructura asignadas como datos. Es decir, si se produce un desbordamiento y, por ejemplo, se reescribe el retorno de la funcion que se ejecuta con una posicion de la misma pila (no podemos escribir en ninguna otra parte) entonces, cuando se acceda a la entrada del segmento de pila en la GDT (de datos) ¿el sistema operativo no detendria el programa por (intentar) ejecutar en un segmento de datos?.

Y si es asi, ¿entonces ya no es posible explotar desbordamientos de pila?.

Dejemos de lado las inconsistencias que podrian haber en un sistema real, yo me refiero especificamente a un sistema de modo protegido que sea ideal.

Saludos.


PD: ¿Estoy siendo demasiado ingenuo preguntando esto? xd


Título: Re: Desbordamiento de pila moderno
Publicado por: Balloffet en 23 Junio 2020, 03:16 am
La respuesta a tu pregunta es doble:

A) yo entiendo que toda stack tiene su propia sección en memoria, es decir, no está en .data, y la Global Descriptor Table corrobora esto mismo al definir los parámetros de acceso y privilegio de cada sección Code, Data y Stack. así que, en rigor, sobreescribir el retorno de una función y almacenar el valor en la stack no es lo mismo que escribir en un segmento de Datos, lo cual nos lleva a...

B) si el procesador detiene o no la ejecución del programa depende de la protección que tenga en tu hipótesis (NX, PIE, ASLR, stackguard/canary, etc.).


Título: Re: Desbordamiento de pila moderno
Publicado por: Usuario887 en 9 Julio 2020, 20:10 pm
no está en .data

Por supuesto que no... sin embargo, me pregunto precisamente si existe una manera de hacer by pass a tal estructura de seguridad.

Saludos.