【缺陷周话】第45期:进程控制
字数 1343 2025-08-18 11:38:49
进程控制安全教学文档
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搜索模式的影响
- 实施最小权限原则
- 采用纵深防御策略
- 保持系统和应用程序更新
通过合理配置和编码实践,可有效降低进程控制相关的安全风险。