Kategorier: Alla - ejecución - memoria - seguridad

av Juan García för 9 årar sedan

296

Smashing The Stack For Fun And Profit

El texto aborda la problemática de los desbordamientos de buffer, centrándose en los riesgos y consecuencias de estos errores en la programación. Se explica cómo el uso de bucles while para leer datos de entrada sin controles adecuados puede llevar a la explotación fácil de estos programas.

Smashing The Stack For Fun And Profit

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

Smashing The Stack For Fun And Profit

Búsqueda de 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

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 el destino de cualquiera de estas funciones es un buffer de tamaño estático

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

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

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á

esto
permite cambiar el flujo de ejecución del programa
nos permite cambiar la dirección de retorno de una función

El pisado de pila o stack smashing

es un
tipo de desbordamiento de buffer que es aprovechado

por

otros programas maliciosos

y

algunos virus

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

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)

apunta a un lugar fijo dentro de un marco

que también

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

un puntero de pila (SP)
que

apunta a la parte superior de la pila

Un registro de llamada

Todo proceso se divide en 3 regiones

Pila
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

Es un tipo abstracto de datos de uso frecuente en la informática.
Datos
La región de datos contiene

datos no inicializados

datos inicializados

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

sólo lectura

datos