cgosec/Blauhaunt

GitHub: cgosec/Blauhaunt

一款无后端的登录事件可视化分析工具,通过交互式图谱、时间线和热力图帮助安全团队追踪横向移动并关联攻击路径。

Stars: 182 | Forks: 11

**基本工作流程:设置过滤器 -> 点击 Apply Filters -> 点击 Render** # Blauhaunt 一个用于过滤和可视化登录事件的工具集。旨在帮助回答安全事件和威胁搜寻中的“Cotton Eye Joe”问题(你从哪里来,要到哪里去)。 ***该工具专为经验丰富的 DFIR 专家设计。如果没有威胁搜寻经验,您可能无法从中获得太多用处*** ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4c42402d1f084210.png) ## 目录 - [入门指南](#get-started) - [集成到调查中](#integration-in-investigation) - [架构](#architekture) - [PowerShell 脚本](#powershell-script) - [Velociraptor Artifact](#velociraptor-artifact) - [Defender 365 KUSTO 查询](#defender) - [致谢](#acknowledgements) ### 交互式用户图谱 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/bc31eb05b1084212.png) ### 用户活动热力图 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/60b4672b4c084214.png) ### 时间线 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/76658f6300084216.png) ## 入门指南 运行 Blauhaunt 非常简单: 打开 https://cgosec.github.io/Blauhaunt/app/,因为没有后端,数据不会离开您的本地系统。*(集成了第三方库,我不对其通信行为承担任何责任。导入项位于 index.html 文件顶部)* 运行 cmd、bash 或任何您喜欢的工具... 然后: ``` git clone https://github.com/cgosec/Blauhaunt cd Blauhaunt/app python -m http.server ``` 现在您可以在浏览器中导航到 http://localhost:8000/ 并开始用 Blauhaunt 追踪坏人。 目录 test_data 中有一些随机测试数据可供入门。但这只是随机生成的,不适合用于真正的调查。 ## 集成到 Velociraptor 您可以使用 Velociraptors 的反向代理功能直接在您的实例中托管 Blauhaunt。Blauhaunt 具备 Velo 感知能力。如果这样做,Blauhaunt 将自动从 Velociraptor 获取数据,您无需上传数据。 您需要使用 Velo Artifact 启动一个 Hunt(狩猎)。您也可以使用 Monitoring Artifact 来从 Velo 获取实时数据。 ### Velo 设置: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c9e676e418084217.png) 参见:[Velo 文档](https://docs.velociraptor.app/docs/deployment/references/#GUI.reverse_proxy) *提示* 我在 Windows 上托管 GUI 时没能成功运行。但您也可以在那里使用指向 https 服务器上托管实例的 URI **更新** 由于您现在可以为 Hunt 设置标签,您需要为您的 Hunt 添加“Blauhaunt”标签以便处理。否则 Blauhaunt 将无法找到它! 这基本上就是您需要做的所有事情…… :) 非常感谢 Mike Cohen,他帮助我完成了 CSRF-Tokens 的工作流程以及 Velo 未公开的 REST-API。 ### 上传数据 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/cf0516a2cc084219.png) 点击“Upload Data”(很惊讶是吧 :-P) ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/1de6e991c7084221.png) 在此上传 velo artifact 的 json 导出文件或 powershell 脚本的结果。 *请勿在此上传 client_info.json 或任何其他内容!* ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0d87db42c3084223.png) 这是可选的,仅用于获取系统标签及其操作系统信息。 在此上传您的 client_info.json 提取文件。这只是 Velociraptor clients() 函数的导出。 只需使用此查询: ``` SELECT * FROM clients() ``` 并导出 json ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4fb5406fe6084225.png) 这也是可选的。 上传映射文件以便将 IP 地址解析为主机名。您需要一个包含主机名列和 IP 地址列的文件。 如果一个系统有多个 IP 地址,您可以将它们放在这一列中,用任意符号分隔,例如“/”。 示例: | Hostname | IP-Addresses | MaybeSomeNotNeededStuff | | -------- | ------- | ------- | | System_A | 10.10.10.100 | bonjour | | System_B | 10.10.10.100 / 10.10.20.100 | hello | | System_C | 10.10.10.100 | hola | ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5e80e37ac6084227.png) 选择合适的文件后,指定分隔符(如果未指定,则默认为逗号)。然后点击 Load Map。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5662349145084229.png) 1. 选择主机名所在的列名 2. 可选:指定是否有任何您想从解析中排除的条目,例如在主机名 IP 映射中包含“UNKNOWN”的行。 3. 选择 IP 地址所在的列名 4. 指定该行中多个 IP 地址的分隔符 一切正确后点击 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0d3a9216bd084231.png) 完成后点击 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/9e2c310c4b084232.png) ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d0ee386642084234.png) 如果一切都按预期处理,您现在应该可以看到节点和边的总数 ### 过滤 点击 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a9dfe8cd07084236.png) 打开侧边栏。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/880283f010084237.png) 过滤器侧边栏出现 **大多数过滤器都有工具提示,所以我不会详细解释每个过滤器** ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a3be46388f084239.png) 过滤活动的时间跨度。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/fda5bbb275084240.png) 每日时间过滤器指定我们感兴趣的事件发生的时间。如果夜间用户登录在您的环境中不常见,这很有用。这与日期无关——这意味着在您的时间跨度内,只有在该小时时间段内发生的事件才会包含在集合中。(也适用于夜间,如示例图片所示) ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8098e424ef084242.png) **高亮**:您可以通过按住 CTRL 并单击来永久高亮边。这也适用于临时高亮处于活动状态的每个元素——只需按住 CTRL 并单击该元素即可永久高亮边。(元素例如是左侧的时间线;鼠标悬停时的统计信息;单击目标主机时) **ToSelf**:默认情况下,源和目标是同一节点的事件不会显示。如果您想显示它们,请单击激活。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a066497e1b084244.png) 过滤 EventID 是减少数据的好主意。选择全部或不选没有区别。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c39993d7cd084245.png) Logon Types 仅与 4624 或 4625 事件相关。我假设您在使用此工具时已经了解它们。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c743c5fa6c084247.png) 仅当上传了客户端信息时,才可按标签过滤。这些是您在 Velociraptor 中为系统指定的标签。如果选择全部或不选,则没有影响。 这些仅适用于源系统,不适用于目标系统。 ### 源:系统或用户 通常,为了识别初始访问,我更关注系统 -> 系统的活动。由于在很多情况下您可能希望关注用户行为,因此您可以选择您的源应该是什么:系统或用户。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/13028eb971084248.png) ### 渲染图谱、时间线或热力图 设置好过滤器后,您需要按 render 来显示结果。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/438960927c084250.png) #### 图谱 默认图谱根据系统的活动中位数时间(Y 轴)及其连接总数(X 轴)计算系统的位置。 **Y 轴**:计算的活动时间,早期在顶部,晚期在底部 **X 轴**:系统越居中,该系统作为源或目标的连接就越多。从左到右是随机分布的。(越靠外,系统的活动越少) **大小**:节点的大小表示其 outgoing 活动 每次渲染前都会计算图谱。位置和大小始终根据设置的过滤器相对计算。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e543c9676a084251.png) 单击节点时,您可以获得更多系统信息。(有些需要 clients() 输出,如 OS 或 Tags) IP 可能不止一个。加载数据时,其中包含主机名和 IP 的每个事件都会创建一个显示在此处的列表。(多个条目可能是因为 NAT 设备或多个网络适配器/IP 更改) ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/77a9a0a722084253.png) 单击边时,您将获得有关连接的更多信息。您可以打开时间戳列表,显示该事件发生的时间。 #### 时间线 时间线就是时间线…… #### 热力图 热力图为您提供用户日常行为的快速概览。您可以单击某一天快速切换到当天的图谱和用户连接。 颜色指示器不是按用户计算的,而是按总数计算的。它会考虑您的过滤器。 如果您想从一个视图切换到另一个:选择您需要的视图,然后单击 render。 “使用时间线时要小心!很少的节点和边仍然可能有很长的时间线!*”在渲染时间线之前检查统计信息 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e3786901e6084255.png) 是个好主意。 ### 图谱样式 您可以在一些变体进行选择…… ### 标签可视化 您可以为标签选择一种颜色。指定的数字表示当多个标签匹配时的优先级。数字最大的优先。 ### 导出 您可以导出: - 时间线为 CSV - 图谱为 PNG / JPEG - GraphJSON(来自库 cytoscape) ### 统计 统计信息为您在开始调查时提供了很好的指示,告诉您要过滤掉什么或以什么为切入点。 统计信息会考虑您的过滤器。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3195cbc25c084256.png) 系统统计: - To Systems = 连接到的系统数量,后跟(连接到系统的总数) - From Systems = 连接到此系统的系统数量,后跟(连接到此系统的连接总数) - Users out = 被观察到从此系统连接到其他系统的用户数量 - Users in = 被观察到连接到此系统的用户数量 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/116ddb886a084258.png) 用户统计: - To Systems = 用户连接到的系统数量,后跟(连接总数) ## 集成到调查中 我建议将 Blauhaunt 与 [Velociraptor](https://github.com/Velocidex/velociraptor) 结合使用,因为这是从多个系统获取数据的最快方式。Blauhaunt 的事件数据和客户端信息导入格式是可以从 Velo 导出的格式。 如果您更喜欢使用例如 [KAPE](https://www.kroll.com/en/insights/publications/cyber/kroll-artifact-parser-extractor-kape) 取证数据,blauhaunt_script.ps1 效果很好。 如果您有多个系统需要识别下一个 pivot 系统或可疑用户,Blauhaunt 才真正有用。Blauhaunt 独立版不会神奇地将您带到受损的系统和用户。但是,如果您有数百个系统需要检查,它确实可以加快您的工作进度。 ### 示例工作流程 #### 已知的受损系统 (例如来自 Velo hunt)-> 在 Blauhaunt 中检查哪些用户连接到此系统 -> 可疑用户 -> 可疑系统 -> 更多可疑用户 -> 故事继续。您很有机会识别出哪些系统进行深入取证可以加快您的搜寻速度。 例如,如果您在该系统上识别出受损用户,您可以返回 Blauhaunt 并重复该过程。 #### 不知道从哪里开始 借助多种过滤器,Blauhaunt 为您提供了统计和视觉上的可能性来识别异常连接。例如,您可以检查夜间发生的用户活动。或者只是查看来自攻击者正在枚举 AD-Infrastructure 的系统的登录风暴。 #### 幸运一击 如果您真的很幸运,并且攻击者动静很大 + 网络管理扎实,Blauhaunt 可能会为您提供一个光学攻击图,其中受损系统的时间线沿 y 轴排列在中心。 ## 架构 Blauhaunt 设计为完全在没有后端系统的情况下运行。 我建议只需在本地系统上从 index.html 所在目录的 shell 中启动一个 python http server,使用以下命令: ``` python -m http.server ``` 如果您使用的是 linux,可能需要输入 python3 而不是 python —— 但如果您使用此工具,您应该具备足够的技术技能自己弄清楚 ;) *总有一天我会用 Django 创建一个带有 API 的后端,以获取实时数据进行显示,以便更好地进行威胁搜寻* ### 默认布局 图谱的布局是根据设置的过滤器计算的。 节点的图标大小是根据其在设置的过滤器内的活动计算的。 节点的 x 轴位置是根据其 outgoing 连接计算的。具有许多 outgoing 连接的节点通常位于图谱的中心。outgoing 连接较少的节点位于图谱的左侧和右侧。 y 轴是根据节点活动时间的第一个四分位数计算的。 为了避免太多节点聚集在同一点,当同一点上有太多节点时,会有一些移动。 其他布局是 cytoscape 领域的默认设置,也可以选择。 ### 显示 描述即将推出 ### 通用数据模式 有三种类型的数据——只有事件数据是强制性的 #### 事件数据 这是 Blauhaunt 处理所需的事件数据输入模式: ``` { "LogonTimes":[ "2023-07-28T20:30:19Z", "2023-07-27T21:12:12Z", "2023-07-27T21:10:49Z" ], "UserName":"Dumdidum", "SID":"-", "Destination":"Desti-LAPTOP", "Description":"using explicit credentials", "Distinction": "SomeCustomFieldToDistionctEdgesAndFilterFor" "EventID":4648, "LogonType":"-", "SourceIP":"-", "SourceHostname":"Sourci-LAPTOP", "LogonCount":3 } ``` ***为了正确处理文件,每个以 { 开始并以 } 结束的数据集必须位于新行中*** #### 客户端信息 ``` { "os_info": { "hostname": "Desti-LAPTOP" "release": "Windows 10" }, "labels": [ "Touched", "C2", "CredDumped" ] } ``` ***为了正确处理文件,每个以 { 开始并以 } 结束的数据集必须位于新行中*** #### 主机 IP 映射 可以是任何 CSV 文件。可以指定分隔符,并且可以选择主机名和 IP 的列 ## PowerShell 脚本(已弃用——请使用 quick velo 代替) blauhaunt_script.ps1 如果您遇到执行策略的任何问题,最简单的方法是生成一个具有绕过执行策略的 powershell,如下所示: ``` PowerShell.exe -ExecutionPolicy Bypass powershell ``` 要获取有关用法和参数的信息,请使用 Get-Help ``` Get-Help blauhaunt_script.ps1 -Detailed ``` ### 用法 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d3bb524044084259.png) 根据大小、StartDate 和 EndDate,这可能需要相当长的时间,所以请耐心等待 ## Velociraptor Artifact 这加速了大规模相关数据的收集。 我建议创建一个 notebook(模板可能很快也会在这里提供),其中列出所有结果。 您可以直接获取此 artifact 的 json 导出并将其导入 Blauhaunt client_info 导入也设计为直接使用 Velociraptor 的 client_info。您可以直接导出 json 文件并将其上传到 Blauhaunt。 ### 用法 如果您想使用 velociraptor 解析从系统离线收集的事件日志,您可以这样做: ``` .\velociraptor*.exe artifacts --definitions Blauhaunt\parser\velociraptor\ collect --format=jsonl Custom.Windows.EventLogs.Blauhaunt --args Security='C:\my\awesome\storage\path\Security.evtx' --args System='C:\my\awesome\storage\path\System.evtx' --args LocalSessionManager='C:\my\awesome\storage\path\Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx' --args RemoteConnectionManager='C:\my\awesome\storage\path\Microsoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx' --args RDPClientOperational='C:\my\awesome\storage\path\Microsoft-Windows-TerminalServices-RDPClient%4Operational.evtx' ``` 如果您不喜欢输入长路径,请随意使用提供的快速脚本: ``` .\quick_velo.ps1 -EventLogDirectory C:\my\awesome\storage\path ``` ## Defender 您可以使用此 Hunting Query 将 Defender365 中的数据导入 Blauhaunt: [Defender 365 查询](https://github.com/cgosec/Blauhaunt/blob/main/parser/Defender365_Query.md) 运行查询,导出 csv 并直接将其加载到 Blauhaunt 中... ## 致谢 - [SEC Consult](https://sec-consult.com/de/) 这项工作很大程度上是受我在 SEC Defence 团队工作的激励 - [Velociraptor](https://github.com/Velocidex/velociraptor/) 它是游戏规则改变者,使其能够大规模收集要显示的数据(已在 > 8000 个系统上测试!) - [Cytoscape.js](https://js.cytoscape.org/) 是使交互式图谱可视化成为可能的库 - [LogonTracer](https://github.com/JPCERTCC/LogonTracer) 启发了该项目的布局和部分技术栈 - [CyberChef](https://gchq.github.io/CyberChef/) 启发了创建一个无需后端系统、完全基于浏览器运行的 Blauhaunt 版本的想法 (图标故意做得很烂——这就是我在搜寻时的真实样子……只是面部表情,不是大手臂 :-P )
标签:AI合规, Blauhaunt, Defender 365, IPv6, Kusto, Mutation, PE 加载器, PowerShell, Velociraptor, 关系图谱, 前端工具, 可视化, 基线检查, 多模态安全, 安全事件响应, 安全运营, 恶意活动分析, 扫描框架, 攻击溯源, 数字取证, 数据可视化, 日志过滤, 横向移动检测, 热度图, 用户态调试, 用户行为分析, 登录事件, 自动化脚本, 自定义脚本, 逆向工具