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

基于斜率預(yù)測的信道中繼選擇方法
微軟Windows Defender出現(xiàn)漏洞 攻擊者可利用漏洞對計(jì)算機(jī)進(jìn)行控制
西門子ICS軟件中的漏洞遭披露,難以阻止黑客利用漏洞
黑客正在積極利用該操作系統(tǒng)中的一個(gè)漏洞,稱為Zerologon
NTLM身份驗(yàn)證:揭秘Windows網(wǎng)絡(luò)安全的秘密武器

評(píng)論