Dotando de conocimiento a nuestra herramienta ATTPwn, donde pretendemos añadir la emulación de la amenaza llamada Duqu, me tocó investigar un poco mas a fondo qué es eso de la Inyección de DLL. Esta práctica de hacer DLL injection es además, una de las muchas técnicas que recoge MITRE ATT&CK y que se utiliza básicamente para llevar a cabo la ejecución de código dentro de un proceso (el cual a su vez ya está en ejecución).
En este caso concreto, consiste en forzar la carga y ejecución de una biblioteca dinámica la cuál no estaba proyectada en su diseño original.
A modo de recordatorio, las DLL (Dynamic Link Library), son fragmentos de código que se cargan bajo demanda por parte del sistema operativo durante la ejecución de una aplicación.
Figura 2: Libro de Hacking Windows |
En el libro “Hacking Windows: Ataques a sistemas y redes Microsoft" de la editorial 0xWord podrás encontrar este y otros muchos tipos de ataques dirigidos a la plataforma Windows para conseguir saltarse las protecciones del sistema.
Jugando con las DLL
Ahora que tenemos más conocimientos sobre esta técnica, vamos a llevarla a la práctica con una PoC para jugar un poco con las inyecciones de DLL y repasar algunos conceptos que nos van a venir de maravilla para lo siguiente. Tienes el script en GitHub.
Jugando con las DLL
Ahora que tenemos más conocimientos sobre esta técnica, vamos a llevarla a la práctica con una PoC para jugar un poco con las inyecciones de DLL y repasar algunos conceptos que nos van a venir de maravilla para lo siguiente. Tienes el script en GitHub.
Figura 3: Script para la PoC |
La realizaremos apoyándonos en el siguiente script, donde dado el ID de un proceso cualquiera, intenta inyectarle la DLL que hayamos generado para la ejecución de código usando las siguientes sentencias que podemos identificar rápidamente:
• VirtualAllocEx: reserva y/o una región de páginas del espacio de direcciones virtual del proceso que la invoca.
• WriteProcessMemory: permitirá escribir datos en un área de memoria de un proceso específico.
Para empezar necesitamos crear una DLL, para ello utilizaremos msfvenom con el siguiente comando:
“/usr/bin/msfvenom -a x86 --platform Windows -p windows/exec CMD='cmd.exe /k "echo this is a PoC of DLL injection Attpwn"' -f dll > attpwn.dll”
Inyectando la DLL a un proceso
En este caso hemos generado la librería para x86, si queremos que se ejecute en equipos de x64, tendremos que modificar ese parámetro. Por otro lado, el objetivo final de esta DLL generada con este módulo de Metasploit es ejecutar una CMD en la que se muestra el siguiente texto “this is a PoC of DLL injection Attpwn”.
Figura 4: Metasploit para Pentesters Gold Edition |
También necesitamos el PID del proceso en el que queramos inyectar la DLL generada anteriormente. Para nuestra prueba de concepto vamos a generar un nuevo proceso del bloc de notas y nos quedaremos con los detalles de ese proceso con la siguiente linea:
“$app = Start-Process notepad -passthru”
Como queremos poder ejecutar tantas veces como queramos este script y para ello necesitamos pasar el fichero .DLL, vamos a codificar en base 64 el fichero de la DLL para tenerlo embebido en el propio script como se ve en la image siguiente.
Figura 5: DLL Codificada en Base64 |
En función de la arquitectura del equipo donde se ejecute nuestra DLL, tendremos que lanzar la librería de x64 o x32.
Usando powershellmafia
Una vez tenemos la librería embebida y el proceso en el cual queremos introducir la DLL, con el siguiente código, lo que hacemos es crear una carpeta donde guardaremos la librería embebida, para posteriormente cargarla con el script de powershellmafia, donde le pasamos el ID del proceso y la ruta de la librería que acabamos de guardar.
New-Item $Env:SystemDrive"\attpwn" -ItemType Directory
$path = $Env:SystemDrive+"\attpwn"
$filePath = $Env:SystemDrive+"\attpwn\inject.DLL"
$FileBytes | Set-Content $filePath -Encoding Byte
$execution = Invoke-DllInjection -ProcessID $app.Id -Dll $filePath
Al ejecutar dicho código podemos ver la consola con el mensaje de la DLL y por detrás el bloc de notas. Cabe destacar que en el caso de la CMD , tendrá los mismos privilegios que el proceso donde se inyecta.
Figura 6: PoC de DLL Injection con PowerShellMafia
En el vídeo de la Figura 6 podéis ver un ejemplo de cómo se puede hacer un DLL Injection con PowerShellMafia para que lo pruebes tú mismo.
Reflexiones finales
Está técnica no solo se utiliza en procesos maliciosos, también se utiliza para la depuración remota de código. En mi caso, sin ser consciente, lo utilizaba con el IDE de embarcadero, el cual proporciona un ejecutable y unas librerías y de manera transparente al desarrollador. Este ejecutable buscaba el PID del proceso del binario a depurar, y conseguía a través de esas DLL comunicarse con el ordenador remoto y así poder realizar esa depuración de código desde una ubicación remota.
Figura 7: Máxima Seguridad en Windows Gold Edition de Sergio de los Santos |
A modo de conclusión, puede ser utilizada partiendo de un proceso legítimo llegar a ejecutar una shell por la cual seguir obteniendo información del entorno y finalmente llegar a comprometerlo por completo, para minimizar los riesgos de esta técnica podemos utilizar herramientas que nos proporciona Windows, como es el caso de AppLocker la cual puede controlar archivos .dll mediante scripts o reglas que se añadan. En el libro “Máxima Seguridad en Windows: Secretos Técnicos” podrás encontrar más información sobre cómo proteger al máximo tu sistema Microsoft.
Autor: Víctor Rodriguez Boyero, Security Researcher en el equipo de Ideas Locas de CDCO de Telefónica.
Autor: Víctor Rodriguez Boyero, Security Researcher en el equipo de Ideas Locas de CDCO de Telefónica.
No hay comentarios:
Publicar un comentario