从进程终结到内核级防护:深度解析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有两个进程的情况)

技术要点总结

  1. 内核级防护通过在系统最底层设置拦截点实现全面保护
  2. 通过Ob回调机制修改句柄权限是防护的核心技术
  3. 进程创建通知机制实现了对子进程的自动保护
  4. 驱动与用户态程序通过设备接口进行通信
  5. 权限验证和自旋锁保证了防护的可靠性和线程安全
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操作进行交互 驱动端实现 : 设备对象: \\Device\\AThreadDev (内核态标识) 符号链接: \\??\\AThreadCheck (用户态访问别名) 用户态连接 : 内核级保护优势 位于Windows系统的"特权区域" 所有进程创建、句柄操作、内存访问都会经过内核 在系统最底层设置拦截点,能覆盖所有用户态工具和恶意程序的操作路径 进程保护关键技术 1. 进程句柄管理 用户态程序通过"进程句柄"(HANDLE)间接操作EPROCESS结构 句柄权限决定程序能对进程做什么操作(如PROCESS_ TERMINATE、PROCESS_ VM_ WRITE) 拦截原理 :拦截"句柄创建"过程,移除危险权限 2. ObRegisterCallbacks回调 注册"句柄操作回调",在程序创建/复制进程/线程句柄时触发 示例实现 : 效果 :导致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回调机制修改句柄权限是防护的核心技术 进程创建通知机制实现了对子进程的自动保护 驱动与用户态程序通过设备接口进行通信 权限验证和自旋锁保证了防护的可靠性和线程安全