MS14-068 漏洞分析
1 漏洞简介
在2014.11.18,微软发布了MS14-068补丁程序,修复了严重的漏洞,影响了所有版本的Windows服务器。用于解决Microsoft Windows Kerberos KDC漏洞,该漏洞使黑客可以增加任何普通用户成为域管理员的权限。攻击者可以使用这些高架权限来控制域中的所有计算机,包括域服务器。2 原理分析
2.1 kerberos 认证流程

服务器收到客户端发送的TGS之后,它必须比较客户端在TGS中声明并将其与服务器上的ACL进行比较的域组,然后确定向客户端向客户端的资源访问权限。
Microsoft使用PAC来表示客户端在TGS中声明的域组。 PAC(特权属性证书),特权属性证书。
2.2 PAC
PAC包含客户端用户的SID和组的SID。 PAC确定客户端的组属性,即确定客户端的权限为了确保自己的合法性,PAC还包含2个签名。关键是KRBTGT的NTLM。除了用户SID和组SID外,签名的内容还具有其他零件。
PAC用密钥KRBTGT加密为TGT的一部分

客户端向KDC的AS模块启动身份验证请求。当返回TGT时,它会根据客户端所在的组生成PAC,包括客户端的用户SID,组SID和2个签名,以确保不篡改PAC。
将PAC作为TGT的一部分发送给客户。
当客户端使用TGT启动对KDC TGS模块的服务器服务访问时,KDC的TGS模块首先解密TGT并验证2个签名以验证PAC的合法性。
如果经过验证,KDC的TGS模块将用2个新签名代替旧签名,以确保不篡改PAC。第一个签名密钥是Server 的 NTLM,第二个是Server 与 Client 的临时会话密钥(Server Session Key)。
重新签名的PAC放置在已发行的Access Ticket TGS中,并使用服务器的NTLM作为密钥进行加密和保护。
服务器从客户端收到TGS后,它将解密TGS以验证合法性,验证PAC中的2个签名,确认PAC的合法性,然后确认客户端的访问权利。
2.3 漏洞成因
客户端在启动身份验证请求时,通过将pac设置为false,返回的TGT将不包括PAC。

当KDC验证PAC时,尽管原则上,对于PAC尾部的签名算法,它必须是带有密钥的签名算法,Microsoft允许在实现中进行任何签名算法。只要客户端指定任何签名算法,KDC服务器将使用指定的算法进行签名验证。
因此,任何锻内容都可以合法,并且可以将内容的价值直接添加为签名(第一个原因)
PAC不在其他地方放置在TGT中。 KDC仍然可以正确解析未放置在TGT中的PAC信息
PAC必须是密文,由键加密
KDC将从Authenticator中取出会话密钥,解密PAC信息,并使用客户端设置的签名算法来验证签名(第二个原因)
在KDC成功验证没有PAC的TGT之后,它将验证PAC在TGT中的合法性。
如果两者都已成功验证,则KDC将取出用户SID和组中的SID,并将其重用以进行签名。签名算法和键与将包含PAC标志设置为true时完全相同。将新生成的PAC添加到解密的TGT,然后重新加入并创建一个全新的TGT并将其发送给客户,而不是ST(第三个原因)


