2010-09-02 8 views

Respuesta

43

Los conceptos básicos son simples. Windows tiene una ruta de búsqueda para DLL, de la misma manera que tiene $ PATH para encontrar ejecutables. Si puede averiguar qué DLL solicita una aplicación sin una ruta absoluta (desencadenando este proceso de búsqueda), puede colocar su DLL host en un lugar más arriba de la ruta de búsqueda para que se encuentre antes de que la versión real sea, y Windows lo hará felizmente. alimenta tu código de ataque a la aplicación.

lo tanto, vamos a suponer que la ruta de búsqueda de DLL del sistema se ve algo como esto:

a) .  <--current working directory of the application, highest priority, first check 
b) \windows 
c) \windows\system32 
d) \windows\syswow64 <-- lowest priority, last check 

y alguna aplicación foo.exe peticiones "bar.dll", que pasa a vivir en el (d) subdirectorio syswow64. Esto le da la oportunidad de colocar su versión maliciosa en a), b), o c) y se cargará en la aplicación automáticamente siempre que la aplicación solicite bar.dll. Y ahora tu foo está bien y está realmente impedido.

Como se indicó anteriormente, incluso una ruta completa absoluta no puede proteger contra esto, si puede reemplazar la DLL con su propia versión.

Y, por supuesto, esto tampoco está limitado a Windows. Cualquier sistema operativo que permita la vinculación dinámica de bibliotecas externas es teóricamente vulnerable a esto.

7

DLL Hijacking es realmente un concepto simple.

Las aplicaciones cargan el código externo mediante DLL (bibliotecas de vínculos dinámicos). El secuestro de DLL es un proceso mediante el cual se inyecta código malicioso en una aplicación a través de una DLL maliciosa con el mismo nombre que una DLL utilizada por la aplicación.

Una aplicación es vulnerable al secuestro de DLL dependiendo de cómo hacen referencia a sus archivos DLL. Un ejemplo es el uso de rutas relativas en lugar de la ruta absoluta a la DLL. Otro es cargar archivos DLL utilizando variables de entorno que pueden no estar configuradas correctamente, en cuyo caso el directorio adopta de manera predeterminada una ruta relativa de la aplicación en ejecución.

Cuestiones relacionadas