bhadramenon/Splunk-Basics-BOTSv1-Investigation

GitHub: bhadramenon/Splunk-Basics-BOTSv1-Investigation

一个使用 Splunk 和 BOTSv1 数据集练习 Web 攻击调查的 SIEM 入门学习项目,展示了从 HTTP 日志中识别漏洞扫描与暴力破解的完整 SPL 查询分析过程。

Stars: 1 | Forks: 0

# Splunk 动手实验:调查模拟的 Web 攻击 (BOTSv1) ## 这是什么 我正在学习 Splunk 并希望进行一些实践操作,因此我使用了 Splunk 官方公开的训练数据集 **BOTSv1**(Boss of the SOC v1)。这是 Splunk 为培训人员调查模拟网络攻击而构建的免费数据集。这**不是**我发动的攻击——这是一个已知的训练场景,我利用它来练习编写搜索查询(Search Processing Language),并逐步梳理调查思路。 我并不认为自己是专家。这只是一个学习项目。 ## 环境配置 - Splunk Enterprise 安装在 Ubuntu 上(在虚拟机中运行) - 加载了 BOTSv1 “仅攻击”数据集(完整训练数据的一个精简版本) - 使用 Splunk 的搜索语言(SPL)来探索日志 ## 我调查了什么 该场景涉及一家虚构公司的网站(`imreallynotbatman.com`),该网站运行着 Joomla(一个网站平台)。我想找出:谁攻击了它,以及是如何攻击的? ### 步骤 1:究竟是哪台服务器在托管这个网站? 在调查“针对服务器”的攻击之前,我需要知道服务器的实际 IP 地址是什么。我不想仅仅是通过查找得出结果——我想自己从数据中把它找出来。 ``` index=botsv1 sourcetype="stream:http" imreallynotbatman.com | stats count by dest_ip ``` **我的发现:** 192.168.250.70 有 19,802 次命中记录——另一个 IP(192.168.250.40)仅出现了一次,这是噪音,不是真正的规律。这确认了 192.168.250.70 是实际的 Web 服务器,因此在此后的每一次查询中,我都将该 IP 用作 dest_ip——这不是假设,而是我直接在数据中核实过的。 image ### 步骤 2:谁在向该网站发送最多的流量? ``` index=botsv1 sourcetype="stream:http" imreallynotbatman.com | stats count by src_ip | sort -count ``` **我的发现:** 一个 IP 地址 `40.80.148.42` 发送了 **17,547 次请求**——远远超出了正常浏览量。单凭这个流量就足以强烈表明这是自动化活动,而非真人行为。 image ### 步骤 3:这个 IP 到底在做什么? ``` index=botsv1 sourcetype="stream:http" src_ip="40.80.148.42" | top limit=20 dest_headers ``` **我的发现:** 该流量中包含一个直接表明其身份的标头: ``` Acunetix-Product: WVS/10.0 (Acunetix Web Vulnerability Scanner – Free Edition) ``` 这证实了该 IP 正在运行 **Acunetix**,这是一种用于扫描网站弱点的自动化工具。这就是攻击的“侦察”阶段——在尝试闯入之前先对目标进行扫描。 image ### 步骤 4:是否有人在试图通过猜测密码进行登录? ``` index=botsv1 sourcetype="stream:http" http_method="POST" dest_ip="192.168.250.70" form_data=*username*passwd* | stats count by src_ip | sort -count ``` **我的发现:** 有两个 IP 提交了登录尝试: - `40.80.148.42`(扫描器)——只有 1 次尝试,可能是附带的 - `23.22.63.114` —— **412 次尝试** 第二个数字立刻引起了我的注意。 image ### 步骤 5:这 412 次尝试实际上是怎样的? ``` index=botsv1 sourcetype="stream:http" http_method="POST" dest_ip="192.168.250.70" src_ip="23.22.63.114" form_data=*username*passwd* | table _time form_data | head 20 ``` **我的发现:** 每一次尝试都使用相同的用户名 `admin`,但每次使用的密码都不同——都是像 `mother`、`winner`、`viking`、`fishing`、`redsox` 这样的常见词汇和名字。这些尝试之间的间隔只有几秒钟,人类根本不可能打得那么快。 这就是典型的**字典攻击**:自动使用一串常见密码列表去尝试匹配一个已知的用户名。 image ## 我无法确认的内容 我检查了这些登录尝试的 HTTP 响应码,几乎所有的返回都是 `303`(重定向)。单凭 303 响应码本身无法告诉你登录是成功还是失败——Joomla 在这两种情况下都可能会进行重定向。我没有进一步深入探究实际的重定向目的地来确认攻击是否成功。如果我继续这项调查,那将是我的下一步操作。 我在此明确说明这一点而不是盲目猜测,因为我认为,如实面对数据能展示什么和不能展示什么,是正确执行此操作的一部分。 ## 总结 使用 Splunk,我识别出了针对 Web 服务器的模拟攻击的两个不同阶段: 1. **侦察** —— 自动化漏洞扫描器(Acunetix)在探测网站,这是通过 HTTP 响应标头识别出来的 2. **暴力破解** —— 另一个独立的 IP 地址在几秒钟内,使用常见密码对 `admin` 账户进行了 412 次密码猜测 我在 Splunk 中构建了一个简单的双面板仪表板,将这两项发现进行了可视化。 ## 仪表板 image ## 接下来我会做什么 - 检查这些登录尝试的重定向目的地,以确认其成功/失败 - 查看 endpoint 日志(Sysmon),看看在此节点之后是否有攻击者进一步行动的证据 ## 使用的工具 - Splunk Enterprise(免费试用版) - Splunk BOTSv1 公共数据集 - SPL(Splunk 的搜索语言)
标签:代码示例, 安全实验, 安全运营, 扫描框架, 教育培训, 数据分析, 红队行动