从进程终结到内核级防护:深度解析Windows进程保护机制与对抗技术
字数 1909 2025-09-04 23:22:12
Windows进程保护机制与对抗技术深度解析
进程终止方法分析
1. 任务管理器结束任务
- 操作方式:任务管理器中右键进程选择"结束任务"
- 底层调用:
- 对窗口程序:发送WM_CLOSE消息
- 对控制台程序:发送CTRL_CLOSE_EVENT信号
- 特点:进程可选择响应(如保存数据)或忽略,类似
taskkill /pid
2. 任务管理器-结束进程树
- 操作方式:任务管理器中右键选择"结束进程树"
- 底层调用:
- 先尝试对目标进程及其所有子进程发送正常关闭请求
- 无响应时调用TerminateProcess强制终止
- 特点:递归处理进程间的父子关系,确保关联进程都被终止
3. tskill命令
- 操作:
tskill 1234 - 底层调用:
- 对窗口程序:发送WM_CLOSE消息
- 对控制台程序:发送CTRL_CLOSE_EVENT信号
- 特点:
- 目标进程可选择处理或忽略请求
- 默认超时无响应后,会降级为强制终止(TerminateProcess)
4. PowerShell终止命令
- 操作:
Stop-Process -Force -Id 1234 - 底层调用:TerminateProcess API
- 特点:与
taskkill /f等价
5. ntsd调试器命令
- 操作:
ntsd -c q -p 1234 - 底层调用:利用调试权限强制结束进程(调用TerminateProcess)
- 特点:
- 需要SeDebugPrivilege权限
- 可绕过部分用户态的进程保护
6. 发送WM_QUIT消息
- 操作方式:通过编程方式(如PostQuitMessage函数)
- 底层调用:向消息循环发送退出信号
- 特点:属于正常退出,不会被视为强制终止
Windows内核进程保护机制
驱动与程序交互方式
-
通信机制:通过设备接口和标准I/O操作进行交互
-
驱动端实现:
// 创建设备和符号链接 UNICODE_STRING DevName = RTL_CONSTANT_STRING(L"\\Device\\AThreadDev"); IoCreateDevice(..., &DevName, &DeviceObject); UNICODE_STRING SymbolicLink = RTL_CONSTANT_STRING(L"\\??\\AThreadCheck"); IoCreateSymbolicLink(&SymbolicLink, &DevName);- 设备对象:
\\Device\\AThreadDev(内核态标识) - 符号链接:
\\??\\AThreadCheck(用户态访问别名)
- 设备对象:
-
用户态连接:
HANDLE hFile = CreateFile(L"\\\\.\\AThreadCheck", // 符号链接路径 GENERIC_READ, // 只读权限 0, NULL, OPEN_EXISTING, 0, NULL);
内核级保护优势
- 位于Windows系统的"特权区域"
- 所有进程创建、句柄操作、内存访问都会经过内核
- 在系统最底层设置拦截点,能覆盖所有用户态工具和恶意程序的操作路径
进程保护关键技术
1. 进程句柄管理
- 用户态程序通过"进程句柄"(HANDLE)间接操作EPROCESS结构
- 句柄权限决定程序能对进程做什么操作(如PROCESS_TERMINATE、PROCESS_VM_WRITE)
- 拦截原理:拦截"句柄创建"过程,移除危险权限
2. ObRegisterCallbacks回调
- 注册"句柄操作回调",在程序创建/复制进程/线程句柄时触发
- 示例实现:
// 当taskkill调用OpenProcess时触发 Info->Parameters->CreateHandleInformation.DesiredAccess &= ~PROTECT_ACCESS_MASK; - 效果:导致taskkill无法获得终止权限,TerminateProcess因权限不足失败
3. 子进程自动保护
- 使用
PsSetCreateProcessNotifyRoutineEx注册"进程创建回调" - 可实现对受保护进程的子进程自动保护
核心功能模块
1. 进程保护机制
- 保护策略:
- PID保护:直接保护指定PID的进程
- 名称保护:支持精确匹配和模糊匹配进程名
- 自动保护:受保护进程的子进程自动获得保护
2. 权限拦截机制
- 拦截的操作:
- 进程终止(PROCESS_TERMINATE)
- 创建远程线程(PROCESS_CREATE_THREAD)
- 内存操作(PROCESS_VM_OPERATION, PROCESS_VM_WRITE)
- 进程挂起/恢复(PROCESS_SUSPEND_RESUME)
- 设置进程配额和信息(PROCESS_SET_QUOTA, PROCESS_SET_INFORMATION)
3. 内核回调注册
- 回调机制:
- OnPreOpenProcess:在进程句柄创建前拦截
- OnPreOpenThread:在线程句柄创建前拦截
- 实现方式:通过修改DesiredAccess限制访问权限
4. 其他保护措施
- 自旋锁保护
- 权限验证
实际防护效果
- 管理员权限下
taskkill /f命令会被拒绝 - 针对TerminateProcess等关键操作进行拦截
- 支持UWP应用保护(如计算器calc有两个进程的情况)
技术要点总结
- 内核级防护通过在系统最底层设置拦截点实现全面保护
- 通过Ob回调机制修改句柄权限是防护的核心技术
- 进程创建通知机制实现了对子进程的自动保护
- 驱动与用户态程序通过设备接口进行通信
- 权限验证和自旋锁保证了防护的可靠性和线程安全