Intel CSME 引擎 IOMMU 硬件级漏洞的分析(CVE-2019-0090) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

Intel CSME 引擎 IOMMU 硬件级漏洞的分析(CVE-2019-0090)

h1apwn 漏洞 2021-06-15 09:41:13
340549
收藏

导语:默认情况下,当CSME退出重置时,IOMMU会被禁用,允许RS1DMA事务在CSME ROM打开IOMMU保护之前到达CSME SRAM。

0x01  漏洞背景

平台控制器集线器(PC H)/SoC由一组由内部结构连接的硬件块组成,如下图所示。 CSME是这些硬件块的组成部分之一, 需要注意的是,下图并不能确切反映PCH和SoC产品的硬件框图。

1587368291193.png

CSME在PCH/SOC中的主要作用之一是认证和加载英特尔和系统制造商固件(F W)到相关IP,如电源管理控制器(PMC)和集成传感器集线器(IS H)。

这需要CSME与其他IP进行通信,这种通信是用root空间1(RS1)的事务类型进行的;每个IP的事务都由具有IP标识符的硬件标记。

在输入输出内存管理单元(IOM MU)中,CSME有一个专用的访问控制逻辑,该逻辑控制哪些IP可以将DMA事务发送到CSME SRAM中的特定区域。 这种访问控制基于IPSA I,完全由CSME 0环固件组件控制:

ROM,RBE(ROM引导扩展-第一固件组件执行ROM)和内核. 下面的CSME硬件框图描述了 CSME 内部的IOMMU及其在主要安全作用。

1587368572943.png

0x02  CVE-2019-0090

默认情况下,当CSME退出重置时,IOMMU会被禁用,允许RS1DMA事务在CSME ROM打开IOMMU保护之前到达CSMESRAM。 此窗口可由具有RS1DMA能力的IP在CSMEROM执行期间读取和写入CSME SRAM,可能通过 ROP 等其他技术损害CSME SRAM的加密能力或CSME ROM的完整性。

为了发起成功的攻击,攻击者需要做以下步骤:

1. 具有RS1DMA能力的IP的固件,Cannon Point(CNP)PCH上的集成传感器集线器。

2. 旁路的信任根(RoT)保护,在一个IP具有RS1DMA能力的 系统上安装和运行攻击者自己的固件,可以由系统制造商定制的固件由CSME固件使用制造商的公钥哈希进行身份验证,该散列存储在SPI闪存中。当EOM被系统制造商成功应用时,闪存中的熔断器仿真被禁用,而在PCH/SOC中的可编程熔断器(FPF)将被CSME固件用于认证和加载定制的系统制造商的固件IP。

3. 实现直接访问RS1DMA能力,成功的攻击还需要攻击者的IP固件在CSME退出重置时执行,例如,在系统启动期间或从CSME低功耗模式(也称为电源门控)恢复时,需要得到固件SKU或CSME重置的支持。

有安全研究团队使用了一个基于CannonPoint(CNP)PCH的平台,这个平台没有EOM应用。 在这个平台上,他们加载了自己的ISH固件,将公钥的散列存储在SPI闪存中的熔断器仿真中。 然后,它们要么使用CSME制造命令触发CSME重置,要么等待CSME从低功耗状态恢复。 根据这些有限的条件,能够触发一个RS1DMA事务,其中 CSME IOMMU尚未启用CSME ROM。

0x03  缓解措施

英特尔在较新的系统中通过使在CSME硬件中默认启用IOMMU来缓解CVE-2019-0090 ,因此当CSMEROM开始执行时,RS1DMA事务会被阻塞,直到CSME固件允许访问特定的SRAM区域才会不阻塞。

以下系统已经做了硬件修复:

 1. Icelake (ICP-LP and ICP-N PCH)
 2. Cometlake (CMP-LP, CMP-H and CMP-V PCH)
 3. Tigerlake (TGP-LP and TGP-H PCH)
 4. Lakefield (LKF SoC)
 5. Whitley (LBG-R PCH)
 6. Idaville (CDF PCH)
 7. Jacobsville (CDF PCH)
 8. Eagle Stream (EBG PCH)
 9. Tatlow (TGP-H PCH)

在其他系统中,CSMEROM是PCH/SoC硬件的一部分,并且没有修复漏洞,IOMMU可能还存在漏洞风险。 在这些情况下,CSME固件更新已经发布,防止RS1DMA事务到达CSME SRAM,IOMMU会被禁用。

对于基于CNP的系统,CSME固件更新在CSME进入低功耗模式或启动CSME重置之前,会将RS1DMA事务阻塞到PCH结构的CSME中。 一旦从电源门控或CSME重置恢复完成,启用了IOMMU,CSME固件将重新配置PCH结构以解RS1DMA事务。 请注意, 此更改依赖于PMC固件对PCH/SoC中电源管理流的控制,以及重置CSME的单个IP的能力。

对于其他系统,最新的CSME固件版本可以防止已知的攻击向量(除了物理回滚到以前易受 Intel-SA-00086 攻击的CSME固件版本)。

0x04 基于硬件的反回滚攻击(ARB)

为了适当地减轻物理攻击向量,基于CSME硬件的抗回滚能力(ARB)必须得到PCH/SoC的支持, 并由系统制造商启用。

这种能力将防止CSME固件在闪存中的物理回滚,并保证系统仍然受到保护,以防止已知的漏洞,这些漏洞在最近CSME固件版本中已经减轻。

该表总结了PCH/SoC以及在哪些条件下支持基于硬件的ARB。

1587370375348.png

0x05  CVE-2019-0090漏洞影响

CVE-2019-0090允许攻击者对CSME ROM执行控制,并获得对CSME芯片组和认证密钥的访问:英特尔增强隐私ID(EPID)私钥和英特尔平台信任技术(PT T)背书密钥(E K)。,这些密钥是给定系统特有的。 请参阅后面的部分,以了解芯片组密钥和EPID私钥在CSME中所起的作用。 此外,CVE-2019-0090允许攻击者加载自己的CSME固件,并损害系统上的CSME用例。

下表列出了CSME支持的不同用例以及它们如何受到潜在影响。

1587370791274.png

最新的CSME固件包括减轻CSME IOMMU硬件问题,以防止已知的攻击。 当基于硬件的ARB能力由系统制造商(包括BIOS支持)支持和启用时,CSME将只接受最新的CSME固件,以减轻物理FW回滚攻击。

此外,EOM应由系统制造商应用,如英特尔指南中规定的。

EOM规定如下:

1. 包含不同区域(即BIOS、CSME)上的访问控制列表的SPI描述符被锁定,不能由软件更改,然后由SPI控制器执行访问控制。

2. 基于SPI Flash的熔断器仿真被禁用,并使用PCH或SOC中的现场可编程熔断器代替。

3. 禁用CSME制造API。

必须指出,以下基于英特尔CPU的安全技术不受以下因素的影响:

1. 英特尔信任执行技术(TXT),使用离散TPM不使用英特尔PTT;

2. 除了CSMEDAL在客户端平台上提供的安全时间和单调计数器外,也会提供IntelS GX;

3. 英特尔虚拟化技术的指导I/O(VT-d)-适当的配置英特尔VT-d防止DMA访问系统内存的CSME。

0x06  SOC/PCH使用案例

下表列出了支持哪个用例的SOC/PCH:1587370891242.png1587370908745.png

IntelNode Manager功能只提供遥测,不提供系统电源管理;用例只支持运行CSME固件的英特尔工作站系统。 用例只支持在运行英特尔服务器平台服务(SPS)固件的服务器上。 在工作站或客户端 (CSME固件)上,不支持用例。

客户端和服务器之间的“IP固件身份验证”用例也可能不同。 例如,即使ISH硬件存在于服务器平台上使用的CNP-HCH中,SPS固件也不支持ISH固件的加载。

0x07 芯片组密钥和引信加密硬件密钥

CSME芯片组密钥是CSME ROM和CSME固件在运行时生成的密钥。 所有芯片组密钥都是由英特尔的PCH和SOC产品的密钥生成器设施(K GF)随机生成的,用PCH/SOC家族硬件密钥(Fuse加密硬件密钥)加密,并在运往系统制造商之前将PCH/SOC制造熔断器中的其他安全密钥发送到英特尔组装链进行编程。

1587371004891.png

下表列出了在英特尔制造过程中编入程序的安全引信:1587371059526.png

目前仅启动CNP PCH。

熔断器加密硬件密钥用于防止CSME安全密钥暴露。注意,引信加密硬件密钥不是为了保护芯片组密钥和EPID私钥免受CSMEROM的影响,关于这一点的更多解释将在后面的章节中提供。

0x08  CSME ROM芯片组密钥和引信加密硬件密钥的使用

当CSME ROM开始执行时,它将执行以下步骤:

1. 来自加密硬件加速器的ROM请求生成引信加密硬件密钥。

2. 在将引信加密硬件密钥加载到SKS硬件之前,ROM设置安全密钥存储(S KS)槽属性(特权级别、安全模式和锁定)。

3. ROM将安全键从熔断器拉到CSME SRAM,一旦完成,安全钥匙熔断器就会被锁定。此后,在下一次CSME重置之前无法检索安全密钥,从而保证只有CSMEROM才能检索安全密钥。

4. ROM将用硬件密钥加密的芯片组密钥从CSME SRAM解密为SKS。

5. ROM可以使用芯片组密钥导出额外的密钥,使用HMAC-SHA256作为密钥派生功能和硬编码字符串(每个密钥不同)和CSME固件安全版本号后,CSME固件清单由CSME ROM验证。

1587371146797.png

几个键是由ROM使用芯片组键创建的:

1. 包装密钥-此密钥用于在SRAM中包装密钥,并确保密钥在使用之前被解压到SKS中。 一旦密钥被包装,它就绑定到CSME硬件,不能在CSME之外使用。

2. 内存保护密钥-此密钥用于在SRAM中包装和展开密钥。 此密钥通常用于保护无法存储在SKS中的EPID或EK等认证密钥,后者仅支持AES或HMAC密钥类型。

3. 挂起密钥-此密钥用于生成一次性密钥,允许保存和恢复CSME固件上下文,而CSME进入电源门控或当平台只进入客户端系统待机时。 此键对于保证CSME在恢复时的执行完整性至关重要。

4. 英特尔root键-这个键是CSME固件的主键。 例如,它用于生成存储密钥,以保护NVM中的CSME数据。

5. B根密钥-此密钥用于保护NVM中的完整性保护密钥(IP K)和CSME固件模块的ICV(使用 IPK和Crypto硬件加速器AES-Paging引擎计算的完整性检查值)。 该ICV允许更快地启动CSME固件,并安全地在CSME代码和数据中页出和页从CSMESRAM到SPI闪存/DRAM。当CSME固件更新或ICV完整性故障时,IPK和ICV会失效。 此键对于保证CSME在启动和运行时的执行完整性至关重要。

6. 提供密钥-当需要TCB恢复时,CSME固件使用此密钥从英特尔服务器检索新的EPID私钥,因为CSMEEPID认证密钥已被破坏。 提供密钥是基于CSME固件SVN的。 只有当SVN 大于1时,此键的使用才相关。

7. PTTE K根密钥-此密钥将由CSME ROM导出,用内存保护密钥加密,并由IntelPTT使用 PTTEK计数器生成其背书密钥,也由CSME ROM导出到IntelPTT。一旦CSMEROM生成所有密钥,它将在执行CSME固件之前对芯片组密钥和引信加密硬件密钥进行清零和锁定。 这样做是为了确保这两个键不能在CSME固件之外使用。

如上图所示,CSME的执行完整性和数据安全性依赖于由CSMEROM创建的芯片组密钥和密钥。

0x09  EPID私钥

KGF负责生成所有CSMEEPID私钥、组公钥和相关证书。 在PCH或SOC的英特尔制造过程中, CSME提供了其独特的EPID私钥,该密钥用家庭引信加密密钥和EPID组ID加密。

在CSME引导下,EPID私钥由CSME ROM解密并导出到CSME固件,其中密钥由SIGMA模块管理。 然后,PAVP、DAL和PTT可以利用SIGMA协议向服务器(即内容提供程序)证明它们在真正的CSME固件中运行。 使用EPID私钥生成EPID签名,以向验证器(即内容提供程序服务器) 证明EPID组中的成员资格。 验证器通过检查成员的签名和组证书来验证成员(CSME固件)。 如果EPID私钥被泄露,那么CSME固件可能会被模拟,验证者保证他们与真正的CSME固件通信的能力也会受到损害。 在这种情况下,可以发出新的EPID私钥,并可以由Intel撤销 EPID私钥或其关联的EPID组。 这一程序被称为TCB恢复,同时缓解了破坏CSME固件TCB或暴露EPID私钥本身的特定漏洞。 例子包括Intel-SA-00086(CVE-2017-5705、CVE-2017-5706和 CVE-2017-5707)中记录的漏洞。

下图显示了成功完成TCB恢复所需的步骤。

1587371230595.png

KGF必须生成新的EPID私钥并将其发送到Intel服务器。 英特尔服务器将交付新的EPID私钥, 只有新的CSME固件与更高的SVN。 这是实现的通过使用ROM生成的提供密钥,使用CSME固件SVN,如前一节所解释的。 重要的是要注意,如果CSMEROM也受到损害,那么TCB恢复就不能再安全地进行了。

安全密钥存储硬件的使用CSME ROM还使用SKS硬件保护密钥免受CSME SRAM的潜在泄漏,而CSME固件运行,并确保 CSME固件可以在不知道其实际明文值的情况下使用密钥。由于以下原因,CSME ROM 不能使用为引信加密密钥和芯片组密钥设置安全模式的SKS插槽:

1. 存储在熔断器中的EPID私钥不是AES或HMAC密钥,因此不能在SKS中加载。 因此,密钥需要使用CSME SRAM中的Fuse加密硬件密钥解密,其中它在导出到CSME固件之前被 CSME ROM用内存保护密钥包裹。

2. 芯片组密钥还用于生成EPID随机值,CSME固件将使用该EPID私钥生成最终的EPID私钥。 在将EPID随机值导出到CSME固件之前,还将其用存储器保护键包裹。

1587371376903.png

0x10  漏洞对客户/服务器系统的影响

该表列出了CSME和英特尔聚合安全引擎(CSE)的客户端系统:

1587371526371.png

下表列出了SPS固件和英特尔高级驱动程序辅助系统(ADAS)管理引擎固件的服务器系统:

1587371618862.png1587371638302.png

本文翻译自:https://www.intel.com/content/dam/www/public/us/en/security-advisory/documents/cve-2019-0090-whitepaper.pdf如若转载,请注明原文地址:
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务