介绍
近年来,嵌入式软件安全已经成为一个炙手可热的话题,引起了全球各地安全研究人员的关注。但是,如果考虑到安全性,代码的质量还远远不够完美。例如,固件中的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)并且在初始化之后暂停处理器内核,只是为了确保它是可以进行交互。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课