RNB-Team/LogHound

GitHub: RNB-Team/LogHound

LogHound 是一款后渗透 EVTX 日志分析器,用于解析 Windows 安全事件日志并将身份验证会话数据映射到 BloodHound CE 中以辅助横向移动分析。

Stars: 9 | Forks: 1

# LogHound 587193175-819ba1ad-8551-4b58-bb54-56ce1f410187 **用于 BloodHound 映射的后渗透 EVTX 分析器** *LogHound 收集并解析 Windows 安全事件日志(.evtx),提取身份验证事件、会话数据和登录元数据,以便导入 BloodHound 并获取更深入的对抗性遥测数据。*
## 原理与概述 LogHound 的构建是为了解决红队和网络渗透测试人员面临的一个特定问题:如何在不破坏操作安全性的前提下,高效跟踪横向移动目标、破译活跃用户会话,并确定明确的机器所有权。 Active Directory 域控制器上的事件日志文件(`Security.evtx`)可能高达数 GB。传统的加载技术通常会耗尽系统内存或导致崩溃,从而留下明显的痕迹。LogHound 通过在强大的 Impacket 框架之上利用基于 chunk 的流式处理范式来解决这一问题。 它映射网络结构,根据登录频率确定实际上是谁“拥有”某台机器,计算出准确的工作时间以识别非工作时间(夜猫子)的操作,并无缝地将这些情报输入到 BloodHound CE (v5+) 中。 ## 安装步骤 LogHound 依赖于 Python 3 和 Impacket。强烈建议使用虚拟环境。 ``` # 1. Clone 仓库 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 ``` ## CLI 参数说明 LogHound 的 CLI 与标准的 Impacket 模块(如 `secretsdump.py`)交互方式完全相同,要求您指定一个明确的操作模式(`--local` 或 `--remote`)。 ``` python loghound.py [[domain/]username[:password]@] [options] ``` ### 操作模式(必选) - `--local EVTX_FILE`:解析已经位于您本地机器上的 `.evtx` 文件。 - `--remote`:使用提供的凭据从远程目标系统下拉取 `Security.evtx`。 ### 身份验证与连接 - `-hashes LMHASH:NTHASH`:使用 NTLM 哈希进行 Pass-The-Hash 认证。 - `-k`:使用 Kerberos 认证。从由 `KRB5CCNAME` 环境变量指定的 `.ccache` 文件中提取凭据。 - `-aesKey hex_key`:为 Kerberos 使用特定的 AES 密钥(128 或 256 位)。 - `-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`:每个解析 chunk 的日志记录数。较低的值可减少 RAM 开销;较高的值解析速度略快(默认值:1000)。 ## 示例 - Bloodhound edges。 Screenshot 2026-04-08 195058 - HTML 报告。 Screenshot 2026-04-08 193914 ## 架构与数据流 LogHound 采用了一种高度解耦且节省内存的分析流水线: 1. **收集 (`core/collector.py`)**:通过 SMB 连接到目标,然后通过 WMI 执行 `wevtutil epl Security` 将安全事件日志导出到目标上的临时文件中。随后通过 SMB 将导出的文件下载到 `loot/YYYY-MM-DD__Security.evtx` 中,以避免覆盖。 2. **解析 (`core/parser.py`)**:多线程 chunk 解析器对原始 `.evtx` 二进制文件进行流式处理,并持续将解析后的事件发送到临时 JSON Line 缓冲区(`jsonl/loghound_dump.jsonl`)中。如果中断,它可以从精确的检查点恢复。 3. **分析 (`core/analyzer.py`)**:逐行遍历 `.jsonl` 流以保持较低的 RAM 占用。它计算中间状态字典(会话跟踪、所有权评分、逻辑跟踪)。 4. **导出 (`core/exporter.py` & `core/exporter_bloodhound.py`)**:将分析阶段的 RAM 状态动态刷入最终的 `html/` 和 `json/` 导出格式中。 *有关深入的架构逻辑和已解决的导入错误,请参阅 [ARCHITECTURE.md](ARCHITECTURE.md) 中的内部文档。* ## 节点、属性与指标说明 LogHound 原生过滤六个明确的 Windows 安全事件 ID:**4624、4634、4648、4768、4769、4776**。 利用这些事件,LogHound 通过 `Properties` 块将以下自定义属性直接绑定到生成的 **User** 节点,从而增强 BloodHound CE: ### BloodHound CE 合并架构 - **ObjectIdentifier SIDs**:LogHound 确保 `ObjectIdentifier` 映射与现有的 SharpHound 摄取完全一致。AD 域用户接收其原生的 Windows SID(`S-1-5-21-...`)。为了防止 BloodHound 节点撕裂,本地机器账户准确地维护了回退标准 `USER@HOSTNAME`。 - **计算机会话**:生成的 `computers.json` 利用精确的原生 `SessionAPIResult` 数据结构,在机器和用户之间绘制真实的“HasSession”边。 ### 自定义 LogHound 用户指标 分析引擎根据跟踪到的登录/注销事件计算工作时间运作小时数,并忽略异常情况(如跨越多天的会话)。 | 属性名称 | 类型 | 指标描述 | |---|---|---| | `loghound_avg_start_time` | String | 计算为该用户在所有观察到的有效天数中记录的平均**首次登录**时间(00:00 HH:MM)。 | | `loghound_avg_end_time` | String | 计算为每天记录的平均**最后活动**(注销或最后触碰)时间。 | | `loghound_active_days` | Integer | 用于计算平均时间数组的有效天数(至少包含一次正常会话)的总计数。 | | `loghound_outside_hours` | Boolean | True/False。专门用于识别**夜猫子**。如果用户计算出的活跃开始到结束时间窗口与 **22:00 到 06:00** 的夜间范围重叠,则评估为 `True`。 | | `Avg Hours per Day` | Float | 内部计算为用户的 `average start time` 和 `average end time` 之间的确切时间差。(显示在文本/HTML 报告中)。 | ### 机器所有权指标 分析通过计算最频繁的交互式登录来确定任何工作站或 IP 地址的明确所有者。这会将主要的 `Owner` 以及次要 `Other Users` 数组绑定到原始节点。 ## 免责声明 本软件仅用于教育、授权的渗透测试和取证调查目的。请勿在您未获得明确授权操作的网络中使用此工具。 ## 许可证 本项目基于 Apache License 2.0 授权 - 详见 LICENSE 文件。 ## 致谢 - 由 https://github.com/Nelkmen 创建 - 灵感来源于 https://github.com/specterops/bloodhound, https://github.com/fortra/impacket
标签:BloodHound, PE 加载器, 内网横向移动分析, 逆向工具