本期作者/ordar123
無需重置計算機帳戶即可利用 Zerologon 的方法
什么是Netlogon 協(xié)議?
在Active Directory中比較重要的一個服務:"Netlogon"服務,此服務在DC和域成員服務器上運行,為域身份驗證提供重要服務,如果此服務停止成員服務器將無法登陸到域中。
客戶端和認證服務器之間建立一個基于NETLOGON協(xié)議的安全會話有兩個目的:一是用于認證;二是用于交換通信秘鑰SessionKey。
Netlogon 認證過程簡單來說就是是讓客戶端 (域內計算機)和服務器(域控制器)向分別對方證明他們都知道一個共同的秘密。此共享秘密是客戶端計算機帳戶密碼的散列(其實就是NTLM)。
Netlogon協(xié)議身份驗證握手過程詳細說可以分為以下幾個步驟:
客戶端啟動Netlogon會話,客戶端和認證服務器通過該會話相互交換隨機生成的8字節(jié)挑戰(zhàn)(挑戰(zhàn)就是一個隨機數(shù))。
客戶端和認證服務器,同時使用密鑰派生函數(shù)(KDF全稱Key derivation function)將兩個挑戰(zhàn)與共享秘密(NTLM)混合來計算出SessionKey。SessionKey=KDF(NTLM,client challenge+server challenge),如果客戶端和認證服務器使用的NTLM相同的話,客戶端和認證服務器就擁有同一個SessionKey了,這一步是認證的基礎。
客戶端使用SessionKey和客戶端挑戰(zhàn)使用AES-CFB8算法加密后結果A1發(fā)給服務端,然后認證服務器內部使用同樣的算法AES-CFB8算法生成A2,如果A1等于A2,那么認證服務器就知道客戶端是知道NTLM的,然后客戶端在服務器這里就認證通過了。同理,認證服務器使用SessionKey和服務端挑戰(zhàn)加密后結果B1發(fā)給客戶端,客戶端內部使用同樣的方法生成B2,如果B1等于B2,那么客戶端就知道了服務端是知道NTLM的。到這里認證過程就結束了,雙方互相認證了對方的身份;同時協(xié)商出來了一個加密密鑰SessionKey,這樣客戶端和認證服務器后續(xù)的所有消息都使用SessionKey來加密,然后SessionKey來解密對方的消息。
這個過程直接引用網上的圖片如下:
ZeroLogon(CVE-2020-1472)
漏洞原理與風險
該漏洞存在一個加密缺陷,其中對于每256個隨機生成的密鑰中的1個,對由所有0組成的純文本進行加密將導致也包含所有0的密文。簡單來說就是通過將Client challenge置為0的方式來碰撞密文client credential為0的情況,不斷重復這個過程直至服務器那端計算出來的密文hash也全是0,從而可以繞過認證過程。詳情可以查看ZeroLogon(CVE-2020-1472) 分析與狩獵。
Netlogon協(xié)議在Active Directory中主要由工作站和服務器使用,以通過安全通道與域控制器進行通信。因為加入Active Directory的每個工作站或服務器都有一個計算機帳戶,Active Directory知道該帳戶的密碼。Active Directory擁有多個從同一密碼派生的密鑰,這些密鑰可用于Kerberos和NTLM等身份驗證協(xié)議。
最初的Zerologon攻擊的工作原理是將域中域控制器的Active Directory帳戶的密碼重置為空字符串。這允許攻擊者以該域控制器的身份向另一個域控制器甚至同一域控制器進行身份驗證。能夠以域控制器身份進行身份驗證是一項高權限,因為域控制器可以使用DRSUAPI協(xié)議同步Active Directory數(shù)據(jù),包括NT哈希和Kerberos密鑰。反過來,這些密鑰可用于模擬域中的任何用戶,或創(chuàng)建偽造的 Kerberos 票證。
這其實是有風險的。在Active Directory中重置域控制器計算機帳戶密碼為空的那一刻,DC 處于不一致狀態(tài)。因為存儲在注冊表和內存lsass.exe中的加密計算機帳戶密碼不會更改。Active Directory中同一帳戶的密碼現(xiàn)在已更改,這將影響從此域控制器到此域控制器的身份驗證。如果重新啟動域控制器,則各種服務將不再啟動,因為它們想要從Active Directory讀取信息。如果執(zhí)行漏洞利用的速度足夠快,則可以從注冊表中恢復原始密碼,但是任然有風險,這就是為什么不建議在生產環(huán)境中利用它的原因。
什么是NTLM中繼?
NTLM協(xié)議的認證過程分為三步:
協(xié)商:主要用于確認雙方協(xié)議版本。
質詢:就是挑戰(zhàn)(Chalenge)/ 響應(Response)。
驗證:驗證主要是在質詢完成后,驗證結果,是認證的最后一步。
NTLM協(xié)議的認證過程如下圖所示:
應用服務器在收到用戶客戶端的認證信息后,由于本身沒有存儲用戶的NT哈希,所以必須依賴域服務器進行認證,將收到的認證信息發(fā)送給域服務器,這個過程基于NETLOGON協(xié)議。服務器使用 Netlogon RPC 協(xié)議將身份驗證消息發(fā)送到域控制器,該協(xié)議將此會話密鑰(SessionKey)返回給服務器。如下圖所示。
NTLM中繼攻擊(NTLM Relay)本質上是中間人的利用手法:欺騙客戶端向自己發(fā)起認證,自己再將完整認證過程轉發(fā)給服務端,達到繞過挑戰(zhàn)響應認證直接獲取服務端權限的目的。
攻擊者讓客戶端向攻擊者服務器發(fā)起 NTLM 請求
攻擊者服務器將客戶端的NTLM 請求轉發(fā)給真實服務器,真實服務端返回challenge
攻擊者服務器將收到的challenge轉發(fā)送給客戶端
客戶端返回response,攻擊者服務器將response轉發(fā)送給服務端
服務端驗證通過,攻擊者服務器獲得服務端權限
如下圖所示:
由此可以得知,如果攻擊者控制了任何一臺域內主機(域內主機均具有自身主機賬號的口令NTLM值),只要能獲取此前客戶端請求用戶發(fā)送給應用服務器的認證信息,攻擊者就可以向域服務器發(fā)起NETLOGON會話,從而獲取SessionKey,隨后可以發(fā)起重放攻擊。
什么是DCSync
不同域控制器(DC)之間,每15分鐘都會有一次域數(shù)據(jù)的同步。當一個域控制器(DC1)想從其他域控制器(DC2)獲取數(shù)據(jù)時,DC1會向DC2發(fā)起一個GetNCChanges請求,該請求的數(shù)據(jù)包括需要同步的數(shù)據(jù)。如果需要同步的數(shù)據(jù)比較多,則會重復上述過程。DCSync就是利用的這個原理,通過DirectoryReplicationService(DRS)服務的GetNCChanges接口向域控發(fā)起數(shù)據(jù)同步請求。
在默認情況下,只有Administrators、Domain Controllers和Enterprise Domain Admins組內的用戶有權限使用DCSync。
以前獲取域的賬號口令信息,需要登錄域服務器,在域服務器上運行代碼才可以獲取。DCSync的最大特點,在于不用登錄域服務器,即可遠程通過域數(shù)據(jù)同步復制的方式獲得想要的用戶口令信息。
NTLM中繼+Zerologon
在Active Directory中,有兩種主要身份驗證協(xié)議:NTLM和Kerberos。Kerberos是去中心化的,基于加密和共享機密工作。NTLM是中心化的,如果使用域帳戶認證,則需要與域控制器通信才能工作。這是因為NTLM使用質詢-響應身份驗證機制,其中對服務器發(fā)送的質詢執(zhí)行加密操作,以證明用戶擁有其密碼(或確切地說是其密碼的哈希版本)。對于ActiveDirectory帳戶,服務器實際上并不知道嘗試進行身份驗證的用戶的密碼是什么,因此它會將其轉發(fā)給域控制器,域控制器會告訴服務器響應是否適合給定的質詢。這種轉發(fā)實際上是通過Netlogon協(xié)議完成的,其中存在Zerologon漏洞。
NTLM協(xié)議的一個弱點是,如果攻擊者可以誘使用戶使用NTLM向他們進行身份驗證,則他們可以將身份驗證消息轉發(fā)到其他服務器并模擬此服務器上的用戶,這被稱為NTLM中繼。
“打印機錯誤”功能允許攻擊者通過NTLM觸發(fā)任何啟用了后臺處理服務的計算機的身份驗證,還可以通過使計算機帳戶向攻擊者的IP地址而不是主機名進行身份驗證來強制使用NTLM進行身份驗證,從而使其使用NTLM而不是Kerberos來認證,這為NTLM中繼提供了觸發(fā)條件。
NTLM協(xié)議執(zhí)行身份驗證時對消息進行簽名和加密的加密密鑰稱為SessionKey,SessionKey是基于用戶的NT哈希和協(xié)議中協(xié)商的某些屬性生成的。這意味著為了計算SessionKey,服務器需要擁有用戶的NT哈希。除非服務器是域控制器,否則它不具有該NT哈希。因此,服務器會使用NetlogonRPC協(xié)議將身份驗證消息發(fā)送到域控制器,該協(xié)議將此會話密鑰返回給服務器。
我們可以使用中繼連接直接向DRSUAPI協(xié)議的RPC端點進行身份驗證,雖然該協(xié)議需要簽名和加密,但我們可以使用Zerologon獲取SessionKey,并遵守與該協(xié)議通信的所有加密要求。
所有這些結合在一起,我們有一個全新的攻擊,它不依賴于重置機器帳戶的密碼來利用。它確實具有原始攻擊所沒有的一些先決條件,盡管這些先決條件默認存在,并且可能在大多數(shù)AD中起作用:
觸發(fā)打印機bug需要一個帳戶
打印后臺處理程序服務應在DC上運行
DC應該容易受到Zerologon的攻擊
域中至少應有2個DC,因為中繼回同一DC不起作用
最終流程如下圖所示:
攻擊實踐
實驗環(huán)境
Zerologon漏洞
漏洞復現(xiàn)
這里使用poc直接驗證,如下圖所示,證明DC1存在zerologon漏洞,并且成功dump出域控hash。
NTLM中繼+Zerologon
環(huán)境搭建
接下來恢復快照,恢復DC到zerologon利用之前的快照。
然后搭建DC2
1.先設置DNS為DC的ip
2.加入域rangenet.cn,同時將計算機名改成dc2。
3.重啟之后搭建域環(huán)境
選擇Active Directory 域服務,然后將此服務器提升為域控制器。這個過程相比大家都比較熟,這里就簡化步驟了,只截圖關鍵部分。
選擇將域控制器添加到現(xiàn)有域,然后更改操作所需憑據(jù),憑據(jù)為主域控DC的賬號密碼。后面都是下一步就完了,之后會重啟,重啟之后輸入的是主域控DC的賬號密碼。
這樣在同一個域(rangenet.cn)中就會有兩個域控,接下來將兩個域控互相設為備份。
4.互相設置DNS名稱服務器
進入主域控DC,然后打開DNS管理器。在正向查找區(qū)域中找到rangenet.cn,然后右鍵選擇屬性,選擇名稱服務器選項卡,然后添加新的名稱服務器。
然后將備域控DC2的域名和ip填進去。
進入DC2,做同樣的操作,將DC的名稱服務器添加進去。
這樣主域控DC和備域控DC2就互相冗余了。
漏洞復現(xiàn)
因為DC和DC2互為主備,所以隨便選一個進入,然后創(chuàng)建一個普通域用戶user。這個普通域用戶user是用于win10域成員登錄的。
假設我們事先拿下了win10域成員,然后在win10上拿到了rangenet/user的賬號密碼。
1.在kali上開啟NTLM中繼,中繼目標是主域控DC,中繼成功之后直接執(zhí)行DCSYNC來dump域控憑據(jù)。腳本會同時開啟SMB、HTTP、WCF、WAW服務用來執(zhí)行NTLM中繼。
2.在使用printbug攻擊DC2,使DC2強制使用NTLM登錄kali,這樣kali就能通過NTLM中繼拿到sessionkey。
3.通過NTLM中繼+zerologon漏洞組合利用,模擬DC2$機器賬戶的身份,使用zerologon繞過NETLOGON協(xié)議認證,然后使用竊取到session key,再調用DRSUAPI執(zhí)行DCSYNC操作,以DC2$的身份向DC請求同步憑據(jù),然后域內憑據(jù)就被dump出來了。
之后憑據(jù)可以用來登錄任意域控或域成員。
總結:這是一種無須重置域控密碼即可使用zerologon漏洞攻擊域控或提權的方法,但是利用條件又比直接zerologon漏洞攻擊多出了許多。利用條件需要雙域控同時需要一個域成員賬號密碼,但是沒有重置密碼的風險。
zerologon漏洞只需要域控主機名和ip即可利用,利用條件簡單,但是一旦將域控密碼置空就會造成域控脫域。因為在Active Directory中重置域控制器計算機帳戶密碼為空的那一刻,DC 處于不一致狀態(tài)。因為存儲在注冊表和內存lsass.exe中的加密計算機帳戶密碼不會更改,但是Active Directory中同一帳戶的密碼現(xiàn)在已更改,這將影響從此域控制器到此域控制器的身份驗證。如果重新啟動域控制器,則各種服務將不再啟動,因為它們想要從Active Directory讀取信息。
-
控制器
+關注
關注
112文章
16448瀏覽量
179477 -
計算機
+關注
關注
19文章
7540瀏覽量
88646 -
服務器
+關注
關注
12文章
9308瀏覽量
86071 -
中繼
+關注
關注
0文章
51瀏覽量
14659
原文標題:NTLM中繼+Zerologon漏洞利用的方法
文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論