nikhil-bhatra/SplunkSOC-Lab

GitHub: nikhil-bhatra/SplunkSOC-Lab

基于 Ubuntu、Kali Linux 和 Splunk 搭建的 SOC 家庭实验室,用于模拟网络攻击、集中收集系统日志并实践威胁检测与事件响应。

Stars: 0 | Forks: 0

# 🛡️ SOC 家庭实验室 — 威胁检测与事件分析 **一个完全虚拟化的安全运营中心 (SOC),旨在模拟真实世界的网络攻击,收集和分析系统日志,并使用行业标准工具监控安全事件。** ![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?style=flat&logo=ubuntu&logoColor=white) ![Kali Linux](https://img.shields.io/badge/Kali_Linux-557C94?style=flat&logo=kalilinux&logoColor=white) ![Splunk](https://img.shields.io/badge/Splunk-000000?style=flat&logo=splunk&logoColor=white) ![Metasploit](https://img.shields.io/badge/Metasploit-2596CD?style=flat&logo=metasploit&logoColor=white)
## 📌 目录 - [概述](#-overview) - [实验室架构](#-lab-architecture) - [工具与技术](#-tools--technologies) - [设置与安装](#-setup--installation) - [攻击模拟](#-attack-simulations) - [日志收集与分析](#-log-collection--analysis) - [Splunk 检测查询](#-splunk-detection-queries-spl) - [告警与仪表板](#-alerts--dashboards) - [关键发现](#-key-findings) - [展示技能](#-skills-demonstrated) - [未来改进](#-future-improvements) ## 📖 概述 本项目模拟了一个完全建立在家庭实验室设置上的真实 SOC 环境。该实验室使用 **Kali Linux** 作为攻击机,**Ubuntu** 作为受害者/目标机,并使用 **Splunk** 作为 SIEM 平台来实时检测、监控和分析威胁。 **本项目目标:** - 在安全、隔离的环境中模拟常见的网络攻击 - 收集系统/网络日志并将其转发到集中式 SIEM - 编写检测规则并构建仪表板以识别威胁 - 执行实战事件分析并培养响应技能 ## 🏗️ 实验室架构 ``` ┌─────────────────────┐ ┌─────────────────────┐ │ Kali Linux │ ──────▶ │ Ubuntu Server │ │ (Attacker VM) │ Attack │ (Victim/Target) │ │ │ │ Splunk UF Agent │ └─────────────────────┘ └──────────┬──────────┘ │ Logs forwarded via port 9997 │ ▼ ┌──────────────────────┐ │ Splunk Enterprise │ │ (on Ubuntu Host) │ │ Search, Alert, │ │ Dashboard & Monitor │ └──────────────────────┘ ``` ## 🛠️ 工具与技术 | 工具 | 角色 | 类别 | |---|---|---| | **Ubuntu** | 受害者机器与 Splunk 主机 | 目标 | | **Kali Linux** | 攻击模拟平台 | 攻击者 | | **Splunk Enterprise** | SIEM — 日志摄取、搜索、告警、仪表板 | SIEM | | **Splunk Universal Forwarder** | 将日志从 Ubuntu 传送到 Splunk 索引器 | Agent | | **Nmap** | 网络扫描和服务枚举 | 侦察 | | **Metasploit** | 用于攻击模拟的漏洞利用框架 | 漏洞利用 | | **Hydra** | 通过 SSH 进行暴力破解攻击模拟 | 暴力破解 | | **Syslog / Auth.log** | Linux 系统日志源 | 日志源 | ## ⚙️ 设置与安装 ### 前置条件 - 虚拟化软件:**VirtualBox** 或 **VMware Workstation** - 最低配置:**8GB 内存**,**50GB 可用磁盘空间** - **Ubuntu** 和 **Kali Linux** 的 ISO 镜像 - **Splunk Enterprise**(可在 [splunk.com](https://www.splunk.com) 获取免费试用版) ### 第一步 — 设置 Ubuntu(目标机 + Splunk 主机) ``` sudo apt update && sudo apt upgrade -y # 安装 Splunk Enterprise wget -O splunk.deb 'https://download.splunk.com/...' sudo dpkg -i splunk.deb sudo /opt/splunk/bin/splunk start --accept-license sudo /opt/splunk/bin/splunk enable boot-start ``` ### 第二步 — 设置 Kali Linux(攻击机) ``` # 验证已安装 key 工具 nmap --version msfconsole --version hydra --version ``` ### 第三步 — 安装并配置 Splunk Universal Forwarder ``` # 安装 forwarder wget -O splunkforwarder.deb 'https://download.splunk.com/...' sudo dpkg -i splunkforwarder.deb # 将其指向你的 Splunk indexer sudo /opt/splunkforwarder/bin/splunk add forward-server :9997 # 添加要监控的 log sources sudo /opt/splunkforwarder/bin/splunk add monitor /var/log/syslog sudo /opt/splunkforwarder/bin/splunk add monitor /var/log/auth.log sudo /opt/splunkforwarder/bin/splunk add monitor /var/log/kern.log # 启动 forwarder sudo /opt/splunkforwarder/bin/splunk start ``` ### 第四步 — 配置 Splunk 以接收日志 在 **Splunk Web UI** 中: ``` Settings → Forwarding and Receiving → Configure Receiving → New Receiving Port → 9997 ``` ## ⚔️ 攻击模拟 ### 01 — 使用 Nmap 进行网络扫描 ``` # Full service 和 version detection 扫描 nmap -sV -sC -A # Stealth SYN 扫描 nmap -sS -T4 ``` | 详情 | 值 | |---|---| | **目标** | 枚举正在运行的服务并映射攻击面 | | **生成的日志** | `/var/log/syslog` | | **入侵指标** | 快速连续的端口连接尝试 | ### 02 — 使用 Hydra 进行 SSH 暴力破解 ``` # 使用 rockyou.txt wordlist 爆破 SSH 登录 hydra -l root -P /usr/share/wordlists/rockyou.txt ssh:// # 针对多个用户 hydra -L users.txt -P /usr/share/wordlists/rockyou.txt ssh:// ``` | 详情 | 值 | |---|---| | **目标** | 模拟通过 SSH 进行的撞库 / 暴力破解攻击 | | **生成的日志** | `/var/log/auth.log` | | **入侵指标** | 来自单一 IP 的数百条“Failed password”记录 | ### 03 — 使用 Metasploit 进行系统漏洞利用 ``` # 启动 Metasploit msfconsole # 搜索适用的 exploits msf> search type:exploit platform:linux msf> use exploit/ msf> set RHOSTS msf> set LHOST msf> run ``` | 详情 | 值 | |---|---| | **目标** | 模拟完整的系统入侵尝试 | | **生成的日志** | `/var/log/syslog`, `/var/log/kern.log` | | **入侵指标** | 未知进程、异常网络连接 | ## 📊 日志收集与分析 ### 监控的日志源 | 日志文件 | 路径 | 捕获内容 | |---|---|---| | **Auth Log** | `/var/log/auth.log` | SSH 登录、sudo 使用情况、失败的身份验证 | | **Syslog** | `/var/log/syslog` | 常规系统事件和服务活动 | | **Kernel Log** | `/var/log/kern.log` | 内核级事件、设备活动 | | **dpkg Log** | `/var/log/dpkg.log` | 软件安装和卸载事件 | ## 🔎 Splunk 检测查询 (SPL) ### 检测 SSH 暴力破解 ``` index=main source="/var/log/auth.log" "Failed password" | stats count by src_ip, user | where count > 10 | sort - count ``` ### 检测多次失败后的成功登录 ``` index=main source="/var/log/auth.log" ("Failed password" OR "Accepted password") | stats count(eval(match(_raw,"Failed"))) AS failures, count(eval(match(_raw,"Accepted"))) AS successes by src_ip | where failures > 5 AND successes > 0 ``` ### 检测 Nmap 扫描特征 ``` index=main source="/var/log/syslog" ("port scan" OR "nmap" OR "SYN") | table _time, host, src_ip, _raw | sort - _time ``` ### 监控新用户账号创建 ``` index=main source="/var/log/auth.log" ("useradd" OR "adduser" OR "new user") | table _time, host, _raw ``` ### 检测 Sudo 命令使用 ``` index=main source="/var/log/auth.log" "sudo" | rex field=_raw "sudo:\s+(?\S+)" | table _time, sudo_user, host, _raw ``` ## 📈 告警与仪表板 ### 已配置的 Splunk 告警 | 告警名称 | 触发条件 | 严重程度 | |---|---|---| | 检测到 SSH 暴力破解 | 5 分钟内来自同一 IP 的 10 次以上失败 SSH 登录 | 🔴 高危 | | 失败后的登录 | 同一 IP 在 5 次以上失败后成功登录 | 🔴 高危 | | 创建了新用户账号 | 创建了新的系统账号 | 🟡 中危 | | 执行了 Sudo 命令 | 任何 sudo 使用情况均被记录并标记以供审查 | 🟡 中危 | ### 在 Splunk 中构建的仪表板 - **安全概览** — 失败登录、活动告警和网络事件的实时统计 - **身份验证监控器** — 按 IP 地址和用户名细分的登录尝试时间线 - **顶级威胁源** — 产生最多可疑活动的 IP 排名列表 ## 🔍 关键发现 - **暴力破解攻击会产生海量日志** — Hydra 在几分钟内产生了数百条失败的身份验证记录,这说明了为什么账户锁定策略和速率限制至关重要 - **Nmap 扫描会留下清晰的特征** — 一旦你知道要查找什么,通过针对性的 Splunk 查询就很容易检测到端口扫描模式 - **实时告警非常有效** — Splunk 的告警引擎在每次模拟攻击发生后的几秒钟内就标记了可疑活动 - **日志讲述了一个完整的故事** — 即使攻击机上没有安装 agent,仅凭受害者日志就提供了每个攻击阶段的完整时间线,可用于事后取证分析 - **关联失败与成功的登录至关重要** — 在多次失败后的一次成功登录,比单纯的失败尝试是更强的入侵指标 ## 🎓 展示技能 - ✅ 设置和管理虚拟化多虚拟机 (VM) 实验室环境 - ✅ 安装和配置 Splunk Enterprise 作为 SIEM - ✅ 部署和管理 Splunk Universal Forwarder - ✅ 使用 Nmap、Hydra 和 Metasploit 模拟攻击 - ✅ 编写用于威胁检测的 SPL (Splunk Processing Language) 查询 - ✅ 在 Splunk 中构建仪表板和实时告警 - ✅ 分析日志以识别入侵指标 - ✅ 通过实践攻击性模拟了解攻击者的方法论 - ✅ Linux 系统管理和日志管理 - ✅ 事件响应和安全监控的基础知识 ## 🚀 未来改进 - [ ] 添加 **Windows 10 VM** 作为额外目标,用于分析 Windows Event Log - [ ] 集成 **Snort 或 Suricata** 作为基于网络的入侵检测系统 (NIDS) - [ ] 部署 **Wazuh** 作为基于主机的入侵检测系统 (HIDS) - [ ] 模拟高级攻击场景 — 提权、横向移动、持久化 - [ ] 构建由 Splunk 告警触发的自动化**事件响应剧本** - [ ] 将实时**威胁情报源**集成到 Splunk 中以进行实时 IoC 匹配 - [ ] 设置 **pfSense** 作为网络防火墙,以捕获和分析边界流量 ## 👤 作者 Nikhil Sharma - GitHub: [@nikhil-bhatra](https://github.com/nikhil-bhatra) - LinkedIn: [linkedin.com/in/nikhil-bhatra](https://www.linkedin.com/in/nikhil-sharma-75599721b/) ## 📄 许可证 本项目**仅供教育用途**。 所有攻击模拟均在完全隔离的实验室环境中进行。
⭐ 如果您觉得这个项目有用,请考虑给它点个 Star!
标签:CTI, 安全运营, 库, 应急响应, 扫描框架