dinesh3690/splunk-bots-investigation

GitHub: dinesh3690/splunk-bots-investigation

使用 Splunk BOTS v1 数据集对 Joomla Web 服务器入侵事件进行全流程 SIEM 调查分析的实战实验项目。

Stars: 0 | Forks: 0

# Splunk BOTS v1 — Joomla Web 服务器入侵调查 这是一个使用 Splunk 的 Boss of the SOC (BOTS) v1 数据集进行的 SIEM 动手调查项目。本项目模拟了真实的 L1 SOC 分析师的调查过程——通过分析 22 个数据源中的 955,807 条日志事件,重构了针对某公司 Joomla CMS Web 服务器的一场协同网络攻击。无需编程——所有发现均通过 SPL 查询和分析推理得出。 ## 场景 **目标组织:** Frothly(虚构的啤酒公司) **受感染资产:** Joomla CMS Web 服务器 — 192.168.250.70 **攻击日期:** 2016-08-10 **数据集:** BOTS v1 Attack-Only(135MB — 955,807 条事件) ## 可用数据源 | Sourcetype | 事件计数 | 描述 | |------------|-------------|-------------| | stream:ip | 62,083 | 原始 IP 网络流量 | | fgt_traffic | 55,279 | Fortinet 防火墙流量日志 | | fgt_utm | 25,586 | Fortinet URL/威胁过滤 | | stream:http | 23,936 | HTTP Web 流量 | | iis | 22,615 | IIS Web 服务器访问日志 | | stream:icmp | 12,858 | ICMP/ping 流量 | | stream:dns | 7,434 | DNS 查询日志 | | nessus:scan | 65 | 漏洞扫描结果 | | fgt_event | 57 | Fortinet 安全事件 | ## 调查方法论 每个调查问题均通过以下流程进行解答: 1. 确定与问题相关的数据源 2. 编写 SPL 查询以提取和过滤相关事件 3. 分析结果并记录发现 4. 跨多个日志源进行交叉比对以确认 5. 将确认的发现映射到 MITRE ATT&CK 框架 6. 记录 IOC 和检测盲点 ## 使用的 SPL 查询 ### 查询 1 — 识别所有数据源 ``` index=botsv1 | stats count by sourcetype ``` **发现:** 共有 22 个 sourcetype 可用 — 包括防火墙、Web 服务器、网络流量、DNS、漏洞扫描日志 ### 查询 2 — 在防火墙日志中查找主要流量源 ``` index=botsv1 sourcetype=fgt_traffic | table srcip, dstip, action | head 20 ``` **发现:** 192.168.250.100 正在扫描连续的 IP(85.93.43.64 到 85.93.43.75)— 典型的 Nmap IP 范围扫描模式 ### 查询 3 — 识别最活跃的源/目的对 ``` index=botsv1 sourcetype=fgt_traffic | stats count by srcip dstip | sort -count | head 20 ``` **发现:** 23.22.63.114 到 71.39.18.126 共有 1,431 次连接 — 可疑的外部到外部流量 ### 查询 4 — 查找访问 Web 服务器的主要 IP ``` index=botsv1 sourcetype=iis | stats count by c_ip | sort -count | head 20 ``` **发现:** 40.80.148.42 向该 Web 服务器发起了 20,967 次请求 — 确认为主要攻击者 ### 查询 5 — 分析攻击者在 Web 服务器上的活动 ``` index=botsv1 sourcetype=iis c_ip=40.80.148.42 | table _time, cs_uri_stem, sc_status | head 30 ``` **发现:** 攻击者从 2016-08-10 18:01:44 开始,使用自动化请求对 /joomla/index.php/component/search/ 进行高频打击 ### 查询 6 — 映射主要攻击者针对的所有 URL ``` index=botsv1 sourcetype=iis c_ip=40.80.148.42 | stats count by cs_uri_stem | sort -count | head 20 ``` **发现:** 对 search 组件发起 16,871 次命中,对 admin panel 发起 35 次命中,可疑文件 /joomla/images/imnotbatman.jpg 被访问 13 次 ### 查询 7 — 调查可疑的 Web Shell (imnotbatman.jpg) ``` index=botsv1 sourcetype=iis cs_uri_stem="/joomla/images/imnotbatman.jpg" | table _time, c_ip, sc_status, cs_method ``` **发现:** 40.80.148.42 从 17:41 开始发起了 13 次成功的 GET 请求(状态码 200)— 确认存在 Web Shell ### 查询 8 — 针对 Web 服务器的全面 HTTP 流量分析 ``` index=botsv1 sourcetype=stream:http dest_ip=192.168.250.70 | stats count by src_ip, http_method, uri | sort -count | head 20 ``` **发现:** 识别出第二名攻击者 23.22.63.114 — 向 admin panel 发起了 823 次 GET + 412 次 POST 请求,/joomla/agent.php 被访问 194 次 ### 查询 9 — 调查第二个 Web Shell (agent.php) ``` index=botsv1 sourcetype=iis cs_uri_stem="/joomla/agent.php" | table _time, c_ip, sc_status, cs_method ``` **发现:** 23.22.63.114 从 17:55 开始发起了 194 次成功的 GET 请求(状态码 200)— 确认存在第二个 Web Shell ### 查询 10 — 检查来自 Web 服务器的出站 C2 连接 ``` index=botsv1 sourcetype=fgt_traffic srcip=192.168.250.70 | stats count by dstip | sort -count | head 10 ``` **发现:** Web 服务器向攻击者 23.22.63.114 发起了 5 次出站连接,并向未知 IP 108.161.187.134 发起了 6 次连接 — 确认存在 C2 回连 ## 攻击时间线 | 时间 (2016-08-10) | 攻击者 | 行为 | 证据 | |-------------------|---------|--------|----------| | 17:41 | 40.80.148.42 | Web Shell imnotbatman.jpg 被上传并执行 | IIS 日志中的 13 次 HTTP 200 GET 请求 | | 17:55 | 23.22.63.114 | 第二个 Web Shell agent.php 被执行 | IIS 日志中的 194 次 HTTP 200 GET 请求 | | 18:01 | 40.80.148.42 | 开始大规模漏洞利用 — Joomla 搜索组件 | stream:http 日志中的 11,923 次 POST 请求 | | 18:01-18:21 | 40.80.148.42 | 路径遍历尝试 | IIS 日志中的 24 次 GET /windows/win.ini | | 18:21 | 23.22.63.114 | 管理面板暴力破解 | 对 /joomla/administrator/index.php 发起 412 次 POST | | 后渗透阶段 | 192.168.250.70 | Web 服务器向攻击者 C2 回连 | 防火墙日志中向 23.22.63.114 发起的 5 次出站连接 | ## IOC 主列表 | IOC | 类型 | 角色 | |-----|------|------| | 40.80.148.42 | IP 地址 | 主要外部攻击者 | | 23.22.63.114 | IP 地址 | 次要攻击者 / C2 服务器 | | 108.161.187.134 | IP 地址 | Web 服务器的可疑出站目的地 | | 192.168.250.100 | IP 地址 | 内部扫描主机 | | 192.168.250.70 | IP 地址 | 受感染的 Joomla Web 服务器 | | /joomla/images/imnotbatman.jpg | 文件路径 | Web Shell 1 — 伪装为图片 | | /joomla/agent.php | 文件路径 | Web Shell 2 | | /joomla/index.php/component/search/ | URI | 主要漏洞利用端点 | | /joomla/administrator/index.php | URI | 管理面板暴力破解目标 | | /windows/win.ini | URI | 路径遍历尝试 | ## MITRE ATT&CK 映射 | 战术 | 技术 ID | 技术名称 | 证据 | |--------|-------------|----------------|----------| | 侦察 | T1595 | 主动扫描 | 防火墙日志中 192.168.250.100 扫描连续的 IP | | 初始访问 | T1190 | 利用面向公众的应用 | 对 Joomla 搜索组件发起 11,923 次 POST 请求 | | 初始访问 | T1110 | 暴力破解 | 23.22.63.114 对 Joomla 管理面板发起 412 次 POST 请求 | | 执行 | T1505.003 | Web Shell | imnotbatman.jpg 和 agent.php — 均返回 HTTP 200 且执行成功 | | 发现 | T1083 | 文件和目录发现 | /windows/win.ini 路径遍历 — 尝试 24 次 | | 持久化 | T1505 | 服务器软件组件 | 在受感染的 Joomla 服务器上安装了两个 Web Shell | | 命令与控制 | T1071 | 应用层协议 | Web 服务器 192.168.250.70 向 23.22.63.114 发起出站连接 | ## 调查报告 ### 执行摘要 2016-08-10,Frothly 的 Joomla CMS Web 服务器 (192.168.250.70) 遭到两名外部威胁行为者的协同攻击而沦陷。主要攻击者 (40.80.148.42) 利用了 Joomla 搜索组件,并上传了一个伪装成图片文件的 Web Shell。次要攻击者 (23.22.63.114) 部署了第二个 Web Shell,并对 Joomla 管理面板进行了暴力破解。后渗透阶段,受感染的 Web 服务器向攻击者基础设施建立了出站的命令与控制连接——确认已成功实现远程代码执行。 ### 关键发现 **发现 1 — 确认两名协同攻击者** 外部 IP 40.80.148.42 和 23.22.63.114 对 Joomla Web 服务器同时发起了攻击,表明这是一场协同行动。两名攻击者在间隔 14 分钟内就在服务器上预先部署了 Web Shell。 **发现 2 — 伪装成图片文件的 Web Shell** 文件 imnotbatman.jpg 被上传到 Joomla images 目录,并作为可执行的 Web Shell 运行(HTTP 200 响应确认了其执行)。使用图片扩展名命名 Web Shell 是一种常见的规避技术,用于绕过文件类型限制。 **发现 3 — 大规模自动化漏洞利用** 主要攻击者向 Joomla 搜索组件发送了 11,923 次自动化 POST 请求 — 这与 SQLi 模糊测试或使用 sqlmap 等自动化工具利用已知的 Joomla CVE 漏洞的行为一致。 **发现 4 — 成功建立 C2 通道** 受感染的 Web 服务器向攻击者 IP (23.22.63.114) 发起了 5 次出站连接,确认漏洞利用成功并建立了反弹 Shell 或 C2 beacon。 ### 检测盲点 - 单一外部 IP 向 Web 服务器发起 20,967 次请求未触发告警 - Web Shell 文件上传在应用层未被阻止或检测到 - Web 服务器向外部 IP 发起的出站连接被防火墙放行 - 对自动化 POST 洪泛(向单个 endpoint 发起 11,923 次请求)缺乏异常检测 ### 建议 - 立即在边界防火墙阻断 IP 40.80.148.42 和 23.22.63.114 - 从 Web 服务器文件系统中移除 Web Shell imnotbatman.jpg 和 agent.php - 将 Joomla CMS 补丁更新至最新版本 — 搜索组件漏洞正被积极利用 - 实施 WAF 规则,针对每个源 IP 每分钟的 POST 请求进行限流 - 配置防火墙以阻断 Web 服务器发往未知外部 IP 的出站连接 - 创建 Splunk 告警:单一 IP 在 60 秒内向 Web 服务器发起超过 1,000 次请求 ## 经验教训 - **流量异常就是信号** — 单一 IP 向 Web 服务器发起 20,967 次请求绝不是正常现象。仅靠一个阈值告警就能在第一分钟内捕获此次攻击。 - **Web Shell 能绕过简单的扩展名检查** — imnotbatman.jpg 证明了为什么内容检查比文件扩展名过滤更重要。 - **跨源关联至关重要** — 只有将 IIS 日志与防火墙出站流量日志结合,才能看到 C2 回连。任何单一来源都无法讲述完整的经过。 - **攻击者会协同行动** — 两个 IP 同时发起攻击,且部署 Web Shell 的时间间隔仅为 14 分钟,暗示这是有组织的威胁行为者,而非机会主义的扫描。 - **进攻方知识有助防守** — 从进攻性安全经验中识别出的连续 IP 扫描模式,极大地加速了此次调查。 ## 展示的技能 - 使用 Splunk SPL 跨 22 个数据源和 955,807 条事件进行 SIEM 调查 - 多源日志关联 — 防火墙、Web 服务器和网络流量日志 - 攻击者识别与攻击时间线重构 - Web Shell 检测与分析 - MITRE ATT&CK 框架映射 - IOC 提取与文档记录 - SOC 调查报告编写 ## 截图 调查截图位于 `screenshots/` 文件夹中: - `sourcetypes.png` — BOTS 数据集中的所有 22 个数据源 - `firewall-scanning.png` — 防火墙日志中的连续 IP 扫描 - `top-attacker-ip.png` — 40.80.148.42 被识别为主要攻击者(,967 次请求) - `attacker-urls.png` — 主要攻击者针对的所有 URL - `webshell-imnotbatman.png` — Web Shell 执行确认(13 次 HTTP 200) - `http-traffic-analysis.png` — 揭示第二名攻击者的全面 HTTP 流量 - `agent-php-webshell.png` — 第二个 Web Shell 确认(194 次 HTTP 200) - `c2-callback.png` — Web 服务器出站 C2 连接确认 ## 参考 - [Splunk BOTS v1 数据集](https://github.com/splunk/botsv1) - [MITRE ATT&CK — Web Shell T1505.003](https://attack.mitre.org/techniques/T1505/003/) - [MITRE ATT&CK — 利用面向公众的应用 T1190](https://attack.mitre.org/techniques/T1190/) - [MITRE ATT&CK — 暴力破解 T1110](https://attack.mitre.org/techniques/T1110/) - [Splunk SPL 文档](https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/WhatsInThisManual)
标签:CISA项目, Cloudflare, MITRE ATT&CK, 安全运营中心, 网络映射