OEM软件使笔记本电脑处于危险中 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

OEM软件使笔记本电脑处于危险中

ang010ela 系统安全 2019-07-08 10:38:32
128432
收藏

导语:本文介绍SafeBreach Labs研究人员发现的PC-Doctor Dell硬件支持服务软件漏洞。

本文介绍如何利用该漏洞来加载任意未签名的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 ?read@PhysicalMemory && echo @file"153 ?read@PhysicalMemory@memory@libSysSpace@@QEBA_N_KPEAX0W4AccessUnit@123@@Z"NVMeInfo.dll"153 ?read@PhysicalMemory@memory@libSysSpace@@QEBA_N_KPEAX0W4AccessUnit@123@@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原语。

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务