Roman-Layer01/active-directory-detection-lab
GitHub: Roman-Layer01/active-directory-detection-lab
一个模拟 Active Directory 后渗透攻击的隔离实验室,通过记录完整的攻击路径与对应的 SIEM 检测规则构建方案,帮助企业填补端点安全防御与遥测监控的盲区。
Stars: 0 | Forks: 0
# 高级 Windows 11 安全与离线检测工程实验室
## 执行摘要
本仓库记录了一个隔离的、虚拟化企业级实验室的部署情况,该实验室用于模拟高级后渗透对抗战术并分析细粒度的端点遥测数据。采用工程化的案例研究方法,我成功绕过了 Windows 11 原生的主机防御,执行了离线凭据提取,并通过 Pass-the-Hash (PtH) 实现了本地横向移动。
主要目标是接触现代操作系统开箱即用的加固控制措施,诊断执行失败的原因,并记录追踪复杂网络跳板所需的防御遥测数据。
## 实验室架构与拓扑
* **Hypervisor:** VMware Workstation(隔离的 Host-Only 网络边界)
* **目标端点:** Windows 11 Enterprise(现代安全补丁级别)| IP: `10.x.x.x`
* **SIEM / 对抗节点:** Ubuntu Server(集中式 Elastic Stack Pipeline)| IP: `10.x.x.y`
* **遥测基础设施:** Microsoft Sysmon (SwiftOnSecurity Schema) & Elastic Forwarding Agents
## 检测工程成果
### 检测 1 – 过多的失败身份验证尝试

**目标**
检测针对本地或域账户的多次失败身份验证尝试。
**检测逻辑**
```
event.code:4625
```
当在五分钟的时间窗口内观察到多次失败的身份验证尝试时,将触发规则。
**警报验证**
成功生成了多个失败的身份验证事件,并验证了在 Elastic Security 中创建了警报。
**为何这很重要**
反复的身份验证失败通常与密码喷洒、暴力破解活动、凭据滥用或账户枚举尝试有关。该检测作为实验室环境中的一项基础身份验证监控控制措施。
**MITRE ATT&CK**
- T1110 – Brute Force
## 对抗阶段 1:本地凭据转储 (MITRE ATT&CK T1003.001)
### 1. 遇到的基线架构障碍
* **LSA Protection Light (PPL):** 默认的内核控制严格阻止了对本地安全机构子系统服务 (`lsass.exe`) 的实时内存访问,导致明确的 `0x00000005 (Access Denied)` 代码签名。
* **Kernel Memory Offset Shifts:** 最近的平台安全更新改变了内部加密结构,导致传统的实时内存跟踪工具不稳定,并产生 `Logon List` 发现故障。
### 2. 操作转移与离线提取
为了绕过实时内存检查签名和行为监控循环,我模拟了一种利用原生管理二进制文件的 EDR 规避策略:
1. 使用内置的系统管理工作区建立了本地执行上下文。
2. 通过 **Windows Task Manager 进程详细信息界面** 原生生成了一个静态的进程 minidump (`lsass.DMP`),从而中断了实时扫描依赖项。
3. 通过 Secure Copy Protocol (**WinSCP**) 将原始二进制文件跨内部子网安全地渗出到隔离的 Ubuntu 分析站。
4. 在 Ubuntu Linux 主机上部署 `Pypykatz`(Mimikatz 的现代化纯 Python 实现版本),以干净地解析离线内存映射:
```
pypykatz lsa minidump /home/[user]/lsass.DMP
```
* **结果:** 成功提取了特权管理账户上下文的 32 字符十六进制 **NT Authentication Hash**,且未触发基于主机的运行时警报。
## 对抗阶段 2:通过 Pass-the-Hash 进行横向移动 (MITRE ATT&CK T1550.002)
### 1. 远程执行障碍
现代 Windows 安装限制了非默认的本地管理账户通过网络上的 SMB 与隐藏的管理共享 (`ADMIN$`、`C$`) 进行交互。为了模拟存在本地管理覆盖的企业网络环境,通过注册表 (`LocalAccountTokenFilterPolicy = 1`) 以编程方式管理了 Remote UAC token 过滤,并初始化了默认的内置服务上下文。
### 2. 利用与网络跳板
使用托管在 Linux 分析节点上的 Impacket 网络框架 (`psexec.py`),我通过 TCP Port 445 传递了收集到的 NT 身份验证哈希。这绕过了破解或暴力破解明文密码的要求:
```
psexec.py ./Administrator@10.x.x.x -hashes 00000000000000000000000000000000:[SANITIZED_NT_HASH]
```
### 3. 权限提升验证
主机成功验证了加密结构,建立了一个临时的远程执行引擎,并将终端放入了一个交互式命令 shell 中。
平台验证实用程序的执行验证了绝对的系统级域上下文权限:
```
C:\Windows\System32> whoami
nt authority\system
```
## 工程日志:防御控制与故障排除诊断
该实验室环境的一个核心组成部分是调试反映真实世界部署挑战的现实工程障碍。
| 诊断症状 | 根本原因分析 | 修复与工程转向 |
| :--- | :--- | :--- |
| 通过 Memory Reader 出现 `Access Denied (0x5)` | Windows 11 LSA Protection Light (PPL) 隔离了活动的 LSASS 进程句柄。 | 将战术从实时内存操纵转变为离线分析。通过 Task Manager 创建了静态的 `.DMP` 文件。 |
| dump 文件中的 `Logon List` 解析失败 | Windows OS 更新移动了内存偏移量,破坏了传统的工具映射。 | 在 Linux 上用 `Pypykatz` 替换了传统工具,利用了现代的动态结构解码。 |
| 通过 `psexec` 无法写入 `ADMIN$` 共享 | Remote UAC 在网络 SMB 上剥夺了自定义账户的管理员权限。 | 激活了默认的内置本地 `Administrator` 身份并更新了 `LocalAccountTokenFilterPolicy` 标志。 |
| Port 445 上出现 `Connection Timed Out` | 基于主机的 Windows Defender Firewall 丢弃了意外的入站数据包。 | 设计了一条针对 `File and Printer Sharing (SMB-In)` 的显式入站例外规则。 |
| 脚本执行在服务创建时冻结 | 杀毒软件的行为云启发式算法拦截了已知的 Impacket 执行循环。 | 验证了端点排除参数,并切换了实时行为保护,以模拟未受监控的横向路径。 |
## 检测工程与 SIEM Hunting 规则
为了保护企业免受这些特定的后渗透痕迹的影响,我在集中式日志 pipeline 中建模了三个不同的分析性 Hunting 签名:
1. **LSASS Memory Inspection (Sysmon Event ID 10):**
* 目标进程:`lsass.exe`
* 分析逻辑:监控异常的调用跟踪或请求细粒度内存访问掩码(例如 `0x1F1833` 或 `0x1010`)的未经授权的二进制应用程序,并抑制已知的白名单安全代理。
2. **Cryptographic Downgrade Monitoring (Windows Security Event ID 4624):**
* 登录类型:`3` (Network Logon)
* 分析逻辑:当传入的管理连接默认使用 **NTLM** 而不是 Kerberos 时,显式触发警报,重点关注密码 `Key Length` 属性值恰好为 `0` 的元数据字段。
3. **Transient Execution Services (Windows Security Event ID 7045 / Sysmon ID 1):**
* 分析逻辑:监控 Service Control Manager 中是否有新系统服务的突然安装,这些服务指向从易失性系统根目录 (`%SystemRoot%\*.exe`) 运行的随机化 8 字符字母可执行文件。
标签:Active Directory, MIT许可证, Modbus, Plaso, Terraform 安全, Windows 11, 凭证提取, 安全实验环境, 横向移动, 编程规范, 网络安全, 隐私保护