Robber: una herramienta para buscar ejecutables susceptibles a DLL hijacking

Robber es una herramienta de código abierto desarrollada en Delphi XE2 sin dependencias de terceros que permite buscar los ejecutables del sistema susceptibles a DLL hijacking o secuestro de DLL, una vulnerabilidad ya bastante antigua pero que todavía sigue activa en nuestros días.


Como va vimos en el blog:

"Cuando una aplicación mediante LoadLibrary() o LoadLibraryEx() intenta cargar funciones adicionales enlazando en tiempo real con una librería dinámica y no se especifica su ruta completa, Windows define como primer orden de búsqueda de la DLL el directorio actual del proceso: http://msdn.microsoft.com/en-us/library/ms682586%28v=VS.85%29.aspx.

Si un usuario abre un fichero legítimo mediante una aplicación afectada y en el mismo directorio se encuentra una DLL maliciosa (renombrada como la original), un atacante podría conseguir la ejecución de código arbitrario a través de la carga de esa librería modificada.
"

Si la DLL no se encuentra en el directorio de trabajo de la aplicación o "." (opción A o prioridad más alta, primera comprobación) las rutas de búsqueda siguientes son:

B) \Windows
C) \Windows\system32
D) \Windows\syswow64
  <- prioridad más baja, última comprobación
 
Por ejemplo, si algunos ejecutables "Foo.exe" solicitan "bar.dll" que está el directorio syswow64 (D) esto nos dará una buena oportunidad para colocar una versión maliciosa en A), B) o C) y se cargará en el ejecutable. Incluso una ruta completa absoluta no puede proteger contra esto si se puede reemplazar la DLL con una versión modificada.

Microsoft protege las rutas del sistema como 'System32' mediante el tradicional mecanismo de protección de archivos de Windows, pero la mejor manera de proteger el ejecutable contra el secuestro de DLL en las soluciones enterprise es:

- Utilizar una ruta absoluta en lugar de una ruta relativa
- Firmar los archivos de la DLL y verificarlos antes de cargar la DLL en la memoria, o comprobar el hash del archivo DLL con el hash DLL original

Por supuesto, esta vulnerabilidad no está realmente limitada a Windows. Cualquier sistema operativo que permita la vinculación dinámica de bibliotecas externas es teóricamente vulnerable a esto.

Cualquier atacante puede usar un método bastante simple para descubrir las DLL que son propensas al secuestro:

- Escanear la tabla de importación de ejecutables y descubrir los archivos DLL vinculados a los ejecutables
- Buscar los archivos DLL ubicados dentro del ejecutable que coincidan con los DLL vinculados (como se dijo antes, el directorio de trabajo actual del ejecutable tiene la máxima prioridad)
- Si se encuentra alguna DLL, escanear la tabla de exportación del theme
- Comparar la tabla de importación de ejecutables con la tabla de exportación de DLL y, si se encuentra alguna coincidencia, las funciones comunes ejecutables y coincidentes se marcan como candidatas a DLL hijacking

Características de Robber:

- Posibilidad de seleccionar el tipo de escaneo (aplicaciones firmadas / sin firmar)
- Determinar el firmante del ejecutable
- Determinar qué DLL es candidata para el secuestro
- Determinar los nombres de los métodos exportados de las DLL candidatas
- Configurar reglas para determinar qué secuestro es el mejor o la mejor opción de uso y mostrar el tema en diferentes colores

Ejecutables de Robber: https://github.com/MojtabaTajik/Robber/releases

Repositorio: https://github.com/MojtabaTajik/Robber

Comentarios