Mimikatz 非官方指南和命令參考_Part1
原文地址: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 命令的具體用法。
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 官方連結
- Mimikatz GitHub (原始碼)
- Mimikatz Releases (包含了編譯好的二進位制檔案)
- Mimikatz GitHub Wiki (包含了一些說明文件)
- GentilKiwi Blog (部落格裡的大多數內容是用法語寫的,請使用 Chrome 瀏覽器進行自動翻譯)
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)
此登錄檔項值得你在你的環境中進行監控,因為攻擊者可能希望將它設定為 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 中增強的“減少儲存在記憶體中的憑證數量和型別”的保護機制。
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 保護
- 開啟登錄檔編輯器(Regedit.exe),並定位到登錄檔項:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
,設定登錄檔鍵的值為:“RunAsPPL”=dword:00000001
- 建立一個新的 GPO 並瀏覽到 “計算機配置”—“首選項”-“Windows設定”。右鍵單擊登錄檔—新建,然後單擊登錄檔項。彈出新的登錄檔屬性對話方塊。在配置單元列表中,單擊
HKEY_LOCAL_MACHINE
在登錄檔鍵路徑列表中瀏覽到SYSTEM\CurrentControlSet\Control\Lsa
,在值名稱框中,輸入 “RunAsPPL” ,在值型別框中單擊 “REG_DWORD” ,在數值資料框中,輸入 “00000001” ,最後單擊“確定”。
LSA 保護阻止了一個非受保護的程式與 LSASS 進行互動。但是 Mimikatz 仍然可以使用驅動程式繞過(“!+”)。
0x0A 檢測 Invoke-Mimikatz
- 確保所有的 Windows 系統都安裝了 PowerShell v3 或更高版本。新版本的 PowerShell 有更好的日誌記錄功能,特別是PowerShell V5。
- 開啟透過組策略記錄 PowerShell 模組執行日誌:計算機配置 — 策略 — 管理模板 — Windows元件 — Windows PowerShell,開啟模組記錄功能。輸入“*”,然後單擊確定。這將記錄所有的 PowerShell 活動,包括所有的 PowerShell 模組。
- 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
”
相關文章
- Mimikatz 非官方指南和命令參考_Part32020-08-19
- Mimikatz 非官方指南和命令參考_Part22020-08-19
- LVS - ipvsadm命令參考2018-05-17
- Oracle ASMCMD命令參考2018-06-12OracleASM
- Redis命令參考之INFO命令詳解2018-04-13Redis
- Redis(四)--- Redis的命令參考2019-07-26Redis
- 7 Oracle DataGuard 命令列參考2020-03-29Oracle命令列
- 【XTTS】 xttdriver.pl命令參考2021-01-05TTS
- 2.13 靜默模式DBCA命令參考2020-03-14模式
- 【SCN】Oracle推薦scn命令參考2022-03-11Oracle
- JDK11的工具的命令參考2018-10-12JDK
- [Ext JS] Sencha Cmd命令參考之一2020-10-15JS
- 【RMAN】Oracle rman 常用命令參考2021-08-16Oracle
- 【BBED】Oracle bbed常用命令參考2021-07-23Oracle
- 【BLOCK】Oracle壞塊處理命令參考2021-09-23BloCOracle
- 【SHRINK】Oracle收縮表的詳細命令參考2021-07-28Oracle
- 選擇CRM系統有哪些指標可以參考?2023-11-10指標
- TIDB 考試 參考2021-11-24TiDB
- OSI參考模型和TCP/IP參考模型2018-07-15模型TCP
- 【RAC】Oracle rac修改IP地址及埠號命令參考2021-09-01Oracle
- javamail參考2018-09-01JavaAI
- Mimikatz ON Metasploit2020-08-19
- WebApiClient效能參考2020-05-21WebAPIclient
- OSI參考模型2021-01-03模型
- JavaScript中的函式與命令模式,Java也有參考價值2018-10-18JavaScript函式模式
- 用於建立連線的命令選項(參考MySQL官方文件)2019-12-18MySql
- git參考手冊--文字說明+git速查命令表(圖片)2021-09-09Git
- 【RAC】Oracle10g rac新增刪除節點命令參考2021-09-09Oracle
- 模擬考試參考程式碼2024-05-30
- Blender參考API用法2019-02-16API
- SQL優化參考2018-09-15SQL優化
- openGauss ODBC介面參考2024-05-16
- Latex—參考文獻2020-07-31
- CloudBeaver 參考架構2020-06-11Cloud架構
- 參考文獻合集2024-11-16
- echarts markLine參考線2024-06-25Echarts
- PyQtGraph繪圖參考2024-06-13QT繪圖
- oracle 參考資料2024-06-08Oracle