【缺陷周话】第45期:进程控制
字数 1343 2025-08-18 11:38:49

进程控制安全教学文档

1. 进程控制概述

进程控制是指操作系统对进程的创建、执行、终止等行为的管理机制。在Windows系统中,进程控制涉及动态链接库(DLL)的加载顺序、注册表主键管理以及安全搜索模式等关键要素。

2. DLL搜索顺序机制

Windows系统加载DLL时有两种不同的搜索顺序,取决于SafeDllSearchMode的设置:

2.1 SafeDllSearchMode=1 (安全模式,默认设置)

搜索顺序为:

  1. 应用程序被加载的目录
  2. 系统目录(通常为System32)
  3. 16位系统目录(如果存在)
  4. Windows目录
  5. 当前工作目录
  6. 在PATH环境变量中列出的目录

2.2 SafeDllSearchMode=0 (传统模式)

搜索顺序为:

  1. 应用程序被加载的目录
  2. 当前工作目录
  3. 系统目录(通常为System32)
  4. 16位系统目录(如果存在)
  5. Windows目录
  6. 在PATH环境变量中列出的目录

3. 注册表主键相关

进程控制涉及以下重要注册表项:

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode - 控制DLL搜索模式
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs - 包含系统已知DLL列表

4. 安全风险分析

4.1 DLL劫持漏洞

SafeDllSearchMode=0时,当前工作目录优先于系统目录被搜索,攻击者可利用此特性:

  1. 将恶意DLL放置在可写目录中
  2. 诱骗用户从该目录执行程序
  3. 系统加载恶意DLL而非合法系统DLL

4.2 其他进程控制风险

  1. DLL预加载攻击 - 利用应用程序未指定完整路径加载DLL
  2. PATH环境变量篡改 - 修改PATH加入恶意路径
  3. 注册表篡改 - 修改KnownDLLs或其他相关注册表项

5. 防御措施

5.1 系统级防护

  1. 保持SafeDllSearchMode=1(Windows XP SP2及以后版本默认)
  2. 使用最新版Windows系统(具有更强的DLL加载保护)
  3. 限制对系统目录和注册表的写入权限

5.2 应用开发防护

  1. 使用绝对路径加载DLL
  2. 调用SetDllDirectory("")清空DLL搜索路径
  3. 使用LOAD_LIBRARY_SEARCH_*标志(Windows 8+)
  4. 实现DLL签名验证机制

5.3 运行时防护

  1. 使用应用白名单技术
  2. 部署行为监控解决方案
  3. 启用受控文件夹访问(Windows 10+)

6. 检测方法

  1. 检查系统SafeDllSearchMode设置
  2. 监控DLL加载事件,特别是从非系统目录加载
  3. 审计注册表中KnownDLLs等关键项的变更
  4. 检查PATH环境变量是否包含可疑路径

7. 总结

进程控制安全的核心在于理解和管理DLL加载机制。开发者和系统管理员应当:

  • 了解不同DLL搜索模式的影响
  • 实施最小权限原则
  • 采用纵深防御策略
  • 保持系统和应用程序更新

通过合理配置和编码实践,可有效降低进程控制相关的安全风险。

进程控制安全教学文档 1. 进程控制概述 进程控制是指操作系统对进程的创建、执行、终止等行为的管理机制。在Windows系统中,进程控制涉及动态链接库(DLL)的加载顺序、注册表主键管理以及安全搜索模式等关键要素。 2. DLL搜索顺序机制 Windows系统加载DLL时有两种不同的搜索顺序,取决于 SafeDllSearchMode 的设置: 2.1 SafeDllSearchMode=1 (安全模式,默认设置) 搜索顺序为: 应用程序被加载的目录 系统目录(通常为 System32 ) 16位系统目录(如果存在) Windows目录 当前工作目录 在PATH环境变量中列出的目录 2.2 SafeDllSearchMode=0 (传统模式) 搜索顺序为: 应用程序被加载的目录 当前工作目录 系统目录(通常为 System32 ) 16位系统目录(如果存在) Windows目录 在PATH环境变量中列出的目录 3. 注册表主键相关 进程控制涉及以下重要注册表项: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode - 控制DLL搜索模式 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs - 包含系统已知DLL列表 4. 安全风险分析 4.1 DLL劫持漏洞 当 SafeDllSearchMode=0 时,当前工作目录优先于系统目录被搜索,攻击者可利用此特性: 将恶意DLL放置在可写目录中 诱骗用户从该目录执行程序 系统加载恶意DLL而非合法系统DLL 4.2 其他进程控制风险 DLL预加载攻击 - 利用应用程序未指定完整路径加载DLL PATH环境变量篡改 - 修改PATH加入恶意路径 注册表篡改 - 修改KnownDLLs或其他相关注册表项 5. 防御措施 5.1 系统级防护 保持 SafeDllSearchMode=1 (Windows XP SP2及以后版本默认) 使用最新版Windows系统(具有更强的DLL加载保护) 限制对系统目录和注册表的写入权限 5.2 应用开发防护 使用绝对路径加载DLL 调用 SetDllDirectory("") 清空DLL搜索路径 使用 LOAD_LIBRARY_SEARCH_* 标志(Windows 8+) 实现DLL签名验证机制 5.3 运行时防护 使用应用白名单技术 部署行为监控解决方案 启用受控文件夹访问(Windows 10+) 6. 检测方法 检查系统 SafeDllSearchMode 设置 监控DLL加载事件,特别是从非系统目录加载 审计注册表中 KnownDLLs 等关键项的变更 检查PATH环境变量是否包含可疑路径 7. 总结 进程控制安全的核心在于理解和管理DLL加载机制。开发者和系统管理员应当: 了解不同DLL搜索模式的影响 实施最小权限原则 采用纵深防御策略 保持系统和应用程序更新 通过合理配置和编码实践,可有效降低进程控制相关的安全风险。