利用S4U2Self实现Active Directory横向渗透
利用S4U2Self实现Active Directory横向渗透
作者:Hunter Wade | BHIS实习生
Hunter刚获得网络防御硕士学位,拥有两年多的渗透测试经验。他专注于Active Directory测试,业余时间喜欢在家庭实验室分析恶意软件。
本文为交叉发布内容,原始文章参见此处。
摘要
当仅拥有有效机器账户哈希时,可利用Kerberos S4U2Self代理实现本地提权,重新开启SEImpersonate等本地到域的横向渗透路径。
Kerberos基础
Kerberos是基于票据的认证协议,通过可信第三方建立安全通信。包含三个角色:
- 客户端:请求访问资源的用户/系统
- 服务端:目标资源
- 密钥分发中心(KDC):负责认证和发证的可信第三方
认证流程:
- 客户端用密码加密认证请求发送给KDC
- KDC验证后返回用KDC密钥加密的TGT票据
- 客户端用TGT向KDC请求服务票据(ST)
- KDC返回用服务密码加密的ST
- 服务端解密ST验证客户端身份
委派机制与双跳问题
Kerberos的"双跳问题"指服务无法转发客户端凭据。微软引入三种委派方案:
- 无约束委派:服务可获得客户端TGT
- 约束委派:限制委派到特定SPN,引入S4U2Self/S4U2Proxy
- 基于资源的约束委派:由目标资源控制委派权限
S4U2Self技术分析
关键发现:S4U2Self不需要配置约束委派即可执行模拟。攻击者获取机器账户哈希后:
- 通过哈希传递攻击生成TGT
- 模拟任意域用户获取服务票据
- 限制:仅能在被入侵的机器账户关联资源上模拟
攻击路径实践
当无法直接横向移动时,可通过以下步骤重新开启SEImpersonate攻击路径:
- 用机器哈希通过S4U2Self模拟域管理员
- 创建新本地管理员账户
- 修改注册表禁用Remote UAC
- 检测域管理员会话
- 通过计划任务实现SEImpersonate提权
- 创建域管理员账户完成域控
技术限制
适用场景需同时满足:
- 拥有未过期的机器账户哈希
- 本地管理员账户被禁用
- 域管理员在目标主机存在活跃会话
典型应用场景:
- 通过SEBackupPrivilege获取哈希且本地admin被禁用
- 从未更新密码的备份中获取有效机器哈希
防御建议
- 定期轮换机器账户密码(默认30天)
- 限制本地管理员权限
- 监控异常Kerberos票据请求
- 启用Credential Guard防护PTT/PTH攻击
参考资源
- 微软S4U2Self协议规范
- ADSecurity.org委派指南
- Credential Guard技术文档
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码