MS14-068 漏洞分析
1 漏洞简介
2014.11.18 日,微软发布 MS14-068 补丁,修复了一个影响全部版本 Windows 服务器的严重漏洞。用于解决 Microsoft Windows Kerberos KDC 漏洞,该漏洞允许黑客提升任意普通用户权限成为域管理员身份。攻击者可以利用这些提升的权限控制域中所有的计算机,包括域服务器。
2 原理分析
2.1 kerberos 认证流程
Server 收到 Client 发来的 TGS 后,要根据 TGS 中 Client 申明所在的域组,和 Server 上的 ACL 进行比对,然后决定给予 Client 什么样的资源访问权限。
微软使用 PAC 来表示 TGS 中 Client 申明的域组。PAC (Privilege Attribute Certificate),特权属性证书。
2.2 PAC
PAC 包含 Client 的 User 的 SID
、 Group 的 SID
。PAC 决定了 Client 的组属性,即决定了 Client 的权限
PAC 为了保证自身的合法性,还包含 2 个签名,Key 为 krbtgt 的 NTLM,签名的内容除了 User SID、Group SID
外,还有其他部分
PAC 作为 TGT 的一部分,是加密的,密钥为 krbtgt 的 NTLM
Client 向 KDC 的 AS 模块发起认证请求,AS 返回 TGT 时,会根据 Client 所在的组,生成 PAC,包含 Client 的 User SID、Group SID,以及用于确保 PAC 不被篡改的 2 个签名
将 PAC 作为 TGT 的一部分,发送给 Client。
Client 使用 TGT 向 KDC 的 TGS 模块发起访问 Server 服务时,KDC 的 TGS 模块首先解密 TGT,并通过校验 2 个签名,以验证 PAC 的合法性。
如果通过验证,KDC 的 TGS 模块用 2 个新的签名替代老的签名来保证 PAC 不被篡改。第一个签名的密钥为 Server 的 NTLM,第二个密钥为 Server 与 Client 的临时会话密钥(Server Session Key)。
重新签名后的 PAC 被放置在签发的访问票据 TGS 中,使用 Server 的 NTLM 作为密钥被加密保护
Server 收到来自 Client 的 TGS 后,解密 TGS 验证合法性,校验 PAC 中的 2 个签名,确认 PAC 的合法性,然后确认 Client 的访问权限。
2.3 漏洞成因
Client 在发起认证请求时,通过设置 include-PAC
为 False
,则返回的 TGT
中不会包含 PAC
。
KDC 对 PAC 进行验证时,对于 PAC 尾部的签名算法,虽然原理上规定必须是带有 Key 的签名算法才可以,但微软在实现上,却允许任意签名算法,只要客户端指定任意签名算法,KDC 服务器就会使用指定的算法进行签名验证。
因此伪造的任意内容都可以是合法的,直接加上内容的值作为签名即可 (第一个原因)
PAC 没有被放在 TGT 中,放在其它地方。KDC 在仍然能够正确解析出没有放在 TGT 中的 PAC 信息
PAC 必须是密文,经过 Key 加密的
KDC 会从 Authenticator 中取出来 Session Key,把 PAC 信息解密并利用客户端设定的签名算法验证签名 (第二个原因)
KDC 验证缺少 PAC 的 TGT 成功后,再去验证不在 TGT 中的 PAC 的合法性。
如果 2 个均验证成功,KDC 把 PAC 中的 User SID、Group SID
取出来,重新使用进行签名,签名算法和密钥与设置 inclue-pac
标志位为 TRUE
时一模一样。将新产生的 PAC 加入到解密后的 TGT 中,再重新加密制作全新的 TGT 发送给 Client,不是 ST (第三个原因)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: ctf 中的命令执行漏洞
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论