戴尔修复预装工具 SupportAssist 中的本地权限提升漏洞
翻译:360代码卫士团队
近期,戴尔修复了 SupportAssist 工具中的一个本地权限提升漏洞。该工具预装在多数 Windows 系统戴尔设备上。
发现这个安全问题的研究员 Bryan Alexander 指出,这个本地权限提升漏洞存在于工具所加载的一个内核驱动中。该工具主要用于解决问题并向用户和戴尔提供支持。
Alexander 指出,该漏洞可被用于绕过驱动强制签名 (DSE) ad.infinitum。该驱动暴露了很多功能,“为读写模型相关寄存器 (MSR)、重置1394总线和读/写 CMOS 提供能力。”
SupportAssist 启动时(根据不同架构,文件名为 pcdsrvc_x64.pkms 或pcdsrvc.pkms),受影响驱动被首次加载。尽管供戴尔使用,该驱动由向电脑厂商如戴尔、英特尔、横河等提供“系统健康解决方案”的 PC-Doctor 公司构建。
研究人员解释称,“驱动加载后,它将系统链接暴露到非权限用户可在系统上写入的位于 PCDSRVC{3B54B31B-D06B6431-06020200}_0的设备。这就可让我们触发遭驱动暴露的其中一个 IOCTLs;很可能共有30个 IOCTLs。”
Alexander 还发现 userland 代理使用的一个 DLL也可当做内核驱动的接口并具有符号名。进一步分析表明,类 MemDriver 可允许 userland 服务读写任意物理地址。
然而,要实现上述目的,驱动必须被“解锁”开启处理控制代码。要解锁,攻击者只需发送包含正确代码的系统调用 (ioctl)。然后,驱动设置一个全局标记并且“为系统的生命周期处理控制代码”。
要利用这个问题,攻击者可开始读取物理内存寻找进程池标记,然后识别目标进程和 SYSTEM 进程,接着窃取令牌。
研究人员表示,“然而,PCD 似乎经由 getPhysicalAddress ioctl 提供了一个捷径。如果它确实返回既定虚拟地址的物理地址,那我们只需找到虚拟地址的物理地址并通过 writePhysicalMemory ioctl 启用一两个令牌权限即可。”
不管怎样,这个问题意味着只有用户模式地址才能如此解析,因为 MmProbeAndLockPages 调用以 UserMode为 KPROCESSOR_MODE 传递。
即便如此,仍然可以读取物理内存块,研究人员借此切换 SeDebugPrivilege 以获取当前进程令牌(这需要“在内存中查找令牌并在字段偏移处写入几个字节”)。
找到令牌的物理地址后,研究人员在 _TOKEN 的启用和默认字段中触发两个单独的写入。研究人员已在 GitHub 上发布了这个 bug 的源代码。
研究人员在4月初就将问题告知戴尔,不过后者在上周才推出 SupportAssist 的补丁版本。
关联阅读
原文链接
本文由360代码卫士编译,不代表360观点,转载请注明 “转自360代码卫士www.codesafe.cn”。