R-Williams-Security/Kerberoast-Detection-Lab
GitHub: R-Williams-Security/Kerberoast-Detection-Lab
一个完整的 Kerberoasting 攻击模拟、检测与自动化响应实验室,通过 Wazuh SIEM 规则精准识别 RC4 加密异常并自动禁用受损服务账户。
Stars: 0 | Forks: 0
# Active Directory SOAR:自动化 Kerberoast 缓解
## 概述
一个完整的**攻击 → 检测 → 响应**安全管道,针对自托管的 Windows Server 2019 Active Directory 环境构建。该实验室模拟了使用 Impacket 框架的真实 Kerberoasting 凭证盗窃攻击,使用精确的自定义 Wazuh SIEM 规则进行检测(用于从合法 Kerberos 流量中隔离 RC4 加密异常),并通过 PowerShell Active Response 脚本自动关闭响应循环,禁用受损的服务账户——无需人工干预。
遥测数据弥合了被动监控与主动防御之间的差距:通过 Sysmon v15.15 和 Windows Security Auditing 进行结构化遥测采集,针对特定加密异常的高精度检测逻辑,完整的 MITRE ATT&CK 框架对齐,以及与警报严重性直接关联的自动修复——将平均修复时间(MTTR)从数小时的人工分析师审查缩短到数秒的自动化操作。
## 为什么 Kerberoasting 是高优先级
此攻击直接威胁到服务账户凭证的**机密性**和域认证边界的**完整性**。
Kerberoasting 之所以危险,正是因为攻击最具破坏性的阶段发生在**完全离线**的情况下——攻击者早已在未被检测的情况下离开了网络。
任何经过身份验证的域用户——无论权限级别如何——都可以为任何注册了服务主体名称(SPN)的账户请求 Kerberos 服务票据。返回的票据使用该服务账户的密码哈希进行加密。攻击者保存票据后断开连接。不再有任何网络交互——没有暴力破解流量,没有重复的身份验证尝试,周边工具或 DLP 系统没有任何可标记的内容。
服务账户是最高价值的目标:它们经常拥有提升的权限,很少强制执行密码轮换,并且很少被监控横向移动。离线破解工具可以在几秒到几分钟内恢复弱服务账户密码。
**关键检测约束:**捕获此攻击的唯一可行窗口是票据请求本身——Windows Security Event ID 4769。一旦票据离开域控制器,机会就关闭了。这就是为什么检测规则必须精确过滤加密异常,而响应必须是自动化的——而不是排队等待人工分析师。
## 架构
```
┌─────────────────────┐ ┌────────────────────────────────────┐ ┌──────────────────────────────┐
│ ATTACKER │ │ VICTIM — DC01 │ │ SIEM — Wazuh Cloud v4.14.4 │
│ Kali Linux │ │ Windows Server 2019 │ │ LAB-DC01 · US East (N.VA) │
│ 192.168.220.140 │ │ attacklab.local │ │ │
│ │ │ 192.168.220.130 │ │ │
│ impacket- │ │ │ │ Rule 100002 matches: │
│ GetUserSPNs ──────┼───►│ Kerberos issues RC4 TGS ticket │───►│ EventID = 4769 │
│ jdoe:Password123! │ │ Event ID 4769 generated │ │ EncType = 0x17 │
│ -request │ │ EncryptionType: 0x17 │ │ │
│ sql_service │ │ │ │ ALERT Level 12 │
│ │ │ Sysmon v15.15 captures │ │ T1558.003 │
│ │ │ process + network telemetry │ │ Credential Access │
│ │ │ │ │ │
│ │ │ WazuhSvc (Agent 001) forwards │ │ Active Response triggers │
│ │ │ events to Wazuh Cloud │◄───┤ kerb-block.ps1 via stdin │
│ │ │ │ │ │
│ │ │ kerb-block.ps1 executes: │ └──────────────────────────────┘
│ │ │ Disable-ADAccount sql_service │
│ │ │ C:\Security\SOAR.log written │
└─────────────────────┘ └────────────────────────────────────┘
```
## 实验室环境
| 组件 | 详情 |
|---|---|
| 虚拟机监控程序 | VMware Workstation 17.5 |
| 域控制器 | Windows Server 2019 Standard Evaluation · DC01 |
| 操作系统版本 | 10.0.17763.3650 |
| 域 | attacklab.local |
| DC IP 地址 | 192.168.220.130 |
| Wazuh 代理 IP | 192.168.220.133 |
| 攻击者虚拟机 | Kali Linux · 192.168.220.140 |
| 网络 | NAT — 两个虚拟机在同一子网 |
| SIEM | Wazuh Cloud v4.14.4 · 代理 ID 001 · 状态:活动 |
| 端点遥测 | Sysmon v15.15 · 自定义 sysmonconfig.xml |
| 攻击框架 | Impacket — GetUserSPNs |
## 仓库内容
| 文件 | 描述 |
|---|---|
| `local_rules.xml` | 自定义 Wazuh 检测规则 100002 — 过滤 Event ID 4769 的加密类型 `0x17` |
| `kerb-block.ps1` | Active Response SOAR 脚本 — 通过 `Disable-ADAccount` 禁用受损账户,向 `C:\Security\SOAR.log` 写入带时间戳的审计条目 |
| `kerberoast_alert.json` | 原始 Wazuh 警报 — 触发的规则、MITRE T1558.003 映射、攻击者 IP、目标账户、完整事件上下文 |
| `windows_raw_log.xml` | 来自 DC01 的原始 Windows Security Event ID 4769 — 源遥测确认 `TicketEncryptionType: 0x17` |
| `README.md` | 本文件 |
## 检测逻辑
**规则 ID:** `100002` · **警报级别:** `12` · **MITRE:** `T1558.003`
现代 Active Directory 环境为 Kerberos 服务票据协商 AES 加密(类型 `0x11` / `0x12`)。Kerberoasting 工具——包括 Impacket 的 `GetUserSPNs` 和 Rubeus——默认强制降级到传统 RC4-HMAC (`0x17`),因为 RC4 哈希比 AES 加密材料离线破解速度更快。
仅过滤 `0x17` 意味着该规则忽略域控制器上持续的大量合法 AES Kerberos 流量,仅在加密异常时触发。这使得该规则低噪音、高精度,无需额外调整。
```
60103
^4769$
^0x17$
Kerberoasting Attack: RC4 service ticket request detected (T1558.003)
T1558.003
```
警报级别 `12` 是 Wazuh Active Response 资格所必需的——自动化响应仅在 `ossec.conf` 中定义的阈值或以上触发。
## SOAR 自动化响应
警报触发时,Wazuh Active Response 通过 stdin 在 DC01 上执行 `kerb-block.ps1`——这是 Windows 代理的正确 Wazuh 数据通道。`ossec.conf` 中的 Active Response 配置:
```
win-disable-user
kerb-block.ps1
no
win-disable-user
local
100002
```
该脚本解析通过 stdin 接收的警报 JSON,提取目标服务账户名称,通过 DC01 上安装的 RSAT Active Directory PowerShell 模块调用 `Disable-ADAccount`,并向 `C:\Security\SOAR.log` 写入带时间戳的审计条目。
**在 DC01 上验证:**
```
Get-ADUser sql_service | Select-Object Name, Enabled
# 已启用:False
Get-Content C:\Security\SOAR.log
# 2026-03-28 15:54:xx - 成功:已禁用账户:sql_service
```
## 确认的证据
所有值直接来自 `kerberoast_alert.json` 和 `windows_raw_log.xml`。无近似值。
| 字段 | 确认值 | 来源 |
|---|---|---|
| 请求账户 | jdoe@ATTACKLAB.LOCAL | kerberoast_alert.json |
| 攻击者 IP | 192.168.220.140 | kerberoast_alert.json |
| 攻击者端口 | 50974 | kerberoast_alert.json |
| DC01 代理 IP | 192.168.220.133 | kerberoast_alert.json |
| 目标服务 | sql_service | windows_raw_log.xml |
| 服务 SID | S-1-5-21-2251009163-3126931792-3784047572-1103 | windows_raw_log.xml |
| 注册的 SPN | MSSQLSvc/DC01.attacklab.local:1433 | Active Directory |
| 加密类型 | **0x17 — RC4-HMAC(异常)** | windows_raw_log.xml |
| Windows 事件 ID | 4769 | windows_raw_log.xml |
| 事件记录 ID | 5275 | windows_raw_log.xml |
| 事件时间戳 | 2026-03-28T15:54:18.588788300Z | windows_raw_log.xml |
| 触发的 Wazuh 规则 | 100002 · Level 12 | kerberoast_alert.json |
| MITRE 技术 | **T1558.003 · 凭证访问 · Kerberoasting** | kerberoast_alert.json |
| Wazuh 警报 ID | 1774702436.0 | kerberoast_alert.json |
| Wazuh 集群节点 | wazuh-manager-master-0 | kerberoast_alert.json |
| 响应后账户状态 | sql_service · Enabled: False | kerb-block.ps1 输出 |
## 关键设置步骤
### Kerberos 审计策略 — 组策略配置
通过 DC01 上的组策略管理控制台启用:
```
Computer Configuration → Policies → Windows Settings → Security Settings
→ Advanced Audit Policy Configuration → Account Logon
→ Audit Kerberos Service Ticket Operations → Success and Failure
```
在命令行强制执行和验证:
```
gpupdate /force
# 计算机策略更新已成功完成。
# 用户策略更新已成功完成。
auditpol /get /subcategory:"Kerberos Service Ticket Operations"
# Kerberos 服务票证操作 成功和失败
```
这是基础遥测控制。没有此策略,Event ID 4769 永远不会生成——检测管道将无据可依。
### SPN 注册 — 攻击面条件
```
Get-ADUser sql_service -Properties ServicePrincipalNames
# ServicePrincipalNames : {MSSQLSvc/DC01.attacklab.local:1433}
```
任何经过身份验证的域用户都可以为任何注册了 SPN 的账户请求 Kerberos 服务票据——无需提升的权限。在 `sql_service` 上注册的 SPN 是使其成为有效 Kerberoast 目标的架构条件。
### Sysmon v15.15 部署
```
cd C:\Sysmon
.\Sysmon64.exe -i sysmonconfig.xml -accepteula
# System Monitor v15.15
# Sysmon schema version: 4.90
# Sysmon64 installed.
# SysmonDrv installed.
# Sysmon64 started.
Get-Service sysmon64
# 状态 名称 显示名称
# ------ ---- -----------
# Running Sysmon64 sysmon64
```
Sysmon 遥测确认已被 Wazuh 接收——Wazuh 威胁狩猎视图中可见 `Microsoft-Windows-Sysmon` 事件(包括规则 ID 92052、92031、92201)以及 Windows Security Auditing 事件,在 DC01 上提供完整的进程级和网络级可见性。
### Wazuh 代理部署
```
Invoke-WebRequest -Uri https://packages.wazuh.com/4.x/windows/wazuh-agent-4.14.4-1.msi `
-OutFile $env:tmp\wazuh-agent
msiexec /i $env:tmp\wazuh-agent /q `
WAZUH_MANAGER='qd4m612yop1t.cloud.wazuh.com' `
WAZUH_AGENT_NAME='DC01'
NET START WazuhSvc
Get-Service WazuhSvc
# 状态 名称 显示名称
# ------ ---- -----------
# Running WazuhSvc Wazuh
```
## MITRE ATT&CK 映射
| | |
|---|---|
| 战术 | 凭证访问 |
| 技术 | T1558 — 窃取或伪造 Kerberos 票据 |
| 子技术 | **T1558.03 — Kerberoasting** |
| 检测 | Windows Security Log · Event ID 4769 |
| 遥测层 | Sysmon v15.15 · Microsoft-Windows-Security-Auditing 提供程序 |
| 响应 | Wazuh Active Response · kerb-block.ps1 · Disable-ADAccount (RSAT) |
## 未来加固 — 从被动到主动
SOAR 管道在检测时刻消除活动威胁。长期减少 Kerberoasting 攻击面需要在域级别应用架构控制:
**通过 GPO 强制执行 AES 加密** — 在整个域中禁用传统 RC4 加密类型,强制所有 Kerberos 票据使用 AES-128 和 AES-256。这完全消除了降级路径——没有 RC4 可用,就没有可破解的哈希。
**细粒度密码策略(FGPP)** — 对注册了 SPN 的服务账户应用严格的复杂性和轮换要求。即使票据被拦截,高熵密码使离线破解在计算上不可行。
**组托管服务账户(gMSA)** — 将关键服务迁移到 gMSA。Windows 为 gMSA 账户自动管理密码——自动轮换的 120 字符随机生成密码——完全消除静态凭证,从根源上移除攻击面。
## 展示的工具和技能
**平台与基础设施**
VMware Workstation 17.5 · Windows Server 2019 · Active Directory 域服务 (AD DS) · 域控制器部署 · NAT 网络配置
**身份与访问管理**
Active Directory 用户配置 · 服务主体名称 (SPN) 注册 · `New-ADUser` · `Disable-ADAccount` · `Get-ADUser` · RSAT(远程服务器管理工具)· 细粒度密码策略 (FGPP) · 组托管服务账户 (gMSA) · 最小权限执行
**审计与组策略**
组策略管理控制台 (GPMC) · 高级审计策略配置 · 审计 Kerberos 服务票据操作 · `gpupdate /force` · `auditpol` · 域范围策略强制执行
**威胁检测与 SIEM**
Wazuh Cloud v4.14.4 · 自定义检测规则编写 · Windows Security Event Log · Event ID 4769 · RC4 加密降级检测(`TicketEncryptionType 0x17`)· Wazuh 威胁狩猎 · 警报严重性分类(Level 12)· 高精度低噪音规则设计
**端点遥测**
Sysmon v15.15 · 自定义 `sysmonconfig.xml` · 进程创建监控(Event ID 1)· 网络连接监控(Event ID 3)· `Microsoft-Windows-Security-Auditing` 提供程序 · `Microsoft-Windows-Sysmon` 提供程序
**攻击技术(模拟)**
Kerberoasting (T1558.003) · Impacket — `GetUserSPNs` · RC4 票据请求 · 凭证访问 · 离地攻击(LotL)技术模拟 · 攻击面识别
**SOAR 与自动化响应**
Wazuh Active Response · `ossec.conf` 配置 · `kerb-block.ps1` · PowerShell 脚本编写 · 自动化账户锁定 · MTTR 减少 · 安全编排、自动化和响应 (SOAR)
**框架与标准**
MITRE ATT&CK T1558.003 · 零信任原则 · 攻击面减少 · 最小权限 · NIST 网络安全框架 · 域加固
**语言与脚本**
PowerShell · XML(Wazuh 规则和 ossec.conf 编写)
注意:显示的所有 IP 地址(192.168.220.x)和主机名都是逻辑隔离的私有 NAT 实验室环境的一部分。未暴露任何生产基础设施或个人身份信息。
标签:Active Directory, AI合规, AMSI绕过, Cloudflare, Impacket, IPv6, Kerberoasting, Kerberos协议, Libemu, MITRE ATT&CK, PFX证书, Plaso, PowerShell, SIEM规则, SOAR, Sysmon, Terraform 安全, Wazuh SIEM, Windows Server 2019, 威胁检测, 安全运营, 库, 应急响应, 扫描框架, 攻击检测, 网络攻防, 自动化响应, 账户锁定, 身份认证安全