查看原文
其他

Intel制造模式漏洞曝光,苹果公司也无法避免此影响

看雪学院 看雪学院 2019-05-26


俄罗斯的安全研究人员公开了Intel 的本地利用ME漏洞(INTEL-SA-00086)问题的根源是未记录的Intel ME模式,特别是制造模式。


影响范围包括其服务器(Intel SPS)和移动(Intel TXE)版本。




什么是制造模式?


Intel ME制造模式用于在制造期间配置和测试终端平台,因此应在销售和发货给用户之前禁用。是,这种模式及其潜在风险在Intel 的公共文档中没有任何描述。普通用户无法禁用此模式,这是由于相关实用程序(Intel ME系统工具的一部分)无法正式使用。因此,如果因为某种原因启用了此模式,则没有软件可以保护甚至通知用户。


此模式允许配置存储在一次性可编程存储器(FUSEs)中的关键平台设置。这些设置包括BootGuard的设置(ACM和UEFI模块的数字签名密钥的模式、策略和hash)。其中一些被称为FPFs(Field Programmable Fuses)。


(FPT中-FPFs选项的输出)


在制造模式下,硬件制造商可以指定Intel ME的设置,这些设置存储在SPI闪存上的Intel ME内部文件系统(MFS)中。可以通过重新编程SPI闪存来更改这些参数。这些参数称为CVAR(可配置NVAR,命名变量)。


设置CVAR是名为mca_server的Intel ME模块的责任。 MCA是“制造线配置架构”(Manufacture-Line Configuration Architecture)的缩写,它是制造过程中配置平台过程的通用名称。与FPFs一样,CVARs可以通过FPT进行设置和读取。


(FPT为Broxton P平台输出的CVAR列表)


CVAR列表取决于Intel ME的平台和版本。对于支持Intel AMT的芯片组,其中一个CVAR是输入MEBx(ME BIOS Extension)的密码。


设置FPFs或几乎任何CVAR都要求Intel ME处于制造模式。分配FPF的过程包括两个步骤:设置FPF的值(保存到临时存储器中)并将FPFs值提交给FUSEs。如果在制造模式下,制造商设置FPF值并且之前从未写过FUSE数组中的相应范围,那么第一步只能在制造模式下实现,但实际的“刻录”(burn)会在制造模式关闭后自动发生。


因此,如果系统处于制造模式,FPFs可能从未被初始化。


已关闭制造模式的标志存储在MFS上的file/ home / mca / eom中。当SPI闪存被基本文件系统的固件覆盖时,平台可以再次在制造模式下运行(尽管不再可能覆盖FUSE)



OEM 公钥


配置Intel平台的过程相当复杂,包含多个步骤。硬件制造商对此过程的任何错误或偏离都会使平台面临严重风险。即使制造模式已经关闭,制造商也可能没有设置FPF,这允许攻击者通过编写自己的值来代替用于签署BootGuard(AСM)和UEFI模块的起始代码的密钥来自行完成。在这种情况下,平台只会加载攻击者的恶意代码,并且会持续加载。这将导致不可逆转的硬件损害,因为攻击者的密钥被写入永久性内存,永远不会被删除。


在较新的系统(Apollo Lake,Gemini Lake,Cannon Point)上,FPFs不仅存储BootGuard的密钥,而且存储OEM的公钥(严格来说,RSA OEM公钥的SHA256 hash),它支持多种ME安全机制。


例如,名为Signed Master Image Profile(SMIP)的SPI闪存的特殊部分存储制造商指定的PCH Straps(PCH硬件配置)。此部分使用密钥进行签名,该密钥的SHA256散列存储在SPI闪存上的特殊文件(分区)中。此文件名是FTPR分区中的oem.key(Cannon Point PCH的OEMP分区中的OEMP.man),包含各种OEM提供的用于签署各种数据的公钥。


在下图中,可以看到制造商签署的数据集的完整列表,每个数据集都有一个Cannon Point平台的唯一密钥:


(CNP平台的OEM签名数据列表)


oem.key文件本身使用OEM根密钥签名,其公钥的hash值应写在FPFs中。


(OEM签约)


因此,在破坏了OEM根密钥后,攻击者可能会破坏之前提到的所有数据,这比仅适用于旧平台的Boot Guard接管要糟糕得多。



在写入ME区域时绕过块


直到最近(在Intel Apollo Lake之前),Intel ME位于一个独立的SPI区域,该区域具有CPU,GBE和ME的独立访问权限。因此,只要正确配置了访问属性,就无法从CPU(主系统)端读取或写入ME。但是,目前用于Intel芯片组的SPI控制器有一种称为Master Grant的特殊机制。该机制为每个SPI主控制器分配严格定义的SPI闪存部分。无论SPI描述符中指示的访问权限如何,主控制器都控制其特定区域。每个主设备都可以为其所在区域(但只有自己的区域!)提供对其所希望的任何其他主设备的访问(读取或写入)


(摘自描述SPI Master Grant的Intle文档)

这意味着即使SPI描述符禁止主机访问ME的SPI区域,ME仍然可以提供访问研究人员认为,此更改可能旨在以绕过标准流程的方式更新Intel ME。



主机ME区域闪存保护覆盖


Intel ME实现了一个特殊的HECI命令,允许在CPU端打开对ME SPI区域的访问。该命令称为HMR FPO(主机ME区域闪存保护覆盖)


收到HMR FPO命令后,Intel ME仅在重置后才会打开对该区域的访问权限。Intel МЕ本身还包括安全措施:在结束发布(EOP)之前,只有当UEFI BIOS是平台启动过程的所有者时,才会接受该命令。 EOP是一种不同的HECI命令,它在将控制权交给操作系统(ExitBootServices)之前将UEFI发送给ME。有时,BIOS Setup包含在EOP之前发送HMRFPO命令的选项。


(在BIOS中打开ME区域)


收到EOP后,Intel ME忽略HMR FPO并返回相应的错误状态。但这只有在制造模式关闭后才会发生。因此,在制造模式下,无论是否存在End Of Post,Intel ME都会随时接受HMR FPO。如果制造商未能关闭制造模式,攻击者可以随时更改Intel ME(当然,需要管理员权限,但即使是OS内核最初也无法重新刷新Intel ME)。在此阶段,攻击者可以重新刷新ME映像,例如利用漏洞INTEL-SA-00086。


然后需要重置才能运行修改后的固件,但几乎在任何平台上都没有问题,Apple MacBook除外。 Apple的计算机包含UEFI中的额外检查,UEFI在UEFI启动时运行,如果已使用HMRFPO打开ME区域,则阻止系统启动。但是,如果Intel ME处于制造模式,则可以轻松绕过此机制。



重置ME而不重置主CPU


今天的计算机可以通过几种不同的方式重新启动:记录的版本包括全局复位和仅重置主CPU(不重置ME)但是,如果有一种方法可以在不重置主CPU的情况下重置ME(通过预先运行HMRFPO命令),则可以打开对该区域的访问,并且主系统继续运行。


(重置类型)

调查了内部ME模块后,发现有一个HECI命令(“80 06 00 07 00 00 0b 00 00 00 03 00”,更多关于在[5]中发送命令的信息),仅用于复位(!!! )Intel ME。在制造模式下,即使在EOP之后,也可以随时发送此命令:



因此,发送这两个HECI命令的攻击者打开ME区域并可以在那里写入任意数据,而不必整体重置平台。SPI描述符包含什么并不重要,如果系统在制造模式下运行,SPI区域的正确设置保护属性将无法保护ME免受修改。



漏洞案例:漏洞CVE-2018-4251


研究人员分析了许多制造商的平台,包括联想和Apple MacBook Prо 笔记本电脑。其中Yoga和ThinkPad计算机没有任何与制造模式相关的问题。但研究人员发现Intel芯片组上的Apple笔记本电脑正在制造模式下运行。在向Apple报告此信息后,该漏洞(CVE-2018-4251)在macOS High Sierra更新10.13.5中进行了修补。




INTEL-SA-00086的本地开发

通过利用CVE-2018-4251,攻击者可以将旧版本的Intel ME(例如包含漏洞INTEL-SA-00086的版本)写入内存而无需SPI编程器或访问HDA_SDO bridge,换句话说,无需物理访问到电脑。因此,可以利用本地向量来利用INTEL-SA-00086,这使得能够在ME中运行任意代码。


值得注意的是,在INTEL-SA-00086安全公告的注释中,Intel没有提到启用制造模式作为在没有物理访问的情况下进行本地利用的方法。相反,该公司错误地声称只有在SPI区域的访问设置配置错误时才可能进行本地利用。为了确保用户安全,研究者决定描述如何检查制造模式的状态以及如何禁用它。


用户可以做什么?


Intel系统工具包括MEInfo(以及分别用于移动和服务器平台的TXEInfo和SPSInfo),以便获得有关ME当前状态和整体平台的全面诊断信息。当使用-FWSTS标志调用时,该实用程序显示状态HECI寄存器的详细描述和制造模式的当前状态(当设置FWSTS状态寄存器的第四位时,制造模式处于活动状态)。


(MEInfo输出的示例)

研究人员还创建了一个程序,用于检查制造模式的状态,如果用户因任何原因无法访问IntelME系统工具。以下是脚本在受影响的系统上显示的内容:


(mmdetect脚本)


因此,一个合乎逻辑的问题是,如果制造商未能这样做,用户如何自己关闭制造模式?


要禁用制造模式,FPT有一个特殊选项(-CLOSEMNF),除了其主要用途之外,还允许为描述符中的SPI闪存区域设置建议的访问权限。


以下是输入-CLOSEMNF时会发生的情况:


(使用FPT关闭制造模式的过程)


在此示例中,研究人员使用 -CLOSEMNF 的 NO 参数来避免重置平台,否则在关闭制造模式后会立即发生。



结论


研究表明,Intel ME存在制造模式问题,即使像苹果这样的巨型制造商也无法免受英特尔平台上的配置错误的影响。更糟糕的是,没有关于该主题的公开信息,它可能导致数据被盗,持久不可移除的rootkit,硬件的“bricking”。而公众对这些弱点一无所知:


研究人员还怀疑,由于BIOS / UEFI和ME的状态不同步,在不重置主要的CPU情况下重置ME可能会导致更多安全问题。



参考来源:

  • ptsecurity



- End -



书籍推荐:


  • 《加密与解密》

  • 基普·欧文的《汇编语言:基于x86处理器》

  • 王爽的《汇编语言》

  • Charles Petzold著的《Windows程序设计》(以VC来讲解)





往期热门资讯:                                        


扫描二维码,获得更多新鲜资讯!



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存