kamithi/SOC-analyst-home-labs
GitHub: kamithi/SOC-analyst-home-labs
一个结构化的 SOC 分析师家庭实验室文档,指导用户搭建隔离的虚拟安全环境,并通过 Splunk 进行真实安全事件的模拟检测与响应分析。
Stars: 1 | Forks: 0
🛡️ SOC Analyst 家庭实验室



## 📋 目录
- [实验室概述](#lab-overview)
- [环境](#environment)
- [设置指南](#setup-guide)
- [阶段 1:VMware Workstation Pro](#phase-1-vmware-workstation-pro)
- [阶段 2:Kali Linux VM](#phase-2-kali-linux-vm)
- [阶段 3:Windows 10 VM](#phase-3-windows-10-vm)
- [阶段 4:Splunk Enterprise](#phase-4-splunk-enterprise)
- [阶段 5:Splunk Universal Forwarder](#phase-5-splunk-universal-forwarder)
- [阶段 6:网络验证](#phase-6-network-verification)
- [实验室练习](#labs)
- [实验 1:暴力破解检测](#lab-1--brute-force-detection)
- [实验 2:网络侦察与端口扫描检测](#lab-2--network-reconnaissance--port-scan-detection)
- [实验 3:Beaconing / C2 检测](#lab-3--beaconing--c2-detection)
- [MITRE ATT&CK 映射](#mitre-attck-mapping)
- [关键事件 ID](#key-event-ids)
- [作者](#author)
## 🎯 实验室概述
本家庭实验室通过模拟真实世界的系统和场景,提供网络安全领域的实践经验。在整个设置过程中,您将操作虚拟机、网络和安全工具,以了解如何检测和管理威胁。
最终,您将掌握以下实用技能:
- **系统配置**与虚拟化
- **日志分析**与 SIEM 查询编写 (SPL)
- **事件响应**生命周期 (检测 → 分类 → 遏制 → 调查 → 升级 → 补救)
- 使用 Windows 事件日志和 Sysmon 进行**威胁检测**
- **MITRE ATT&CK 框架**映射
### 实验室路线图
| # | 场景 | 关键技能 | MITRE |
|---|----------|----------|-------|
| 1 | [暴力破解检测](#lab-1--brute-force-detection) | 失败登录分析,阈值告警 | T1110.001 |
| 2 | [网络侦察](#lab-2--network-reconnaissance--port-scan-detection) | 端口扫描检测,SYN 分析 | T1046, T1595 |
| 3 | [C2 Beaconing](#lab-3--beaconing--c2-detection) | 时间分析,连接模式 | T1071 |
| 4 | 权限提升检测 | 进程分析,token 操控 | T1134 |
| 5 | 恶意软件检测 | 行为分析,哈希校验 | T1055 |
| 6 | 规则调优 | 减少误报,阈值优化 | — |
| 7 | 钓鱼分析 | 电子邮件取证,URL 分析 | T1566 |
## 🖥️ 环境
| 组件 | 详情 |
|-----------|---------|
| **宿主机** | 物理笔记本电脑/台式机 (Windows 10/11) |
| **Hypervisor** | VMware Workstation Pro 25.x |
| **攻击端 VM** | Kali Linux (VM 1) |
| **目标 VM** | Windows 10 (VM 2) |
| **SIEM** | Splunk Enterprise (位于宿主机) |
| **Forwarder** | Splunk Universal Forwarder (位于 Win10) |
| **EDR** | Microsoft Sysmon (位于 Win10) |
### 网络架构
```
+-----------------------------------------+
| HOST MACHINE |
| +---------------------------------+ |
| | Splunk Enterprise | |
| | http://localhost:8000 | |
| +---------------------------------+ |
| | |
| VMnet1 (Host-only) |
| 192.168.x.0/24 |
| | | |
| +----+----+ +----+----+ |
| | Kali | | Win10 | |
| | Linux |<--> | Target | |
| | Attacker| | Victim | |
| +---------+ +--------+ |
+-----------------------------------------+
```
## 🔧 设置指南
### 前置条件
| 要求 | 规格 | 备注 |
|-------------|---------------|-------|
| 宿主机 RAM | 16–32 GB | 为 VM 分配 12–16 GB |
| 存储 | 150+ GB 可用空间 | Kali: 80 GB, Win10: 60 GB |
| CPU | 4+ 核并支持虚拟化 | BIOS 中启用 Intel VT-x / AMD-V |
| OS | Windows 10/11 宿主机 | 需要管理员权限 |
| 网络 | 需要互联网下载 | VM 使用隔离网络 |
### 阶段 1:VMware Workstation Pro
#### 步骤 1 — 下载 VMware
VMware 现归 Broadcom 所有。所有下载均需免费的 Broadcom 账号。
1. 访问:[https://support.broadcom.com](https://support.broadcom.com)
2. 注册免费账号 (验证电子邮件)
3. 导航至:**My Downloads → VMware Workstation Pro**
4. 选择适用于 Windows 的 **25.x** (最新稳定版)
5. 下载 `.exe` 安装程序
#### 步骤 2 — 安装 VMware
以管理员身份运行安装程序。使用默认设置,但以下例外:
- 取消勾选 **"Join the VMware Customer Experience..."** 以保护隐私
- 首次启动时,选择 **"I want to use VMware Workstation 25 for Personal Use"** (免费层级 — 全功能版)
#### 步骤 3 — 配置虚拟网络
打开 **Edit → Virtual Network Editor** (点击 "Change Settings" 并批准 UAC)。
确认存在以下网络:
| 名称 | 类型 | 子网 | 用途 |
|------|------|--------|---------|
| VMnet1 | Host-only | 192.168.x.0 | 隔离的攻击实验网络 |
| VMnet8 | NAT | 192.168.y.0 | 用于更新的互联网访问 |
#### 步骤 4 — 设置内存偏好
**Edit → Preferences → Memory**
- 预留内存:所有运行中的 VM 总计 **12–16 GB**
**Edit → Preferences → Workspace**
- 默认 VM 位置:`C:\Users\YourName\Documents\Virtual Machines\`
#### 步骤 5 — 验证 VMware 服务
```
Get-Service -Name "VMware*" | Select-Object Name, Status
```
所有关键服务均应显示为 **Running**。
### 阶段 2:Kali Linux VM
#### 步骤 6 — 下载 Kali Linux ISO
1. 访问:[https://www.kali.org/get-kali/#kali-installer-images](https://www.kali.org/get-kali/#kali-installer-images)
2. 下载 **64-bit Installer Image**
3. 验证 SHA256 校验和:
```
Get-FileHash "kalilinux-2025.2-installer-amd64.iso" -Algorithm SHA256
```
#### 步骤 7 — 创建 Kali VM
**File → New Virtual Machine → Typical**
| 设置 | 值 |
|---------|-------|
| 安装程序光盘映像 | 浏览至 Kali ISO |
| 客户机 OS | Linux → Debian 12.x 64-bit |
| VM 名称 | `kali-attacker` |
| 位置 | `C:\Users\YourName\Documents\Virtual Machines\Kali Linux\` |
| 磁盘大小 | 80 GB (存储为单个文件) |
| 内存 | 4096 MB |
| 处理器 | 2 核,每个处理器 2 核 |
| 网络 | NAT (用于安装/更新) |
#### 步骤 8 — 安装 Kali Linux
启动 VM 并选择 **Graphical Install**:
| 设置 | 值 |
|---------|-------|
| 语言 | English |
| 位置 | 您所在的地区 |
| 键盘 | American English |
| 主机名 | `kali-attacker` |
| 域 | (留空) |
| 用户名 | 您的名称 |
| 密码 | 强密码 (至少 12 个字符) |
| 分区 | Guided — use entire disk → All files in one partition |
| 软件 | ✅ `top10tools` ✅ `SSH server` |
#### 步骤 9 — 更新系统并安装 VMware Tools
```
sudo apt update && sudo apt upgrade -y
sudo apt install open-vm-tools open-vm-tools-desktop
sudo reboot
```
#### 步骤 10 — 验证关键工具
```
nmap --version
hydra -h | head -5
msfconsole --version
wireshark --version
```
安装任何缺失的工具:
```
sudo apt install -y nmap wireshark metasploit-framework hydra netcat-traditional
```
### 阶段 3:Windows 10 VM
#### 步骤 11 — 创建 Windows 10 ISO
1. 访问:[https://www.microsoft.com/software-download/windows10](https://www.microsoft.com/software-download/windows10)
2. 下载 **Media Creation Tool**
3. 以管理员身份运行 → **"Create installation media" → ISO file**
4. 保存至:`C:\Users\YourName\Documents\Virtual Machines\Win10-Target\`
#### 步骤 12 — 创建 Windows 10 VM
**File → New Virtual Machine → Typical**
| 设置 | 值 |
|---------|-------|
| 安装程序光盘映像 | 浏览至 Windows ISO |
| 客户机 OS | Microsoft Windows → Windows 10 x64 |
| VM 名称 | `Win10-Target` |
| 位置 | `C:\Users\YourName\Documents\Virtual Machines\Win10-Target\` |
| 磁盘大小 | 60 GB (存储为单个文件) |
| 内存 | 4096 MB |
| 处理器 | 2 核,每个处理器 2 核 |
| 网络 | **Host-only** |
#### 步骤 13 — Windows OOBE 设置
| 设置 | 值 |
|---------|-------|
| 区域 | United States |
| 键盘 | US |
| 登录 | 点击 **"Domain join instead"** (创建本地账号) |
| 全名 | `labuser` |
| 密码 | (为 RDP 设置一个密码) |
| 隐私 | 将 **所有开关关闭 (ALL toggles OFF)** |
#### 步骤 14 — 安装 VMware Tools
在 VMware 菜单中:**VM → Install VMware Tools**
在 Win10 VM 内:文件资源管理器 → DVD 驱动器 (D:) → Setup → Next → Next → Install → 重启
#### 步骤 15 — 配置 Windows 10
**重命名计算机:**
```
Rename-Computer -NewName "Win10-Target" -Restart
```
**启用 RDP:**
```
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
```
**创建脆弱的受害者账号 (用于暴力破解实验):**
```
New-LocalUser -Name "victim" -Password (ConvertTo-SecureString "Password123" -AsPlainText -Force) -FullName "Lab Victim" -Description "Weak account for brute-force lab"
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "victim"
Add-LocalGroupMember -Group "Users" -Member "victim"
```
#### 步骤 16 — 安装 Sysmon
```
New-Item -ItemType Directory -Path "C:\Tools" -Force
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Sysmon.zip" -OutFile "C:\Tools\Sysmon.zip"
Expand-Archive -Path "C:\Tools\Sysmon.zip" -DestinationPath "C:\Tools\Sysmon\"
cd C:\Tools\Sysmon\
.\Sysmon64.exe -accepteula -i
```
验证:
```
Get-Service Sysmon64
```
#### 步骤 17 — 启用审计日志
```
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Credential Validation" /success:enable /failure:enable
```
验证:
```
auditpol /get /category:*
```
### 阶段 4:Splunk Enterprise
#### 步骤 18 — 下载并安装 Splunk
1. 访问:[https://www.splunk.com/en_us/download/splunk-enterprise.html](https://www.splunk.com/en_us/download/splunk-enterprise.html)
2. 创建免费的 Splunk 账号
3. 下载 Windows `.msi` 安装程序
4. 以管理员身份运行
| 设置 | 值 |
|---------|-------|
| 许可证 | Splunk Free (60 天试用 / 500 MB/天) |
| 用户名 | `admin` |
| 密码 | (设置强密码) |
| 服务账号 | Local System |
#### 步骤 19 — 打开 Splunk Web
```
http://localhost:8000
```
使用 admin 凭据登录。接受许可协议。
#### 步骤 20 — 启用接收端口
**Settings → Forwarding and receiving → Configure receiving → New Receiving Port**
- 端口号:`9997`
- 点击 **Save**
验证端口是否正在监听:
```
netstat -ano | findstr :9997
```
### 阶段 5:Splunk Universal Forwarder
#### 步骤 21 — 下载 Forwarder
在您的宿主机上:
1. 访问:[https://www.splunk.com/en_us/download/universal-forwarder.html](https://www.splunk.com/en_us/download/universal-forwarder.html)
2. 下载 Windows 64 位安装程序
3. 复制到 Win10-Target (拖拽或通过共享文件夹)
#### 步骤 22 — 在 Win10 上安装 Forwarder
在 Win10-Target 内以管理员身份运行:
| 设置 | 值 |
|---------|-------|
| 许可证 | On-premises Splunk Enterprise |
| 用户名 | `admin` |
| 密码 | (设置 forwarder 管理员密码) |
| Deployment Server | (留空) |
| Receiving Indexer | 宿主机的 VMnet1 IP (例如,`192.168.x.1`) |
| 端口 | `9997` |
#### 步骤 23 — 配置日志输入
```
cd "C:\Program Files\SplunkUniversalForwarder\bin"
.\splunk.exe add monitor "WinEventLog://Security" --accept-license
.\splunk.exe add monitor "WinEventLog://System" --accept-license
.\splunk.exe add monitor "WinEventLog://Application" --accept-license
.\splunk.exe add monitor "WinEventLog://Microsoft-Windows-Sysmon/Operational" --accept-license
.\splunk.exe restart
```
#### 步骤 24 — 验证 Forwarder 连接
```
.\splunk.exe list forward-server
```
预期输出:
```
Active forwards: 192.168.x.x:9997
```
#### 步骤 25 — 在 Splunk Web 中测试
运行搜索:
```
index=* host=Win10-Target
```
设置时间范围:**Last 15 minutes**
您应该能看到来自 Win10-Target 的 Windows 事件日志条目。
### 阶段 6:网络验证
#### 步骤 26 — 验证 VM 连接性
将两台 VM 都设置为 **Host-only** 网络模式。
**检查 IP:**
```
# 在 Kali 上
ip a
```
```
:: On Win10
ipconfig
```
**测试 ping:**
```
# 从 Kali
ping
```
```
# 从 Win10
ping
```
如果 ping 被阻止,请在 Windows 上允许 ICMP:
```
New-NetFirewallRule -DisplayName "Allow ICMPv4" -Protocol ICMPv4 -IcmpType 8 -Direction Inbound -Action Allow
```
🎉 **设置完成!** 您的实验环境已准备就绪。
## 🧪 实验室
### 实验 1 — 暴力破解检测
**MITRE ATT&CK:** T1110.001 (Brute Force: Password Guessing)
#### Win10-Target 上的前置条件
禁用 Network Level Authentication (NLA) 以允许 Hydra 连接:
```
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "SecurityLayer" -Value 0
```
#### 步骤 1 — 确认目标 IP
在 Win10-Target 上:
```
ipconfig
```
记下 IP (例如,`192.168.221.129`)。
#### 步骤 2 — 生成字典
在 Kali 上:
```
head -500 /usr/share/wordlists/rockyou.txt > ~/lab_wordlist.txt
echo "Password1" >> ~/lab_wordlist.txt
```
#### 步骤 3 — 发起暴力破解攻击
**选项 A — Ncrack** (对 RDP 最可靠):
```
ncrack -u labuser -P ~/lab_wordlist.txt rdp://192.168.221.129 --connection-limit 1
```
**选项 B — Hydra:**
```
hydra -l labuser -P ~/lab_wordlist.txt rdp://192.168.221.129 -t 1 -V -W 3
```
**选项 C — NetExec:**
```
nxc rdp 192.168.221.129 -u labuser -p ~/lab_wordlist.txt
```
#### 阶段 1 — 检测 (DETECT)
**告警触发:** 来自单一源 IP 的大量 EventCode 4625 (登录失败)。
**核心检测查询:**
```
index=win_logs EventCode=4625
| stats count by src_ip, Account_Name
| where count > 10
| sort -count
```
**基于时间的分桶模式:**
```
index=win_logs EventCode=4625
| timechart span=1m count by src_ip
```
**检查成功登录:**
```
index=win_logs (EventCode=4624 OR EventCode=4625)
| stats count by EventCode, src_ip, Account_Name
| sort src_ip
```
#### 阶段 2 — 分类 (TRIAGE)
| 问题 | 答案来源 |
|----------|---------------|
| 目标是哪个账号? | EventCode 4625 → `Account_Name` 字段 |
| 源 IP? | `src_ip` — 内部还是外部? |
| 尝试了多少次? | Splunk 查询中的 `count` |
| 登录类型? | `Logon_Type` — 10 = RDP |
| 有成功的吗? | 来自相同 `src_ip` 的 EventCode 4624 |
| 账号被锁定? | 检查 AD 或本地账号状态 |
**严重性分类:**
- **中等** — 仅失败,无 4624 → 阻止并监控
- **严重 (CRITICAL)** — 多次 4625 后出现 4624 → 确认违规
- **更高优先级** — 内部源 IP → 横向移动或内部威胁
#### 阶段 3 — 遏制 (CONTAIN)
```
# 在 firewall 阻断攻击者 IP
sudo ufw deny from to any
# 锁定目标账户
net user labuser /active:no
# 或通过 AD
Disable-ADAccount -Identity "labuser"
# 检查账户状态
net user labuser
```
#### 阶段 4 — 调查 (INVESTIGATE)
**完整攻击时间线:**
```
index=win_logs (EventCode=4625 OR EventCode=4624 OR EventCode=4648) src_ip=""
| table _time, EventCode, Account_Name, src_ip, Logon_Type
| sort _time
```
**如果确认违规 — 后渗透:**
```
index=win_logs EventCode=4688 OR EventCode=1
| where _time > "[time of 4624]"
| table _time, Account_Name, Image, CommandLine
```
#### 阶段 5 — 升级与记录 (ESCALATE & DOCUMENT)
**在以下情况升级至 L2:**
- 确认来自攻击者 IP 的任何 EventCode 4624
- 攻击来自外部 IP
- 同时针对多个账号
- 攻击者 IP 匹配威胁情报/黑名单
**事件工单模板:**
```
## INCIDENT REPORT — RDP Brute Force Attack
| Field | Value |
|-------|-------|
| Detection Time | [timestamp] |
| Alert Source | Splunk — EventCode 4625 threshold breach |
| Attacker IP | (internal/external) |
| Target Account | labuser |
| Target Host | Win10-Target |
| Total Attempts | [count] |
| Timeframe | [start] to [end] |
| Logon Type | 10 (RemoteInteractive / RDP) |
| Breach Confirmed | Yes / No |
| 4624 Observed | Yes / No |
| Actions Taken | IP blocked, account locked, host isolated |
| Escalated To | [L2 name] |
| MITRE ATT&CK | T1110.001 — Brute Force: Password Guessing |
```
#### 阶段 6 — 补救 (REMEDIATE)
| 修复 | 原因 |
|-----|--------|
| 5 次尝试后锁定账号 | 彻底阻止暴力破解 |
| 在 RDP 上启用 MFA | 仅靠密码是不够的 |
| 启用 NLA | 在 RDP 会话开启前要求身份验证 |
| 如果不需要,禁用 RDP | 完全移除攻击面 |
| 对来自国外的 RDP 进行地理封锁 | 减少外部暴露 |
| 部署等效的 fail2ban | 自动封锁突破阈值的 IP |
| 使用非标准 RDP 端口 | 减少自动化扫描的命中率 |
### 实验 2 — 网络侦察与端口扫描检测
**MITRE ATT&CK:** T1046 (Network Service Discovery), T1595 (Active Scanning)
#### 步骤 1 — 确认目标 IP
在 Win10-Target 上:
```
ipconfig
```
#### 步骤 2 — 在 Windows 上启动数据包捕获
在 Win10-Target 上打开 **Wireshark**,选择正确的网络适配器,然后开始捕获。
#### 步骤 3 — 从 Kali 运行 Nmap 扫描
```
# 隐蔽 SYN 扫描
nmap -sS
# 带有 service/OS detection 的激进扫描
nmap -A
# 全端口扫描
nmap -p-
# OS fingerprinting
nmap -O
# Host discovery (ping sweep)
nmap -sn
# 完整 SYN 端口扫描
nmap -sS -p-
# Service and version detection
nmap -sV -sC -p 22,80,443,3389,445,139
```
#### 步骤 4 — 在 Wireshark 中观察 SYN 数据包
应用过滤器:
```
tcp.flags.syn==1 and tcp.flags.ack==0
```
这揭示了来自 Kali IP 指向许多端口的大量 SYN 数据包 — 这是典型的端口扫描行为。
#### 阶段 1 — 检测 (DETECT)
**告警触发:**
- Sysmon EventCode 3 — 来自单一源 IP 到多个目标端口的突发网络连接
- Windows 防火墙 EventCode 5157 — 跨多个端口的被阻止入站连接尝试
- 无对应的应用程序流量模式 — 纯粹的端口枚举
**端口扫描检测:**
```
index=win_logs EventCode=3
| stats dc(DestinationPort) as unique_ports, count by SourceIp, DestinationIp
| where unique_ports > 15
| sort -unique_ports
```
**扫描时间线:**
```
index=win_logs EventCode=3 SourceIp=""
| timechart span=10s count
```
**探测了哪些端口:**
```
index=win_logs EventCode=3 SourceIp=""
| stats count by DestinationPort
| sort -count
```
**防火墙阻止的流量:**
```
index=win_logs EventCode=5157
| stats dc(DestinationPort) as unique_ports by SourceAddress, DestAddress
| where unique_ports > 15
| sort -unique_ports
```
#### 阶段 2 — 分类 (TRIAGE)
| 问题 | 查看位置 |
|----------|---------------|
| 哪个 IP 正在扫描? | Sysmon EventCode 3 — `SourceIp` 字段 |
| 内部还是外部源? | 将 `SourceIp` 与内部子网进行比较 |
| 探测了多少个端口? | Splunk 中的 `dc(DestinationPort)` |
| 扫描持续了多长时间? | 结果中最早与最晚的时间 |
| 扫描发现开放端口了吗? | 检查哪些目标端口收到了响应 |
| 扫描后是否发生了其他操作? | 扫描后来自相同 IP 的 EventCode 4624/4625 |
**严重性:**
- 内部 IP 扫描内部 → **中等** (可能为被攻陷的主机)
- 外部 IP 扫描边界 → **高** (主动外部侦察)
- 扫描后紧跟利用 → **严重** (立即升级)
#### 阶段 3 — 遏制 (CONTAIN)
```
# 在周边 firewall 阻断扫描 IP
# 在 Windows Firewall 阻断(如果是内部攻击者)
netsh advfirewall firewall add rule name="Block Scanner" dir=in action=block remoteip=
# 在 Linux 周边阻断
sudo ufw deny from to any
```
#### 阶段 4 — 调查 (INVESTIGATE)
**扫描后扫描器是否连接到了开放端口?**
```
index=win_logs EventCode=3 SourceIp=""
| stats count by DestinationPort
| sort -count
```
**扫描后是否有来自扫描 IP 的登录尝试?**
```
index=win_logs (EventCode=4624 OR EventCode=4625) src_ip=""
| table _time, EventCode, Account_Name, src_ip, Logon_Type
| sort _time
```
**是否有其他主机被同一源扫描?**
```
index=win_logs EventCode=3 SourceIp=""
| stats dc(DestinationIp) as hosts_scanned, values(DestinationIp) as targets by SourceIp
```
**攻击时间线:**
```
[T+0] First Sysmon EventCode 3 from KALI_IP
[T+xs] Burst of connections across multiple ports — scan pattern confirmed
[T+ym] Scan ends — unique_ports count peaks
[T+zm] Any EventCode 4624/4625 from same IP? → exploitation attempt
```
#### 阶段 5 — 升级与记录 (ESCALATE & DOCUMENT)
**在以下情况升级至 L2:**
- 确认扫描源为外部 IP
- 扫描后紧接着发生登录尝试或利用行为
- 多个内部主机被扫描 (初始攻陷后的横向侦察)
- 扫描模式与已知威胁行为者的工具匹配
**事件报告模板:**
```
## INCIDENT REPORT — Network Port Scan / Reconnaissance
| Field | Value |
|-------|-------|
| Detection Time | [timestamp] |
| Alert Source | Splunk — Sysmon EventCode 3 dc(DestinationPort) threshold |
| Scanning IP | (internal/external) |
| Target Host | Win10-Target |
| Ports Probed | [count] unique ports |
| Scan Duration | [start_time] to [end_time] |
| Open Ports Found | [list ports with inbound connections] |
| Follow-on Action | Yes / No — [login attempts / exploit attempts] |
| Actions Taken | Scanning IP blocked, L2 notified |
| MITRE ATT&CK | T1046 / T1595 |
```
#### 阶段 6 — 补救 (REMEDIATE)
| 修复 | 原因 |
|-----|--------|
| 在所有端点上启用基于主机的防火墙 | 阻止未经请求的入站探测 |
| 部署 IDS/IPS (Snort / Suricata) | 自动检测 nmap 扫描特征 |
| 启用带有网络日志记录 (EventCode 3) 的 Sysmon | 提供扫描检测的核心可见性 |
| 网络分段 / VLAN | 限制攻击者可到达的主机 |
| 告警规则:60秒内 dc(DestinationPort) > 15 | 自动化检测 |
| 在边界对外部 IP 范围进行地理封锁 | 减少外部侦察暴露 |
| 禁用不必要的开放端口/服务 | 缩小攻击面 |
### 实验 3 — Beaconing / C2 检测
**MITRE ATT&CK:** T1071 (Application Layer Protocol)
#### 步骤 1 — 确认目标 IP
在 Win10-Target 上:
```
ipconfig
```
#### 步骤 2 — 在 Windows 上启动监听器
在 Win10 VM 上下载 Nmap 以获取 Ncat,然后以管理员身份打开命令提示符:
```
ncat -lvp 4444
```
如果 `nc` 不可用,请使用 `ncat` (包含在 Nmap 中)。
#### 步骤 3 — 从 Kali 启动重复连接
从 Kali 运行一个循环,每 30 秒生成一次重复的出站连接:
```
while true; do nc 192.168.221.129 4444; sleep 30; done
```
这会创建一个类似于 Beaconing 或 C2 活动的可预测回调模式。
#### 步骤 4 — 在 Wireshark 中观察流量
在 Windows 上,打开 Wireshark 并观察以固定时间间隔传入的重复连接尝试。
过滤器:`tcp.port == 4444`
#### 检测
**数据源:** 转发至 Splunk 的网络或流量日志。
**核心理念:** 查找来自同一源、以一致时间间隔发往同一目标的重复连接。
**Beaconing 检测查询:**
```
index=main
| sort 0 src_ip dest_ip _time
| streamstats current=f last(_time) as prev_time by src_ip dest_ip
| eval interval = _time - prev_time
| stats count, avg(interval) as avg_interval, stdev(interval) as stdev_interval by src_ip dest_ip
| where count > 5 AND avg_interval < 300 AND stdev_interval < 10
| sort -count
```
这种类型的时间分析通常用于识别 Beaconing,因为恶意的签到通常以固定的间隔发生,且标准偏差较低。
#### 分类说明
- 实验中的**真阳性**
- **源 IP:** Kali 攻击者 VM
- **目标 IP:** Windows 10 VM
- **间隔:** 连接之间的间隔高度一致 — 这是 Beaconing 的主要线索
- **确认方式:** Wireshark 和 Splunk 共同确认
## 🗺️ MITRE ATT&CK 映射
### 实验 1 — 暴力破解
| 技术 ID | 技术名称 | 详情 |
|--------------|----------------|--------|
| T1110 | Brute Force | 父技术 |
| T1110.001 | Password Guessing | 针对 RDP 的字典攻击 |
| T1078 | Valid Accounts | 如果暴力破解成功 |
| T1021.001 | Remote Services: RDP | 使用的访问方法 |
| T1133 | External Remote Services | RDP 暴露在外部 |
**Kill Chain:**
```
Credential Access → [T1110.001] Brute Force RDP
└── Success → [T1078] Valid Accounts
└── [T1021.001] RDP Lateral Movement
```
### 实验 2 — 端口扫描
| ID | 技术 | 上下文 |
|----|-----------|---------|
| T1595 | Active Scanning | 攻击者扫描 IP 范围和端口 |
| T1595.001 | Scanning IP Blocks | nmap ping 扫描 (-sn) |
| T1595.002 | Vulnerability Scanning | nmap 服务检测 (-sV -sC) |
| T1046 | Network Service Discovery | 全端口枚举 (-p-) |
| T1590 | Gather Victim Network Information | OS 指纹识别 (-O) |
**Kill Chain:**
```
Reconnaissance
└── [T1595.001] Ping Sweep — host discovery
└── [T1046] Port Scan — service enumeration
└── [T1595.002] Version Detection — vulnerability mapping
└── Weaponization → Exploitation
```
### 实验 3 — C2 Beaconing
| ID | 技术 | 上下文 |
|----|-----------|---------|
| T1071 | Application Layer Protocol | C2 通信通道 |
| T1071.001 | Web Protocols | HTTP/HTTPS Beaconing |
| T1001 | Data Obfuscation | Beaconing 时间中的抖动/随机化 |
## 📊 关键事件 ID
### Windows 安全日志
| 事件 ID | 描述 |
|----------|-------------|
| 4624 | 成功登录 — 确认违规 |
| 4625 | 登录失败 — 核心暴力破解指标 |
| 4648 | 使用显式凭据登录 |
| 4776 | NTLM 凭据验证尝试 |
| 4740 | 账号被锁定 |
### Sysmon
| 事件 ID | 描述 |
|----------|-------------|
| 1 | 进程创建 |
| 3 | 网络连接 — 核心扫描/Beacon 检测 |
| 7 | 镜像加载 |
| 8 | CreateRemoteThread |
| 10 | ProcessAccess |
### Windows 防火墙
| 事件 ID | 描述 |
|----------|-------------|
| 5156 | 允许通过防火墙的连接 |
| 5157 | 被阻止的连接 — 扫描流量 |
### 登录类型
| 类型 | 名称 | 含义 |
|------|------|---------|
| 2 | Interactive | 在键盘/控制台登录 |
| 3 | Network | 通过网络访问 (SMB, DC 身份验证) |
| 4 | Batch | 计划任务 |
| 5 | Service | 服务账号登录 |
| 7 | Unlock | 工作站解锁 |
| 8 | NetworkCleartext | 使用明文凭据 |
| 9 | NewCredentials | 使用不同凭据的 RunAs |
| 10 | RemoteInteractive | RDP 登录 |
| 11 | CachedInteractive | 缓存的域凭据 |
## 👤 作者
**SOC Analyst Home Lab** — 出于教育目的在隔离环境中构建。
*最后更新:2026 年 7 月*
标签:安全实验环境, 安全运营, 库, 应急响应, 扫描框架, 网络安全, 隐私保护