He escuchado la teoría. Address Space Location Randomization toma bibliotecas y las carga en ubicaciones aleatorias en el espacio de direcciones virtuales, de modo que en caso de que un hacker encuentre un agujero en su programa, no tenga una dirección conocida para ejecutar un ataque de retorno a la libc contra, por ejemplo. Pero después de pensarlo por unos segundos, no tiene ningún sentido como medida defensiva.¿Cómo puede ser efectivo ASLR?
Digamos que nuestra hipotética TargetLib (libc o cualquier otra cosa que el hacker está buscando) se carga en una dirección aleatorizada en lugar de una determinista. Ahora el hacker no sabe de antemano dónde están TargetLib y las rutinas dentro de él, pero tampoco lo hace el código de la aplicación. Necesita encontrar algún tipo de tabla de búsqueda en algún lugar del binario para encontrar las rutinas dentro de TargetLib, y eso tiene que ser en una ubicación determinista. (O en una ubicación aleatoria, señalada por otra cosa. Puede agregar tantos indirectos como desee, pero finalmente debe comenzar en una ubicación conocida.)
Esto significa que en lugar de apuntar su código de ataque al ubicación conocida de TargetLib, todo lo que el hacker necesita hacer es apuntar su código de ataque a la entrada de la tabla de búsqueda de la aplicación para TargetLib y desreferenciar el puntero a la rutina objetivo, y el ataque continúa sin obstáculos.
¿Hay algo sobre la forma en que funciona ASLR que no entiendo? Debido a que como se describe, no veo cómo es algo más que un bache de velocidad, proporcionando la imagen de seguridad, pero sin sustancia real. ¿Me estoy perdiendo de algo?
¿Alguna vez depuró un EXE de Windows en el nivel de ASM? Hay una tabla de importación real allí. El cargador no aplica parches al código, (todos los lugares donde su código puede llamar a alguna rutina externa), parchea la tabla de importación, que es básicamente una larga secuencia de instrucciones JMP, a la cual el compilador genera LLAMADAS. –
No solo es memoria compartida ... – rook
@Mason Wheeler: no por un largo tiempo, pero eso es bueno saberlo. Si bien eso hace que sea más fácil determinar una dirección particular, el efecto neto es el mismo, ¿no es así? Cambia un conocido por desconocido, lo que simplemente hace que el ataque sea más difícil. –