cgosec/Blauhaunt
GitHub: cgosec/Blauhaunt
一款无后端的登录事件可视化分析工具,通过交互式图谱、时间线和热力图帮助安全团队追踪横向移动并关联攻击路径。
Stars: 182 | Forks: 11
**基本工作流程:设置过滤器 -> 点击 Apply Filters -> 点击 Render**
# Blauhaunt
一个用于过滤和可视化登录事件的工具集。旨在帮助回答安全事件和威胁搜寻中的“Cotton Eye Joe”问题(你从哪里来,要到哪里去)。
***该工具专为经验丰富的 DFIR 专家设计。如果没有威胁搜寻经验,您可能无法从中获得太多用处***

## 目录
- [入门指南](#get-started)
- [集成到调查中](#integration-in-investigation)
- [架构](#architekture)
- [PowerShell 脚本](#powershell-script)
- [Velociraptor Artifact](#velociraptor-artifact)
- [Defender 365 KUSTO 查询](#defender)
- [致谢](#acknowledgements)
### 交互式用户图谱

### 用户活动热力图

### 时间线

## 入门指南
运行 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 设置:

参见:[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。
### 上传数据

点击“Upload Data”(很惊讶是吧 :-P)

在此上传 velo artifact 的 json 导出文件或 powershell 脚本的结果。
*请勿在此上传 client_info.json 或任何其他内容!*

这是可选的,仅用于获取系统标签及其操作系统信息。
在此上传您的 client_info.json 提取文件。这只是 Velociraptor clients() 函数的导出。
只需使用此查询:
```
SELECT * FROM clients()
```
并导出 json

这也是可选的。
上传映射文件以便将 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 |

选择合适的文件后,指定分隔符(如果未指定,则默认为逗号)。然后点击 Load Map。

1. 选择主机名所在的列名
2. 可选:指定是否有任何您想从解析中排除的条目,例如在主机名 IP 映射中包含“UNKNOWN”的行。
3. 选择 IP 地址所在的列名
4. 指定该行中多个 IP 地址的分隔符
一切正确后点击 
完成后点击 

如果一切都按预期处理,您现在应该可以看到节点和边的总数
### 过滤
点击  打开侧边栏。

过滤器侧边栏出现
**大多数过滤器都有工具提示,所以我不会详细解释每个过滤器**

过滤活动的时间跨度。

每日时间过滤器指定我们感兴趣的事件发生的时间。如果夜间用户登录在您的环境中不常见,这很有用。这与日期无关——这意味着在您的时间跨度内,只有在该小时时间段内发生的事件才会包含在集合中。(也适用于夜间,如示例图片所示)

**高亮**:您可以通过按住 CTRL 并单击来永久高亮边。这也适用于临时高亮处于活动状态的每个元素——只需按住 CTRL 并单击该元素即可永久高亮边。(元素例如是左侧的时间线;鼠标悬停时的统计信息;单击目标主机时)
**ToSelf**:默认情况下,源和目标是同一节点的事件不会显示。如果您想显示它们,请单击激活。

过滤 EventID 是减少数据的好主意。选择全部或不选没有区别。

Logon Types 仅与 4624 或 4625 事件相关。我假设您在使用此工具时已经了解它们。

仅当上传了客户端信息时,才可按标签过滤。这些是您在 Velociraptor 中为系统指定的标签。如果选择全部或不选,则没有影响。
这些仅适用于源系统,不适用于目标系统。
### 源:系统或用户
通常,为了识别初始访问,我更关注系统 -> 系统的活动。由于在很多情况下您可能希望关注用户行为,因此您可以选择您的源应该是什么:系统或用户。

### 渲染图谱、时间线或热力图
设置好过滤器后,您需要按 render 来显示结果。

#### 图谱
默认图谱根据系统的活动中位数时间(Y 轴)及其连接总数(X 轴)计算系统的位置。
**Y 轴**:计算的活动时间,早期在顶部,晚期在底部
**X 轴**:系统越居中,该系统作为源或目标的连接就越多。从左到右是随机分布的。(越靠外,系统的活动越少)
**大小**:节点的大小表示其 outgoing 活动
每次渲染前都会计算图谱。位置和大小始终根据设置的过滤器相对计算。

单击节点时,您可以获得更多系统信息。(有些需要 clients() 输出,如 OS 或 Tags)
IP 可能不止一个。加载数据时,其中包含主机名和 IP 的每个事件都会创建一个显示在此处的列表。(多个条目可能是因为 NAT 设备或多个网络适配器/IP 更改)

单击边时,您将获得有关连接的更多信息。您可以打开时间戳列表,显示该事件发生的时间。
#### 时间线
时间线就是时间线……
#### 热力图
热力图为您提供用户日常行为的快速概览。您可以单击某一天快速切换到当天的图谱和用户连接。
颜色指示器不是按用户计算的,而是按总数计算的。它会考虑您的过滤器。
如果您想从一个视图切换到另一个:选择您需要的视图,然后单击 render。
“使用时间线时要小心!很少的节点和边仍然可能有很长的时间线!*”在渲染时间线之前检查统计信息  是个好主意。
### 图谱样式
您可以在一些变体进行选择……
### 标签可视化
您可以为标签选择一种颜色。指定的数字表示当多个标签匹配时的优先级。数字最大的优先。
### 导出
您可以导出:
- 时间线为 CSV
- 图谱为 PNG / JPEG
- GraphJSON(来自库 cytoscape)
### 统计
统计信息为您在开始调查时提供了很好的指示,告诉您要过滤掉什么或以什么为切入点。
统计信息会考虑您的过滤器。

系统统计:
- To Systems = 连接到的系统数量,后跟(连接到系统的总数)
- From Systems = 连接到此系统的系统数量,后跟(连接到此系统的连接总数)
- Users out = 被观察到从此系统连接到其他系统的用户数量
- Users in = 被观察到连接到此系统的用户数量

用户统计:
- 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
```
### 用法

根据大小、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, 关系图谱, 前端工具, 可视化, 基线检查, 多模态安全, 安全事件响应, 安全运营, 恶意活动分析, 扫描框架, 攻击溯源, 数字取证, 数据可视化, 日志过滤, 横向移动检测, 热度图, 用户态调试, 用户行为分析, 登录事件, 自动化脚本, 自定义脚本, 逆向工具