
Kit de ferramentas de pós-exploração para coleta de credenciais que injeta em gerenciadores de senhas e utilitários do Windows para capturar credenciais via proxy de DLL, sequestro de COM e injeção de AppDomainManager.
ThievingFox é uma coleção de ferramentas de pós-exploração para coletar credenciais de vários gerenciadores de senhas e utilitários do Windows. Cada módulo utiliza um método específico de injeção no processo alvo e, em seguida, faz hook de funções internas para coletar credenciais.
O post do blog correspondente pode ser encontrado aqui
O Rustup deve estar instalado, siga as instruções disponíveis aqui: https://rustup.rs/
O pacote mingw-w64 deve estar instalado. No Debian, isso pode ser feito usando:
apt install mingw-w64
Ambos os alvos Windows x86 e x86_64 devem estar instalados para o Rust:
rustup target add x86_64-pc-windows-gnu
rustup target add i686-pc-windows-gnu
Mono e Nuget também devem estar instalados. As instruções estão disponíveis aqui: https://www.mono-project.com/download/stable/#download-lin
Após adicionar os repositórios Mono, o Nuget pode ser instalado usando apt:
apt install nuget
Finalmente, as dependências Python devem ser instaladas:
pip install -r client/requirements.txt
O ThievingFox funciona com python >= 3.11.
O Rustup deve estar instalado, siga as instruções disponíveis aqui: https://rustup.rs/
Ambos os alvos Windows x86 e x86_64 devem estar instalados para o Rust:
rustup target add x86_64-pc-windows-msvc
rustup target add i686-pc-windows-msvc
O ambiente de desenvolvimento .NET também deve estar instalado. No Visual Studio, navegue até Tools > Get Tools And Features > Install ".NET desktop development"
Finalmente, as dependências Python devem ser instaladas:
pip install -r client/requirements.txt
O ThievingFox funciona com python >= 3.11
NOTA: Em um host Windows, para usar o módulo KeePass, o msbuild deve estar disponível no PATH. Isso pode ser alcançado executando o cliente a partir de um Visual Studio Developer PowerShell (Tools > Command Line > Developer PowerShell)
Todos os módulos foram testados nas seguintes versões do Windows:
| Versão do Windows |
|---|
| Windows Server 2022 |
| Windows Server 2019 |
| Windows Server 2016 |
| Windows Server 2012R2 |
| Windows 10 |
| Windows 11 |
[!CAUTION] Os módulos não foram testados em outras versões, e espera-se que não funcionem.
[!CAUTION] Embora eu tenha tentado garantir que essas ferramentas não impactem a estabilidade dos aplicativos alvo, o hooking inline e a injeção de bibliotecas são inseguros e isso pode resultar em uma falha ou em instabilidade do aplicativo. Se for o caso, usar o módulo
cleanupno alvo deve ser suficiente para garantir que na próxima vez que o aplicativo for iniciado, nenhuma injeção/hooking seja realizada.
O ThievingFox contém 3 módulos principais: poison, cleanup e collect.
Para cada aplicativo especificado nos parâmetros da linha de comando, o módulo poison recupera a biblioteca original que será sequestrada (para COM hijacking e DLL proxying), compila uma biblioteca que corresponde às propriedades da DLL original, envia-a para o servidor e modifica o registro se necessário para realizar o COM hijacking.
Para acelerar o processo de compilação de todas as bibliotecas, um cache é mantido em client/cache/.
--mstsc, --rdcman e --mobaxterm têm uma opção específica, respectivamente --mstsc-poison-hkcr, --rdcman-poison-hkcr e --mobaxterm-poison-hkcr. Se uma dessas opções for especificada, o COM hijacking substituirá a chave do registro na hive HKCR, significando que todos os usuários serão impactados. Por padrão, apenas todos os usuários atualmente logados são impactados (todos os usuários que têm uma hive HKCU).
--keepass e --keepassxc têm opções específicas, --keepass-path, --keepass-share e --keepassxc-path, --keepassxc-share, para especificar onde esses aplicativos estão instalados, se não for o caminho de instalação padrão. Isso não é necessário para outros aplicativos, pois o COM hijacking é usado.
O módulo KeePass requer que o Visual C++ Redistributable esteja instalado no alvo.
Vários aplicativos podem ser especificados de uma só vez, ou a flag --all pode ser usada para atingir todos os aplicativos.
[!IMPORTANT] Lembre-se de limpar o cache se você alterar o parâmetro
--tempdir, pois o nome do diretório está embutido dentro das DLLs 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 aplicativo especificado nos parâmetros da linha de comando, o módulo cleanup primeiro remove os artefatos de envenenamento que forçam o aplicativo alvo a carregar a biblioteca de hooking. Em seguida, tenta deletar as bibliotecas que foram enviadas para o host remoto.
Para aplicativos que suportam envenenamento de ambas as hives HKCU e HKCR, ambas são limpas independentemente.
Vários aplicativos podem ser especificados de uma só vez, ou a flag --all pode ser usada para limpar todos os aplicativos.
Ele não limpa as credenciais extraídas no host remoto.
[!IMPORTANT] Se o aplicativo alvo estiver em uso enquanto o módulo
cleanupé executado, as DLLs que foram enviadas para o alvo não podem ser deletadas. No entanto, o módulocleanupreverterá a configuração que habilita a injeção, o que deve garantir que na próxima vez que o aplicativo for iniciado, nenhuma injeção seja realizada. Os arquivos que não puderem ser deletados peloThievingFoxsão registrados.
$ 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 aplicativo especificado nos parâmetros da linha de comando, o módulo collect recupera os arquivos de saída no host remoto armazenados dentro de C:\Windows\Temp\<tempdir> correspondentes ao aplicativo e os descriptografa. Os arquivos são deletados do host remoto e os dados recuperados são armazenados em client/output/.
Vários aplicativos podem ser especificados de uma só vez, ou a flag --all pode ser usada para coletar logs de todos os aplicativos.
$ 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
| Aplicativo | Método de Injeção |
|---|
| KeePass.exe | AppDomainManager Injection |
| KeePassXC.exe | DLL Proxying |
| LogonUI.exe (Tela de Login do Windows) | COM Hijacking |
| consent.exe (Popup UAC do Windows) | COM Hijacking |
| mstsc.exe (Cliente RDP padrão do Windows) | COM Hijacking |
| RDCMan.exe (Cliente RDP da Sysinternals) | COM Hijacking |
| MobaXTerm.exe (Cliente RDP de terceiros) | COM Hijacking |