Guscyrus-cyber/Splunk_json_lab
GitHub: Guscyrus-cyber/Splunk_json_lab
一个基于 Splunk Enterprise 的 JSON 安全日志分析实验,帮助 SOC 分析师练习登录失败监控与威胁检测技能。
Stars: 0 | Forks: 0
**Splunk Enterprise JSON 登录失败监控实验**
**简介**
本实验介绍了在 Splunk Enterprise 中使用 JSON 日志数据进行安全运营中心 (SOC) 监控和分析的方法。JSON (JavaScript Object Notation) 是现代安全产品、云平台、身份提供商、防火墙、端点检测工具和 Web 应用程序最常用的格式之一。
在本实验中,将创建一个基于 JSON 的登录失败数据集并将其导入到 Splunk Enterprise 中。每个 JSON 事件代表一次用户身份验证尝试,包含时间戳、用户名、源 IP 地址、登录操作和身份验证状态等字段。将数据集上传到 Splunk 后,分析师将学习如何搜索、过滤和分析失败的身份验证事件。
本实验的目的是让 SOC 分析师熟悉 JSON 日志结构、字段提取、安全事件调查、暴力破解检测和用户身份验证监控。通过完成此练习,学生将获得处理网络安全和云环境中最广泛使用的数据格式之一的实践经验。
**实验目标**
完成本实验后,分析师将能够:
1. 了解 JSON 日志事件的结构。
2. 使用 Terminal 创建并验证 JSON 数据集。
3. 将 JSON 数据上传到 Splunk Enterprise。
4. 搜索并分析基于 JSON 的安全事件。
5. 识别失败的登录尝试。
6. 调查与登录失败相关的源 IP 地址。
7. 监控用户身份验证活动。
8. 为未来基于 JSON 的 SOC 调查构建基础技能。
**数据集**
**文件:** failed_logins.json
**事件:** 身份验证事件
**格式:** JSON Lines (每行一个 JSON 事件)
**Source Type:** json_failed_logins
**Index:** auth
**Host:** MacBookPro
**SOC 用例**
此数据集可用于调查:
登录失败尝试\
暴力破解攻击\
未经授权的访问尝试\
可疑的源 IP 地址\
账户定向攻击\
身份验证异常\
用户登录趋势
**练习技能**
JSON 基础\
Splunk 数据导入\
安全监控\
威胁狩猎\
身份验证分析\
SOC Tier 1 调查\
日志分析\
事件检测
**登录失败 JSON 数据集**
请参考图 1 和图 2 获取相应的命令/查询及输出。
{"timestamp":"2026-06-18T10:00:00","user":"john","action":"login","status":"failed","src_ip":"8.8.8.8","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:01:00","user":"mary","action":"login","status":"success","src_ip":"10.0.0.5","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:02:00","user":"admin","action":"login","status":"failed","src_ip":"123.123.123.123","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:03:00","user":"admin","action":"login","status":"failed","src_ip":"123.123.123.123","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:04:00","user":"root","action":"login","status":"failed","src_ip":"45.33.32.156","host":"MacBookPro"}
测试
python3 -m json.tool failed_logins.json
请参考图 3 获取相应的命令/查询及输出。
**验证数据集**
Bash: cat failed_logins.json
统计事件数:
Bash: wc -l failed_logins.json
请参考图 4 获取相应的命令/查询及输出。
**验证每个事件**
Bash: while read line; do\
echo "\$line" \| python3 -m json.tool \> /dev/null\
done \< failed_logins.json
请参考图 5 获取相应的命令/查询及输出。
**查看格式化后的事件**
Bash: while read line; do\
echo "\$line" \| python3 -m json.tool\
done \< failed_logins.json
请参考图 6 获取相应的命令/查询及输出。
**SOC 分析师问题**
. 有多少个事件? Bash: wc -l failed_logins.json
5 failed_logins.json
. 有哪些用户? Bash: grep -o '"user":"\[^"\]\*"' failed_logins.json
"user":"john"
"user":"mary"
"user":"admin"
"user":"admin"
"user":"root"\
. 有哪些登录失败记录? Bash: grep '"status":"failed"' failed_logins.json
{"timestamp":"2026-06-18T10:00:00","user":"john","action":"login","status":"failed","src_ip":"8.8.8.8","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:02:00","user":"admin","action":"login","status":"failed","src_ip":"123.123.123.123","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:03:00","user":"admin","action":"login","status":"failed","src_ip":"123.123.123.123","host":"MacBookPro"}
{"timestamp":"2026-06-18T10:04:00","user":"root","action":"login","status":"failed","src_ip":"45.33.32.156","host":"MacBookPro"}
. 有多少次登录失败? Bash: grep -c '"status":"failed"' failed_logins.json\
4
. 有哪些 IP 导致了登录失败? Bash: grep '"status":"failed"' failed_logins.json
8.8.8.8\
123.123.123.123\
123.123.123.123\
45.33.32.156
**下一步:Splunk**
上传:将 failed_logins.json 上传到 Splunk Enterprise。
Index: auth\
Sourcetype: json_failed_logins\
Host: MacBookPro
**测试**
index=auth sourcetype=json_failed_logins
**Settings → Add Data → Upload → failed_logins.json**
使用:
index = auth\
sourcetype = json_failed_logins\
host = MacBookPro
请参考图 7 获取相应的命令/查询及输出。
Search: source="failed_logins.json" host="MacBookPro" index="auth" sourcetype="\_json"
请参考图 8 和图 9 获取相应的命令/查询及输出。
search: index=auth sourcetype="\_json"\
请参考图 10 和图 11 获取相应的命令/查询及输出。
Search: index=auth sourcetype="\_json" status=failed \| stats count by user, src_ip\
请参考图 12 获取相应的命令/查询及输出。
| **user** | **src_ip** | **count** |
|----------|-----------------|-----------|
| admin | 123.123.123.123 | 2 |
| john | 8.8.8.8 | 1 |
| root | 45.33.32.156 | 1 |
. 哪些用户尝试了登录?
Search: index=auth sourcetype="\_json"\
\| stats count by user
请参考图 13 获取相应的命令/查询及输出。
. 哪些用户尝试了身份验证?
admin\
john\
mary\
root
. 哪些登录尝试失败了?
Search: index=auth sourcetype="\_json" status=failed
| table timestamp user src_ip status
请参考图 14 获取相应的命令/查询及输出。
. 哪些身份验证尝试失败了?
| **timestamp** | **user** | **src_ip** | **status** |
|---------------------|----------|-----------------|------------|
| 2026-06-18T10:00:00 | john | 8.8.8.8 | failed |
| 2026-06-18T10:02:00 | admin | 123.123.123.123 | failed |
| 2026-06-18T10:03:00 | admin | 123.123.123.123 | failed |
| 2026-06-18T10:04:00 | root | 45.33.32.156 | failed |
. 发生了多少次登录失败?
Search: index=auth sourcetype="\_json" status=failed\
\| stats count as failed_logins
请参考图 15 获取相应的命令/查询及输出。
. 记录了多少次登录失败事件?
failed_logins = 4
. 哪些源 IP 地址导致了登录失败?
Search: index=auth sourcetype="\_json" status=failed\
\| stats count by src_ip\
\| sort -count
请参考图 16 获取相应的命令/查询及输出。
. 哪些源 IP 地址导致了登录失败尝试?
123.123.123.123\
45.33.32.156\
8.8.8.8
哪些用户经历了登录失败?\
\
Search: index=auth sourcetype="\_json" status=failed\
\| stats count by user\
请参考图 17 获取相应的命令/查询及输出。
. 哪些用户经历了登录失败?
admin\
john\
root
. 哪个 IP 地址导致的登录失败次数最多?
Search: index=auth sourcetype="\_json" status=failed\
\| stats count by src_ip\
\| sort -count\
\| head 1
请参考图 18 获取相应的命令/查询及输出。
. 哪个 IP 地址导致的登录失败次数最多?\
\
123.123.123.123
. 哪个用户账户被作为目标攻击的次数最多?
Search: index=auth sourcetype="\_json" status=failed\
\| stats count by user\
\| sort -count\
\| head 1
请参考图 19 获取相应的命令/查询及输出。
哪个用户账户被作为目标攻击的次数最多?\
\
admin
**显示所有身份验证事件。**
Search: index=auth sourcetype="\_json"\
\| table timestamp user action status src_ip host\
请参考图 20 获取相应的命令/查询及输出。
**面板 1**
index=auth sourcetype="\_json"\
\| stats count by status
可视化:饼图\
请参考图 21 获取相应的命令/查询及输出。
**面板 2**
index=auth sourcetype="\_json" status=failed\
\| stats count by src_ip
可视化:条形图\
请参考图 22 获取相应的命令/查询及输出。
**面板 3**
index=auth sourcetype="\_json"\
\| stats count by user
可视化:柱状图\
请参考图 23 获取相应的命令/查询及输出。
标签:Homebrew安装, SOC监控, 代码示例, 安全运营, 应用安全, 扫描框架, 数据分析, 红队行动, 逆向工具