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 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖