標題:MS14-068 漏洞分析

taibeihacker

Moderator

MS14-068 漏洞分析​

1 漏洞简介​

2014.11.18 日,微軟發布MS14-068 補丁,修復了一個影響全部版本Windows 服務器的嚴重漏洞。用於解決Microsoft Windows Kerberos KDC 漏洞,該漏洞允許黑客提升任意普通用戶權限成為域管理員身份。攻擊者可以利用這些提升的權限控制域中所有的計算機,包括域服務器。

2 原理分析​

2.1 kerberos 认证流程​

20200503103309.png-water_print

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
20200503104102.png-water_print

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。
20200503105047.png-water_print

20200503105309.png-water_print

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 (第三個原因)
20200503110123.png-water_print

20200503110200.png-water_print

20200503110205.png-water_print
 
返回
上方