OEM软件使笔记本电脑处于危险中
2019-07-08 11:38:32 Author: www.4hou.com(查看原文) 阅读量:105 收藏

本文介绍如何利用该漏洞来加载任意未签名的DLL到SYSTEM权限运行的服务中,来实现权限提升和驻留。

PC-Doctor

允许SupportAssist访问敏感低级硬件的组件是由PC-Doctor公司开发的。该公司主要开发硬件诊断软件。下面主要介绍PC-Doctor公司开发的组件来描述漏洞,然后说明如何利用该漏洞来访问物理内存这样的低级硬件。

Dell SupportAssist

Dell SupportAssist是大多数Dell电脑预装的软件。该软件可以检查系统硬件和软件的健康。健康检查需要高权限级别的权限。为了以高级权限运行动作,签名的驱动会安装以及多个以SYSTEM运行的服务。

漏洞分析

研究人员首先关注的是Dell Hardware Support,因为该服务是一个非常重要的服务,而且有对硬件访问的高级权限,因为有能力可以进行权限提升。Dell Hardware Support服务启动后,会执行DSAPI.exe和 pcdrwi.exe,都是以SYSTEM权限运行的:

sb1.png

然后,该服务会执行多个PC-Doctor可执行文件来收集关于操作系统和计算机硬件的信息。这些可执行文件其实都是普通的PE文件,但是扩展名为p5x。

这些可执行文件都会加载DLL库,可以从不同的源来收集信息。一旦这些库被加载后,研究人员在ProcMon中发现:

sb2.png

从图中可以看出,3个p5x可执行文件尝试在c:\python27目录中找出以下DLL文件:

· LenovoInfo.dll

· AlienFX.dll

· atiadlxx.dll

· atiadlxy.dll

DLL劫持漏洞

在研究人员的虚拟机中,c:\python27有一个允许所有认证用户在ACL上写文件的ACL。这会使权限提升变得简单,并允许普通用户写丢失的DLL文件,并以SYSTEM权限进行代码执行。需要说明的是,管理级用户或进程必须:

(1) 设置目录ACL来允许对非管理员用户账户的访问
(2) 修改系统PATH变量来包含该目录为了测试该权限提升漏洞,研究人员编译了一个未签名的DLL将以下内容写入txt文件的文件名中:

· 执行的用户名

· DLL文件名

sb3.png

研究人员在重命名以下DLL时,该DLL是以SYSTEM权限加载和执行的

· LenovoInfo.dll

· atiadlxx.dll

漏洞根源分析

p5x模块使用了一个名为Common.dll的工具库,提供了包括加载dll文件选项这样的功能:

sb4.png

从上图可以看出,该漏洞的两个根源在于:

· 缺乏安全的DLL加载。代码使用的是LoadLibraryW,而不是LoadLibraryExW,这样就允许未授权的用户来用特定的flag来定义搜索顺序,比如LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR。这样反过来会在自己的文件夹中搜索DLL,避免在PATH变量中搜索DLL。

· 没有对该二进制文件进行数字证书的验证。该程序并不会验证加载的DLL是否是签名的。因此,可以加载任意未签名的DLL文件。

漏洞利用

PC-Doctor签名的驱动

SupportAssist使用的是PC-Doctor签名的驱动(pcdsrvc_x64.pkms)来访问低级的内存和硬件。

PoC – 读取物理内存

在加载到PC-Doctor的库中,p5x可执行文件是SysSpace.dll。该库提供一个强大的对物理内存读取的封装函数—— PhysicalMemory::read。
该函数打开一个到驱动的handle,并发送相关的IOCTL来启动。下一步是找出发送给该函数所需的参数。研究人员搜索了导入PhysicalMemory::read函数的DLL并使用它。

forfiles /M *.dll /C "cmd /c %userprofile%\amd64\dumpbin.exe /IMPORTS @file | findstr [email protected] && echo @file"153 [email protected]@[email protected]@@[email protected]@@Z"NVMeInfo.dll"153 [email protected]@[email protected]@@[email protected]@@Z"Quip.dll"

用IDA打开Quip.dll,提取调用该函数的实现:

sb5.png

然后加载SysSpace.dll,定义PhysicalMemory的constructor,并调用PhysicalMemory::read函数。

下面从物理内存中读取任意地址。

首先,用WinDbg Kernel Debugger检查物理地址的内容:

sb6.png

然后利用该漏洞来加载未签名的DLL,并将结果写入txt文件:

Dell-PCs-7.png

从中可以看出,可以将任意物理内存地址的内容写入。

潜在恶意使用和影响

SupportAssist是大多数运行Windows系统的Dell设备预装的软件。也就是说,该漏洞如果不修复,将影响数百万Dell PC用户。下面介绍攻击者可以利用该漏洞的2种潜在方式。

签名的执行和白名单绕过

该漏洞给予攻击者被加载和执行恶意payload的能力。该能力可能会被攻击者滥用,比如进行执行和绕过,具体来说有应用白名单绕过和签名验证绕过。

DSE绕过

为了加载kernel模式驱动带Windows 10中,必须要经过微软认证的厂商的数字签名。为了强制执行,微软使用了一种名为Driver Signature Enforcement (DSE)的机制,如果未签名的kernel-mode驱动被加载,操作系统就会奔溃。

攻击者可以获取pcdsrvc_x64.pkms驱动提供的R/W原语,pcdsrvc_x64.pkms驱动是已经加载的kernel-mode驱动。事实上,攻击者可能并不需要加载驱动,因为签名加载的驱动已经给了他们一些控制权限。

为了访问和操作R/W原语,攻击者可以:

· 利用该漏洞来获取权限提升,并以SYSTEM权限运行;

· 使用签名和加载的pcdsrvc_x64.pkms驱动;

· 发送相关的IOCTLs来直接读写物理内存;

· 然后攻击者就有了kernel-mode驱动环境下的全部R/W原语。


文章来源: https://www.4hou.com/system/19026.html
如有侵权请联系:admin#unsafe.sh