
Инструментарий для сбора учетных данных после эксплуатации, который внедряется в менеджеры паролей и утилиты Windows для захвата учетных данных с помощью проксирования DLL, перехвата COM и внедрения AppDomainManager.
ThievingFox — это набор инструментов для пост-эксплуатации, предназначенных для сбора учётных данных из различных менеджеров паролей и утилит Windows. Каждый модуль использует определённый метод внедрения в целевой процесс, а затем перехватывает внутренние функции для сбора учётных данных.
Сопроводительную статью в блоге можно найти здесь
Необходимо установить Rustup, следуйте инструкциям здесь : https://rustup.rs/
Пакет mingw-w64 должен быть установлен. На Debian это можно сделать с помощью :
apt install mingw-w64
Для Rust необходимо установить обе цели Windows x86 и x86_64:
rustup target add x86_64-pc-windows-gnu
rustup target add i686-pc-windows-gnu
Mono и Nuget также должны быть установлены; инструкции доступны здесь : https://www.mono-project.com/download/stable/#download-lin
После добавления репозиториев Mono Nuget можно установить с помощью apt :
apt install nuget
Наконец, необходимо установить зависимости Python :
pip install -r client/requirements.txt
ThievingFox работает с python >= 3.11.
Необходимо установить Rustup, следуйте инструкциям здесь : https://rustup.rs/
Для Rust необходимо установить обе цели Windows x86 и x86_64:
rustup target add x86_64-pc-windows-msvc
rustup target add i686-pc-windows-msvc
Также должна быть установлена среда разработки .NET. В Visual Studio перейдите в Tools > Get Tools And Features > Install ".NET desktop development"
Наконец, необходимо установить зависимости Python :
pip install -r client/requirements.txt
ThievingFox работает с python >= 3.11
ПРИМЕЧАНИЕ : На хосте Windows для использования модуля KeePass msbuild должен быть доступен в PATH. Это можно сделать, запустив клиент из Visual Studio Developper Powershell (Tools > Command Line > Developper Powershell)
Все модули были протестированы на следующих версиях Windows :
| Версия Windows |
|---|
| Windows Server 2022 |
| Windows Server 2019 |
| Windows Server 2016 |
| Windows Server 2012R2 |
| Windows 10 |
| Windows 11 |
[!ПРЕДУПРЕЖДЕНИЕ] Модули не тестировались на других версиях и, как ожидается, не будут работать.
[!ПРЕДУПРЕЖДЕНИЕ] Хотя я старался, чтобы эти инструменты не влияли на стабильность целевых приложений, встроенное перехватывание (inline hooking) и внедрение библиотек небезопасны и могут привести к сбою или нестабильной работе приложения. Если это произойдёт, использование модуля
cleanupна цели должно быть достаточным, чтобы при следующем запуске приложения внедрение/перехватывание не выполнялось.
ThievingFox содержит 3 основных модуля : poison, cleanup и collect.
Для каждого приложения, указанного в параметрах командной строки, модуль poison извлекает оригинальную библиотеку, которая будет захвачена (для COM Hijacking и DLL Proxying), компилирует библиотеку, соответствующую свойствам оригинальной DLL, загружает её на сервер и при необходимости изменяет реестр для выполнения COM Hijacking.
Для ускорения процесса компиляции всех библиотек поддерживается кеш в client/cache/.
--mstsc, --rdcman и --mobaxterm имеют специальные опции, соответственно --mstsc-poison-hkcr, --rdcman-poison-hkcr и --mobaxterm-poison-hkcr. Если указана одна из этих опций, COM Hijacking заменяет ключ реестра в кусте HKCR, что означает, что будут затронуты все пользователи. По умолчанию затрагиваются только все пользователи, вошедшие в систему в данный момент (все пользователи, имеющие куст HKCU).
--keepass и --keepassxc имеют специальные опции --keepass-path, --keepass-share, а также --keepassxc-path, --keepassxc-share, чтобы указать, где установлены эти приложения, если это не стандартный путь установки. Для других приложений это не требуется, поскольку используется COM Hijacking.
Модуль KeePass требует установки Visual C++ Redistributable на целевой системе.
Можно указать несколько приложений одновременно или использовать флаг --all для атаки на все приложения.
[!ВАЖНО] Не забудьте очистить кеш, если вы когда-либо измените параметр
--tempdir, так как имя каталога встраивается внутрь нативных DLL.
$ 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
Для каждого приложения, указанного в параметрах командной строки, модуль cleanup сначала удаляет артефакты отравления, которые заставляют целевое приложение загружать библиотеку перехвата. Затем он пытается удалить библиотеки, загруженные на удалённый хост.
Для приложений, поддерживающих отравление как кустов HKCU, так и HKCR, очищаются оба.
Можно указать несколько приложений одновременно или использовать флаг --all для очистки всех приложений.
Этот модуль не очищает извлечённые учётные данные на удалённом хосте.
[!ВАЖНО] Если целевое приложение используется во время выполнения модуля
cleanup, DLL, размещённые на цели, не могут быть удалены. Тем не менее, модульcleanupоткатит конфигурацию, включающую внедрение, что должно гарантировать, что при следующем запуске приложения внедрение выполняться не будет. Файлы, которые не могут быть удаленыThievingFox, регистрируются.
$ 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
Для каждого приложения, указанного в параметрах командной строки, модуль collect извлекает выходные файлы на удалённом хосте, хранящиеся в C:\Windows\Temp\<tempdir>, соответствующие приложению, и расшифровывает их. Файлы удаляются с удалённого хоста, а полученные данные сохраняются в client/ouput/.
Можно указать несколько приложений одновременно или использовать флаг --all для сбора журналов со всех приложений.
$ 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
| Приложение | Метод внедрения |
|---|
| KeePass.exe | AppDomainManager Injection |
| KeePassXC.exe | DLL Proxying |
| LogonUI.exe (Экран входа в Windows) | COM Hijacking |
| consent.exe (Всплывающее окно UAC в Windows) | COM Hijacking |
| mstsc.exe (Стандартный RDP-клиент Windows) | COM Hijacking |
| RDCMan.exe (RDP-клиент Sysinternals) | COM Hijacking |
| MobaXTerm.exe (Сторонний RDP-клиент) | COM Hijacking |