在AD域环境中,Kerberos票据攻击是当前Windows服务器安全面临的最核心威胁之一。攻击者通过窃取TGT(票据授予票据)、TGS(服务票据)或利用Kerberoasting、AS-REP Roasting、Golden Ticket、Silver Ticket等手段,可以在不触发传统告警的情况下横向移动、提权甚至长期驻留。防御这类攻击的核心思路只有三条:缩短票据生命周期、强化凭证保护、监控异常票据行为。下面我把每一条拆开讲透,给你一套可以直接落地的防御方案。

一、先搞懂Kerberos票据攻击到底在打什么

Kerberos是AD域的默认认证协议,它的工作逻辑是:用户向KDC(密钥分发中心)请求TGT,拿到TGT后再去请求具体服务的TGS,整个过程用时间戳和会话密钥来防止重放。攻击者要做的就是绕过或者滥用这个信任链。常见的攻击手法包括:Kerberoasting(请求服务票据后离线爆破SPN账户密码)、AS-REP Roasting(利用不需要预认证的账户获取可离线破解的票据)、Golden Ticket(伪造TGT冒充任意用户)、Silver Ticket(伪造特定服务的TGS)、Pass-the-Ticket(直接复用偷来的票据)。这些攻击的共同点是——它们都在利用Kerberos协议本身的信任机制,而不是在"破解"什么漏洞。

二、缩短票据生命周期,从根源上压缩攻击窗口

默认情况下,Windows Server中TGT的有效期是10小时,这给了攻击者充足的时间去离线破解或者复用票据。第一步要做的就是把这个时间压下来。通过组策略修改以下路径:计算机配置 → Windows设置 → 安全设置 → 账户策略 → Kerberos策略。将"用户票据最大有效期"设为4小时甚至更短,"服务票据最大有效期"设为1小时。同时把"用户票据最大续期"也相应缩短。这样即使攻击者拿到了票据,可用时间也大幅减少。另外,在域控上执行以下命令可以强制生效:

net accounts /maxpwage:60 /minpwage:1 /maxpwage:90

这条命令设置密码最长使用90天、最短1天、强制提醒60天,配合票据策略形成双重约束。

三、禁用或限制不需要预认证的账户

AS-REP Roasting攻击的前提是目标账户启用了"不需要Kerberos预认证"选项。在AD中,这个属性可以通过PowerShell批量检查:

Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth | Select Name, SamAccountName

找到这类账户后,立刻禁用该选项。对于确实需要该属性的特殊服务账户,必须单独建立监控白名单,并且配合强密码策略(25位以上随机密码)来降低被爆破的风险。同时,所有服务账户的密码应该设置为"永不过期"但通过任务计划定期自动轮换,避免人工遗忘导致的安全隐患。

四、强化SPN账户管理,堵住Kerberoasting的入口

Kerberoasting的本质是攻击者请求带有SPN(服务主体名称)的账户的服务票据,然后离线暴力破解。防御的关键是:第一,减少SPN账户数量,只给真正需要的服务配置SPN;第二,所有SPN账户必须使用高强度密码,建议25位以上包含大小写、数字、特殊字符的随机密码;第三,定期审计SPN注册情况:

Set-ADAccountControl -Identity "svc_account" -ServicePrincipalNames @{Clear="MSSQLSvc/server.domain.com:1433"}

把不必要的SPN清理掉。第四,启用"受保护的用户"组(Protected Users group),该组内的成员会被系统强制使用更安全的Kerberos配置,包括禁止使用RC4加密、强制AES加密、禁止委派等。把所有高权限服务账户和关键管理账户都放进去。

五、部署监控和告警,让攻击行为无处遁形

单纯的策略配置不够,必须有实时监控。重点关注以下几类事件ID:4768(TGT请求)、4769(TGS请求)、4771(Kerberos预认证失败)、4776(NTLM验证,说明可能在绕过Kerberos)。在域控上开启高级审核策略:计算机配置 → Windows设置 → 安全设置 → 高级审核策略 → 账户登录 → 审核Kerberos身份验证服务、审核Kerberos服务票据操作。然后通过SIEM系统(如Microsoft Sentinel、Splunk等)建立关联规则:短时间内大量4768/4769事件、来自非正常IP的票据请求、异常时间段的认证行为、同一账户在多台机器上同时使用票据等。这些都是典型的攻击特征。

六、防范Golden Ticket和Silver Ticket攻击

Golden Ticket攻击的前提是攻击者已经拿到了krbtgt账户的NTLM哈希或AES密钥。这个账户的密码是整个域信任链的根基,必须每180天强制轮换一次,而且每次轮换要轮换两次(确保旧票据全部失效)。轮换命令:

klist purge

在域控上执行清除所有缓存票据,然后立即更改krbtgt密码。Silver Ticket则需要针对每个关键服务账户也做类似的密钥管理。此外,启用基于资源的约束委派(RBCD)替代传统的 unconstrained委派,减少攻击面。同时在域控上启用"审核敏感特权使用"和"审核账户管理"策略,监控krbtgt账户的任何修改操作。

七、网络层面的纵深防御

不要把所有鸡蛋放在Kerberos协议本身。在网络架构上,域控应该放在独立的管理VLAN中,与普通用户网段严格隔离。域控之间的复制流量、LDAP流量、Kerberos端口(88、464、389、636)都应该通过防火墙做白名单限制。禁止普通用户工作站直接访问域控的管理端口。同时启用LAPS(本地管理员密码解决方案),让每台机器的本地管理员密码都不同且随机,防止攻击者通过一台机器横向扩散到其他机器。另外,启用Windows Defender Credential Guard,将LSASS进程中的凭据隔离到虚拟安全容器中,直接阻断Mimikatz等工具的内存抓取能力。

八、定期渗透测试和红队演练

防御策略不是设一次就完事的。建议每季度做一次针对AD域的红队演练,重点测试Kerberos相关攻击链是否能被阻断。使用工具如Rubeus、Impacket、CrackMapExec等模拟攻击,验证你的监控是否能捕获、你的策略是否能阻止。每次演练后更新防御规则,形成闭环。特别要注意的是,很多企业只关注外部入侵,忽视了内部横向移动的检测,而Kerberos票据攻击恰恰是内网横向的核心手段。

九、总结:防御不是单点,是体系

Kerberos票据攻击的防御没有银弹,它需要从策略加固、凭证管理、网络隔离、实时监控、定期演练五个维度同时发力。核心原则是:最小权限、最短时效、最强监控。把krbtgt密码管好、把SPN账户管好、把票据生命周期压短、把异常行为盯住,你就能挡住绝大多数基于Kerberos的攻击。AD域安全从来不是一个配置能解决的问题,而是一个持续运营的过程。