s225645819/splunk-soc-detection-dashboard

GitHub: s225645819/splunk-soc-detection-dashboard

基于 Splunk 和 BOTS v3 数据集构建的蓝队 SOC 检测仪表板项目,通过四种映射 MITRE ATT&CK 的检测规则还原完整入侵杀伤链。

Stars: 0 | Forks: 0

# SOC 检测仪表板 — Splunk + BOTS v3 这是一个蓝队检测工程项目,使用 **Boss of the SOC (BOTS) v3** 数据集在 **Splunk Enterprise** 中构建。该仪表板接收真实的安全遥测数据,并呈现出四种检测,这些检测共同重构了整个入侵过程——从初始访问到命令与控制 (C2)——并将每种检测映射到 **MITRE ATT&CK** 框架。 ## 概述 | | | |---|---| | **平台** | Splunk Enterprise (Dashboard Studio, Grid 布局) | | **数据集** | [Splunk BOTS v3](https://github.com/splunk/botsv3) — 约 208 万条预索引事件 | | **使用的数据源** | Azure AD 登录日志、Sysmon 进程创建、网络流 (TCP/IP) | | **检测** | 4 种(身份验证暴力破解、恶意 PowerShell、伪装、C2 / 出站) | | **框架** | MITRE ATT&CK | BOTS v3 中的场景以虚构公司 **Frothly** (`froth.ly`) 为中心。以下检测追踪了攻击者在 **2018 年 8 月 20 日至 21 日**夜间在网络中的行踪。 ## 作为杀伤链的攻击过程 这四个检测并非孤立存在——它们对应着同一次入侵的连续阶段。将它们结合起来阅读,就能还原整个故事: ``` 1. Initial Access → Brute force / password spraying against Azure AD 2. Execution → Malicious encoded PowerShell + masquerading binary 3. Command & Control→ Reverse shell + outbound traffic to attacker IP 4. Impact → High-volume outbound (exfil / resource hijacking) ``` 分析的关键部分:攻击者 IP **45.77.53.176** 和端口 **8088** 在进程日志(检测 2)和网络日志(检测 4)中被*独立*识别出来——这种跨源关联从两个角度证实了命令与控制 (C2) 通道。 ## 检测 1 — 暴力破解 / 密码喷洒 (Azure AD) **目标:** 识别产生异常数量登录失败,或涉及多个不同用户帐户(密码喷洒的典型特征)的源 IP。 **数据源:** `ms:aad:signin` (Azure Active Directory 登录日志) **SPL:** ``` index=botsv3 sourcetype=ms:aad:signin earliest=0 | stats count AS attempts, sum(eval(if(loginStatus="Failure", 1, 0))) AS failures, dc(userPrincipalName) AS distinct_users, values(userPrincipalName) AS users by ipAddress | where failures >= 3 OR distinct_users >= 2 | sort - failures | table ipAddress attempts failures distinct_users users ``` **逻辑:** 该检测不仅仅依赖失败次数,还会统计每个源 IP 所针对的*不同帐户*数量(`dc(userPrincipalName)`)。即使失败次数较少,一个 IP 涉及多个帐户也是强烈的喷洒指标。 **发现:** | 源 IP | 尝试次数 | 失败次数 | 不同用户 | 备注 | |---|---|---|---|---| | `199.66.91.253` | 51 | 5 | 2 | 主要攻击者 — 对两个帐户进行了大量尝试 | | `157.97.121.132` | 8 | 3 | 2 | 次要嫌疑人 | | `104.207.83.63` | 27 | 0 | 2 | 零失败但涉及两个帐户 → 可能是*成功的*喷洒 | **MITRE ATT&CK:** - **T1110** — Brute Force - **T1110.003** — Password Spraying ## 检测 2 — 可疑的 PowerShell 与伪装 (Sysmon) **目标:** 捕获显示混淆/编码 PowerShell 的进程创建事件,或伪装成合法软件的二进制文件。 **数据源:** `XmlWinEventLog:Microsoft-Windows-Sysmon/Operational` (EventID 1 — 进程创建) **SPL:** ``` index=botsv3 sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" earliest=0 "EventID>1<" | rex field=_raw "Name='Image'>(?[^<]+)<" | rex field=_raw "Name='CommandLine'>(?[^<]+)<" | rex field=_raw "Name='User'>(?[^<]+)<" | search CommandLine="*-enc*" OR CommandLine="*-nop*" OR CommandLine="*hidden*" OR CommandLine="*DownloadString*" OR CommandLine="*IEX*" OR CommandLine="*Invoke-Expression*" | stats count BY host, User, Image, CommandLine | sort - count | table host User Image CommandLine count ``` **发现:** - 主机 `BSTOLL-L`(用户 `AzureAD\BudStoll`)上的**编码 PowerShell**: `powershell.exe -noP -sta -w 1 -enc ` — 无配置文件、隐藏窗口、Base64 编码的 payload。这是向防御者隐藏意图的经典混淆手法。 - **基于注册表的 PowerShell**(用户 `FyodorMalteskesko`): `-NoP -NonI -W Hidden -c $x=$((gp HKCU:Software\...` — 从注册表读取。 - **伪装的二进制文件:** 运行自 `C:\Windows\Temp\unziped\lsof-master\` 的 `iexeplorer.exe` — 这是一个伪装成 Internet Explorer 的重命名可执行文件(真正的二进制文件是 Program Files 中的 `iexplore.exe`),正向 `192.168.9.30:8080` 发送信标。 - 命令行中观察到的**反向 shell**: `/bin/sh 0/tmp/backpipe` — netcat 通过命名管道将 shell 重定向到外部主机。 **MITRE ATT&CK:** - **T1059.001** — Command and Scripting Interpreter: PowerShell - **T1027** — Obfuscated Files or Information (编码命令) - **T1036** — Masquerading (临时目录中的重命名二进制文件) ## 检测 3 — 身份验证时间轴(可视化) **目标:** 绘制随时间变化的登录成功与失败情况,以便一眼就能看到暴力破解的爆发。 **数据源:** `ms:aad:signin` **SPL:** ``` index=botsv3 sourcetype=ms:aad:signin earliest=0 | timechart span=1h count BY loginStatus | where Success > 0 OR Failure > 0 ``` **可视化:** 柱状图(每小时的成功与失败对比)。`where` 子句会移除空的时间段,以便图表聚焦于活动窗口。 **发现:** 失败情况集中在 **2018-08-20 21:00**(5 次失败),并在 **8 月 21 日**凌晨出现了较小的峰值——这在正常登录活动的背景下,从视觉上准确定位了攻击窗口。 **MITRE ATT&CK:** - 支持 **T1110**(为暴力破解活动提供时间上下文) ## 检测 4 — C2 / 连接到已知恶意 IP 的出站流量(网络流) **目标:** 使用独立于主机日志的网络遥测数据,确认命令与控制 (C2) 并识别指向攻击者基础设施的大批量出站流量。 **数据源:** `stream:tcp`、`stream:ip` **SPL:** ``` index=botsv3 (sourcetype=stream:tcp OR sourcetype=stream:ip) earliest=0 dest_ip="45.77.53.176" | stats count AS connections, sum(bytes_out) AS bytes_sent, values(dest_port) AS dest_ports, earliest(_time) AS first_seen, latest(_time) AS last_seen BY src_ip, dest_ip | convert ctime(first_seen) ctime(last_seen) | sort - connections ``` **发现:** 三个内部主机正在与攻击者 IP `45.77.53.176` 通信: | 源 IP | 目标端口 | 连接数 | 发送字节数 | 解释 | |---|---|---|---|---| | `192.168.70.186` | 3333, 443 | 8,371 | ~13.1 MB | 批量很大;端口 3333 暗示挖矿 / 可能存在数据窃取 | | `192.168.24.128` | 443 | 2,769 | ~489 KB | 通过 HTTPS 的持续出站流量 | | `192.168.9.30` | 8088 | 6 | ~85 KB | **反向 shell** — 与检测 2 中的 `nc ... 8088` 命令相符 | **跨源关联:** `192.168.9.30` → `45.77.53.176:8088` 同时出现在 Sysmon 命令行和网络流中,从两个独立的数据源证实了 C2 通道。 **MITRE ATT&CK:** - **T1071** — Application Layer Protocol (C2) - **T1041** — Exfiltration Over C2 Channel - **T1496** — Resource Hijacking (端口 3333 / 挖矿指标) ## 如何复现 1. 安装 **Splunk Enterprise**(免费 60 天试用版)。 2. 下载 **BOTS v3** 数据集,并通过 *Manage Apps → Install app from file* 进行安装(数据已预先索引,因此不会消耗许可证配额)。 3. 重启 Splunk 并确认数据已加载: index=botsv3 earliest=0 4. 在 **Dashboard Studio** 仪表板(Grid 布局)中将每个检测构建为一个面板。 ## 展示的技能 - 编写和调整 **SPL** 检测(`stats`、`timechart`、`eval`、`rex`、`convert`) - 在没有可用 add-on 时,从未解析的 XML 中进行**搜索时字段提取** - **阈值调优**,以适应数据并减少误报 - **跨源关联**(主机日志 ↔ 网络日志)以确认发现 - **MITRE ATT&CK** 映射和杀伤链重构 - 构建结合表格和可视化的多面板 **Splunk 仪表板** ## 注意事项与限制 - 检测阈值是根据此数据集的大小进行调整的;生产环境中的阈值会有所不同。 - 为了简单起见,有意跳过了几个 BOTS v3 add-on,这就是为什么 Sysmon 的字段提取是在搜索时完成的。 - 这是一个针对静态预索引数据集构建的学习/作品集项目,而非实时环境。
标签:BOTS, DNS 解析, IP 地址批量处理, 安全可视化, 安全运营, 扫描框架