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