2020年9月11日,安全公司Secura發布了公告,披露了Microsoft在2020年8月修補的漏洞細節(CVE-2020-1472)。該漏洞也稱為「Zerologon」,CVSS評分為10.0,號稱3秒擼域控,危害嚴重。攻擊者在通過NetLogon(MS-NRPC)協議與AD域控建立安全通道時,可利用該漏洞將AD域控的計算機帳號密碼置為空,從而控制域控伺服器。本文將從「Zerologon」漏洞原理、漏洞復現、威脅狩獵三個維度對「Zerologon」進行分析。
0x01 漏洞原理Netlogon遠程協議是一個遠程過程調用(RPC)接口,用於基於域的網絡上的用戶和計算機身份驗證,其協議通訊流程如下:
根據上述流程,攻擊者可控的因素有client challenge(在「Zerologon」中,攻擊者會將client challenge設置為全0),server challenge在每一輪認證過程中都會變化,secret對應於用戶密碼的hash,Encrypt的過程採用的是AES-CFB8,其運算過程如下:
AES-CFB8安全性取決於隨機選擇的IV。但在Netlogon RPC中,作為ComputeNetlogonCredential檢查的一部分,IV被錯誤的設置為0。如果IV和client challenge為全0的話,那麼整個AES運算過程變成:
如此一來,通過AES-CFB8加密模式有1/256 概率用8位元組全0 明文得到8位元組全0密文。
通過上述碰撞方法,攻擊者可以向域發起Netlogon 計算機帳戶認證請求, 使用8位元組全0 client challenge 不斷嘗試得到一個正確的8位元組全0 client credential 通過認證,再通過相關調用完成對域控密碼的修改。
0x02 漏洞復現實驗環境:
域控:Winserver2012 R2(x64)IP:10.10.10.10hostname:DC域:de1ay.com攻擊機:ubuntu1604(x64)IP:10.10.10.111運行exp腳本,成功將AD域控的機器帳戶DC的密碼置換成空:
python3 cve-2020-1472-exploit.py DC 10.10.10.10
此時域控伺服器帳戶密碼為空,同等於已知密碼,可以導出域內所有用戶憑據:
python3 secretsdump.py de1ay/DC\$@10.10.10.10 -no-pass
導出hash後,發現DC的hash為31d6cfe0d16ae931b73c59d7e0c089c0,也就是空密碼,同時獲得了域管administrator的hash,利用administrator的hash拿下域控:
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24 Administrator@10.10.10.100x03 Threat Hunting Rules根據上述的分析和驗證,針對「Zerologon」這樣一個全新的威脅,我們已經清楚了攻擊者相應技戰術TTP(MITRE ATT&CK:TA0004,T1078.002),假設攻擊者已經潛伏在企業內網中,並且正在嘗試利用「Zerologon」漏洞攻擊域控,在基於上述的假設場景的驅動下,我們該如何通過威脅狩獵(Threat Hunting)的方式主動搜尋這個威脅的相關特定信息,從而發現潛伏在企業中的攻擊者?
思路一:通過AD系統審計日誌
在實驗室環境下,如果域控伺服器沒有打補丁,攻擊者利用「Zerologon」漏洞攻擊成功後會有event ID 4742:
event ID 4742表示計算機帳戶已更改,我們注意到帳戶名是「ANONYMOUS LOGON」,受影響的帳戶名稱是域控制器計算機帳戶(DC$)。所以event ID 4742可以用來發現疑似「Zerologon」漏洞攻擊行為,但僅僅通過event ID 4742還不夠,因為正常的帳戶更改也會產生event ID 4742,所以會產生一定的誤報。由於攻擊者需要通過netlogon RPC協議進行多次嘗試,還會產生event ID 5805:
所以基於域控的系統審計日誌,我們的Threat Hunting Rule可以這麼寫:
此外,在8月份的補丁中,Microsoft添加了五個新的event ID,以通知易受攻擊的Netlogon連接:
允許存在漏洞的Netlogon安全通道連接時,將生成event ID 5829
拒絕易受攻擊的Netlogon連接時,將觸發event ID 5827和5828
允許存在漏洞的Netlogon連接時觸發的event ID 5830和5831
如果域控已經安裝了補丁,還可以在SIEM中搜索以上5個event ID進行威脅狩獵。
思路二:通過網絡流量
根據上面的分析,攻擊者需要使用8位元組全0 client challenge 不斷嘗試得到一個正確的8位元組全0 client credential 通過認證。所以網絡中將會有大量的netlogon協議信息:
我們可以使用全流量工具過濾出netlogon協議信息(「protocols == dcerpc」),如果短時間內出現大量的NetrServerAuthenticate3請求,並且client credential全為0,這樣的行為是比較異常的。可以參考SOC Prime Team利用zeek編寫的Threat Hunting Rule:
title: Possible CVE-2020-1472 (zerologon)description: CVE-2020-1472 (Netlogon Elevation of Privilege Vulnerability) may create thousands of NetrServerReqChallenge & NetrServerAuthenticate3 requests in a short amount of time.author: SOC Prime Teamdate: 2020/09/11references:- https://github.com/SecuraBV/CVE-2020-1472tags:- attack.lateral_movement- attack.T1210logsource: product: zeek service: dce_rpcdetection: selection: endpoint: 'netlogon' operation: 'NetrServerReqChallenge' selection2: endpoint: 'netlogon' operation: 'NetrServerAuthenticate3' timeframe: 1m condition: selection or selection2 | count() by src_ip > 100falsepositives:- 'unknown'level: high最後,在實驗室環境中,由於「Zerologon」漏洞利用會將域控伺服器的密碼置為空,會造成域內服務的一些異常,所以這個漏洞不但會對域控的安全性造成威脅,實際的攻擊利用也會影響AD域控的可用性,因此還是及時打補丁吧。
參考資料:
https://www.cynet.com/zerologon/
https://awakesecurity.com/blog/network-threat-hunting-for-zerologon-exploits-cve-2020-1472/
https://blog.zsec.uk/zerologon-attacking-defending/
https://medium.com/@sieutruc/detection-methods-for-the-cve-2020-1472-zerologon-by-using-the-existing-windows-log-9761ee69d9fc