Windows 10 Task Scheduler服务DLL注入漏洞分析
字数 1461 2025-08-29 08:32:30
Windows 10 Task Scheduler服务DLL注入漏洞分析
0x00 漏洞概述
Windows 10 Task Scheduler(计划任务)服务存在DLL劫持/注入漏洞,该服务会尝试加载一个不存在的DLL文件"WptsExtensions.dll"。由于加载时使用的是相对路径而非完整路径,攻击者可以通过在PATH环境变量指定的目录中放置恶意DLL文件,实现权限提升、持久化驻留或绕过UAC等攻击。
0x01 技术原理
DLL加载机制
Windows系统在加载DLL时遵循以下搜索顺序:
- 应用程序加载目录
- C:\Windows\System32
- C:\Windows\System
- C:\Windows
- 当前工作目录
- 系统PATH环境变量指定的目录
- 用户PATH环境变量指定的目录
漏洞成因
Task Scheduler服务(svchost.exe)中的WPTaskScheduler.dll会尝试导入WptsExtensions.dll,但该DLL并不存在。由于导入时使用的是相对名称而非完整路径,导致存在DLL劫持风险。
0x02 漏洞利用
利用条件
- 攻击者需要能够在PATH环境变量指定的某个目录中写入文件
- 需要服务重启或系统重启(取决于具体场景)
利用步骤
-
识别可写目录:
- 检查系统PATH环境变量
- 查找攻击者有写入权限的目录(如示例中的C:\python27-x64)
-
构造恶意DLL:
- 创建一个名为WptsExtensions.dll的DLL文件
- 在DLL入口点(如DllMain)中添加恶意代码
- 示例恶意行为:以SYSTEM权限启动cmd.exe
-
放置恶意DLL:
- 将构造的DLL复制到PATH中可写的目录
- 确保文件名完全匹配(WptsExtensions.dll)
-
触发加载:
- 重启Task Scheduler服务或重启系统
- 服务重启后会加载恶意DLL,执行其中的代码
攻击场景
-
本地权限提升:
- 普通用户可利用此漏洞获取SYSTEM权限
- 可创建管理员账户等操作
-
持久化驻留:
- 每次服务启动都会加载恶意DLL
- 实现长期驻留系统
-
UAC绕过:
- 可结合其他技术绕过用户账户控制
0x03 漏洞验证
- 使用Process Monitor监控Task Scheduler服务
- 观察服务尝试加载WptsExtensions.dll的行为
- 确认加载失败(NAME NOT FOUND)
0x04 官方回应
微软安全响应中心(MSRC)认为:
- 此漏洞需要攻击者事先将恶意文件写入特定目录
- 从程序目录加载库是正常的设计理念
- 不符合微软的安全服务标准
- 不视为安全漏洞
0x05 缓解措施
-
系统管理员:
- 监控PATH环境变量中的目录权限
- 限制普通用户对系统目录的写入权限
- 创建名为WptsExtensions.dll的空文件或目录,防止被替换
-
开发人员:
- 使用完整路径加载DLL
- 使用SetDefaultDllDirectories API限制DLL搜索路径
- 启用安全DLL搜索模式
-
安全产品:
- 监控异常DLL加载行为
- 检测PATH环境变量中的可疑目录
0x06 技术细节
逆向分析显示,漏洞位于WPTaskScheduler.dll中,该模块会尝试导入WptsExtensions.dll,但没有使用完整路径:
; WPTaskScheduler.dll中的导入表
Import Address Table:
...
WptsExtensions.dll
...
0x07 总结
虽然微软不认为这是一个安全漏洞,但攻击者仍可利用此技术实现权限提升和持久化驻留。建议系统管理员采取适当的防护措施,特别是严格控制PATH环境变量中目录的写入权限。