ASLR: ¿por qué solo 12 bits cambian en el sistema de 32 bits?

4

He estado leyendo las publicaciones aquí sobre la omisión de ASLR. En los sistemas de 32 bits, esto parece ser trivial, pero me sorprendió ver lo trivial. Se tarda unos segundos en aplicar la dirección ASLR de fuerza bruta '. El motivo parece ser que, según mis pruebas, solo 12 bits cambian realmente en la dirección:

export BLAH=$"/bin/sh"

BLAH will be at 0xbff5a78b
BLAH will be at 0xbf87778b
BLAH will be at 0xbfe1e78b
BLAH will be at 0xbf9f778b
BLAH will be at 0xbffc378b
BLAH will be at 0xbffd978b
BLAH will be at 0xbfa7f78b
BLAH will be at 0xbf94878b
BLAH will be at 0xbfe4378b
BLAH will be at 0xbff7978b
BLAH will be at 0xbfe4078b

Parece que en mi computadora portátil todas las direcciones aleatorias 'son

BF XX X7 8B

donde X es un hex aleatorio. Mi conocimiento del funcionamiento de bajo nivel de una CPU es bastante limitado, por lo que ¿por qué son los únicos bytes que cambian?

¿Es correcto decir que en una máquina de 32 bits solo hay 16^3 = 4096 ASLR address '?

¿Cuántos bits cambian en un sistema de 64 bits?

    
pregunta Juicy 05.02.2014 - 03:03
fuente

3 respuestas

8

ASLR en 32 bits es bastante limitado, pero creo que lo que está viendo es un artefacto del valor de sesgo de ASLR .

Al iniciarse, se genera aleatoriamente un valor de sesgo para esa "instancia" de Windows en ejecución. Aunque puede parecer que partes de la dirección son iguales en todas las instancias del mismo proceso, en realidad solo se alimentan del valor de sesgo, y ese valor cambiará al reiniciar.

Entonces, en realidad, no es realmente explotable. La base de direcciones será lo suficientemente aleatoria como para que un exploit drive fallará, aunque no cambie mucho entre las instancias.

    
respondido por el Polynomial 05.02.2014 - 04:31
fuente
6

Además de lo que explica @Polynomial (que puede aplicarse o no, dependiendo de si está ejecutando Windows o algún otro sistema operativo), ASLR intercambia páginas : eso es lo que MMU lo conoce. Una página es de 4 kB (en procesadores x86) por lo que los 12 bits bajos de direcciones no se ven afectados por ASLR. Esto deja un máximo de 20 bits para que juegue ASLR. Los problemas de asignación de espacio de direcciones pueden reducir aún más la cantidad de bits que se pueden modificar a través de ASLR (si la DLL está demasiado dispersa alrededor del espacio de direcciones, eso puede evitar la asignación de un gran bloque contiguo de RAM libre, esto se conoce como fragmentación ).

En un sistema operativo de 64 bits, el espacio de direcciones es más grande; no los 64 bits completos, porque la CPU en realidad no lo admite, pero se pueden observar 44 o 45 bits (depende tanto de la versión de la CPU como de la marca y la versión del sistema operativo). Por lo tanto, obtendrá una docena de bits adicionales aleatorizados por ASLR.

    
respondido por el Tom Leek 05.02.2014 - 13:07
fuente
0

Porque 12 bits son suficientes para proporcionar una seguridad efectiva, si no perfecta.

El malware solo tiene una oportunidad de inyectar el desbordamiento del búfer. Si falla, lo más probable es que la aplicación simplemente se bloquee sin infectar el programa. 12 bits de aleatorización significa que el malware solo funcionará una vez cada 2 ^ 12 o 4096 veces. Si soy un autor de malware o un hacker, eso significa que es muy probable que falle cada vez que lo intente.

    
respondido por el John Deters 05.02.2014 - 20:55
fuente

Lea otras preguntas en las etiquetas