如何防止Mimikatz獲取Windows密碼
黑客總是在用最簡單的攻擊方式來實(shí)現(xiàn)他們的目的,比如用已經(jīng)存在了好多年的工具——Mimikatz(哈密瓜),它可以從系統(tǒng)內(nèi)存中輕松獲取到明文密碼。
受影響的系統(tǒng)
Windows 7和Windows Server 2008(老系統(tǒng)也受影響)。
最新的Windows 8 / 10 、Windows Server 2012 / 2016原本是不受影響的,但是高權(quán)限的黑客可以通過修改注冊(cè)表來實(shí)現(xiàn)這樣的攻擊。
風(fēng)險(xiǎn)
黑客擁有系統(tǒng)管理員權(quán)限,就能從內(nèi)存中獲取登錄認(rèn)證信息(明文/各種哈希格式)。
描述
在Windows XP中,Microsoft增加了對(duì)“WDigest”協(xié)議的支持。該協(xié)議基于RFC 2617和2831??蛻舳擞迷搮f(xié)議向HTTP和SASL應(yīng)用發(fā)送明文憑證,Windows會(huì)將密碼緩存在內(nèi)存中,便于用戶登錄本地工作站。這也就是利用Mimikatz工具進(jìn)行攻擊的基礎(chǔ)了。
演示
我們?cè)趯?shí)驗(yàn)環(huán)境中設(shè)置了如下系統(tǒng):

我們的域控服務(wù)器運(yùn)行Windows 2012 R2系統(tǒng)。
我們用CrackMapExec(https://github.com/byt3bl33d3r/CrackMapExec)來模擬如何從這些系統(tǒng)中獲取認(rèn)證信息。在服務(wù)器上通過powershell來執(zhí)行Mimikatz,獲取的認(rèn)證信息如下。非常明了!是明文的:

建議
Microsoft先前就發(fā)布了KB 2871997補(bǔ)丁,就是用于解決該問題,以及相關(guān)的另外幾個(gè)問題的。有需要的可以點(diǎn)擊下面的鏈接下載:
Windows 7 x86 https://download.microsoft.com/download/9/8/7/9870AA0C-BA2F-4FD0-8F1C-F469CCA2C3FD/Windows6.1-KB2871997-v2-x86.msu
Windows 7 x64 https://download.microsoft.com/download/C/7/7/C77BDB45-54E4-485E-82EB-2F424113AA12/Windows6.1-KB2871997-v2-x64.msu
Windows Server 2008 R2 x64 Edition https://download.microsoft.com/download/E/E/6/EE61BDFF-E2EA-41A9-AC03-CEBC88972337/Windows6.1-KB2871997-v2-x64.msu
上述補(bǔ)丁安裝過后,我們還需要修改注冊(cè)表,防止認(rèn)證信息被緩存在內(nèi)存中。用下面的命令就能完成修改:
reg add HKLM/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest /v UseLogonCredential /t REG_DWORD /d 0
值得一提的是,某些IIS服務(wù)器可能會(huì)配置使用WDigest身份認(rèn)證。我們建議先在實(shí)驗(yàn)環(huán)境中測(cè)試上述修復(fù)方案,如果沒有問題再更新到生產(chǎn)環(huán)境中。
我們可以通過如下命令來測(cè)試修改是否生效:
reg query HKLM/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest /v UseLogonCredential
如果成功,系統(tǒng)應(yīng)該會(huì)返回如下內(nèi)容:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigestUseLogonCredential REG_DWORD 0x0
很多用戶更喜歡通過組策略(Group Policy)來修改注冊(cè)表,按照微軟給出的步驟操作即可(點(diǎn)擊這里):
打開組策略管理控制臺(tái)(Group Policy Management Console),右鍵單擊組策略對(duì)象(Group Policy objec),然后點(diǎn)擊編輯(Edit)。

在控制臺(tái)中,計(jì)算機(jī)配置(Computer Configuration)或者用戶配置(User Configuration)下,打開預(yù)設(shè)(Preferences)文件夾,再打開窗口設(shè)置文件夾(Windows Settings),右鍵單擊注冊(cè)表(Registry),然后新建一個(gè)注冊(cè)表,選擇“注冊(cè)項(xiàng)(Registry Item)”。

在新建注冊(cè)表項(xiàng)對(duì)話框中,下拉菜單中選擇“Creat(創(chuàng)建)”,輸入如下數(shù)據(jù):


設(shè)置好點(diǎn)擊“確認(rèn)”,新添加的項(xiàng)就會(huì)顯示在右邊的目錄中。
在Windows 7和2008系統(tǒng)中執(zhí)行下面這句命令(跳過組策略刷新間隔):
gpupdate
現(xiàn)在來驗(yàn)證一下修改是否完成,如下圖說明我們?cè)赪indows 7中修改成功。

Windows Server 2008 R2系統(tǒng)中看起來是這樣的:

現(xiàn)在我們重啟兩臺(tái)電腦,然后使用先前的域登錄憑證登錄系統(tǒng)。修改注冊(cè)表其實(shí)是不需要重啟電腦的,但因?yàn)榈卿洃{證是緩存在內(nèi)存中的,所以還是需要重啟清理一下。
最后我們?cè)儆肅rackMapExec(https://github.com/byt3bl33d3r/CrackMapExec)工具嘗試看看是不是能獲取到登錄憑證。
如你所見,我們已經(jīng)不能從內(nèi)存中獲取到明文憑證了。
當(dāng)然,還是可以看到NTLM hash。由此可見,強(qiáng)密碼和雙因子認(rèn)證是防止認(rèn)證密碼被破解的重要手段。另外,我們也需要較好的策略來防止哈希傳遞攻擊。相關(guān)這個(gè)問題Microsoft還有更多相關(guān)的資源可以提供查閱:
1、https://www.microsoft.com/pth
2、https://download.microsoft.com/download/7/7/A/77ABC5BD-8320-41AF-863C-6ECFB10CB4B9/Mitigating-Pass-the-Hash-Attacks-and-Other-Credential-Theft-Version-2.pdf
擁有系統(tǒng)權(quán)限的攻擊者仍然能通過恢復(fù)注冊(cè)表來實(shí)現(xiàn)攻擊,所以仍要關(guān)注注冊(cè)表的未授權(quán)更改情況。
譯者注:
通過這樣的手段,雖說不能完全阻止黑客,但是至少能給黑客制造無數(shù)的麻煩,非常提倡這么做。