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, 威胁检测, 安全运营, 库, 应急响应, 扫描框架, 攻击检测, 网络攻防, 自动化响应, 账户锁定, 身份认证安全