Aleatorización del diseño del espacio de direcciones


La aleatorización del diseño del espacio de direcciones ( ASLR ) es una técnica de seguridad informática involucrada en la prevención de la explotación de vulnerabilidades de corrupción de memoria . Para evitar que un atacante salte de manera confiable, por ejemplo, a una función explotada particular en la memoria, ASLR organiza aleatoriamente las posiciones del espacio de direcciones de las áreas de datos clave de un proceso , incluida la base del ejecutable y las posiciones de la pila , montón y bibliotecas _

El proyecto Linux PaX acuñó por primera vez el término "ASLR" y publicó el primer diseño e implementación de ASLR en julio de 2001 como un parche para el kernel de Linux . Se ve como una implementación completa, proporcionando también un parche para la aleatorización de la pila del núcleo desde octubre de 2002. [1]

El primer sistema operativo convencional que admitió ASLR de forma predeterminada fue OpenBSD versión 3.4 en 2003, [2] [3] seguido de Linux en 2005.

La aleatorización del espacio de direcciones dificulta algunos tipos de ataques de seguridad al dificultar que un atacante prediga las direcciones de destino. Por ejemplo, los atacantes que intentan ejecutar ataques de retorno a libc deben ubicar el código que se ejecutará, mientras que otros atacantes que intentan ejecutar shellcode inyectado en la pila deben encontrar la pila primero. En ambos casos, el sistema oculta las direcciones de memoria relacionadas de los atacantes. Estos valores deben ser adivinados, y una suposición errónea generalmente no se puede recuperar debido a que la aplicación falla.

La aleatorización del diseño del espacio de direcciones se basa en la baja probabilidad de que un atacante adivine las ubicaciones de las áreas colocadas al azar. La seguridad aumenta al aumentar el espacio de búsqueda. Por lo tanto, la aleatorización del espacio de direcciones es más efectiva cuando hay más entropía presente en las compensaciones aleatorias. La entropía aumenta aumentando la cantidad de espacio de área de memoria virtual en el que se produce la aleatorización o reduciendo el período en el que se produce la aleatorización. El período normalmente se implementa lo más pequeño posible, por lo que la mayoría de los sistemas deben aumentar la aleatorización del espacio VMA.

Para vencer la aleatorización, los atacantes deben adivinar con éxito las posiciones de todas las áreas que desean atacar. Para áreas de datos como pila y montón, donde se puede cargar código personalizado o datos útiles, se puede atacar más de un estado usando diapositivas NOP para código o copias repetidas de datos. Esto permite que un ataque tenga éxito si el área se asigna aleatoriamente a uno de un puñado de valores. Por el contrario, las áreas de código como la base de la biblioteca y el ejecutable principal deben descubrirse exactamente. A menudo, estas áreas se mezclan, por ejemplo, los marcos de pila se inyectan en la pila y se devuelve una biblioteca.