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时遵循以下搜索顺序:

  1. 应用程序加载目录
  2. C:\Windows\System32
  3. C:\Windows\System
  4. C:\Windows
  5. 当前工作目录
  6. 系统PATH环境变量指定的目录
  7. 用户PATH环境变量指定的目录

漏洞成因

Task Scheduler服务(svchost.exe)中的WPTaskScheduler.dll会尝试导入WptsExtensions.dll,但该DLL并不存在。由于导入时使用的是相对名称而非完整路径,导致存在DLL劫持风险。

0x02 漏洞利用

利用条件

  1. 攻击者需要能够在PATH环境变量指定的某个目录中写入文件
  2. 需要服务重启或系统重启(取决于具体场景)

利用步骤

  1. 识别可写目录

    • 检查系统PATH环境变量
    • 查找攻击者有写入权限的目录(如示例中的C:\python27-x64)
  2. 构造恶意DLL

    • 创建一个名为WptsExtensions.dll的DLL文件
    • 在DLL入口点(如DllMain)中添加恶意代码
    • 示例恶意行为:以SYSTEM权限启动cmd.exe
  3. 放置恶意DLL

    • 将构造的DLL复制到PATH中可写的目录
    • 确保文件名完全匹配(WptsExtensions.dll)
  4. 触发加载

    • 重启Task Scheduler服务或重启系统
    • 服务重启后会加载恶意DLL,执行其中的代码

攻击场景

  1. 本地权限提升

    • 普通用户可利用此漏洞获取SYSTEM权限
    • 可创建管理员账户等操作
  2. 持久化驻留

    • 每次服务启动都会加载恶意DLL
    • 实现长期驻留系统
  3. UAC绕过

    • 可结合其他技术绕过用户账户控制

0x03 漏洞验证

  1. 使用Process Monitor监控Task Scheduler服务
  2. 观察服务尝试加载WptsExtensions.dll的行为
  3. 确认加载失败(NAME NOT FOUND)

0x04 官方回应

微软安全响应中心(MSRC)认为:

  1. 此漏洞需要攻击者事先将恶意文件写入特定目录
  2. 从程序目录加载库是正常的设计理念
  3. 不符合微软的安全服务标准
  4. 不视为安全漏洞

0x05 缓解措施

  1. 系统管理员

    • 监控PATH环境变量中的目录权限
    • 限制普通用户对系统目录的写入权限
    • 创建名为WptsExtensions.dll的空文件或目录,防止被替换
  2. 开发人员

    • 使用完整路径加载DLL
    • 使用SetDefaultDllDirectories API限制DLL搜索路径
    • 启用安全DLL搜索模式
  3. 安全产品

    • 监控异常DLL加载行为
    • 检测PATH环境变量中的可疑目录

0x06 技术细节

逆向分析显示,漏洞位于WPTaskScheduler.dll中,该模块会尝试导入WptsExtensions.dll,但没有使用完整路径:

; WPTaskScheduler.dll中的导入表
Import Address Table:
...
WptsExtensions.dll
...

0x07 总结

虽然微软不认为这是一个安全漏洞,但攻击者仍可利用此技术实现权限提升和持久化驻留。建议系统管理员采取适当的防护措施,特别是严格控制PATH环境变量中目录的写入权限。

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,但没有使用完整路径: 0x07 总结 虽然微软不认为这是一个安全漏洞,但攻击者仍可利用此技术实现权限提升和持久化驻留。建议系统管理员采取适当的防护措施,特别是严格控制PATH环境变量中目录的写入权限。