首页
社区
课程
招聘
[翻译]如何利用 Intel DAL、UEFITool、CHIPSEC 等工具检测CVE-2017-5721 SMM 提权漏洞
发表于: 2017-12-6 04:38 30529

[翻译]如何利用 Intel DAL、UEFITool、CHIPSEC 等工具检测CVE-2017-5721 SMM 提权漏洞

2017-12-6 04:38
30529


介绍

近年来,嵌入式软件安全已经成为一个炙手可热的话题,引起了全球各地安全研究人员的关注。但是,如果考虑到安全性,代码的质量还远远不够完美。例如,固件中的CVE-2017-5721 SMM权限提升漏洞可能会影响像宏碁,华擎,华硕,戴尔,惠普,技嘉,联想,微星,英特尔和富士通等供应商的产品。本文旨在介绍如何使用以下工具检测主板固件中的漏洞:

英特尔DAL

UEFITool

CHIPSEC

RWEverything

以及如何绕过修复此漏洞的修补程序。

对于需要一些背景信息的读者,这里是有用的附加材料列表:

Advancedx86:BIOS和SMM简介(John Butterworth)

培训:来自攻击者和防御者视角的BIOS / UEFI系统固件的安全性(Advanced Threat Research,McAfee / Intel)

2015年攻击和防御BIOS(Advanced Threat Research,McAfee / Intel)

UEFI固件Rootkit:神话与现实(Alex Matrosov和Eugene Rodionov)

有关CVE-2017-5721 SMM提权漏洞的信息,请访问以下链接:

https://security-center.intel.com/advisory.aspx?intelid=INTEL-SA-00084&languageid=en-fr

第一步

展示台

为了展示,我们使用了搭配Intel Q170 Express芯片组的GA-Q170M-D3H主板。这一主板是这项研究的最佳选择,原因如下:

固件更新可用作二进制映像。所以,跟其他厂商的设备相比,用户不需要从.exe文件中提取固件部分。注意:在研究范围内,我们使用了最新的可用固件版本 - F22。

该固件基于主板和笔记本电脑用的AMI B制造商广泛使IOS Aptio V。

可以启用英特尔直接连接接口。

英特尔直接连接接口(Intel Direct Connect Interface,简称DCI)是一种技术,允许低级别的处理器轻易地进行调试。调试目标系统所需的唯一东西是英特尔Skylake处理器(第六代或更高版本)和USB 3.0调试电缆,当然还有主机和目标系统中的USB 3.0端口。要使用该界面进行操作,可以使用英特尔System Studio试用版的一部分中的英特尔DFx抽象层(DAL)应用程序。有关更多详细信息,请参阅“Intel DCI Secrets”。

还有必要在主板上安装一个CPU。在研究中使用的主板配备了英特尔酷睿i3-6320。当然,DRAM也需要安装。组装好的陈列架如下所示



正如你所看到的,我们已经解开了SPI闪存(存储主板的固件)并将其放入SOIC8适配器。因此,如果我们偶尔把系统刷成“砖”了,我们将能够使用硬件编程器恢复原始固件镜像。

在目标系统上启用Intel DCI

打开DCI有两种方法:第一种简单,另一种很难,这是很明显的。

简单的方法:启用英特尔DCI

如果您的系统基于芯片系统(SoC),则需要使用BIOS Setup(设置)启用DCI(参见图2)。


在BIOS设置中启用DCI

另一种选择是使用某些主板所具有的INTEL-SA-00073漏洞。此漏洞允许通过向内存写入一个字节来从目标平台启用DCI。

事实证明,GA-Q170M-D3H没有选项来启用BIOS设置中的DCI。在这种情况下,在系统正在运行时,值得使用PCH专用配置空间(参见图3)。

DCI控制寄存器(ECTRL) - 偏移量4h


使用PCH专用配置空间启用DCI

根据文档,DCI激活是通过切换ECTRL寄存器的第四位进行的。该位位于SBREG_BAR +(0xB8 << 0x10)+ 4的内存中。该展示台安装了Windows 10 Enterprise,这就是使用RW-Everything工具的原因。不幸的是,在第八位设为值1的时候,使用第四位不能启用DCI,.通过实际考虑,发现第八位代表“锁定”,这在系统运行期间阻碍了DCI的开户。尽管如此,如果系统寄存器是空的,可以毫无困难地启用调试接口(见图4)。



W-Everything工具

启用DCI

可以通过使用Intel Flash Image Tool更改BIOS或PCH straps(在固件镜像内)的默认设置来启用DCI。之后,需要重建镜像并将其刷到SPI闪存。

在这里,需要硬件程序员上传修改后的固件。可以通过使用网上下载的AMIBCP工具进行所需的更改。在BIOS设置中,该工具提供了更改用户隐藏的设置的默认值的机会。为此,打开AMIBCP实用程序中的“Q170MD3H.F22”文件,找到名称为“调试接口”和“直接连接接口”的控制组结构(见图5)。


AMIBCP实用程序

激活设置的过程归结为将“Failsafe”和“Optimal”更改为“Enabled”值。然后保存为一个新的固件镜像。这样一个修改后的固件就准备好了。剩下的唯一方法就是用一种方便的方式将这个新固件上传到SPI闪存中。最后,这样就可以启动调试了。

如果成功激活接口并启动目标系统,则在主机系统中会出现一个新的“Intel USB Native Debug Class Devices”设备



主机系统中出现了一个新的设备

研究的主要阶段

设置Intel DFx抽象层

默认的Intel DAL安装目录是“C:\ Intel \ DAL”。它包含“ConfigConsole.exe”工具。在“ConfigConsole.exe”中,由于目标平台由Skylake(SKL)和100系列芯片组(Sunrise Point,SPT)组成,因此需要指定相应的拓扑配置“SKL_SPT_OpenDCI_Dbc_Only_ReferenceSettings”。调试接口仅包含USB 3.0调试电缆,但需要设置Intel DAL,以使其只能使用JTAG引脚。否则,就无法停止处理器。英特尔®DAL支持启动脚本,如果在应用程序目录中创建了“dalstartup.py”文件,将会执行这些脚本。该脚本将在调试控制台启动时执行。

在完成所有必要的操作之后,可以试试启动“PythonConsole.cmd”(可以看见:控制台被设计成一个python shell)并且在初始化之后暂停处理器内核,只是为了确保它是可以进行交互。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
          不错!!
2017-12-6 20:22
0
雪    币: 965
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
    不错!!
2017-12-9 11:07
0
雪    币: 200
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我有好几台dci调试设备。有一台t460s 开启了dci调试功能,可以转让,有意私信吧。
2021-9-19 17:55
0
雪    币: 193
活跃值: (1442)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
tinydrop 我有好几台dci调试设备。有一台t460s 开启了dci调试功能,可以转让,有意私信吧。

-

最后于 2024-4-3 20:09 被alice编辑 ,原因:
2024-4-3 20:08
0
游客
登录 | 注册 方可回帖
返回
//