原文地址:https://adsecurity.org/?page_id=1821
原文作者:Sean Metcalf

譯者注:
由于原文中,作者(Sean Metcalf)已經明確的指出 “未經本文作者明確的書面同意,請勿復制包含在此頁面的全部或部分內容。”,因此為了分享此佳作,譯者與作者(Sean Metcalf)在推上取得了聯系,溝通之后,作者允許我將此文完整翻譯并分享給其他人。在此也感謝 Sean Metcalf 大牛將有關 Mimikatz 的全部內容做了系統的整理并分享出來。以下是原文作者(Sean Metcalf)回復的截圖,以作授權說明:

p1

Mimikatz 作為當下內網滲透神器之一,看起來似乎很少有人真正關注它的全部功能(Sean Metcalf 在原文開頭也表示了這樣的疑惑),在一些諸如 “十大黑客工具” 的文章中也看不到 Mimikatz 的影子。 Sean Metcalf 大牛將有關 Mimikatz 的相關技術做了系統的整理,遂做粗糙翻譯并作分享。譯文難免有誤,望各位看官及時指正。此文是譯文的第一部分,主要闡述了 Mimikatz 的基本信息和檢測 Mimikatz 使用的方法,在第二部分中會包含大量常用或不常用的 Mimikatz 命令的具體用法。

0x00 簡介


看起來 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。

0x02 Mimikatz 概述


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 許可,具體細節如下:

您可以自由:

  • 分享 – 在任何媒體或以任何格式復制和發布相關的源文件
  • 適應 – 在源文件的基礎上進行任何改造
  • 用于任何目的,甚至是商業化。只要你遵守了該許可條款,許可證就不能廢除這些自由。
  • 署名 – 你必須給予適當的說明,提供了一個鏈接到許可證,并注明是否進行了更改。你可以這樣做以任何合理的方式,但并不是在暗示許可條款認可您或您所使用的任何方式。
  • 沒有額外的限制 – 您可能不適用于在法律上限制他人做任何事情的許可牌照的法律條款或技術措施。

0x03 Mimikatz 作者介紹


  • Benjamin DELPY gentilkiwi, 可以在 Twitter 上關注他 ( @gentilkiwi ) or 郵件聯系 ( benjamin [at] gentilkiwi.com )
  • lsadump 模塊的 DCSync 功能是 Benjamin 與 Vincent LE TOUX 一起合作寫的, 可以郵件聯系 vincent ( vincent.letoux [at] gmail.com ) or 訪問他的主頁 ( http://www.mysmartlogon.com )

0x04 Mimikatz 官方鏈接


0x05 Mimikatz 與 憑證


在用戶登錄之后,會生成很多憑證數據并存儲在本地安全權限服務的進程(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)

p2

此注冊表項值得你在你的環境中進行監控,因為攻擊者可能希望將它設置為 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 ,需要正確的權限來執行此功能)。

0x06 不同版本的操作系統中可用的憑證


Benjamin Delpy 在 OneDrive 上傳了一個 Excel 圖表(如下圖所示),顯示了在內存(LSASS)中可用的證書數據類型,其中包括了在 Windows 8.1 和 Windows 2012 R2 中增強的“減少保存在內存中的憑證數量和類型”的保護機制。

p3

0x07 Powershell 與 Mimikatz:


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位版本)。

  • 使用 mimikatz 從 LSASS 進程轉儲憑證:Invoke-Mimikatz -DumpCreds
  • 使用 mimikatz 導出所有私有證書(即使它們已被標記為不可導出): Invoke-Mimikatz –DumpCerts
  • 在遠程計算機上使用 debug 提升權限:Invoke-Mimikatz -Command “privilege::debug exit” -ComputerName “computer1”

Invoke-Mimikatz “Command” 參數允許 Invoke-Mimikatz 執行自定義的 Mimikatz 命令行。

防御者應該預料到包含在 Mimikatz 中的任何功能在 Invoke-Mimikatz 中都是可用的。

0x08 檢測 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 卻沒有檢測到它。所以,你的檢測情況會有所不同。

  • Benjamin Delpy 在 Mimkatz 的 GitHub 庫中發布了 Mimikatz 的 YARA 規則
  • 運行最新版的防病毒軟件。 VirusTotal 在 2015年11月11日使用 AV 引擎對 mimikatz.exe(32位&64位)的檢測率為 35/35。
  • Mimikatz (截至 10 月) 在 BusyLights 的附屬活動。[使用 Mimikatz version 2.0 alpha 20151008 (oe.eo) edition 實現]
  • 充分利用安全軟件來鑒定與 LSASS 進程交互的過程。安全軟件對注入過程進行監視可能同樣也可以定期去檢測 Mimikatz 的使用。
  • 在企業中的多臺計算機的內存中植入特殊憑據包括 HoneyTokens/HoneyHashes。這些憑據是被標記過的,所以當有人試圖使用它們時,系統會發出嚴重的警報。這需要某種推送方法以及對攻擊者有吸引力的憑證。在理論上,這可能能夠檢測出憑證竊取并且能夠在環境中使用此方法。
  • WDIGEST 注冊表鍵(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest)應該被設置為“0”,以防止在 LSASS 進程中存儲“明文”密碼。如果在企業內部的系統中,該注冊表鍵被設置為“1”,這可能表示有憑證竊取活動發生。此注冊表項值得你在你的環境中進行監控,因為攻擊者可能希望將它設置為 1 ,啟用摘要密碼支持,以便在任何版本的 Windows 中,從 Windows 7/2008 R2 到 Windows 10/2012 R2,強制將“明文”密碼放置在 LSASS 進程中。
  • 檢測偽造 Kerberos 票證的方法我在 2015 年年初發表過,這些方法可以檢測出黃金票證,白銀票證,以及信任票證的偽造。對如何檢測 MS14-068 Kerberos 漏洞攻擊我也給出了一些信息。
  • 啟用所有的 Windows 版本中所支持的企業 LSA 保護。這可以防止 Mimikatz 工作方式的“即開即用”,并需要使用Mimikatz驅動程序,記錄事件,當它與LSASS交互的。
  • 在所有的企業版的 Windows 中啟用 LSA 保護。這可以防止 Mimikatz 工作方式的 “即開即用” ,以及阻止其在運行時需要使用 Mimikatz 驅動程序的要求,當它與 LSASS 進行交互時,也會記錄事件日志。

0x09 Mimikatz 與 LSA 保護方式


在 Windows Server 2012 R2 和 Windows 8.1 中包含了一個名為 “LSA 保護” 的新功能,其中包括在 Windows Server 2012 R2 上啟用 LSASS 作為一個受保護的進程(Mimikatz 可以使用驅動程序繞過此保護措施,但會在事件日志中產生一些日志):

LSA 包括本地身份驗證服務子系統(LSASS)進程,驗證用戶的本地和遠程登錄并強制實施本地安全策略。Windows 8.1 操作系統為 LSA 提供了額外的保護阻止非受保護的進程讀取內存和代碼注入。這為 LSA 存儲和管理的憑證信息提供了額外的安全性。

啟用 LSA 保護

  1. 打開注冊表編輯器(Regedit.exe),并定位到注冊表項:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa,設置注冊表鍵的值為:“RunAsPPL”=dword:00000001
  2. 創建一個新的 GPO 并瀏覽到 “計算機配置”—“首選項”-“Windows設置”。右鍵單擊注冊表—新建,然后單擊注冊表項。彈出新的注冊表屬性對話框。在配置單元列表中,單擊HKEY_LOCAL_MACHINE在注冊表鍵路徑列表中瀏覽到SYSTEM\CurrentControlSet\Control\Lsa,在值名稱框中,輸入 “RunAsPPL” ,在值類型框中單擊 “REG_DWORD” ,在數值數據框中,輸入 “00000001” ,最后單擊“確定”。

LSA 保護阻止了一個非受保護的進程與 LSASS 進行交互。但是 Mimikatz 仍然可以使用驅動程序繞過(“!+”)。

p4

0x0A 檢測 Invoke-Mimikatz


  • 確保所有的 Windows 系統都安裝了 PowerShell v3 或更高版本。新版本的 PowerShell 有更好的日志記錄功能,特別是PowerShell V5。
  • 開啟通過組策略記錄 PowerShell 模塊運行日志:計算機配置 — 策略 — 管理模板 — Windows組件 — Windows PowerShell,打開模塊記錄功能。輸入“*”,然后單擊確定。這將記錄所有的 PowerShell 活動,包括所有的 PowerShell 模塊。

p5

  • PowerShell 的活動將被記錄到 PowerShell 的操作日志中。將這些事件推送到中央日志服務器(通過 Windows 事件轉發或類似的方法)或 SIEM。
  • 使用如下方法解析 PowerShell 的事件:
    • “System.Reflection.AssemblyName”
    • “System.Reflection.Emit.AssemblyBuilderAccess ”
    • “System.Runtime.InteropServices.MarshalAsAttribute”
    • “TOKEN_PRIVILEGES”
    • SE_PRIVILEGE_ENABLED

注意:雖然有可能通過提醒中的 “mimikatz”,“Delpy”,或 “gentilkiwi” 識別出 Mimikatz 的使用,但是一個“牛逼”的攻擊者可能會推出自己的 Mimikatz 或 Invoke-Mimikatz 版本并且沒有這些關鍵字。

檢測帶有攻擊性的 PowerShell 工具

許多 PowerShell 的攻擊工具都使用了如下被記錄到 PowerShell 模塊日志記錄的調用方法。

  • “GetDelegateForFunctionPointer”
  • “System.Reflection.AssemblyName“
  • “System.Reflection.Emit.AssemblyBuilderAccess“
  • “System.Management.Automation.WindowsErrorReporting”
  • “MiniDumpWriteDump”
  • TOKEN_IMPERSONATE
  • TOKEN_DUPLICATE
  • TOKEN_ADJUST_PRIVILEGES
  • TOKEN_PRIVILEGES

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞