Kerberos域内攻击实战:从AS-REP Roasting到Kerberoasting的攻防剖析
1. Kerberos协议与域内攻击基础Kerberos作为Windows域环境的核心认证协议本质上是一种基于票据的网络安全认证系统。我在实际渗透测试中发现很多企业虽然部署了Kerberos认证但对其中潜在的攻击面缺乏足够认识。Kerberos协议的工作流程可以类比为电影院的三重检票机制首先用身份证用户名密码换取影城通票TGT再用通票兑换具体影厅的入场券ST最后凭入场券进入影厅访问服务。在域环境中Kerberos认证主要涉及三个关键角色客户端需要访问服务的用户设备KDC密钥分发中心通常由域控制器担任包含AS和TGS两个服务服务端用户最终要访问的服务器资源攻击者常利用协议设计中的两个关键弱点预认证绕过AS-REP阶段可能被利用进行离线爆破弱加密协商TGS-REP阶段可能强制使用RC4等弱加密算法我曾遇到过一个典型案例某企业财务系统的服务账户使用简单密码且长期未更换攻击者通过Kerberoasting手法在2小时内就破解出明文密码最终导致整个域沦陷。这提醒我们理解这些攻击手法对攻防双方都至关重要。2. AS-REP Roasting攻击深度解析2.1 攻击原理与前置条件AS-REP Roasting攻击的精髓在于利用不要求Kerberos预认证这一特殊账户设置。默认情况下域用户账户的Do not require Kerberos preauthentication选项是未勾选的对应userAccountControl属性中的DONT_REQ_PREAUTH位。但在某些特殊场景下比如旧系统兼容或管理员误配置时这个安全防护就会被意外关闭。通过ADSI编辑器查看用户属性时可以看到这个关键标志位。我曾在一次红队评估中使用如下PowerShell命令快速定位这类脆弱账户Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth攻击成功的两个必备条件至少存在一个禁用预认证的域账户攻击者能够访问域控的88/tcp端口Kerberos服务2.2 攻击过程实战演示场景一域内主机攻击使用Rubeus工具可以自动化完成整个攻击链Rubeus.exe asreproast /format:hashcat /outfile:hashes.txt这个命令会通过LDAP查询所有禁用预认证的用户以这些用户身份发送AS-REQ请求提取AS-REP响应中的加密数据输出为hashcat兼容格式场景二非域主机攻击当处于域外时需要分步操作先使用Adfind定位目标用户AdFind.exe -b DCexample,DCcom -f ((objectcategoryperson)(objectclassuser)(userAccountControl:1.2.840.113556.1.4.803:4194304)) samaccountname再用Impacket获取哈希GetNPUsers.py -dc-ip 192.168.1.1 -usersfile users.txt -format john example.com/2.3 防御方案与检测技巧蓝队防御建议账户策略定期审计用户账户设置使用GPO强制开启所有用户的预认证Get-ADUser -Filter * | Set-ADAccountControl -DoesNotRequirePreAuth $false日志监控关注事件ID 4768Kerberos认证请求筛选预认证失败的异常请求我在某次事件响应中发现攻击者会批量扫描4768事件日志寻找返回错误代码为0x0成功但未包含PA-DATA时间戳的记录这正是AS-REP Roasting攻击的特征。3. Kerberoasting攻击全面剖析3.1 SPN与服务账户安全服务主体名称(SPN)是Kerberoasting攻击的关键入口。通过分析数百个域环境我发现以下高危SPN注册模式使用域管理员账户运行SQL服务共享服务账户跨多台主机SPN注册在普通用户而非计算机账户下使用PowerView快速定位危险SPNGet-NetUser -SPN | Select-Object samaccountname,serviceprincipalname特别要注意的SPN命名模式MSSQLSvc/* # SQL Server服务 TERMSERV/* # 远程桌面服务 HTTP/* # Web应用程序池账户3.2 攻击链完整演示阶段一SPN发现使用Impacket的GetUserSPNs脚本GetUserSPNs.py -dc-ip 192.168.1.1 example.com/user:Password123 -request阶段二票据请求通过Rubeus请求特定SPN的STRubeus.exe kerberoast /spn:MSSQLSvc/sql01.example.com /format:hashcat阶段三离线破解使用hashcat进行爆破hashcat -m 13100 hash.txt rockyou.txt -O在实测中我发现以下几个加速破解的技巧优先尝试服务账户的常用命名规则svc_*、sql_*等结合企业历史密码策略生成专属字典利用已知密码模式如季节年份!3.3 企业级防御方案加密策略配置# 强制使用AES加密 Set-ADAccountControl -Identity svc_sql -UseDESKeyOnly $false Set-ADAccountControl -Identity svc_sql -KerberosEncryptionType AES256日志监控要点事件ID 4769服务票据请求筛选加密类型为0x17RC4的请求监控同一账户短时间内的大量票据请求某金融客户部署的检测规则示例SELECT * FROM SecurityEvents WHERE EventID 4769 AND TicketEncryptionType 0x17 AND TIMESTAMP NOW() - INTERVAL 5 minutes GROUP BY ClientAddress HAVING COUNT(*) 104. 攻防对抗进阶技巧4.1 红队战术演进现代Kerberoasting攻击开始采用更隐蔽的方式时间延迟在多个工作日中分散请求票据混淆混合请求合法SPN和攻击目标内存操作完全在内存中完成票据提取改进的Rubeus使用示例Rubeus.exe kerberoast /stats /interval:3600 /jitter:304.2 蓝队检测增强基于Sigma规则的检测方案title: Suspicious Kerberos Ticket Request description: Detects multiple service ticket requests from single source tags: - attack.kerberoasting logsource: product: windows service: security detection: selection: EventID: 4769 TicketEncryptionType: 0x17 timeframe: 5m condition: selection | count() by ClientAddress 10 falsepositives: - Legacy systems level: high企业加固检查清单[ ] 所有服务账户启用长随机密码25位[ ] 配置Kerberos AES加密为默认选项[ ] 定期审计SPN注册情况[ ] 部署针对4769事件的实时告警[ ] 限制服务账户的本地登录权限在最近一次攻防演练中防守方通过分析TGS请求的时间分布模式成功识别出伪装成正常流量的Kerberoasting攻击。这显示传统的基于单一指标的检测已经不够需要结合行为分析才能应对高级威胁。