0x01 漏洞背景
平台控制器集线器(PC H)/SoC由一组由内部结构连接的硬件块组成,如下图所示。 CSME是这些硬件块的组成部分之一, 需要注意的是,下图并不能确切反映PCH和SoC产品的硬件框图。
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及其在主要安全作用。
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。
0x05 CVE-2019-0090漏洞影响
CVE-2019-0090允许攻击者对CSME ROM执行控制,并获得对CSME芯片组和认证密钥的访问:英特尔增强隐私ID(EPID)私钥和英特尔平台信任技术(PT T)背书密钥(E K)。,这些密钥是给定系统特有的。 请参阅后面的部分,以了解芯片组密钥和EPID私钥在CSME中所起的作用。 此外,CVE-2019-0090允许攻击者加载自己的CSME固件,并损害系统上的CSME用例。
下表列出了CSME支持的不同用例以及它们如何受到潜在影响。
最新的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:
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制造熔断器中的其他安全密钥发送到英特尔组装链进行编程。
下表列出了在英特尔制造过程中编入程序的安全引信:
目前仅启动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验证。
几个键是由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恢复所需的步骤。
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固件之前,还将其用存储器保护键包裹。
0x10 漏洞对客户/服务器系统的影响
该表列出了CSME和英特尔聚合安全引擎(CSE)的客户端系统:
下表列出了SPS固件和英特尔高级驱动程序辅助系统(ADAS)管理引擎固件的服务器系统:
本文翻译自:https://www.intel.com/content/dam/www/public/us/en/security-advisory/documents/cve-2019-0090-whitepaper.pdf如若转载,请注明原文地址: