InsiyahBhatia/enterprise-siem-lab
GitHub: InsiyahBhatia/enterprise-siem-lab
基于 Splunk Enterprise 的企业级 SIEM 实验项目,实现 Windows 安全日志集中采集、威胁狩猎查询和安全可视化仪表板搭建。
Stars: 2 | Forks: 0
# 使用 Splunk 的 Windows 事件监控与威胁狩猎仪表板
## 项目概述
本项目演示了部署 Splunk Enterprise 和 Splunk Universal Forwarder 以实现集中式 Windows 日志监控。从 Windows Server 收集的 Windows 安全事件日志和 Sysmon 日志被转发至 Splunk,用于安全监控、日志分析、威胁狩猎和仪表板创建。
本项目重点关注使用 Search Processing Language (SPL) 监控身份验证活动、权限分配、进程执行事件以及整体的 Windows 安全事件。
# 环境设置
### 使用的组件
* Splunk Enterprise 9.3
* Splunk Universal Forwarder
* Windows Server
* Ubuntu Server (Splunk Indexer)
* Sysmon
* VirtualBox
### 架构
```
Windows Server
│
│ Splunk Universal Forwarder
▼
Ubuntu Splunk Enterprise
│
▼
Searches + Visualizations + Dashboard
```
# 重要的 Windows 事件 ID
| 事件 ID | 描述 |
| -------- | --------------------------- |
| 4624 | 成功登录 |
| 4625 | 登录失败 |
| 4672 | 分配特殊权限 |
| 4688 | 进程创建 |
| 4673 | 特权服务调用 |
| 7045 | 服务安装 |
| 7036 | 服务启动/停止 |
| 4768 | Kerberos TGT 请求 |
| 4769 | Kerberos 服务票据 |
| 4907 | 审核设置更改 |
这些是收集到的日志中最常见的事件 ID。
# 使用的 SPL 命令
## 统计
### 理论
`stats` 命令用于聚合和汇总数据。
### 示例
```
EventCode=4624 OR EventCode=4673 OR EventCode=4672
| stats count by Account_Name
```
### 结果
统计每个账户生成了多少事件。
## 表格
### 理论
仅显示选定的字段。
### 示例
```
EventCode=4624
| table _time Account_Name host
```
### 结果
显示每次成功登录的:
* 时间
* 用户名
* 主机名
## 排序
### 理论
对结果进行升序或降序排序。
### 示例
```
EventCode=4624
| stats count by Account_Name
| sort - count
```
### 结果
优先显示最活跃的用户。
## where
### 理论
在聚合后过滤结果。
### 示例
```
EventCode=4624
| stats count by Account_Name
| where count>10
```
### 结果
仅显示成功登录超过 10 次的用户。
## eval
### 理论
创建新的计算字段。
### 示例
```
EventCode=4624
| stats count by Account_Name
| eval Risk=if(count>100,"HIGH","LOW")
```
### 结果
根据登录量为用户分配风险类别。
## timechart
### 理论
用于基于时间的可视化。
### 示例
```
EventCode=4624 OR EventCode=4673
| timechart count by EventCode
```
### 结果
展示随时间变化的身份验证活动。
## 搜索
### 理论
根据关键字或字段值过滤事件。
### 示例
```
search Account_Name=Administrator
```
### 结果
显示所有与 Administrator 相关的事件。
## fields
### 理论
仅显示指定的字段。
### 示例
```
EventCode=4688
| fields host New_Process_Name
```
### 结果
显示进程执行信息。
# 威胁狩猎查询
## 成功登录
```
EventCode=4624
```
目的:
监控成功的身份验证事件。
## 登录失败
```
EventCode=4625
```
目的:
识别失败的登录尝试。
## 权限提升活动
```
EventCode=4672
```
目的:
检测获得管理员权限的账户。
## 进程创建监控
```
EventCode=4688
```
目的:
监控已执行的进程。
## 服务安装检测
```
EventCode=7045
```
目的:
检测新安装的服务。
## Administrator 活动
```
search Account_Name=Administrator
```
目的:
追踪 Administrator 操作。
## svchost.exe 监控
```
EventCode=4688
| search New_Process_Name="*svchost.exe*"
```
目的:
追踪 svchost 进程执行。
# 仪表板创建
## 面板 1 – 总事件数
### 查询
```
index=*
| stats count
```
### 可视化
单值
目的:
显示收集到的总事件数。
## 面板 2 – 成功登录尝试
### 查询
```
EventCode=4624
| stats count
```
### 可视化
单值
目的:
显示成功登录的总数。
## 面板 3 – 失败登录尝试
### 查询
```
EventCode=4625
| stats count
```
### 可视化
单值
目的:
显示失败的登录数。
## 面板 4 – 特权登录
### 查询
```
EventCode=4672
| stats count
```
### 可视化
单值
目的:
追踪管理员权限分配。
## 面板 5 – 热门事件 ID
### 查询
```
index=*
| stats count by EventCode
| sort - count
| head 10
```
### 可视化
水平条形图
目的:
显示最常见的 Windows 事件 ID。
## 面板 6 – 身份验证活动
### 查询
```
EventCode=4624 OR EventCode=4625
| timechart count by EventCode
```
### 可视化
折线图
目的:
比较随时间变化的成功与失败登录。
## 面板 7 – 用户登录分布
### 查询
```
EventCode=4624
| stats count by Account_Name
```
### 可视化
饼图
目的:
显示最活跃的用户。
## 面板 8 – 事件分布分析
### 查询
```
index=*
| stats count by EventCode
```
### 可视化
气泡图
目的:
可视化事件频率分布。
## 面板 9 – 身份验证趋势
### 查询
```
EventCode=4768 OR EventCode=4769
| timechart count by EventCode
```
### 可视化
面积图
目的:
监控 Kerberos 身份验证活动。
## 面板 10 – 进程监控
### 查询
```
EventCode=4688
| stats count by New_Process_Name
| sort - count
| head 10
```
### 可视化
水平条形图
目的:
显示执行次数最多的进程。
## 面板 11 – 用户身份验证流
### 查询
```
EventCode=4624 OR EventCode=4625 OR EventCode=4672
| eval Event=case(
EventCode=4624,"Successful Login",
EventCode=4625,"Failed Login",
EventCode=4672,"Admin Privilege Assigned"
)
| stats count as Events by Account_Name Event
```
### 可视化
桑基图
目的:
展示用户如何流入成功登录、失败登录和特权登录。
# 展示的技能
* Splunk Enterprise 管理
* Splunk Universal Forwarder 配置
* Windows 事件日志分析
* Sysmon 监控
* SPL 查询开发
* 仪表板创建
* 威胁狩猎
* 身份验证监控
* 安全事件调查
* SOC 分析师工作流
标签:Conpot, Windows安全, 运维监控