InsiyahBhatia/splunk-detection-engineering-lab-bots-v3

GitHub: InsiyahBhatia/splunk-detection-engineering-lab-bots-v3

基于 Splunk BOTS v3 数据集的端到端 SOC 检测工程项目,涵盖 SPL 威胁狩猎、多格式检测规则和完整事件报告。

Stars: 2 | Forks: 0

# 检测工程与威胁狩猎实验室 ![状态](https://img.shields.io/badge/Status-Active-brightgreen) ![数据集](https://img.shields.io/badge/Dataset-BOTS%20v3-blue) ![平台](https://img.shields.io/badge/Platform-Splunk%20Enterprise-orange) ![MITRE](https://img.shields.io/badge/Framework-MITRE%20ATT%26CK-red) ## 项目简介 这是一个基于 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攻击, 数字取证与事件响应