Windows 10 Task Scheduler服务DLL注入漏洞分析

isnull   ·   发表于 2019-06-01 11:18:15   ·   漏洞文章

Windows 10 Task Scheduler服务DLL注入漏洞分析

0x00 前言

最近我一直在逆向分析某款反病毒解决方案,在逆向过程中,我发现Windows 10 Task Scheduler(计划任务)服务会寻找某个不存在的DLL,因此存在DLL劫持/注入漏洞。如果攻击者可以向PATH环境变量指定的目录中写入恶意DLL,那么就可以利用这种方式实现常驻及本地提权。此外,这种技术也可以用来绕过UAC。

0x01 DLL劫持


Task Scheduler服务会使用相对名称来加载某个程序库,因此存在DLL劫持风险。当Windows系统上的应用或者服务启动时,为了能正常工作,这些应用或服务会按照一定的顺序来搜索需要使用的DLL文件。如果这些DLL不存在,或者软件代码没有使用安全的方式进行开发(比如DLL没有以完整路径进行调用),那么攻击者有可能利用这些应用来加载并执行恶意DLL文件,从而实现权限提升。

需要加载DLL时,应用程序会按照顺序搜索如下目录:

  • 应用加载目录
  • C:\Windows\System32
  • C:\Windows\System
  • C:\Windows
  • 当前工作目录
  • 系统PATH环境变量指定的目录
  • 用户PATH环境变量指定的目录
  • Task Scheduler服务会尝试加载不存在的某个DLL。

    如下图所示,该服务找不到WptsExtensions.dll这个库。



    攻击者可以精心构造一个DLL来利用这个脆弱点,在加载时执行代码。



    然后再分析PATH环境变量,查看自己是否能在其中某个目录中存放恶意DLL文件。


    比如,攻击者具备C:\\python27-x64目录的写入权限。



    重命名该DLL,匹配服务待加载的DLL名称。



    当系统重启或者该服务重启时,应用程序就会以NT_AUTHORITY\SYSTEM权限启动cmd.exe



    具备正常用户权限的攻击者可以利用这种方法,通过“Task Scheduler”服务以及存在脆弱点的PATH环境变量,在本地主机上创建一个管理员账户。这种方法也可以用来实现本地驻留以及绕过UAC。

    经过逆向分析后,我们可以发现问题在于WPTaskScheduler.dll代码中会导入WptsExtensions.dll这个库,并且导入该库时并没有使用完整路径,如下图所示:



    0x02 官方反馈

    官方反馈如下:

    您好,感谢您与微软安全响应中心(MSRC)联系。如果没有理解错的话,这个漏洞需要攻击者事先将某个恶意文件写入程序启动的目录(这里为下载目录)。根据Windows对程序库的搜索顺序,从程序目录中加载库文件是一种正常的设计理念。根据您的反馈报告,这个漏洞并不满足我们既定的安全服务标准。

    因此,我们会关闭并不再监控这个话题。如果您确信我们对报告内容有所误解,请向secure@microsoft.com提交一份新的邮件,其中包括:

  • 初始报告中提供的相关信息
  • 复现该问题所需的详细步骤
  • 简要描述攻击者如何利用该信息远程攻击其他用户
  • 概念验证(PoC),如视频录像、崩溃报告、屏幕截图或者相关代码示例
  • 关于安全漏洞的评判标准,请参考“安全漏洞定义”相关内容。


    原文:https://remoteawesomethoughts.blogspot.com/2019/05/windows-10-task-schedulerservice.html


    转自先知社区

    打赏我,让我更有动力~

    0 条回复   |  直到 2019-6-1 | 1171 次浏览
    登录后才可发表内容
    返回顶部 投诉反馈

    © 2016 - 2024 掌控者 All Rights Reserved.