Uno de los desafíos con la implementación de ASLR para todo es que, al menos en Windows, algunas DLL (bibliotecas) no se compilan de una manera que sea compatible con ASLR. (No se compilan como código independiente de la posición y, por lo tanto, el lugar donde se cargan en la memoria no se puede aleatorizar).
Esto es problemático, porque si una aplicación carga incluso una sola DLL no aleatoria, entonces efectivamente no es aleatoria. Para detener los ataques estándar (por ejemplo, ataques de ROP), todo el código debe ser aleatorio : incluso una sola DLL no aleatoria es un punto de apoyo suficiente para que los ataques de ROP puedan ser posibles. Por lo tanto, para una aproximación de primer orden, ASLR solo es útil para proteger una aplicación en particular si todos de sus DLL están aleatorizados. Las aplicaciones a menudo cargan muchas DLL, y como solo se necesita una DLL no aleatoria, esto hace que sea especialmente importante asegurarse de que todas las DLL estén aleatorizadas.
En general, la industria se está moviendo hacia un mayor uso de la aleatorización, pero slow : Supongo que se necesita tiempo para llevar esto a cada DLL que cualquier programa utilizará. Por ejemplo, recientemente se reveló que la DLL de Dropbox no usa la aleatorización , por lo que cualquier programa que use la DLL de Dropbox no está protegido contra los ataques de ROP (cualquier programa que use la DLL de Dropbox pierde el beneficio de ASLR).
Mi pregunta: ¿Cuáles son las razones típicas por las que algunas DLL no son aleatorias? ¿Es típicamente algún tipo de barrera técnica o problema técnico lo que dificulta o imposibilita compilar la DLL como código independiente de la posición? ¿Es la falta de conciencia / atención a la seguridad, por parte de los desarrolladores que construyen el DLL? ¿Son las DLL heredadas que son muy antiguas y no se han vuelto a compilar para aprovechar la aleatorización? ¿Microsoft Visual C ++ no hace lo correcto de forma predeterminada (no puede compilar DLL como código independiente de la posición de manera predeterminada)? ¿Es algo completamente distinto?
¿Existen avances técnicos o herramientas que ayuden a facilitar una mayor implementación de ASLR / randomización para DLL que actualmente no admiten la aleatorización?
Recursos relacionados: SlopFinder es una herramienta para analizar archivos DLL que no admiten ASLR.