
Kit de herramientas de recolección de credenciales post-explotación que se inyecta en gestores de contraseñas y utilidades de Windows para capturar credenciales mediante proxy de DLL, secuestro de COM e inyección de AppDomainManager.
ThievingFox es una colección de herramientas de post-explotación para recopilar credenciales de varios gestores de contraseñas y utilidades de Windows. Cada módulo utiliza un método específico de inyección en el proceso objetivo, y luego engancha funciones internas para recopilar credenciales.
La publicación del blog acompañante se puede encontrar aquí
Rustup debe estar instalado, siga las instrucciones disponibles aquí: https://rustup.rs/
El paquete mingw-w64 debe estar instalado. En Debian, esto se puede hacer usando:
apt install mingw-w64
Ambos objetivos de Windows x86 y x86_64 deben estar instalados para Rust:
rustup target add x86_64-pc-windows-gnu
rustup target add i686-pc-windows-gnu
Mono y Nuget también deben estar instalados, las instrucciones están disponibles aquí: https://www.mono-project.com/download/stable/#download-lin
Después de agregar los repositorios de Mono, Nuget se puede instalar usando apt:
apt install nuget
Finalmente, las dependencias de Python deben estar instaladas:
pip install -r client/requirements.txt
ThievingFox funciona con python >= 3.11.
Rustup debe estar instalado, siga las instrucciones disponibles aquí: https://rustup.rs/
Ambos objetivos de Windows x86 y x86_64 deben estar instalados para Rust:
rustup target add x86_64-pc-windows-msvc
rustup target add i686-pc-windows-msvc
El entorno de desarrollo .NET también debe estar instalado. Desde Visual Studio, navegue a Tools > Get Tools And Features > Install ".NET desktop development"
Finalmente, las dependencias de Python deben estar instaladas:
pip install -r client/requirements.txt
ThievingFox funciona con python >= 3.11
NOTA: En un host Windows, para usar el módulo KeePass, msbuild debe estar disponible en el PATH. Esto se puede lograr ejecutando el cliente desde una Consola de Desarrollador de Visual Studio (Tools > Command Line > Developper Powershell)
Todos los módulos han sido probados en las siguientes versiones de Windows:
| Versión de Windows |
|---|
| Windows Server 2022 |
| Windows Server 2019 |
| Windows Server 2016 |
| Windows Server 2012R2 |
| Windows 10 |
| Windows 11 |
[!CAUTION] Los módulos no han sido probados en otras versiones, y se espera que no funcionen.
| Aplicación | Método de Inyección |
|---|---|
| KeePass.exe | AppDomainManager Injection |
| KeePassXC.exe | DLL Proxying |
| LogonUI.exe (Pantalla de inicio de sesión de Windows) | COM Hijacking |
| consent.exe (Ventana emergente de UAC de Windows) | COM Hijacking |
| mstsc.exe (Cliente RDP predeterminado de Windows) | COM Hijacking |
| RDCMan.exe (Cliente RDP de Sysinternals) | COM Hijacking |
| MobaXTerm.exe (Cliente RDP de terceros) | COM Hijacking |
[!CAUTION] Aunque traté de asegurar que estas herramientas no afecten la estabilidad de las aplicaciones objetivo, el hooking inline y la inyección de librerías no son seguros y esto podría resultar en un bloqueo o inestabilidad de la aplicación. Si ese fuera el caso, usar el módulo
cleanupen el objetivo debería ser suficiente para asegurar que la próxima vez que se inicie la aplicación, no se realice ninguna inyección/hooking.
ThievingFox contiene 3 módulos principales: poison, cleanup y collect.
Para cada aplicación especificada en los parámetros de línea de comandos, el módulo poison recupera la biblioteca original que va a ser secuestrada (para COM hijacking y DLL proxying), compila una biblioteca que coincida con las propiedades de la DLL original, la sube al servidor y modifica el registro si es necesario para realizar COM hijacking.
Para acelerar el proceso de compilación de todas las bibliotecas, se mantiene una caché en client/cache/.
--mstsc, --rdcman y --mobaxterm tienen una opción específica, respectivamente --mstsc-poison-hkcr, --rdcman-poison-hkcr y --mobaxterm-poison-hkcr. Si se especifica una de estas opciones, el COM hijacking reemplazará la clave de registro en el hive HKCR, lo que significa que todos los usuarios se verán afectados. Por defecto, solo los usuarios actualmente conectados se ven afectados (todos los usuarios que tienen un hive HKCU).
--keepass y --keepassxc tienen opciones específicas, --keepass-path, --keepass-share, y --keepassxc-path, --keepassxc-share, para especificar dónde están instaladas estas aplicaciones, si no es la ruta de instalación predeterminada. Esto no es necesario para otras aplicaciones, ya que se usa COM hijacking.
El módulo KeePass requiere que Visual C++ Redistributable esté instalado en el objetivo.
Se pueden especificar múltiples aplicaciones a la vez, o se puede usar la bandera --all para apuntar a todas las aplicaciones.
[!IMPORTANT] Recuerde limpiar la caché si alguna vez cambia el parámetro
--tempdir, ya que el nombre del directorio está incrustado dentro de las DLL nativas.
$ python3 client/ThievingFox.py poison -h
usage: ThievingFox.py poison [-h] [-hashes HASHES] [-aesKey AESKEY] [-k] [-dc-ip DC_IP] [-no-pass] [--tempdir TEMPDIR] [--keepass] [--keepass-path KEEPASS_PATH]
[--keepass-share KEEPASS_SHARE] [--keepassxc] [--keepassxc-path KEEPASSXC_PATH] [--keepassxc-share KEEPASSXC_SHARE] [--mstsc] [--mstsc-poison-hkcr]
[--consent] [--logonui] [--rdcman] [--rdcman-poison-hkcr] [--mobaxterm] [--mobaxterm-poison-hkcr] [--all]
target
positional arguments:
target Target machine or range [domain/]username[:password]@<IP or FQDN>[/CIDR]
options:
-h, --help show this help message and exit
-hashes HASHES, --hashes HASHES
LM:NT hash
-aesKey AESKEY, --aesKey AESKEY
AES key to use for Kerberos Authentication
-k Use kerberos authentication. For LogonUI, mstsc and consent modules, an anonymous NTLM authentication is performed, to retrieve the OS version.
-dc-ip DC_IP, --dc-ip DC_IP
IP Address of the domain controller
-no-pass, --no-pass Do not prompt for password
--tempdir TEMPDIR The name of the temporary directory to use for DLLs and output (Default: ThievingFox)
--keepass Try to poison KeePass.exe
--keepass-path KEEPASS_PATH
The path where KeePass is installed, without the share name (Default: /Program Files/KeePass Password Safe 2/)
--keepass-share KEEPASS_SHARE
The share on which KeePass is installed (Default: c$)
--keepassxc Try to poison KeePassXC.exe
--keepassxc-path KEEPASSXC_PATH
The path where KeePassXC is installed, without the share name (Default: /Program Files/KeePassXC/)
--keepassxc-share KEEPASSXC_SHARE
The share on which KeePassXC is installed (Default: c$)
--mstsc Try to poison mstsc.exe
--mstsc-poison-hkcr Instead of poisonning all currently logged in users' HKCU hives, poison the HKCR hive for mstsc, which will also work for user that are currently not
logged in (Default: False)
--consent Try to poison Consent.exe
--logonui Try to poison LogonUI.exe
--rdcman Try to poison RDCMan.exe
--rdcman-poison-hkcr Instead of poisonning all currently logged in users' HKCU hives, poison the HKCR hive for RDCMan, which will also work for user that are currently not
logged in (Default: False)
--mobaxterm Try to poison MobaXTerm.exe
--mobaxterm-poison-hkcr
Instead of poisonning all currently logged in users' HKCU hives, poison the HKCR hive for MobaXTerm, which will also work for user that are currently not
logged in (Default: False)
--all Try to poison all applications
Para cada aplicación especificada en los parámetros de línea de comandos, el módulo cleanup primero elimina los artefactos de envenenamiento que obligan a la aplicación objetivo a cargar la librería de hooking. Luego, intenta eliminar las librerías que se subieron al host remoto.
Para aplicaciones que soportan envenenamiento de ambos hives HKCU y HKCR, ambos se limpian independientemente.
Se pueden especificar múltiples aplicaciones a la vez, o se puede usar la bandera --all para limpiar todas las aplicaciones.
No limpia las credenciales extraídas en el host remoto.
[!IMPORTANT] Si la aplicación objetivo está en uso mientras se ejecuta el módulo
cleanup, las DLL que se colocan en el objetivo no se pueden eliminar. No obstante, el módulocleanuprevertirá la configuración que habilita la inyección, lo que debería asegurar que la próxima vez que se inicie la aplicación, no se realice ninguna inyección. Los archivos queThievingFoxno pueda eliminar se registran.
$ python3 client/ThievingFox.py cleanup -h
usage: ThievingFox.py cleanup [-h] [-hashes HASHES] [-aesKey AESKEY] [-k] [-dc-ip DC_IP] [-no-pass] [--tempdir TEMPDIR] [--keepass] [--keepass-share KEEPASS_SHARE]
[--keepass-path KEEPASS_PATH] [--keepassxc] [--keepassxc-path KEEPASSXC_PATH] [--keepassxc-share KEEPASSXC_SHARE] [--mstsc] [--consent] [--logonui]
[--rdcman] [--mobaxterm] [--all]
target
positional arguments:
target Target machine or range [domain/]username[:password]@<IP or FQDN>[/CIDR]
options:
-h, --help show this help message and exit
-hashes HASHES, --hashes HASHES
LM:NT hash
-aesKey AESKEY, --aesKey AESKEY
AES key to use for Kerberos Authentication
-k Use kerberos authentication. For LogonUI, mstsc and consent modules, an anonymous NTLM authentication is performed, to retrieve the OS version.
-dc-ip DC_IP, --dc-ip DC_IP
IP Address of the domain controller
-no-pass, --no-pass Do not prompt for password
--tempdir TEMPDIR The name of the temporary directory to use for DLLs and output (Default: ThievingFox)
--keepass Try to cleanup all poisonning artifacts related to KeePass.exe
--keepass-share KEEPASS_SHARE
The share on which KeePass is installed (Default: c$)
--keepass-path KEEPASS_PATH
The path where KeePass is installed, without the share name (Default: /Program Files/KeePass Password Safe 2/)
--keepassxc Try to cleanup all poisonning artifacts related to KeePassXC.exe
--keepassxc-path KEEPASSXC_PATH
The path where KeePassXC is installed, without the share name (Default: /Program Files/KeePassXC/)
--keepassxc-share KEEPASSXC_SHARE
The share on which KeePassXC is installed (Default: c$)
--mstsc Try to cleanup all poisonning artifacts related to mstsc.exe
--consent Try to cleanup all poisonning artifacts related to Consent.exe
--logonui Try to cleanup all poisonning artifacts related to LogonUI.exe
--rdcman Try to cleanup all poisonning artifacts related to RDCMan.exe
--mobaxterm Try to cleanup all poisonning artifacts related to MobaXTerm.exe
--all Try to cleanup all poisonning artifacts related to all applications
Para cada aplicación especificada en los parámetros de línea de comandos, el módulo collect recupera los archivos de salida en el host remoto almacenados dentro de C:\Windows\Temp\<tempdir> correspondientes a la aplicación, y los descifra. Los archivos se eliminan del host remoto y los datos recuperados se almacenan en client/ouput/.
Se pueden especificar múltiples aplicaciones a la vez, o se puede usar la bandera --all para recopilar registros de todas las aplicaciones.
$ python3 client/ThievingFox.py collect -h
usage: ThievingFox.py collect [-h] [-hashes HASHES] [-aesKey AESKEY] [-k] [-dc-ip DC_IP] [-no-pass] [--tempdir TEMPDIR] [--keepass] [--keepassxc] [--mstsc] [--consent]
[--logonui] [--rdcman] [--mobaxterm] [--all]
target
positional arguments:
target Target machine or range [domain/]username[:password]@<IP or FQDN>[/CIDR]
options:
-h, --help show this help message and exit
-hashes HASHES, --hashes HASHES
LM:NT hash
-aesKey AESKEY, --aesKey AESKEY
AES key to use for Kerberos Authentication
-k Use kerberos authentication. For LogonUI, mstsc and consent modules, an anonymous NTLM authentication is performed, to retrieve the OS version.
-dc-ip DC_IP, --dc-ip DC_IP
IP Address of the domain controller
-no-pass, --no-pass Do not prompt for password
--tempdir TEMPDIR The name of the temporary directory to use for DLLs and output (Default: ThievingFox)
--keepass Collect KeePass.exe logs
--keepassxc Collect KeePassXC.exe logs
--mstsc Collect mstsc.exe logs
--consent Collect Consent.exe logs
--logonui Collect LogonUI.exe logs
--rdcman Collect RDCMan.exe logs
--mobaxterm Collect MobaXTerm.exe logs
--all Collect logs from all applications