NightErth/SOC-Home-Lab-SIEM-Threat-Detection-Automated-Incident-Response
GitHub: NightErth/SOC-Home-Lab-SIEM-Threat-Detection-Automated-Incident-Response
这是一个基于云的SOC家庭实验室,用于集成SIEM、SOAR和Active Directory,实现威胁检测与自动化事件响应的模拟。
Stars: 0 | Forks: 0
# SOC 家庭实验室 — Splunk SIEM、SOAR 自动化与 Active Directory 事件响应
这是一个部署在 **Vultr** 上的基于云的 Active Directory 环境,集成了 **Splunk** 用于 SIEM 驱动的威胁检测,并使用 **Shuffle** 作为 SOAR 平台来自动化事件响应工作流。该项目模拟了一个真实的 SOC 环境,通过自定义剧本检测未授权登录并自动修复受损账户。
## 目录
- [项目概述](#project-overview)
- [架构](#architecture)
- [前置条件](#prerequisites)
- [步骤 1 — 云基础设施部署 (Vultr)](#step-1--cloud-infrastructure-provisioning-vultr)
- [步骤 2 — 网络配置与 VPC 设置](#step-2--network-configuration--vpc-setup)
- [步骤 3 — Active Directory 设置与域配置](#step-3--active-directory-setup--domain-configuration)
- [步骤 4 — Splunk 部署、日志摄入与告警配置](#step-4--splunk-deployment-log-ingestion--alert-configuration)
- [步骤 5 — 使用 Shuffle 和 Slack 集成的 SOAR 剧本](#step-5--soar-playbook-with-shuffle--slack-integration)
## 项目概述
本项目演示了如何使用行业标准工具端到端实现一个蓝队检测与响应流程。核心目标如下:
1. **构建**一个在云中功能齐全的 Active Directory 域环境。
2. 使用 Splunk 作为 SIEM,**检测**未授权或可疑的登录活动。
3. 使用 Shuffle SOAR,以 Slack 作为分析师通知渠道,**自动化**事件响应——禁用受损的域账户。
**关键技术:**
| 工具 | 角色 |
|---|---|
| [Vultr](https://www.vultr.com/) | 云基础设施提供商 |
| Windows Server 2022 | 域控制器 & 终端模拟 |
| Ubuntu Server 22.04 | Splunk 服务器主机 |
| Splunk Enterprise | SIEM — 日志摄入、关联与告警 |
| Splunk Universal Forwarder | Windows 终端上的日志传输代理 |
| Shuffle | SOAR — 自动化剧本执行 |
| Slack | SOC 分析师通知与响应渠道 |
| LDAP / Active Directory | 身份管理与用户修复目标 |
## 架构
```
┌─────────────────────────────────────────────────────────────────┐
│ Vultr Cloud (VPC) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ ADDC01 │ │ TestMac01 │ │ SplunkServer │ │
│ │ Windows 2022 │ │ Windows 2022 │ │ Ubuntu 22.04 │ │
│ │ Domain Ctrl │◄──►│ Test Machine │───►│ Splunk :8080 │ │
│ │ 2vCPU/4GB │ │ 1vCPU/2GB │ │ 4vCPU/8GB/160GB │ │
│ └──────┬───────┘ └──────┬───────┘ └────────┬──────────┘ │
│ │ │ │ │
│ └──────── VPC Private Network ────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
Splunk Alert (Webhook)
│
┌──────────────▼───────────────┐
│ Shuffle (SOAR) │
│ Automated Response │
│ Playbook: MyAutoADSpl │
└──────┬───────────────┬────────┘
│ │
┌──────▼──────┐ ┌──────▼──────┐
│ Slack │ │ Active Dir │
│ Alerts │ │ (LDAP :389) │
│ #Alerts │ │ Disable User │
└─────────────┘ └─────────────┘
```
## 前置条件
- 一个已启用计费的 [Vultr](https://www.vultr.com/) 账户
- 一个 [Splunk](https://www.splunk.com/en_us/download/splunk-enterprise.html) Enterprise 免费试用许可证
- 一个 [Shuffle](https://shuffler.io/) 账户
- 一个具有管理员权限的 [Slack](https://slack.com/) 工作区
- 一台具备 RDP 客户端和 SSH 功能的本地机器
- 基本熟悉 Windows Server 管理和 Linux 命令行
## 步骤 1 — 云基础设施部署 (Vultr)
在同一 Vultr 区域内部署三个云实例以构建实验室环境。
### 实例 1 — 域控制器 (`ADDC01`)
导航至 **产品 → 计算 → 部署新服务器** 并按如下配置:
| 设置 | 值 |
|---|---|
| 类型 | 共享 CPU |
| 操作系统 | Windows Server 2022 x64 |
| vCPU | 2 |
| 内存 | 4 GB |
| 存储 | 50 GB SSD |
| 带宽 | 3 TB/月 |
| 服务器名称 | `ADDC01` |
### 实例 2 — 测试机 (`TestMac01`)
| 设置 | 值 |
|---|---|
| 类型 | 共享 CPU |
| 操作系统 | Windows Server 2022 x64 |
| vCPU | 1 |
| 内存 | 2 GB |
| 存储 | 50 GB SSD |
| 带宽 | 2 TB/月 |
| 服务器名称 | `TestMac01` |
### 实例 3 — Splunk 服务器 (`SplunkServer`)
| 设置 | 值 |
|---|---|
| 类型 | 共享 CPU |
| 操作系统 | Ubuntu Server 22.04 |
| vCPU | 4 |
| 内存 | 8 GB |
| 存储 | 160 GB SSD |
| 带宽 | 4 TB/月 |
| 服务器名称 | `SplunkServer` |
### 访问控制 — 防火墙配置
导航至 **产品 → 网络 → 防火墙 → 添加防火墙组**,命名为 `MyFirewall-ADDC`。
配置以下入站规则,将访问限制为仅限你的 IP:
| 规则 | 协议 | 端口 | 来源 |
|---|---|---|---|
| SSH | TCP | 22 | 仅限你的 IP |
| RDP | TCP (MS RDP) | 3389 | 仅限你的 IP |
通过 **设置 → 防火墙** 将此防火墙组应用于所有三个实例。
## 步骤 2 — 网络配置与 VPC 设置
### 虚拟私有云 (VPC)
从 Vultr 实例设置中为两个 Windows 实例和 Splunk 服务器启用 VPC。VPC 连接范围限于单个区域,因此所有三个实例必须部署在同一地理区域内。
启用 VPC 后,每个实例会被分配一个私有 IP 地址。在每台 Windows 机器上配置静态私有 IP:
**开始菜单 → 网络和 Internet 设置 → 更改适配器选项 → 右键单击适配器 → 属性 → IPv4 → 使用下面的 IP 地址**
为每台机器分配其相应的 VPC 分配的静态 IP 和子网掩码。通过实例间互 ping 私有 IP 来验证连接性。
### 访问实例
**域控制器 (`ADDC01`):**
在本地机器上打开 **远程桌面连接**,使用 Vultr 控制台中的公共 IP 和凭据进行连接。
**测试机 (`TestMac01`):**
使用 `TestMac01` 的公共 IP 重复相同的 RDP 过程。
**Splunk 服务器 (`SplunkServer`):**
从终端通过 SSH 连接:
```
ssh username@
```
连接后,从 Vultr 控制台为 Splunk 实例启用 VPC 并应用防火墙组。
## 步骤 3 — Active Directory 设置与域配置
### 将 `ADDC01` 提升为域控制器
通过 RDP 登录 `ADDC01` 并打开 **服务器管理器**。导航至:
**添加角色和功能 → 服务器角色 → Active Directory 域服务 → 添加功能 → 安装**
安装完成后,单击 **将此服务器提升为域控制器** 并进行配置:
| 设置 | 值 |
|---|---|
| 部署操作 | 添加新林 |
| 根域名 | `Mylab.local` |
| 目录服务还原模式 (DSRM) 密码 | *(设置一个强密码)* |
完成向导并允许服务器重启。重启后,该实例将作为完全配置的 Active Directory 域控制器运行。
### 创建域用户
打开 **Active Directory 用户和计算机**:
**开始 → Active Directory 用户和计算机 → 展开 `Mylab.local` → 用户 → 右键单击 → 新建 → 用户**
创建一个标准域用户(例如,`Jane Doe` / 用户名:`JDoe`),设置一个安全的密码。
### 将 `TestMac01` 加入域
通过 RDP 登录 `TestMac01` 并导航至:
**设置 → 系统 → 关于 → 重命名此电脑(高级) → 成员:域 → 输入 `Mylab``
在提示时提供域管理员凭据并重启机器。
重启后,登录屏幕应显示 **登录到:MYLAB**,确认成功加入域。使用 `Jane Doe` 的凭据登录以验证。
### 为域用户启用 RDP
在 `TestMac01` 上,导航至:
**开始 → 允许远程连接到此计算机 → 选择用户 → 添加 → 输入 `JDoe``
你现在可以使用域凭据 RDP 到 `TestMac01`:
```
Username: MYLAB\JDoe
Password:
```
## 步骤 4 — Splunk 部署、日志摄入与告警配置
### 在 Ubuntu 上安装 Splunk Enterprise
SSH 进入 Splunk 服务器并更新系统:
```
apt-get update && apt-get upgrade -y
```
从 [Splunk 官网](https://www.splunk.com/en_us/download/splunk-enterprise.html) 下载 Splunk Enterprise `.deb` 包(免费试用版 — Linux `.deb`)。复制 `wget` 下载链接并运行:
```
wget -O splunk.deb ''
dpkg -i splunk.deb
```
启动 Splunk 并完成初始配置:
```
cd /opt/splunk/bin
./splunk start
```
在提示时设置管理员用户名和密码。通过防火墙和 Vultr 防火墙组允许端口 `8080`(TCP,端口 `8080`,仅限你的 IP):
```
ufw allow 8080
```
通过浏览器访问 `http://:8080` 并使用管理员凭据登录。
### 初始 Splunk 配置
- **时区:** 用户菜单 → 首选项 → 将时区设置为 `GMT` → 应用
- **附加组件:** 应用程序 → 查找更多应用 → 安装 **Splunk Add-on for Microsoft Windows**
- **索引:** 设置 → 索引 → 新索引 → 名称:`MyProjAD` → 保存
- **接收端口:** 设置 → 转发和接收 → 配置接收 → 新接收端口 → `9997`
通过主机防火墙允许转发器端口:
```
ufw allow 9997
```
### 在 Windows 终端上安装 Splunk Universal Forwarder
从 [Splunk 官网](https://www.splunk.com/en_us/download/universal-forwarder.html) 下载 Universal Forwarder 并在 `ADDC01` 和 `TestMac01` 上安装。
安装过程中,将 **接收索引器** 配置为:
| 设置 | 值 |
|---|---|
| 索引器主机 | `` |
| 索引器端口 | `9997` |
### 配置 `inputs.conf`
导航到 `C:\Program Files\SplunkUniversalForwarder\etc\system\local\`,以管理员身份打开或创建 `inputs.conf`。添加以下配置节:
```
[WinEventLog://Security]
index = MyProjAD
disabled = False
```
重启 Splunk Forwarder 服务以应用更改:
**服务(以管理员身份运行) → SplunkForwarder → 登录 → 本地系统账户 → 应用 → 重启**
通过运行以下搜索在 Splunk 中验证日志摄入:
```
index=MyProjAD
```
在域控制器 (`ADDC01`) 上重复 Universal Forwarder 安装和 `inputs.conf` 配置。
### 模拟暴力破解 / 未授权登录活动
为模拟真实世界的攻击流量,临时将 RDP 开放到公共互联网:
**Vultr 防火墙 → 修改 MS RDP 规则 → 允许来自任何位置的 TCP 端口 `389`**
这将使终端暴露于外部登录尝试,生成 Splunk 检测查询所使用的 `EventCode 4624`(成功登录)事件。
### 创建 Splunk 检测告警
导航至 **应用程序 → 搜索和报告**,运行以下检测查询:
```
index=MyProjAD EventCode=4624 (Logon_Type=7 OR Logon_Type=10)
Source_Network_Address=* Source_Network_Address=40.*
| stats count by _time, ComputerName, Source_Network_Address, user, Logon_Type
```
**查询分解:**
| 子句 | 目的 |
|---|---|
| `index=MyProjAD` | 将搜索范围限定在实验室专用的 Splunk 索引 |
| `EventCode=4624` | 仅过滤 Windows 成功登录事件 |
| `Logon_Type=7 OR Logon_Type=10` | 针对交互式(解锁)和 RDP 登录类型 |
| `Source_Network_Address=40.*` | 过滤外部源 IP(模拟公共互联网流量) |
| `stats count by ...` | 按时间戳、主机名、源 IP、用户和登录类型聚合事件 |
将搜索保存为告警并按如下配置:
| 设置 | 值 |
|---|---|
| 告警名称 | `ADDC01-Unauthorized_Success_Login_Alert` |
| 调度 | Cron: `* * * * *` (每分钟) |
| 触发条件 | 每个结果 |
| 触发操作 | 添加到已触发告警(严重级别:高) |
在 **活动 → 已触发告警** 处监控已触发的告警。
## 步骤 5 — 使用 Shuffle 和 Slack 集成的 SOAR 剧本
### 概述
剧本 (`MyAutoADSpl`) 在告警触发时执行以下逻辑:
```
Splunk Alert ──► Shuffle Webhook ──► Slack Notification
│
SOC Analyst Review
│
[Disable User? Yes / No]
│
Active Directory (LDAP)
Disable Domain Account
│
Verify Account Status
│
Slack Confirmation Message
```
### 在 Shuffle 中设置工作流
1. 登录 [Shuffle](https://shuffler.io/) 并导航至 **工作流 → 创建工作流**。
2. 将工作流命名为 `MyAutoADSpl` 并保存。
### 步骤 5a — Splunk Webhook 触发器
在工作流内部,添加一个 **Webhook** 应用程序:
- 名称:`Splunk-Alert`
- 复制生成的 Webhook URL。
在 Splunk 中,导航至 **应用程序 → 搜索和报告 → 告警 → ADDC01-Unauthorized_Success_Login_Alert → 编辑告警 → 触发操作 → 添加操作 → Webhook** → 粘贴 Shuffle 的 Webhook URL → 保存。
### 步骤 5b — Slack 通知
创建一个专用的 Slack 工作区和一个名为 `#alerts` 的私有频道,用于接收 SOC 通知。
在 Shuffle 工作流中,添加 **Slack** 应用程序:
- 通过 OAuth 使用你的 Slack 账户进行认证。
- 将应用程序节点命名为:`SlackAlertNotification`。
- 配置消息 **文本** 字段,包含来自 Splunk 告警负载的动态值:
```
🚨 Unauthorized Login Detected
Alert: ADDC01-Unauthorized_Success_Login_Alert
Time: $exec.result._time
User: $exec.result.user
Source IP: $exec.result.Source_Network_Address
```
- 将 **频道** 字段设置为你的 `#alerts` 频道 ID(可从 Slack URL 中获取)。
- 在工作流画布中将 **Splunk Webhook** 节点连接到 **SlackAlertNotification** 节点。
### 步骤 5c — 分析师决策(用户输入触发器)
添加一个 **用户输入** 触发器,引入人工审批步骤:
- 名称:`User_Action`
- 提示:`Would you like to disable this user?`
- 输入方式:**电子邮件** → 输入你的分析师电子邮件地址。
- 将 `User_Action` 连接到 `SlackAlertNotification` 节点。
### 步骤 5d — Active Directory 集成 (LDAP)
通过 Vultr 防火墙允许来自 Shuffle IP 的 LDAP 流量:
**Vultr 防火墙 → 添加规则 → TCP → 端口 `389` → 来自任何位置 → 保存**
将 **Active Directory** 应用程序添加到工作流并进行认证:
| 字段 | 值 |
|---|---|
| 服务器 | `` |
| 端口 | `389` |
| 域 | `Mylab` |
| 用户名 | 域管理员 |
| 密码 | 域管理员密码 |
| 基本 DN | *(在 PowerShell 中使用 `Get-ADDomain` 检索 → 复制 `UsersContainer` 值)* |
| 使用 SSL | `False` |
配置 Active Directory 应用程序节点:
- **操作:** `Disable User`
- **SamAccountName:** `$exec.result.user`
- **搜索库:** ``
### 步骤 5e — 账户状态验证
添加第二个名为 `Get_User_Attributes` 的 **Active Directory** 应用程序节点,并将其连接到第一个 AD 节点。这将在修复后获取用户的当前属性,以确认账户已被禁用。
添加一个名为 `Check_AD_User` 的 **Shuffle Tools** (Repeat Back to Me) 应用程序节点:
- **操作:** `Repeat back to me`
- **调用:** `Get_User_Attributes → UserAccountControl`
将 `Check_AD_User` 连接到 `Get_User_Attributes` 节点。
### 步骤 5f — 在 Slack 中发送修复确认
添加最终的 **Slack** 应用程序节点,以发送账户禁用操作的确认:
- **文本:** `✅ Account $exec.result.user has been DISABLED.`
- **频道:** `<#alerts channel ID>`
使用以下 **行条件** 将此节点连接到 `Check_AD_User`:
```
if $get_user_attributes.attributes.userAccountControl Contains "ACCOUNTDISABLED"
```
这确保了只有在验证了账户确实在 Active Directory 中被禁用后,才会发送确认消息。
## 工作流总结
| 步骤 | 组件 | 操作 |
|---|---|---|
| 1 | Vultr | 部署 3 个云实例(DC、测试机、Splunk) |
| 2 | Vultr VPC + 防火墙 | 在私有网络上隔离实例,限制公共访问 |
| 3 | Windows Server / AD | 提升 DC、创建域、加入终端、配置用户 |
| 4 | Splunk + UF | 摄入 Windows 安全日志、构建检测查询、创建告警 |
| 5 | Shuffle + Slack + AD | 自动化分析师通知和用户账户修复 |
## 安全注意事项
- 尽可能将防火墙规则限制为仅限你的 IP。步骤 4 中的公共 RDP 暴露仅为模拟目的——测试后请撤销此规则。
- 为所有域账户、Splunk 和 Shuffle 认证使用强且唯一的密码。
- 本实验室中的 LDAP 运行在端口 389(未加密)。在生产环境中,请使用具有有效 SSL 证书的 **LDAPS(端口 636)**。
- 完成实验室后,轮换所有凭据。
## 参考资料
- [Splunk 文档](https://docs.splunk.com/)
- [Shuffle SOAR 文档](https://shuffler.io/docs)
- [Microsoft Active Directory DS 概述](https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview)
- [Vultr 文档](https://docs.vultr.com/)
- [Windows 安全事件 ID 参考](https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/)
标签:AMSI绕过, Checkov, Slack 集成, SOAR, SOC 实验室, Terraform 安全, Ubuntu 服务器, VPC 配置, Vultr, Windows 服务器, 云部署, 威胁检测, 安全运营中心, 日志收集, 未授权登录检测, 活动目录, 混合加密, 网络安全, 网络映射, 自动化剧本, 蓝队防御, 账户管理, 速率限制, 隐私保护