
Имплант фильтра паролей DLL с возможностями эксфильтрации
DLLPasswordFilterImplant — это пользовательская DLL-библиотека фильтра паролей, которая позволяет перехватывать учётные данные пользователя. Каждое событие смены пароля в домене запускает зарегистрированную DLL для извлечения имени пользователя и нового значения пароля до его успешного изменения в Active Directory (AD).
Дополнительную информацию о фильтрах паролей можно найти в документации Microsoft.
Создайте DLL для целевой архитектуры. Компилируйте в 32-битном режиме для 32-битной системы и в 64-битном — для 64-битной.
Скопируйте DLL в каталог установки Windows. (Папка по умолчанию: \Windows\System32)
Зарегистрируйте фильтр паролей, обновив следующий раздел реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Если подраздел Notification Packages существует, добавьте имя DLL ("DLLPasswordFilterImplant", если вы его не переименовали) к существующим данным значения. Не перезаписывайте существующие значения.
Если подраздел не существует, создайте его и добавьте имя DLL ("DLLPasswordFilterImplant", если вы его не переименовали) в данные значения.
ПРИМЕЧАНИЕ: Не включайте расширение .dll при добавлении имени DLL в подраздел Notification Packages.
Настройте открытый ключ для шифрования учётных данных.
KEY=key.pem
# Сгенерируйте RSA-ключ и извлеките его открытый ключ. Закрытый ключ сохраните для расшифровки.
openssl genrsa -out $KEY 2048
# Подготовьте запись для раздела реестра Windows.
echo 'Windows Registry Editor Version 5.00' > addKey.reg
echo >> addKey.reg
echo '[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]' >> addKey.reg
# Если python2 отсутствует, используйте `python`.
echo "Key=hex:$(openssl rsa -in $KEY -pubout | sed -E '/^\-/d' | base64 -d | python2 -c 'import sys; print(",".join(["{:02x}".format(ord(b)) for b in sys.stdin.read()]))')" >> addKey.reg
Затем можно запустить файл addKey.reg, чтобы добавить «сырой» открытый ключ в реестр.
Обратите внимание, что использование асимметричного шифрования значительно увеличивает объём извлекаемых данных из-за дополнения сообщений. Возможны улучшения для уменьшения накладных расходов на данные.
Перезагрузите систему Источник
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Зашифрованные данные дополняются по схеме OAEP и могут быть расшифрованы следующим образом:
# Преобразуйте шестнадцатеричную строку в «сырые» байты.
xxd -r -p exfiltrated.hex > raw.bin
# Расшифруйте с помощью закрытого ключа.
openssl rsautl -decrypt -oaep -inkey $KEY -in raw.bin -out decrypted.txt
Чтобы полностью удалить фильтр паролей из системы:
Отмените регистрацию фильтра паролей, обновив следующий раздел реестра:
HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Lsa
В подразделе Notification Packages удалите имя DLL из существующих данных значения. Не удаляйте другие существующие значения.
Перезагрузите систему
В каталоге установки Windows (папка по умолчанию: \Windows\System32) найдите DLL фильтра паролей ("DLLPasswordFilterImplant.DLL", если вы его не переименовали) и удалите файл.
Простой DNS-сервер для приёма извлечённых данных предоставляется в scripts/.
Запустите pip install -r scripts/requirement.txt, желательно в виртуальном окружении, а затем передайте ему закрытый ключ в кодировке PEM и опционально путь к выходному файлу (по умолчанию creds.txt) для записи учётных данных.
В настоящее время DNS-сервер не поддерживает одновременную смену паролей и служит только в качестве доказательства концепции. Запросы на добавление функций, повышающих надёжность сервера, приветствуются.
Работает на:
Фильтр паролей тестировался исключительно на перечисленных выше системах.
Вот некоторые инструменты, которые могут помочь в отладке DLL (при необходимости):