
Постэксплуатационный анализатор EVTX для маппинга BloodHound
Пост-эксплуатационный анализатор EVTX для сопоставления с BloodHound
LogHound собирает и анализирует журналы безопасности Windows (.evtx) для извлечения событий аутентификации, данных о сеансах и метаданных входа для загрузки в BloodHound и получения более глубокой телеметрии о действиях злоумышленника.
LogHound был создан для решения конкретной задачи Red Team и специалистов по тестированию сетевых проникновений: как эффективно отслеживать цели для латерального перемещения, расшифровывать активные пользовательские сеансы и устанавливать однозначное владение машиной, не жертвуя операционной безопасностью (OpSec).
Файлы журналов событий (Security.evtx) на контроллерах домена Active Directory могут достигать нескольких гигабайт. Традиционные методы загрузки часто исчерпывают системную память или приводят к сбоям, оставляя заметные артефакты. LogHound решает эту проблему, используя потоковую парадигму на основе блоков (chunk-based streaming) поверх надёжного фреймворка Impacket.
Он сопоставляет сетевые структуры, определяет, кто фактически «владеет» машиной, на основе частоты входов в систему, вычисляет точные рабочие часы для выявления операций в нерабочее время (Night Owl) и бесшовно передаёт эти данные в BloodHound CE (v5+).
LogHound зависит от Python 3 и Impacket. Настоятельно рекомендуется использовать виртуальное окружение.
# 1. Clone the repository
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (Optional but Recommended) Create a Python virtual environment
python3 -m venv venv
source venv/bin/activate
# 3. Install the required dependencies
pip install -r requirements.txt
Интерфейс командной строки LogHound работает аналогично стандартным модулям Impacket (например, secretsdump.py), требуя указания явного режима работы (--local или --remote).
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: анализировать файл .evtx, уже находящийся на вашей локальной машине.--remote: загрузить Security.evtx с удалённой целевой системы с использованием предоставленных учётных данных.-hashes LMHASH:NTHASH: использовать NTLM-хэши для аутентификации Pass-The-Hash.-k: использовать аутентификацию Kerberos. Получает учётные данные из файла .ccache, указанного переменной окружения KRB5CCNAME.-aesKey hex_key: использовать конкретный AES-ключ (128 или 256 бит) для Kerberos.-no-pass: не запрашивать пароль в интерактивном режиме.-keytab KEYTAB_FILE: использовать файл keytab Kerberos для аутентификации.-dc-ip IP: явный IP-адрес контроллера домена.-target-ip IP: явный IP-адрес целевой машины (позволяет обойти ошибки разрешения имён NetBIOS).-format {json,csv,md,all}: определяет текстовый формат вывода. Примечание: интерактивный HTML-отчёт и JSON-файлы BloodHound генерируются всегда. По умолчанию: json.-outputfile BASENAME: префикс имени для создаваемых отчётов в подкаталогах.-threads N: количество параллельных потоков парсера (по умолчанию: 4).-chunk-size N: количество записей журнала на один блок анализа. Меньшие значения снижают нагрузку на ОЗУ; большие значения немного ускоряют анализ (по умолчанию: 1000).
LogHound использует высокодецентрализованный, эффективный по памяти аналитический конвейер:
core/collector.py): подключается к цели через SMB, затем выполняет wevtutil epl Security через WMI для экспорта журнала безопасности во временный файл на целевой системе. Экспортированный файл затем загружается через SMB в loot/YYYY-MM-DD_<target>_Security.evtx для предотвращения перезаписи.core/parser.py): многопоточный блочный парсер обрабатывает сырой бинарный файл .evtx и непрерывно записывает разобранные события во временный буфер JSON Line (jsonl/loghound_dump.jsonl). При прерывании он может возобновить работу с точных контрольных точек.core/analyzer.py): построчно проходит по потоку .jsonl, сохраняя низкое потребление ОЗУ. Он вычисляет промежуточные словари состояния (отслеживание сеансов, оценка владения, логическое отслеживание).core/exporter.py и core/exporter_bloodhound.py): динамически выгружает состояние анализа из ОЗУ в итоговые форматы экспорта html/ и .За подробной информацией об архитектурной логике и ранее устранённых ошибках импорта обращайтесь к внутренней документации: ARCHITECTURE.md.
LogHound изначально фильтрует шесть явных идентификаторов событий безопасности Windows: 4624, 4634, 4648, 4768, 4769, 4776.
Используя эти события, LogHound расширяет BloodHound CE, привязывая следующие пользовательские атрибуты напрямую к генерируемым узлам User через блок Properties:
ObjectIdentifier идеально согласуются с существующими данными SharpHound. Пользователи домена AD получают свой собственный Windows SID (S-1-5-21-...). Чтобы предотвратить разрыв узлов BloodHound, локальные учётные записи машин корректно сохраняют резервный стандарт USER@HOSTNAME.computers.json использует точную нативную структуру данных SessionAPIResult для построения реальных рёбер «HasSession» между машинами и пользователями.Аналитический движок вычисляет рабочие операционные часы на основе отслеживаемых событий входа/выхода, исключая аномалии (например, сеансы, длящиеся несколько дней).
Анализ определяет явного владельца любой рабочей станции или IP-адреса, подсчитывая наиболее частые интерактивные входы. Это привязывает основного Owner к исходному узлу вместе с массивом вторичных Other Users.
Данное программное обеспечение предоставляется исключительно в образовательных целях, для авторизованного тестирования на проникновение и криминалистических расследований. Не используйте его против сетей, для работы с которыми у вас нет явного разрешения.
Этот проект лицензирован в соответствии с Apache License 2.0 — см. файл LICENSE.
json/| Property Name | Type | Metric Description |
|---|
loghound_avg_start_time | String | Вычисляет средний первый вход (00:00 HH:MM), зарегистрированный во всех наблюдаемых валидных днях для пользователя. |
loghound_avg_end_time | String | Вычисляет среднюю последнюю активность (выход из системы или последнее касание), зарегистрированную за день. |
loghound_active_days | Integer | Общее количество подтверждённых дней (с хотя бы одним полноценным сеансом), использованных для вычисления средних временных массивов. |
loghound_outside_hours | Boolean | True/False. Специально идентифицирует «сову» (Night Owl). Принимает значение True, если вычисленный интервал активности пользователя от начала до конца пересекается с ночным диапазоном 22:00–06:00. |
Avg Hours per Day | Float | Внутренне вычисляется как точная разница во времени между average start time и average end time пользователя. (Отображается в текстовых/HTML-отчётах). |