
Быстрый офлайн-аудит паролей Active Directory с помощью Python.
Быстрый офлайн-аудит паролей Active Directory с использованием Python.
Lil Pwny — это приложение на Python для выполнения офлайн-аудита NTLM-хешей паролей пользователей, полученных из Active Directory, на предмет совпадения с известными скомпрометированными паролями из Have I Been Pwned. Результаты выводятся в формате JSON, содержащем имя пользователя, соответствующий хеш (может быть обфусцирован) и количество раз, которое этот пароль был найден в HIBP.
Больше информации о Lil Pwny можно найти в моём блоге.
Lil Pwny предоставляет функциональность для расширения вашего пользовательского списка паролей путём добавления часто используемых вариаций ваших паролей. Включены:
P@ssw0rd)PASSWORD, Password)password!, !password)password123!, !passwordabc, passwordpassword)
password1950, password2034)Пользовательский список из 100 паролей в открытом виде генерирует 49848660 вариаций.
Lil Pwny ищет пользователей, использующих вариации своего имени пользователя в качестве пароля.
Он преобразует имя пользователя в следующие форматы:
Затем эти варианты преобразуются в NTLM-хеши и проверяются на соответствие хешам AD.
Это приложение разработано для максимального использования многопроцессорной обработки в Python с целью максимально быстрой работы на потребительском оборудовании.
Поскольку используется многопроцессорная обработка, чем больше у вас ядер, тем быстрее, как правило, работает Lil Pwny. Я всё же получил очень хорошие результаты даже с небольшим количеством логических ядер:
Lil Pwny выводит результаты либо в стандартный поток вывода:
или в JSON:
{"localtime": "2021-00-00 00:00:00,000", "level": "NOTIFY", "source": "Lil Pwny", "match_type": "hibp", "detection_data": {"username": "RICKON.STARK", "hash": "32ED87BDB5FDC5E9CBA88547376818D4", "matches_in_hibp": "24230577", "obfuscated": "True"}}
Вы можете перенаправить JSON-вывод Lil Pwny в файл:
lil-pwny -ad ... > lil-pwny-results.json
Такое логирование в формате JSON может быть легко импортировано в SIEM или другой инструмент анализа логов, а также передано в другие скрипты или платформы для автоматизации действий по исправлению.
Установка через pip
pip install lil-pwny
Lil-pwny устанавливается как глобальная команда, используйте следующим образом:
usage: lil-pwny [-h] -hibp HIBP [-v] [-c CUSTOM] [-custom-enhance CUSTOM_ENHANCE] -ad AD_HASHES [-d] [-output {file,stdout,json}] [-o] [--verbose]
Быстрый офлайн-аудит паролей Active Directory с использованием Python
опции:
-h, --help показать это справочное сообщение и выйти
-hibp HIBP, --hibp HIBP
Файл .txt, содержащий NTLM-хеши HIBP
-v, --version показать номер версии программы и выйти
-c CUSTOM, --custom CUSTOM
Файл .txt, содержащий дополнительные пользовательские пароли для проверки
-custom-enhance CUSTOM_ENHANCE, --custom-enhance CUSTOM_ENHANCE
Сгенерировать расширенный список пользовательских паролей на основе предоставленного списка. Должно использоваться с флагом -c/--custom. Расширенный список хранится в памяти и не
записывается на диск. Укажите минимальную длину пароля. По умолчанию 8
-ad AD_HASHES, --ad-hashes AD_HASHES
Файл .txt, содержащий NTLM-хеши пользователей AD
-d, --duplicates Вывести список пользователей с дублирующимися паролями
-output {file,stdout,json}, --output {file,stdout,json}
Куда отправлять результаты
-o, --obfuscate Обфусцировать хеши найденных совпадений путём хеширования со случайной солью
--verbose Включить подробное логирование
Пример:
lil-pwny -hibp ~/hibp_hashes.txt -ad ~/ad_user_hashes.txt -c ~/custom_passwords.txt -output stdout -do
На контроллере домена используйте ntdsutil для создания дампа IFM вашего домена AD. Выполните следующее в повышенном окне PowerShell:
ntdsutil
activate instance ntds
ifm
create full **путь к выходному файлу**
Для извлечения NTLM-хешей из данных AD IFM требуется модуль PowerShell DSInternals.
После установки используйте куст SYSTEM из данных IFM для извлечения хешей в формате имя_пользователя:хеш и сохраните их в файл ad_ntlm_hashes.txt
$bootKey = Get-BootKey -SystemHivePath '.\registry\SYSTEM'
Get-ADDBAccount -All -DBPath '.\Active Directory\ntds.dit' -BootKey $bootKey | Format-Custom -View HashcatNT | Out-File ad_ntlm_hashes.txt -Encoding ASCII
Файл можно загрузить из HIBP API с помощью утилиты .net здесь
Скрипт PowerShell в каталоге scripts можно использовать для удаления нежелательных учётных записей из вывода IFM перед обработкой. К ним относятся: