證書雙向驗證怎麼抓包(竊取證書的攻擊流程及抓包分析)
2023-04-17 19:08:32 3
前言2021年中旬,specterops發布了一項針對域證書服務(adcs)的利用白皮書,文檔中提到了19種對adcs服務的利用。本篇主要是分析文中提出的ntlm relay to adcs竊取證書的攻擊流程,原理和抓包分析。
相關內容ADCS介紹Active Directory證書服務(Active Directory Certificate Services,下文簡稱ADCS)可以向用戶,機構和服務頒發證書,收到證書的個體可以使用證書進行域內的身份認證,本篇中要利用的是ADCS配置的WEB證書請求服務。
NTLM認證簡介NTLM協議是windows系統的一項身份認證協議,NTLM認證是一種Challenge/Response 驗證機制,由三種消息組成:通常稱為type 1(協商),type 2(質詢)和type 3(身份驗證)。
認證流程圖和簡單介紹如下:
Ntlm是嵌入式協議,它沒有自己的傳輸依賴項,常見的應用層協議有:HTTP,SMB, HTTP。NTLM不提供伺服器的身份驗證,因此ntlm認證的應用程式容易受到來自欺騙伺服器的攻擊,這也是ntlm relayx的原因所在。
【一一幫助安全學習,所有資源關注我,私信回復「資料」獲取~一一】①網絡安全學習路線②20份滲透測試電子書③安全攻防357頁筆記④50份安全攻防面試指南⑤安全紅隊滲透工具包⑥信息收集80條搜索語法⑦100個漏洞實戰案例⑧安全大廠內部視頻資源⑨歷年CTF奪旗賽題解析
原理介紹當攻擊者能夠獲取到某個實體的ntlm認證請求,就可以將這份請求轉發到攻擊者想要訪問的服務,並以該實體身份通過身份認證。在本文中,就是通過轉發獲取到的ntlm請求到adcs服務上,並為其申請證書,完成身份竊取。當ntlm請求的發起方是域控時,則可以獲取到域控機器帳戶的證書,進而使用域控證書完成域認證進行DCsync,獲取域管權限。
讓伺服器向攻擊者發起ntlm請求的方案很多,在實戰中的利用通常要通過網絡環境分析選擇,這裡只簡單介紹兩種:
**印表機漏洞:**Windows的MS-RPRN協議用於列印客戶機和列印伺服器之間的通信,默認情況下是啟用的。協議定義的RpcRemoteFindFirstPrinterChangeNotificationEx調用創建一個遠程更改通知對象,該對象監視對印表機對象的更改,並將更改通知發送到列印客戶端。任何經過身份驗證的域成員都可以連接到遠程伺服器的列印服務(spoolsv.exe),並請求對一個新的列印作業進行更新,令其將該通知發送給指定目標。之後它會將立即測試該連接,即向指定目標進行身份驗證(攻擊者可以選擇通過Kerberos或NTLM進行驗證)。另外微軟表示這個bug是系統設計特點,無需修復。**SSRF:**在ssrf裡面如果支持file協議,並且file協議能加載遠程資源的話,使伺服器遠程加載攻擊機上的資源,就能拿到net-ntlm更多可以參照https://daiker.gitbook.io/windows-protocol/ntlm-pian/5,這裡列舉了十多項控制伺服器向攻擊機發送ntlm請求的方案和舉例
環境域控:192.168.1.8 winserver 2012
adcs伺服器:192.168.1.8(一般情況下adcs不與域控部署在同一臺)
攻擊機:192.168.1.13 kali
受害機:192.168.1.14 win7
首先在攻擊機上啟動impacket包中的ntlmrelay.py
控制受害機向攻擊機發起ntlm請求(這裡筆者偷了個懶,直接使用netuse發起,實戰中可以使用上文中提到的漏洞),可以看到kali已經將請求轉發到了adcs伺服器並獲取到了證書
使用wireshark抓包分析
可以看到當控制受害機發起ntlm請求後,受害機成功和kali建立了連接,
在這之後,受害機又一次向kali發起了server challenge請求,kali並沒有立即響應,而是先建立了與adcs服務的http連接
在kali的第二次http請求中,adcs回復給kali server chanllenge
kali在接收到adcs返回的challenge後,將challenge轉發給了受害機[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-q3iOnAXr-1655210686838)(https://upload-images.jianshu.io/upload_images/26472780-bbfbc24495508bc1.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]
受害機在收到challenge後,使用自己的哈希將其加密生成Net-ntlmv2(即response)並發送給kali
在這之後,kali帶著受害機的Net-ntlmv2,成功請求到adcs的web服務,這裡可以看到響應是200
到此,整個ntlm中繼到adcs的身份認證完成,接下來kali就可以帶著受害者的net-ntlm去請求證書。筆者在復現漏洞時,看到很多文章提到,將adcs的web服務配置為https可以防止ntlm中繼攻擊,下文將對此做分析。
首先在adcs上安裝證書註冊web服務,安裝完成後,可以看到域控上443埠運行著adcs服務,同樣先啟動ntlmrelayx
當受害機發起ntlm請求後可以看到並沒有成功中繼到adcs的https服務上
抓包分析可以看到,kali接收到了來自受害機的ntlm連接
但是當kali向adcs web發起時,在tls client hello後,服務端並沒有回覆server hello,而是直接設置reset=1,斷開了連接
經過分析,筆者認為這裡斷開連接是因為tls協議協商失敗導致的,這裡筆者換到windwos物理機(192.168.1.10)再次開啟ntlmrelay
再次發起ntlm請求,可以看到成功認證到了adcs上
抓包
果然,當使用tls1.2向adcs發起請求時,adcs響應了ntlmrelayx並建立了連接,由於後續通信都是密文,這裡不做一一分析,但是可以看到,當adcs使用https提供web服務時,依然無法防禦ntlm中繼攻擊。
總結adcs服務在域內可以為用戶和機器頒發證書,證書一旦被惡意攻擊者截獲,攻擊者就可以通過證書以受害者的身份訪問任意服務,同時,證書默認有效期為5年,也就是說倘若管理員未吊銷被洩露的證書,攻擊者可以通過它使用長期的權限維持,由此可見在域中,adcs服務的配置,證書的審核和下發對全域安全有著重要意義。對上述攻擊手段的防禦,這裡給出兩點建議
非必要情況下,關閉adcs的web端服務配置adcs的web服務為不允許ntlm認證,