Implementación de process hollowing en VBA

Ya sabéis que Process hollowing, también conocido como Process Replacement o RunPE, es una técnica que hoy en día utiliza mucho el malware y consiste en que un proceso legítimo se carga en el sistema únicamente para actuar como contenedor de código hostil: el proceso legítimo se inicia en un estado suspendido y su área de memoria se reemplaza con el código de un segundo programa. Eso será ejecutado en lugar del original. Hoy recopilamos la implementación de esta técnica en VBA gracias al francés Clément Labro.

Su código se puede utilizar para lanzar ejecutables desde la memoria de Word o Excel. Es compatible con versiones de Microsoft Office 2010 y superiores y con arquitecturas de 32 bits y 64 bits.


Uso 1 - Archivo PE en disco

1. En el exploit al final del código, hay que establecer la ruta del archivo que se desea ejecutar.

strSrcFile = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

Nota: Si se está utilizando una versión de Microsoft Office de 32 bits en un sistema operativo de 64 bits, se deben especificar binarios de 32 bits.

strSrcFile = "C:\Windows\SysWOW64\cmd.exe"
strSrcFile = "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"

2. También se pueden especificar los parámetros del comando (opcional).

strArguments = "-exec Bypass"

Esto nos dará el equivalente a:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -exec Bypass

3. (Opcional) Enable View > Immediate Window (Ctrl+G) para comprobar si se ejecuta bien y ver los logs.

4. Ejecuta el exploit con la macro!

Uso 2 - PE embebido

1. Usa pe2vba.py para convertir un archivo PE a VBA. De esta manera, se puede incrustar directamente en la macro.
user@host:~$ python pe2vba.py meterpreter.exe 
[+] Created file 'meterpreter.exe.vba'.

2. Reemplaza el siguiente código en RunPE.vba con el contenido del archivo .vba que se generó en el paso anterior.
' ================================================================================
'                                ~~~ EMBEDDED PE ~~~
' ================================================================================

' CODE GENRATED BY PE2VBA
Private Function PE() As String
    Dim strPE As String
    strPE = ""
    PE = strPE
End Function

3. (Opcional) Enable View > Immediate Window (Ctrl+G) para comprobar si se ejecuta bien y ver los logs.

4. Ejecuta el exploit con la macro!

Nota: Cuando se utiliza un PE embebido, la macro cambiará automáticamente a este modo porque el método PE() devolverá una cadena no vacía.

Compatibilidad

Este código se probado en las siguientes platformas:
  •     Windows 7 Pro 32 bits + Office 2010 32 bits
  •     Windows 7 Pro 64 bits + Office 2016 32 bits
  •     Windows 2008 R2 64 bits + Office 2010 64 bits
  •     Windows 10 Pro 64 bits + Office 2016 64 bits
Actualmente, esto no funciona con todos los binarios de Windows. Por ejemplo, no se puede utilizar para ejecutar regedit.exe, supuestamente porque hacen falta algunas importaciones manuales de archivos DLL que faltan.
También y como se menciona anteriormente, este código solo funciona con Office 2010 y versiones posteriores. La razón es que el código usa ampliamente el tipo LongPtr que se introdujo por primera vez en Office 2010 para ayudar a los desarrolladores a crear un código independiente de la arquitectura. De hecho su tamaño se adaptará automáticamente según la arquitectura del proceso de Office (32 bits / 64 bits).

Por lo tanto, si intenta ejecutar este código en Office 2007, se recibirá un mensaje de error de tipo no definido por cada variable que usa el tipo LongPtr. Para solucionar este problema, se puede reemplazar todas las ocurrencias de LongPtr con Long (32 bits) o LongLong (64 bits).

Repo: https://github.com/itm4n/VBA-RunPE

Comentarios