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 ```
标签:安全运营, 家庭实验室, 应用安全, 扫描框架, 管理员页面发现