angelotayco100/soc-homelab
GitHub: angelotayco100/soc-homelab
一个基于 Splunk SIEM 的自建安全运营中心家庭实验室,用于练习日志接入、对手模拟和检测工程等真实 SOC L1 工作流。
Stars: 0 | Forks: 0
# SOC L1 家庭实验室 — Splunk SIEM (VMware + 物理终端)
一个自建的 Security Operations Center 环境,旨在练习真实的 SOC L1
工作流 —— 包括日志接入、字段提取,以及(正在进行中的)对手模拟
和检测工程 —— 混合使用了虚拟机和真实的物理
终端,因此遥测数据反映的是真实的设备,而不仅仅是隔离的实验室虚拟机。
## 架构
```
┌─────────────────────────────────────────┐ ┌─────────────────────────┐
│ VMware Workstation (local) │ │ Physical ThinkPad X230 │
│ │ │ (Arch Linux + i3wm, │
│ ┌───────────────┐ ┌──────────────────┐ │ │ formerly Fedora 43) │
│ │ Kali Linux │ │ Ubuntu Server │ │ │ connects over home │
│ │ - attacker │ │ Splunk Enterprise│◄┼────────┤ WiFi, forwards logs │
│ │ endpoint │ │ (SIEM indexer) │ │ UF │ via Universal │
│ │ - also running │ │ │ │ 9997 │ Forwarder │
│ │ scripted UF │ │ │ │ │ │
│ │ input (journal) │ │ │ │ │ │
│ └───────────────┘ └──────────────────┘ │ └─────────────────────────┘
│ │
└─────────────────────────────────────────┘
Home router (real DHCP, real LAN) — Ubuntu Server: 192.168.100.187
```
- **Hypervisor:** VMware Workstation (本地托管)
- **SIEM:** 位于专用 Ubuntu Server 虚拟机上的 Splunk Enterprise
- **攻击终端:** Kali Linux 虚拟机
- **真实终端 (非虚拟机):** ThinkPad X230 本身,通过家庭 WiFi 连接 —— 之所以特意这样选择,是为了让接入的遥测数据能够反映真实网络上的实际物理设备,而不仅仅是隔离的虚拟交换机上的虚拟机到虚拟机流量
- **网络:** 最初完全位于 VMware 内部网络 (`192.168.94.x`) 内。后来重新配置为桥接到真实的家庭局域网 (Ubuntu Server 落在 `192.168.100.187`),专门为了让只能通过 WiFi 访问的物理笔记本电脑能够将日志发送给 indexer
## 目前已完成的工作
- ✅ 在 VMware 托管的 Ubuntu Server 虚拟机上部署了 Splunk Enterprise (在早期尝试 Proxmox 遇到了严重的资源瓶颈之后 —— 请参阅 [挑战](#challenges--fixes))
- ✅ 在 Kali 虚拟机和物理 ThinkPad 终端上都安装了 Splunk Universal Forwarder
- ✅ 将 indexer 配置为在 TCP 端口 9997 上接收 forwarder 流量
- ✅ 转发真实的 OS 级别日志:`syslog`、`auth.log` (`linux_secure`)、systemd journal 数据
- ✅ 在 Kali 虚拟机上编写了 **自定义脚本输入** (`stream_journal.sh`),将其 systemd journal 作为 `sourcetype=linux_systemd` 流式传输到 Splunk 中。之前发现 `splunk add script` 并不是一个有效的 UF 子命令,必须以不同的方式进行配置 (改为通过 `inputs.conf` 作为脚本输入)
- ✅ 验证了端到端的交付 —— 从 `0.0.0.0:9997` 的非活动转发,到确认处于活动状态的转发,再到真实事件登陆到 Splunk (在一次验证过程中,仅来自 `fedora` 主机在 24 小时内就产生了 **106 个事件**)
- ✅ 使用 Splunk 的自动 sourcetype 提取 (`linux_secure`、`syslog`、`linux_systemd`) 和手动提取 (Field Extractor、`| spath`) 处理非标准 payload,将原始数据转化为结构化数据
## 下一步计划
- ⬜ 从 Kali 虚拟机针对 Ubuntu Server / 物理终端运行对手模拟 (Nmap 侦察、暴力破解尝试)
- ⬜ 在 Wireshark 中捕获该流量,以根据实际的攻击签名验证日志的保真度
- ⬜ 构建 SPL 关联搜索以检测模拟攻击
- ⬜ 将有效的搜索转换为真实的 Splunk 告警 (带有触发条件的已保存搜索)
- ⬜ 在 [`/detections`](./detections) 中分别记录每个检测 —— 查询、MITRE ATT&CK 映射、误报说明
## 挑战与修复
**问题:** Proxmox VE 遇到了严重的资源瓶颈 —— 即使在清除临时数据和扩展存储之后,也无法为额外的虚拟机分配计算资源。
**修复:** 在这个项目中放弃了 Proxmox,并在 VMware Workstation 上进行了重建,在这里硬件分配不再是一个阻碍。
**问题:** 在 VMware 中扩展了 Ubuntu Server 的虚拟磁盘后,操作系统并没有自动识别新的空间。
**修复:** 手动扩展了卷组和文件系统:
```
sudo growpart /dev/sda 3
sudo pvresize /dev/sda3
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
```
**问题:** 在重新配置网络后 (从 VMware 的内部 `192.168.94.x` 范围移出到真实的家庭局域网,以便物理笔记本电脑终端可以连接到 indexer),Universal Forwarder 重复进入非活动状态 (`0.0.0.0:9997`)。陈旧的 `outputs.conf` 一直指向旧的地址。
**修复:**
```
sudo /opt/splunkforwarder/bin/splunk stop
sudo rm /opt/splunkforwarder/etc/system/local/outputs.conf
sudo /opt/splunkforwarder/bin/splunk start
sudo /opt/splunkforwarder/bin/splunk add forward-server 192.168.100.187:9997
```
**问题:** 希望将 Kali 虚拟机自身的 systemd journal 流式传输到 Splunk 中,但是 `sudo splunk add script ...` 返回了 `Command error: The subcommand 'script' is not valid for command 'add'.`
**修复:** 意识到脚本输入无法通过该 CLI 子命令添加 —— 编写了 `stream_journal.sh` 并将其注册为脚本输入,已确认可以正常工作,`linux_systemd` sourcetype 的事件已从 Kali 主机成功登陆到 Splunk。
**问题 (硬件问题,而非 Splunk):** 运行 Fedora 43 (GNOME/Sway) 的 ThinkPad X230 (16GB RAM) 出现了严重的卡顿 —— 尤其是在 Firefox 中 —— 并且会迅速过热,尽管在理论上 RAM 已经绰绰有余。
**修复:** 清除了 Fedora,将日常驱动/终端笔记本电脑迁移到搭载 i3wm 的 Arch Linux。立刻变得更轻量、更凉爽。目前仍在积极调整 i3 配置 (polybar、picom、rofi) —— 这是一个持续进行的次要工作,与 Splunk 实验室本身是分开的。
## 验证命令参考
| 用途 | 命令 |
|---|---|
| 列出终端上受监控的日志文件 | `sudo /opt/splunkforwarder/bin/splunk list monitor` |
| 检查 forwarder 连接状态 | `sudo /opt/splunkforwarder/bin/splunk list forward-server` |
| 将 UF 连接到 indexer | `sudo /opt/splunkforwarder/bin/splunk add forward-server :9997` |
| 测试到 indexer 端口的原始连接 | `nc -zv 9997` |
| 基础搜索验证 | `index=main sourcetype=linux_secure` |
## 截图
*(待添加 —— 请参阅 [`/screenshots`](./screenshots) 获取捕获清单)*
## 仓库结构
```
soc-homelab/
├── README.md ← you are here
├── screenshots/ ← infrastructure, ingestion, and search evidence
├── detections/ ← one write-up per detection rule (once built)
└── notes/
└── build-log.md ← full chronological build/troubleshooting log
```
标签:安全运营, 家庭实验室, 应用安全, 扫描框架, 管理员页面发现