
多年来,专家一直批评“
模糊不清 ”的原则,但这并不能阻止大型电子制造商以保护知识产权为借口,要求签署保密协议以获取技术文档。 由于微电路的复杂性不断增加以及各种专有固件的集成,这种情况正在恶化。 实际上,这使得不可能为独立研究人员分析此类平台,从而使普通用户和设备制造商都面临风险。
一个示例是英特尔管理引擎(Intel ME)技术,以及其用于服务器(Intel SPS)和移动(Intel TXE)平台的版本(有关此技术的更多信息,请参见
[5] ,
[6] 。在本文中,我们将介绍如何使用未记录的命令(如果术语“已记录”通常适用于Intel ME),则可以覆盖SPI闪存并实现最坏的情况-对ME中的漏洞进行本地利用(INTEL-SA-00086)。 -制造模式。
什么是制造模式
英特尔ME制造模式-设计用于在生产阶段配置,配置和测试最终平台的服务操作模式; 在设备开始销售并交付给用户之前必须将其关闭。 英特尔公共文档中没有描述此模式及其潜在风险。 普通用户无法自己关闭它,因为从英特尔ME系统工具包管理他的实用程序尚未正式提供。 请注意,如果打开此模式,或者至少将其通知用户,则没有软件保护可以保护用户。 即使是专门用于在UEFI固件级别检测芯片组和处理器配置错误(特别是对SPI闪存区域的访问权限的配置不正确)的Chipsec实用程序
[2] ,也对英特尔制造模式一无所知。
此模式允许您设置存储在一次写入存储器(FUSES)中的关键平台参数。 在FUSES中“连接”的此类参数的一个示例是BootGuard参数(ACM和UEFI模块的模式,策略,数字签名密钥校验和)。 其中一些被称为FPF(现场可编程保险丝)。 可以通过Intel ME System Tools软件包中的FPT(闪存编程工具)实用程序获取可以写入FUSES的FPF列表(实际上,不完整,不能直接设置许多FPF)。
图1. FPT实用程序的–FPFs选项的结果应该注意的是,FPF仅占整个FUSE阵列的一部分,并且该内存的大部分被Intel自己用来存储许多平台参数。 例如,此阵列的部分空间称为IP保险丝,用于存储各个硬件模块的配置参数(智能属性)。 因此,特殊的DFx Aggregator设备在FUSE中存储平台是串行的还是测试的标志。
除FPF外,在制造模式下,设备制造商还可以设置Intel ME固件参数,这些参数存储在SPI闪存介质上的内部固件文件系统MFS中。 重新编程SPI闪存时,可以更改这些参数。 它们被称为CVAR(可配置NVAR,命名变量)。
为了安装CVAR,负责Intel ME固件模块mca_server。 MCA是生产线配置体系结构的缩写,是制造阶段平台配置过程的通用名称。 可以像FPF一样定义CVAR,并使用FPT读取。
图2. FPT实用程序为Broxton P平台输出的CVAR列表CVAR的列表因平台和Intel ME固件版本而异。 对于支持Intel AMT技术的芯片组,这些变量之一是用于输入MEBx(ME BIOS扩展名)的密码。
仅当Intel ME固件在制造模式下运行时,才可以安装FPF和几乎所有CVAR变量。 FPF的安装过程本身分为两个阶段:设置FPF(存储在临时存储器中)和将FPF传输到保险丝阵列。 同时,只有在“制造”模式下才可以进行第一阶段,并且在离开“制造”模式后,如果制造商在此模式下操作时设置了FPF值并且同时从未在融合阵列中记录相应的范围,则真正的“燃烧”会自动发生。 因此,如果系统在制造模式下运行,则很可能未初始化FPF变量。
禁用制造模式的迹象存储在MFS上的文件/ home / mca / eom中,因此,当使用带有基本文件系统的固件重写SPI闪存时(有关更多详细信息,请参见
[9] ),该平台可以再次在制造模式下运行(但无法覆盖保险丝) 。
OEM公钥
因此,配置英特尔平台的过程非常复杂,包括几个阶段。 如果设备制造商违反或更改了顺序,则平台存在严重风险。 即使完成了制造模式,制造商也无法编写FUSES,这将允许攻击者为他编写FUSES,写下其值而不是用于签名BootGuard(ACM)和UEFI模块的引导代码的密钥,从而仅允许平台使用其恶意代码进行引导,并且在持续的基础上。 这将导致无法挽回的设备损失,因为欺诈密钥将永远被注册在永久性存储器中(有关这种攻击的详细信息,请参阅《安全防护rootkit:Alexander Ermolov撰写的Intel BootGuard
[8] )。
在FPF中的新系统(Apollo Lake,Gemini Lake,Cannon Point)中,不仅存储了BootGuard的密钥,而且还存储了OEM公钥(或者更确切地说,是RSA OEM公钥中的SHA-256),而ME公钥保护机制则基于该公钥。 例如,一个特殊的SPI闪存部分(称为签名主映像配置文件(SMIP))存储制造商特定的PCH带(PCH硬件配置)。 本部分在密钥SHA-256上签名,密钥SHA-256被放置在SPI闪存的特殊文件中。 该文件称为oem.key,位于FTPR部分,其中包含OEM提供的用于签名各种数据的各种公共密钥。 这是制造商签署的Cannon Point平台数据集的完整列表,每个都有唯一的密钥:
图3.已签名的OEM CNP平台数据列表oem.key文件本身是由OEM共享根密钥签名的,该哈希根数必须记录在FPF中。
图4. OEM签名在ME区域中绕过写锁定
直到最近(在Intel Apollo Lake之前),Intel ME固件仍在单独的SPI区域中,该区域具有对CPU,GBE和ME的独立访问权限。 因此,如果在CPU(主系统)部分上正确配置了访问属性,则无法读写ME固件。 但是,现代英特尔芯片组SPI控制器具有特殊的“主授权”机制。 该技术为每个SPI主机分配了一个严格定义的SPI闪存部分,该主机拥有其区域,而不管SPI描述符中指定的访问权限如何。 每个主控者都有机会根据自己的意愿提供(仅用于他或他的)区域的访问权限(用于读取或写入)。
图5.描述SPI Master Grant的英特尔文档摘录因此,即使主机指定禁止从主机访问ME SPI区域,ME仍然可以提供对其数据的访问。 我们认为,这样做是为了绕过标准算法来更新Intel ME固件。
主机ME区域闪存保护覆盖
在Intel ME固件中,实现了特殊的HECI命令,该命令允许您打开从CPU对SPI ME区域的写访问。 它称为HMR FPO(主机ME区域闪存保护替代)。 在之前的一项研究中,我们详细描述了此命令[5]。 她有几个特点。
收到HMR FPO命令后,固件
仅在重新引导
后才打开对其区域的访问。 ME本身也提供保护:仅在UEFI BIOS执行期间接受命令,直到所谓的过帐结束(EOP)时刻为止。 EOP是UEFI BIOS在将控制权转移到操作系统(ExitBootServices)之前发送的另一条HECI命令。 在某些BIOS设置中,您可以找到使HMRFPO命令发送到EOP的选项。
图6.在BIOS中打开ME区域收到EOP后,ME固件将忽略HMR FPO,返回相应状态。
但这仅在制造模式完成后才发生 。 因此,处于制造模式的ME固件在
任何时候都接受HMR FPO
,而与发布结束无关 。 如果制造商尚未关闭制造模式,则攻击者(通常来说,这需要管理员权限,但即使OS内核最初也无法覆盖ME固件)可以随时更改ME固件。 在此阶段,攻击者可以覆盖ME映像,例如,以利用INTEL-SA-00086漏洞。 这增加了重新启动的必要,但这并不是除MacBook之外几乎所有平台上的障碍。
在Apple计算机上,UEFI中还有一个附加检查,该检查在启动时执行,如果使用HMRFPO打开了ME区域,则会阻止系统启动。 但是,正如我们稍后将说明的那样,如果ME固件在制造模式下运行,则可以克服这种保护机制。
重启我而不重启主CPU
在现代计算机中,有几种重新启动平台的选项。 其中记录如下:全局重启和仅重启主CPU(不重启ME)。 但是,如果有一种方法可以在
不重启主CPU的
情况下重启ME(也要执行HMRFPO命令),则将打开对该区域的访问,并且主系统将继续运行。
图7.重新启动类型控制检查内部ME固件模块后,我们发现有一条HECI命令(
“ 80 06 00 07 00 00 0b 00 00 00 03 00” ,有关发送命令的更多详细信息,请参见[
5 ])仅重启(!)英特尔ME内核,即使在EOP之后,也可以随时发送处于“制造模式”的邮件。
图8.处理ME HECI重载命令的函数的反汇编程序列表因此,发送了这两个HECI命令的攻击者可以打开ME区域,并且可以在不重新启动平台的情况下在其中写入任何数据 。 在这种情况下,SPI描述符包含的内容无关紧要,也就是说,如果系统在制造模式下运行,则SPI区域的正确保护属性不会保护ME固件免受更改。
我们分析了来自不同制造商的几种平台。 其中包括联想笔记本电脑和苹果MacBookPr®。 在经Yoga和ThinkPad生产线检查的计算机中,我们没有发现与制造模式相关的任何问题,但是
基于Intel芯片组的Apple笔记本电脑在制造模式下运行 。 将这些信息传输到Apple后,此错误(CVE-2018-4251)已在macOS High Sierra 10.13.5 OS更新中修复。
本地操作INTEL-SA-00086
因此,利用CVE-2018-4251漏洞,攻击者可以编写包含INTEL-SA-00086漏洞的ME固件的旧版本,并且同时不需要SPI编程器或访问HDA_SDO跳线(即物理访问)。 因此,实现了此漏洞的最危险的本地向量(在ME固件中执行任意代码)。 值得注意的是,在INTEL-SA-00086安全公告的解释中,英特尔没有提及开放制造模式作为在没有物理访问的情况下本地利用此漏洞的方法,而只是说只有在对SPI区域的访问配置不正确的情况下,才可以进行本地利用那是不对的。 为了保护用户,我们决定描述如何检查制造模式的可用性以及如何禁用它。
如何保护自己
针对基于芯片组和英特尔处理器的设备开发人员的系统实用程序软件包(英特尔系统工具)包括MEInfo实用程序(分别用于移动和服务器平台的TXEInfo,SPSInfo),该实用程序旨在接收有关管理引擎固件和当前状态的高级诊断信息。整个平台。 我们在以前的一项关于禁用ME和未记录的HAP(高保证平台)模式的研究中证明了此实用程序[
6 ]。 用–FWSTS标志调用的该实用程序提供了HECI状态寄存器的详细说明,并报告了制造模式状态(FWSTS状态寄存器的第4位被设置为指示制造模式处于活动状态)。
图9. MEInfo实用程序的示例输出我们还开发了程序[
7 ],如果用户由于任何原因无法访问英特尔®ME系统工具,您可以使用该程序检查“制造模式”的状态。
图10. mmdetect脚本的示例问题是,如果事实证明制造商没有这样做,如何独立完成制造模式。 为了完成制造模式,FPT实用程序有一个特殊选项–CLOSEMNF,除了其主要用途外,它还允许您为描述符中的SPI闪存区域设置建议的访问权限。
图11.使用–CLOSEMNF选项的FTP实用程序结果在此示例中,我们使用–CLOSEMNF选项的NO参数,以便不重新启动平台,默认情况下,在完成制造模式后立即执行该操作。
结论
我们的研究表明,存在英特尔®ME固件制造模式问题,即使是大型制造商(如Apple)也能够在配置英特尔平台时犯错误。 最糟糕的是,没有关于此主题的公共信息,最终用户甚至都不意识到可能导致机密信息丢失,不可移动的rootkit出现以及设备不可撤销的报废的严重问题。
此外,我们怀疑,由于BIOS / UEFI和ME状态不同步,不重启主CPU而重启ME的能力可能会导致其他安全问题。
作者:马克·埃莫洛夫(Mark Ermolov)和马克西姆·高立奇(Maxim Goryachiy)
[1]
英特尔管理引擎关键固件更新,英特尔-SA-00086[2]
GitHub-chipsec / chipsec:平台安全评估框架[4]
快速,安全和灵活的开源固件Coreboot[5]
Mark Ermolov,Maxim Goryachy,《如何成为PC的唯一所有者》,PHDays VI,2016年[6]
Mark Ermolov,Maxim Goryachy,通过非文档模式禁用Intel ME 11,Positive Technologies的博客[7]
英特尔ME制造模式检测工具[8]
Alexander Ermolov,保护rootkit:英特尔BootGuard[9]
Dmitry Sklyarov,Intel ME:闪存文件系统。 解释