用于 BloodHound 映射的后利用 EVTX 分析器
LogHound 收集并解析 Windows 安全事件日志(.evtx),提取身份验证事件、会话数据和登录元数据,以便导入 BloodHound 并提供更深入的对抗性遥测信息。
LogHound 的构建是为了解决红队和网络渗透测试人员的一个特定问题:如何在不牺牲操作安全性的前提下,高效追踪横向移动目标、识别活跃用户会话并确定机器的最终归属。
Active Directory 域控制器上的安全事件日志文件(Security.evtx)可能达到数 GB。传统的加载技术常常会耗尽系统内存或导致崩溃,并留下明显的痕迹。LogHound 通过采用基于块的流式解析范式,并依托强大的 Impacket 框架,解决了这个问题。
它可以映射网络结构,根据登录频率确定机器的实际“所有者”,计算精确的工作时间以识别非工作时间(夜猫子)操作,并将这些情报无缝地导入 BloodHound CE(v5+)中。
LogHound 依赖于 Python 3 和 Impacket。强烈建议使用虚拟环境。
# 1. 克隆仓库
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (可选但推荐)创建 Python 虚拟环境
python3 -m venv venv
source venv/bin/activate
# 3. 安装所需的依赖
pip install -r requirements.txt
LogHound 的 CLI 与标准的 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 身份验证。通过 KRB5CCNAME 环境变量指定的 .ccache 文件获取凭据。-aesKey hex_key:使用特定的 AES 密钥(128 或 256 位)进行 Kerberos 身份验证。-no-pass:不交互式提示输入密码。-keytab KEYTAB_FILE:使用 Kerberos keytab 文件进行身份验证。-dc-ip IP:显式指定域控制器的 IP 地址。-target-ip IP:显式指定目标机器的 IP 地址(绕过 NetBIOS 名称解析失败)。-format {json,csv,md,all}:指定文本输出格式。注意:交互式 HTML 报告和 BloodHound JSON 文件将始终生成。默认值为 json。-outputfile BASENAME:生成的输出报告在子目录中的名称前缀。-threads N:并行运行的解析线程数量(默认值:4)。-chunk-size N:每个解析块包含的日志记录数量。较低的值可减少 RAM 开销,较高的值解析速度稍快(默认值:1000)。
LogHound 采用高度解耦、内存高效的分析流水线:
core/collector.py):通过 SMB 连接到目标,然后通过 WMI 执行 wevtutil epl Security 将安全事件日志导出到目标上的临时文件。导出的文件随后通过 SMB 下载到 loot/YYYY-MM-DD_<target>_Security.evtx,以避免覆盖。core/parser.py):一个多线程的块解析器对原始 .evtx 二进制文件进行流式处理,并持续将解析出的事件发射到临时 JSON Lines 缓冲区(jsonl/loghound_dump.jsonl)。如果中断,它可以从精确的检查点恢复。core/analyzer.py):逐行迭代 .jsonl 流,以保持较低的 RAM 占用。它计算中间状态字典(会话跟踪、所有权评分、逻辑跟踪)。core/exporter.py 和 core/exporter_bloodhound.py):将分析的 RAM 状态动态刷新为最终的 html/ 和 json/ 导出格式。有关深层架构逻辑以及之前解决的导入错误,请参考内部文档 ARCHITECTURE.md。
LogHound 原生过滤六种特定的 Windows 安全事件 ID:4624、4634、4648、4768、4769、4776。
利用这些事件,LogHound 通过 Properties 块将以下自定义属性直接绑定到生成的 User 节点上,从而增强 BloodHound CE:
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 文件。
| 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 | 真/假。专门用于识别夜猫子。如果用户计算出的活动开始到结束时间窗口与 22:00 至 06:00 的夜间范围重叠,则评估为 True。 |
Avg Hours per Day | Float | 内部计算为用户 average start time 与 average end time 之间的精确时间差。(在文本/HTML 报告中显示)。 |