DLL侧加载技术分析以及如何进行武器化
字数 1634 2025-08-22 22:47:30

DLL侧加载技术分析与武器化教学文档

1. DLL侧加载技术概述

DLL侧加载(DLL Sideloading)是一种恶意软件常用的规避检测的攻击技术,攻击者利用应用程序加载动态链接库(DLL)的机制(顺序搜索和模糊调用),通过在特定位置放置恶意DLL,诱使应用程序加载并执行这些恶意DLL。

1.1 Windows DLL加载机制

Windows应用程序通过以下顺序搜索DLL文件:

  1. 应用程序加载的目录
  2. 系统目录(使用GetSystemDirectory()函数获取)
  3. 16位系统目录
  4. Windows目录(使用GetWindowsDirectory()函数获取)
  5. 当前工作目录
  6. PATH环境变量中列出的目录

2. DLL侧加载攻击类型

2.1 被动利用

特点:

  • 上传高信任度的独立可执行文件
  • 使用旧版本的签名库(来自旧版操作系统或其他可信来源)
  • 将旧版可执行文件和恶意库放在具有"写入"权限的文件夹中

优势:

  • 通过合法签名的二进制文件规避应用程序控制策略
  • 恶意库继承可执行文件的访问权限
  • 适用于已被入侵的系统,用于规避检测

2.2 主动利用

特点:

  • 识别易受DLL搜索顺序劫持的预安装应用程序或系统组件
  • 将恶意库放在DLL搜索顺序中的优先位置
  • 恶意库以调用进程相同的权限执行

持久性:
如果调用应用程序定期加载库(如每日检查更新),搜索顺序劫持可建立持久性。

3. 构建DLL侧加载攻击

3.1 准备工作

  1. 查找包含可侧加载DLL的可执行文件
  2. 确定可执行文件的导出函数
  3. 构建恶意DLL
  4. 将恶意DLL武器化并传播

3.2 查找可侧加载DLL的可执行文件

手动查找方法:

  1. 在程序目录中找到所有可执行文件
  2. 将这些可执行文件复制到空目录
  3. 运行文件并观察错误消息
  4. 如果返回"未找到DLL文件"错误,使用Process Monitor工具
  5. 观察可执行文件尝试查找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步骤:

  1. 创建新项目,选择"动态链接库(DLL)"模块
  2. 在dllmain.cpp中写入上述代码(注意引用源文件)
  3. 生成解决方案

3.6 武器化并投放植入DLL

攻击路径:

  1. 创建zip文档,包含快捷方式
  2. LNK快捷方式启动cmd.exe进程
  3. cmd.exe启动GUP.exe进程
  4. GUP进程侧载恶意libcurl.dll文件
  5. 恶意libcurl.dll启动cmd.exe进程
  6. cmd.exe启动PowerShell.exe加载恶意命令
  7. PowerShell连接到C2服务器

具体步骤:

  1. 创建快捷方式,修改为调用cmd.exe执行GUP.exe
  2. GUP.exe会侧加载恶意libcurl.dll并启动Meterpreter负载
  3. 将所有文件打包成zip文档
  4. 为LNK文件替换图标增加真实性

4. 防御措施

  1. 启用DLL搜索顺序安全策略
  2. 使用完整路径加载DLL
  3. 设置SafeDllSearchMode注册表项
  4. 使用SetDefaultDllDirectories API限制搜索路径
  5. 实施应用程序白名单
  6. 监控异常DLL加载行为

5. 总结

DLL侧加载是一种有效的攻击技术,利用Windows的DLL加载机制实现代码执行和权限提升。防御需要从系统设置、应用程序开发和运行时监控多方面入手。

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++): 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加载机制实现代码执行和权限提升。防御需要从系统设置、应用程序开发和运行时监控多方面入手。