Smashing The Stack For Fun And Profit

Todo proceso se divide en 3 regiones

Texto

La región de texto se fija por el programa e incluye código (instrucciones)
de datos y de sólo lectura.

incluye

código (instrucciones)

de

datos

sólo lectura

Datos

La región de datos contiene

datos inicializados

datos no inicializados

Pila

Es un tipo abstracto de datos de uso frecuente en la informática.

Tiene la propiedad de que el último objeto colocado en la pila
será el primer objeto eliminado.

A esta propiedad se le conoce como LIFO

Una pila es un bloque contiguo de datos de memoria que contiene

Un registro de llamada

un puntero de pila (SP)

que

apunta a la parte superior de la pila

Además del puntero de pila, lo que apunta a la parte superior de la pila
(bajo dirección numérica) a menudo es un puntero de marco (FP)

que

apunta a un lugar fijo dentro de un marco

que también

se utiliza para asignar dinámicamente las variables locales utilizadas en
funciones

El pisado de pila o stack smashing

es un

tipo de desbordamiento de buffer que es aprovechado

por

algunos virus

y

otros programas maliciosos

Un desbordamiento de buffer es el resultado de relleno de más datos en un buffer de los
que puede manejar

esto

nos permite cambiar la dirección de retorno de una función

permite cambiar el flujo de ejecución del programa

El problema que se enfrenta al tratarse del desbordamiento del buffer

es

tratar de averiguar en qué dirección de la memoria intermedia será

por lo tanto conociendo
donde la pila comienza, podemos tratar de adivinar dónde el buffer se desbordará

Búsqueda de desbordamiento de buffer

Si el destino de cualquiera de estas funciones es un buffer de tamaño estático

y

su otro argumento fuera alguna derivada de la entrada del usuario

no

es una buena
posibilidad de que se pueda explotar, o mejor dicho, prevenir un desbordamiento de buffer

el uso de un bucle while

para

leer un carácter a la vez en un buffer de la entrada estándar

o

para leer algún archivo hasta que se alcanza el final de la línea, el final del archivo

o

con algún otro delimitador

lo cual

lleva a que si no hay controles explícitos para desbordamientos en el bucle while

estos programas son fácilmente explotados

Si la expansión de los datos o la pila de usuario
agota la memoria disponible

entonces

el proceso se bloquea y se reprograma para
correr de nuevo con un espacio de memoria más grande