InsiyahBhatia/splunk-detection-engineering-lab-bots-v3
GitHub: InsiyahBhatia/splunk-detection-engineering-lab-bots-v3
基于 Splunk BOTS v3 数据集的端到端 SOC 检测工程项目,涵盖 SPL 威胁狩猎、多格式检测规则和完整事件报告。
Stars: 2 | Forks: 0
# 检测工程与威胁狩猎实验室




## 项目简介
这是一个基于 Splunk 的 Boss of the SOC v3 (BOTS v3) 数据集构建的旗舰级蓝队作品集项目——这是一个包含约 200 万条事件、跨越 107 种 sourcetypes 的预索引攻击场景,设定日期为 2018 年 8 月 20 日。本仓库中的每个检测规则、事件报告、仪表板面板和告警,都是通过针对真实攻击数据运行真实的 SPL 查询得出的,而不是来自模板或复制他人的分析文章。
从 BOTS v3 数据集中完整调查了两个安全事件。第三份报告(IR-2026-0701-001)记录了稍后进行的一次演练,旨在验证基于上述调查构建的 Sigma 内容是否能捕获针对相同检测逻辑重放的近似相同的攻击模式——这是一次独立的、带有日期的演练,而不是 2018 年 8 月 20 日的第三个事件。
| 报告 | 事件 | 严重程度 | 日期 |
|---|---|---|---|
| IR-2018-001 | 通过 IMDS 进行的 EC2 凭据泄露与滥用 | CRITICAL | 2018-08-20 |
| IR-2018-002 | S3 配置错误与路过式挖矿木马注入 | HIGH | 2018-08-20 |
| IR-2026-0701-001 | 检测验证演练 - 多区域 RunInstances 扫描 | 已关闭 / 已控制 | 2026-07-01 |
## 仓库结构
```
Detection-Engineering-Lab/
│
├── 01-Dataset/
│ ├── Dataset-Overview.md # Sourcetype map, host inventory, event stats
│ └── Attack-Timeline.md # Chronological attack chain across both incidents
│
├── 02-SPL-Queries/
│ └── investigation-queries.md # All SPL used during investigation with annotations
│
├── 03-Sigma/
│ ├── aws_iam_reconnaissance_burst.yml
│ └── aws_ec2_runinstances_multi_region_sweep.yml
│
├── 04-YARA/
│ └── yara-coinhive-miner.yar # 3 rules: generic, HTML-injected, variant coverage
│
├── 05-Snort/
│ └── snort-c2-port9998.rules # 6 rules: beacon, payload delivery, IOC match
│
├── 06-Zeek/
│ ├── zeek-imds-credential-theft.zeek
│ └── zeek-c2-beacon-detection.zeek
│
├── 07-Threat-Hunting/
│ └── frothly-botsv3-hunting-queries.md
│
├── 08-MITRE/
│ └── frothly-botsv3-campaign-attack-navigator-layer.json
│
├── 09-Incident-Reports/
│ ├── IR-2018-001-EC2-Credential-Abuse.md
│ ├── IR-2018-002-S3-Cryptominer.md
│ └── IR-2026-0701-001-Detection-Validation.md
│
├── 10-IOCs/
│ └── consolidated-iocs.md
│
├── 11-Dashboard/
│ └── frothly-ir-dashboard.xml # Live Splunk Simple XML dashboard, 8 panels
│
├── 12-Alerts/
│ └── savedsearches.conf # 5 scheduled, tuned, throttled detections
│
└── Lessons-Learned.md
```
## 已调查的事件
### IR-2018-001 - 通过 IMDS 进行的 EC2 凭据泄露与滥用
**严重程度: CRITICAL | 从检测到控制: 14 分钟**
```
Malware delivered to EC2 (mars) via port 9998
> IMDS queried at 14:40 for EC2InstanceRole credentials
> GetSessionToken mints STS token ASIA...
> IAM enumeration burst (6 calls, <1 second, Boto3)
> CreateUser / CreateAccessKey denied (least-privilege working)
> Multi-region RunInstances sweep: 576 attempts, 15 regions, 2 IPs
> Blocked by IAM + account quotas - 0 instances launched
> aws_ir kills credential at 15:00 (14 min response)
> C2 beacons continue at 16:28, 16:33, 18:24 - host not cleaned
```
**关键发现:** 部分 `RunInstances` 调用通过了 IAM 检查,仅被 EC2 账户配额拦截,而非安全策略——攻击者比原始“拒绝”计数所显示的更接近成功。
**MITRE 技术:** `T1105` `T1571` `T1552.005` `T1078.004` `T1580` `T1136.003` `T1098.001` `T1070` `T1496` `T1041`
### IR-2018-002 - S3 配置错误与路过式挖矿木马
**严重程度: HIGH | 暴露窗口: 56 分钟**
```
bstoll accidentally calls PutBucketAcl on frothlywebcode at 18:31
> Bucket publicly writable for 56 minutes
> Attacker uploads Coinhive JS miner payload
> Payload served via brewertalk.com (54.67.127.227) forum pages
> BSTOLL-L visits forum at 18:48 via Chrome - drive-by execution
> MKRAEUS-L and BTUN-L also resolve coinhive.com, ws001-014.coinhive.com
> Symantec EP blocks JSCoinminer Download 6/8 on BTUN-L at 19:12
> bstoll corrects bucket ACL at 19:27
```
**关键发现:** bstoll 既是错误配置存储桶的人,也是第一个被感染的人——他访问了自己刚刚无意中武器化的论坛。
**MITRE 技术:** `T1189` `T1608` `T1530` `T1496`
### IR-2026-0701-001 - 检测验证演练
**状态: 已关闭,已控制(由配额强制执行,未被检测系统发现)**
这是一项后续演练,重放了近乎相同的多区域 `RunInstances` 扫描模式(相同的 `web_admin` 凭据家族,相同的攻击者方法论),以验证基于 IR-2018-001 构建的 Sigma 规则。结果:该扫描再次被 AWS 服务配额停止,并且**没有触发任何自动告警**——证实了本仓库(`12-Alerts/`)中 Sigma 规则和保存搜索告警旨在弥补的检测缺口。
**MITRE 技术:** `T1078.004` `T1087.003` `T1526` `T1552.001` `T1580` `T1496`
## 仓库内容
### Sigma 规则 (`03-Sigma/`)
| 规则 | 检测内容 | 触发条件 |
|---|---|---|
| `aws_iam_reconnaissance_burst.yml` | 脚本化的 IAM 凭据枚举 | 同一身份在 60 秒内发起 4 次或以上不同的敏感 IAM 调用 |
| `aws_ec2_runinstances_multi_region_sweep.yml` | 多区域 EC2 资源劫持扫描 | 10 分钟内跨越 5 个或以上区域的 `RunInstances` 调用 |
### YARA 规则 (`04-YARA/`)
| 规则 | 目标 | 置信度 |
|---|---|---|
| `Coinhive_JS_Miner_Generic` | 任何包含 Coinhive API 字符串/域名的文件 | 高 |
| `Coinhive_JS_Miner_Injected_In_HTML` | HTML 页面内的 Coinhive script 标签 | 高 |
| `Generic_Browser_Cryptominer_Behavior` | Coinhive 变种、Cryptoloot、WASM 挖矿程序 | 中 - 投入生产前需调优 |
### Snort 规则 (`05-Snort/`)
| SID | 规则 | 优先级 |
|---|---|---|
| 9000001 | 端口 9998 上的出站信标(74 字节固定模式) | 1 |
| 9000002 | 端口 9998 上的入站信标响应(54 字节) | 1 |
| 9000003 | 端口 9998 上的大型入站 payload 投递 | 1 |
| 9000004 | 指向已确认 C2 IP 34.215.24.225 的任何流量 | 1 |
| 9000005 | 端口范围 9990–9999 上的出站 TCP(范围扩大) | 2 |
| 9000006 | 指向矿池的 Coinhive WebSocket 升级请求 | 1 |
### Zeek 脚本 (`06-Zeek/`)
| 脚本 | 检测内容 | 通知类型 |
|---|---|---|
| `zeek-imds-credential-theft.zeek` | IMDS `/iam/security-credentials` 访问、HTTP 200、重复查询 | `IMDS_Credential_Access`, `IMDS_Credential_Returned`, `IMDS_Repeated_Credential_Access` |
| `zeek-c2-beacon-detection.zeek` | 固定小数据包信标、大型 payload 投递、已知 C2 IOC、高频连接 | `C2_Beacon_Suspected`, `C2_Payload_Delivery`, `C2_Known_IP_Contacted`, `C2_HighFrequency_Connections` |
### Splunk 仪表板 (`11-Dashboard/`)
`frothly-ir-dashboard.xml` - 一个包含 8 个面板的 Simple XML 仪表板,涵盖:多区域 `RunInstances` 扫描告警、IAM 侦察突发、`RunInstances` 错误代码/区域细分、S3 ACL 更改、Coinhive DNS 解析、非标准端口 C2 流量、IMDS 访问节奏(调整为每主机每小时首次发现 - 见下文注释)、Symantec EP 挖矿木马检测、osquery IR 工具执行、完整攻击链时间轴以及 MITRE ATT&CK 技术汇总。
**IMDS 面板注释:** 作为正常的 AWS SDK 凭据刷新行为,原始的 IMDS 凭据查询会在每台 EC2 实例上每隔约 15 分钟重复一次。该仪表板面板特意调整为显示“每主机每小时首次查询”,而不是显示每一个原始命中记录,因此它能浮现出真正的异常,而不是预期的背景噪声。
通过 Splunk Web > Dashboards > Create New > Edit > Source 进行部署,粘贴 XML 并保存。有关 REST API / CLI 部署的替代方案,请参阅文件内注释。
### 定时告警 (`12-Alerts/`)
`savedsearches.conf` - 5 个具备生产形态的、定时且经过节流处理的检测(多区域扫描、IAM 侦察突发、S3 ACL 更改、调优后的 IMDS 异常、挖矿木马 DNS、非标准端口 C2),每一项都包含 `dispatch` 时间范围、用于防止收件箱被淹没的告警抑制以及模板化邮件操作。部署到 `$SPLUNK_HOME/etc/apps//local/savedsearches.conf` 并重新加载搜索。
### IOC (`10-IOCs/`)
`consolidated-iocs.md` - 将所有三份报告中的每一个网络、主机、凭据、文件和行为指示器都整合在一张参考表中,此外还包含 MITRE 技术交叉映射、证据缺口以及可直接运行的狩猎 SPL。
## 环境设置
### 前置条件
- Splunk Enterprise(免费试用版或授权版)
- BOTS v3 数据集
### Splunk 安装 (Kali/Ubuntu)
```
sudo dpkg -i splunk-*.deb
sudo /opt/splunk/bin/splunk start --accept-license
wget https://botsdataset.s3.amazonaws.com/botsv3/botsv3_data_set.tgz
md5sum botsv3_data_set.tgz # verify: d7ccca99a01cff070dff3c139cdc10eb
sudo /opt/splunk/bin/splunk stop
sudo tar zxvf botsv3_data_set.tgz -C /opt/splunk/etc/apps/
sudo chown -R splunk:splunk /opt/splunk
sudo /opt/splunk/bin/splunk start
```
### 验证数据加载
```
index=botsv3 earliest="08/20/2018:00:00:00" latest="08/20/2018:23:59:59"
| stats count by sourcetype
| sort -count
```
### 性能提示
- 始终将时间范围限定在 `08/20/2018 00:00:00 – 08/20/2018 23:59:59` - 避免使用“All time”,否则会返回多年的无关索引数据。
- 对于仅统计搜索,请使用 **Fast Mode**。
- 为 Splunk 虚拟机分配至少 8GB 内存 / 4 个 vCPU。
## 展示技能
| 技能 | 证据 |
|---|---|
| 威胁狩猎方法论 | 通过异常检测(而非照搬分析文章)构建了两条完整的攻击链 |
| AWS CloudTrail 分析 | IAM 枚举、STS token 滥用、多区域扫描检测 |
| IMDS 凭据窃取 | 追踪了从 IMDS 查询到下游 API 滥用的完整链条 |
| 端点遥测 | osquery、Symantec EP 关联分析 |
| 网络分析 | `stream:tcp`、`stream:http`、`stream:dns` - 信标模式识别 |
| 误报分析 | 调优了 IMDS 检测,以排除常规的 SDK 凭据刷新噪声 |
| 检测工程 | Sigma、YARA、Snort、Zeek - 四层静态检测,全部基于证据 |
| 实时检测部署 | Splunk 仪表板 + 经过定时和节流处理的 `savedsearches.conf` 告警 |
| 事件报告 | 三份完整的 IR 报告,包含时间轴、MITRE 映射、控制评估和证据缺口 |
| MITRE ATT&CK | 在所有三份报告中映射了 16 项技术 |
## 参考
- [BOTS v3 GitHub](https://github.com/splunk/botsv3)
- [MITRE ATT&CK](https://attack.mitre.org)
- [Sigma 规则格式](https://github.com/SigmaHQ/sigma)
- [AWS IMDS 文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)
- [aws_ir - AWS 事件响应工具](https://github.com/ThreatResponse/aws_ir)
- [Coinhive - JSCoinminer](https://attack.mitre.org/techniques/T1496/)
*所有发现均来源于对 BOTS v3 数据集的实机调查。任何结论均有相应的 SPL 查询证据支持。*
标签:XXE攻击, 数字取证与事件响应