最近我讀到了一篇關于mimikatz防御的外文文章,文章的結構和思路讓我印象深刻,但內容上有些許不足。國內也有一篇翻譯,但似乎只是機械地照搬原文,存在一些錯誤。因此,我決定重新翻譯并補充一些內容。本文旨在拋磚引玉,如果有任何錯誤,歡迎批評指正。
在內網滲透中,mimikatz是一個非常有用的工具。它可以從內存中提取明文密碼。大家都知道這個工具的威力,微軟也意識到了這一點,因此開發了一些安全防護措施來阻止mimikatz獲取密碼。然而,在Windows 2008之前的系統上,mimikatz仍然能夠獲取密碼。通常情況下,只要擁有本地管理員權限,就可以從內存中提取密碼。獲取密碼后,攻擊者可以進行橫向移動和提權。
在Windows系統中,調試權限(Debug Privilege)可以用來調試進程,甚至是內核。對于mimikatz來說,要讀取內存,通常需要獲取調試權限,然后打開進程。默認情況下,本地管理員組擁有這種權限。然而,除非管理員是程序員,否則他們通常不會使用這種權限。
本地安全策略默認情況下會賦予管理員組調試權限。
然而,域的默認組策略在這方面未作定義。
根據Windows策略的優先級,最終結果是管理員組擁有調試權限。
補充一下策略的優先級:
在沒有沖突的情況下,多條策略是合并的關系;如果有沖突,優先級高的適用,優先級從低到高依次為:本地策略(Local Policy)->站點策略(Site Policy)->域策略(Domain Policy)->組織單元策略(OU Policy)
不同配置對mimikatz的影響:默認情況下,可以成功獲取調試權限。
將擁有調試權限的組設置為空后,注銷并重新登錄。
運行mimikatz后,獲取調試權限失敗。
WDigest協議早在Windows XP時代就已引入。當時,該協議設計為將明文密碼存儲在lsass進程中,用于http認證。在Windows 2008之前的系統上,默認是啟用的,因此攻擊者可以從中獲取明文密碼。
但在Windows 2008及之后的系統上,默認是關閉的。如果在Windows 2008之前的系統上應用了KB2871997補丁,就可以啟用或禁用WDigest,配置如下:
HKEY_LOCAL_MACHINESystemCurrentControlSetControlSecurityProvidersWDigest
將UseLogonCredential值設置為0,WDigest不會將憑證緩存到內存中;將UseLogonCredential值設置為1,WDigest會將憑證緩存到內存中。
不同配置對mimikatz的影響:啟用緩存后,直接可以抓取明文密碼,非常方便。
關閉緩存后,重啟系統,再次嘗試抓取,什么也沒抓到。
Credential Caching域緩存憑證(Domain Cached Credentials,簡稱DDC),也稱為mscache。有兩個版本:XP/2003時代的第一代和Vista/2008之后的第二代。
計算機加入域后,需要通過Kerberos進行認證,而Kerberos認證需要域控制器的參與。但如果域成員暫時無法訪問域控制器,認證將無法進行。域憑證緩存就是為了解決這一問題。如果暫時無法訪問域控制器,Windows會嘗試使用本地緩存的憑證進行認證,默認緩存10條。
緩存位置(默認情況下本地管理員也沒有權限訪問):
HKEY_LOCAL_MACHINESECURITYCache
將組策略中的緩存條數設置為0,即不緩存。
不同配置對mimikatz的影響:默認配置緩存10條。登錄本地管理員賬戶,提權到系統權限,然后運行mimikatz,成功抓取到mscachev2。
將緩存數設置為0,停止域控制器,然后再次嘗試登錄域賬戶。域成員發現無法登錄。
登錄本地管理員賬戶,提取到系統權限,然后什么也沒抓到。
受保護的用戶組(protected Users Group)可以防止高權限用戶(如本地管理員)使用除Kerberos之外的認證方式(這真是太好了)。這是Windows 2012之后引入的一個新安全組(Windows 2008之前的系統應用KB2871997補丁后也會增加這個安全組)。它可以防止明文存儲在內存中和NTLM哈希泄露(因為使用Kerberos認證,所以不會泄露Net-NTLM哈希)。配置非常簡單,只需將需要保護的用戶添加到該組即可(由于本地硬件限制,無法復現,需要在Windows 2016和Windows 10上運行,但性能不足以支持)。
受限管理員模式(Restricted Admin Mode)是一種安全措施,可以防止賬戶憑證在目標系統中暴露。這是在Windows 8.1/Windows Server 2012 R2(請注意是R2版本)中引入的。Windows 7/Windows Server 2008要使用此功能,需要應用KB2871997和KB2973351補丁。此功能的使用需要客戶端和服務器端的相互配合。在服務器端啟用的方法是在注冊表中添加如下鍵值:
REG ADD "HKLMSystemCurrentControlSetControlLsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
右鍵->關于,查看客戶端版本是否為RDP 8.1。
潛在風險-RDP PTH:受限管理員模式可以使用當前登錄憑據進行登錄,因此“始終要求憑據”的選項絕對不能勾選。
sekurlsa::pth /user:<username> /domain:<computername or ip> /ntlm:<ntlm hash> "/run:mstsc.exe /restrictedadmin"
domain位置可以使用計算機名或IP地址。(需要管理員權限來獲取調試權限)
一路確認后即可成功。
成功將域控制器上的管理員賬戶頂替。
順便抓包查看,似乎只有RDP流量。
總結:
- 禁止調試權限對獲取系統權限的攻擊者沒有任何作用。
- WDigest默認是禁用的,但我們可以手動啟用,作為一個陷阱。
- mscache目前似乎只能通過hashcat破解,破解出明文后再利用。
- 受保護的用戶組需要進一步研究,等待硬件配置提升后再進行。
- 受限管理員模式下的PTH攻擊只能適用于特定版本,限制較多。如果內網環境限制嚴格(例如禁用了135和445端口的流量),這可能是一種突破手段。
參考資料