原文地址:https://adsecurity.org/?page_id=1821
原文作者:Sean Metcalf
譯者注:
由于原文中,作者(Sean Metcalf)已經明確的指出 “未經本文作者明確的書面同意,請勿復制包含在此頁面的全部或部分內容。”,因此為了分享此佳作,譯者與作者(Sean Metcalf)在推上取得了聯系,溝通之后,作者允許我將此文完整翻譯并分享給其他人。在此也感謝 Sean Metcalf 大牛將有關 Mimikatz 的全部內容做了系統的整理并分享出來。以下是原文作者(Sean Metcalf)回復的截圖,以作授權說明:
Mimikatz 作為當下內網滲透神器之一,看起來似乎很少有人真正關注它的全部功能(Sean Metcalf 在原文開頭也表示了這樣的疑惑),在一些諸如 “十大黑客工具” 的文章中也看不到 Mimikatz 的影子。 Sean Metcalf 大牛將有關 Mimikatz 的相關技術做了系統的整理,遂做粗糙翻譯并作分享。譯文難免有誤,望各位看官及時指正。此文是譯文的第一部分,主要闡述了 Mimikatz 的基本信息和檢測 Mimikatz 使用的方法,在第二部分中會包含大量常用或不常用的 Mimikatz 命令的具體用法。
看起來 Red(攻) & Blue(防) Team 里的大多數人并不熟悉 Mimikatz 的大部分功能,所以我收集了所有我可以找到的可用的命令并將它們整理在此文中。如果,日后我又找到了一些新的有用的命令,我也會更新此文。這樣, Red(攻) & Blue(防) Team 的黑客就都可以更好的理解 Mimikatz 的所有功能,同時也能把雇傭其所保護的企業的安全做的更好。
在與很多人,包括被雇傭的攻防兩方的黑客,網絡從業者交談之后,我了解到除了最常用的幾個 Mimikatz 命令外,大多數人并不知道 Mimikatz 的全部功能。本文將盡可能的詳述每一個命令,它是什么,它又是如何工作的,以及運行它所需的權限,參數(必需的和可選的),另外還將使用相關的截圖及附加的內容進行說明(如果可能的話)。然而還有一些內容我沒有研究過,期望在不久的將來能深入探究。我會繼續將關于使用 Mimikatz 的各個方面的文章發表在 ADSecurity.org 上,不過我打算一直更新此文,并盡可能的全面。
本文的內容是為了幫助企業更好地了解 Mimikatz 的功能,且不能被用于非法活動。請不要在未獲批準的計算機上使用 Mimikatz ,總之,不要使用 Mimikatz 進行滲透測試攻擊。
未經本文作者明確的書面同意,請勿復制包含在此頁面的全部或部分內容。
我沒有參與編寫 Mimikatz,因此沒有特別的見解。本文的所有內容都是從使用 Mimikatz,閱讀 Mimikatz 源代碼,與 Benjamin 交流以及查閱他的博客和 GitHub 上的頁面,還有我自己的研究中獲得的。
本文中的的任何錯誤都是我自己的錯誤而已。請在這里發表評論。
非常感謝 Benjamin Delpy 編寫并不斷更新 Mimikatz。他所做的工作極大地提高了 Windows 的安全性,尤其是 Windows10。
Mimikatz 是從 Windows 系統中收集憑證數據最好的工具之一。事實上,我個人認為 Mimikatz 是收集 Windows 系統憑證數據的“瑞士軍刀”(多個利器的集合) - 一個可以做任何事情的工具。由于 Mimikatz 的作者 Benjamin Delpy 是法國人,所以描述關于 Mimikatz 用法的資源都是法語的,至少在他的博客中是這樣的。 Mimikatz 的 GitHub 頁面是英文的,包括了命令的用法等有用信息。
Mimikatz 是 Benjamin Delpy (@gentilkiwi) 在 2007 年使用 C 語言編寫的一個 Windows x32/x64 程序,用于了解更多關于 Windows 的憑據數據(并作為 POC)。
有兩個可選的組件能提供一些額外的功能,mimidrv(與 Windows 內核交互的驅動程序)和 mimilib(繞過 AppLocker,驗證包/SSP,密碼過濾器以及用于 WinDBG 的 sekurlsa)。
Mimikatz 需要管理員或 SYSTEM 權限,通常使用 DEBUG 權限執行某些操作,與 LSASS 進程(取決于所做的操作的要求)進行交互。
Mimikatz 可以通過編譯并運行你自己的版本,運行 Mimikatz 可執行文件,利用 Metasploit 腳本,和官方的 PowerShell 版本— Invoke-Mimikatz ,或 Mimikatz 的十多個 PowerShell 變種(我比較偏愛用 PowerShell 寫的 Empire,因為它真的很棒!)。
Mimikatz 的源代碼和二進制版本可在 GitHub 上找到,并遵守 Creative Commons 許可,具體細節如下:
您可以自由:
在用戶登錄之后,會生成很多憑證數據并存儲在本地安全權限服務的進程(LSASS)內存中。其目的是為了方便單點登錄(SSO)在每次對資源進行訪問請求時確保用戶不會被提示。憑證數據包括 NTLM 密碼哈希,LM 密碼哈希(如果密碼長度小于 15 個字符),甚至明文密碼(以支持其他的 WDigest 和 SSP 認證)。雖然可以阻止 Windows 創建 LM 哈希到本地計算機的 SAM 數據庫(或 AD 數據庫),但這并不能阻止系統在內存中生成 LM 哈希。默認情況下,在 Windows Server 2008 和 Windows Vista 中不再生成用戶的 LM 哈希,除非明確的啟用了該功能。從 Windows 8.1 和 Windows Server 2012 R2 開始,LM 哈希和“純文本”密碼將不在內存中生成。此功能也被“移植”到了較早版本的 Windows 中,Windows 7/8/2008 R2/2012 需要打 kb2871997 補丁。為了防止在 LSASS 進程中放置“明文”密碼,下面的注冊表鍵需要被設置為“0”(禁用摘要):
#!bash
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest “UseLogonCredential”(DWORD)
此注冊表項值得你在你的環境中進行監控,因為攻擊者可能希望將它設置為 1 ,啟用摘要密碼支持,以便在任何版本的 Windows 中,從 Windows 7/2008 R2 到 Windows 10/2012 R2,強制將“明文”密碼放置在 LSASS 進程中。在 Windows 8.1/2012 R2 及以后的 Windows 系統中,沒有 “UseLogonCredential” 的 DWORD 值,所以必須手動創建。如果在這些系統中存在了該鍵,可能意味著該系統存在一些問題。
需要注意的是,對于攻擊者來說直接在目標系統上運行代碼的希望很小,因此 Mimikatz 不斷使用新的能夠遠程運行的功能進行更新。這包括運行 Mimikatz 并對遠程系統進行遠程轉儲憑證,使用 PowerShell 遠程管理執行 Invoke-Mimikatz 以及 DCSync,最新的一個特性是針對某臺 DC 進行遠程抓取在域中的任何 Active Directory 帳戶的密碼數據時,不需要在 DC 中運行任何 Mimikatz 代碼(它使用了微軟官方的域控制器復制 API ,需要正確的權限來執行此功能)。
Benjamin Delpy 在 OneDrive 上傳了一個 Excel 圖表(如下圖所示),顯示了在內存(LSASS)中可用的證書數據類型,其中包括了在 Windows 8.1 和 Windows 2012 R2 中增強的“減少保存在內存中的憑證數量和類型”的保護機制。
Mimikatz 中的大多數功能在 PowerSploit(PowerShell 滲透框架)中都是可用的。通過 “Invoke-Mimikatz” 這個 PowerShell 腳本(作者是Joseph Bialek),此腳本“利用Mimikatz 2.0 和 Invoke-ReflectivePEInjection 反射式的將 Mimikatz 完全加載到內存運行。這使得你在轉儲憑證時無需將 Mimikatz 的二進制文件寫到磁盤中。PowerSploit 框架現在托管在 “PowerShellMafia” GitHub 庫中。
是什么讓 Invoke-Mimikatz 如此有“魔力”,就是使用了反射式加載 Mimikatz DLL(已內嵌了腳本)到內存的能力。Invoke-Mimikatz 的代碼可以從外網下載并在內存中執行,無需向磁盤寫入任何東西。此外,如果使用相應的權限運行 Invoke-Mimikatz 并且目標計算機中啟用了 PowerShell 遠程管理時,就可以從其他系統中導出憑證數據,并可以遠程執行標準的 Mimikatz 命令,不需要向遠程系統上丟任何文件。
Invoke-Mimikatz 不再更新,不過我們可以使用較新的 Mimikatz 轉換出 DLL(32位和64位版本)。
Invoke-Mimikatz “Command” 參數允許 Invoke-Mimikatz 執行自定義的 Mimikatz 命令行。
防御者應該預料到包含在 Mimikatz 中的任何功能在 Invoke-Mimikatz 中都是可用的。
有幾種方法可以潛在地檢測 Mimikatz 在網絡上的使用,雖然這些方法不能保證一定可行。由于 Mimikatz 的源代碼在 GitHub 上已經公開,所以任何人都可以使用 Visual Studio 編譯他們自己的版本。我構建了我自己的 Mimikatz 版本叫做 “kitkatz”,將所有的 “mimikatz” 實例替換為 “kitikatz”后,在 VirusTotal 上的檢測率并不理想(4/54)。在我的 Windows 10 中的 Windows Defender 檢測到了它。之后,我使用相同的字詞將 “Benjamin Delpy” 和 “gentilkiwi” 替換了一下,僅僅是把 “e” 替換為 “3” ,“i” 替換為 “1”。檢測率仍然比較差(4/54)。然而在我的 Windows 10 中的 Windows Defender 卻沒有檢測到它。所以,你的檢測情況會有所不同。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest
)應該被設置為“0”,以防止在 LSASS 進程中存儲“明文”密碼。如果在企業內部的系統中,該注冊表鍵被設置為“1”,這可能表示有憑證竊取活動發生。此注冊表項值得你在你的環境中進行監控,因為攻擊者可能希望將它設置為 1 ,啟用摘要密碼支持,以便在任何版本的 Windows 中,從 Windows 7/2008 R2 到 Windows 10/2012 R2,強制將“明文”密碼放置在 LSASS 進程中。在 Windows Server 2012 R2 和 Windows 8.1 中包含了一個名為 “LSA 保護” 的新功能,其中包括在 Windows Server 2012 R2 上啟用 LSASS 作為一個受保護的進程(Mimikatz 可以使用驅動程序繞過此保護措施,但會在事件日志中產生一些日志):
LSA 包括本地身份驗證服務子系統(LSASS)進程,驗證用戶的本地和遠程登錄并強制實施本地安全策略。Windows 8.1 操作系統為 LSA 提供了額外的保護阻止非受保護的進程讀取內存和代碼注入。這為 LSA 存儲和管理的憑證信息提供了額外的安全性。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
,設置注冊表鍵的值為:“RunAsPPL”=dword:00000001
HKEY_LOCAL_MACHINE
在注冊表鍵路徑列表中瀏覽到SYSTEM\CurrentControlSet\Control\Lsa
,在值名稱框中,輸入 “RunAsPPL” ,在值類型框中單擊 “REG_DWORD” ,在數值數據框中,輸入 “00000001” ,最后單擊“確定”。 LSA 保護阻止了一個非受保護的進程與 LSASS 進行交互。但是 Mimikatz 仍然可以使用驅動程序繞過(“!+”)。
SE_PRIVILEGE_ENABLED
”注意:雖然有可能通過提醒中的 “mimikatz”,“Delpy”,或 “gentilkiwi” 識別出 Mimikatz 的使用,但是一個“牛逼”的攻擊者可能會推出自己的 Mimikatz 或 Invoke-Mimikatz 版本并且沒有這些關鍵字。
許多 PowerShell 的攻擊工具都使用了如下被記錄到 PowerShell 模塊日志記錄的調用方法。
TOKEN_IMPERSONATE
”TOKEN_DUPLICATE
”TOKEN_ADJUST_PRIVILEGES
”TOKEN_PRIVILEGES
”