英特尔 SGX 和 MSR - 开发人员需要了解什么?

信息安全 应用安全 硬件 部件 特权升级
2021-08-17 05:13:07

英特尔 SGX是一项有趣的新技术,将作为即将推出的英特尔处理器的一部分提供。旨在使软件能够在安全的飞地中运行。在 enclave 中运行的代码将通过硬件与在同一处理器上运行的不受信任的代码隔离开来,因此您可以在 enclave 中执行安全关键代码并保护它免受攻击。虽然目前可用的处理器不支持 SGX,但英特尔建议它很快就会可用。希望这可能为某些类型的隔离提供坚实的基础:开发人员将能够在安全飞地中运行某些代码(例如,加密密钥管理代码),并保证其他代码无法篡改它。

特定于型号的寄存器(MSR) 是控制处理器操作的特殊配置寄存器。例如,MSR 可用于启用分支跟踪、性能计数器、硬件观察点和其他有用的特殊功能。通常,只有特权代码可以读写大多数 MSR。

我的问题:SGX 模式如何与 MSR 交互?在 SGX 模式下运行的代码开发人员需要了解哪些有关 MSR 的信息?

新交所规范并没有说如何与新交所的MSR交互模式。但是,您可以想象 MSR 可能会对在 enclave 中运行的代码构成潜在风险,具体取决于两者的交互方式。例如,如果不受信任的代码可以启用分支跟踪(通过 MSR)然后触发安全飞地的调用,并且如果在模式切换中保留此设置,导致飞地代码采用的所有分支都记录到不受信任的可访问的内存中代码,那么这可能允许不受信任的代码对 enclave 代码进行强大的侧信道攻击。

那么,MSR 的值如何影响在 enclave 中运行的代码的执行?在 enclave 模式下运行时是否会忽略 MSR?设计为在 enclave 中运行的代码是否需要在执行任何敏感操作之前清除/重置所有 MSR?将在 enclave 中运行的代码开发人员需要了解 MSR 在 SGX 模式下的工作方式、编写安全代码并保护其代码免受攻击?

1个回答

这是一个很好的问题!在你问之前从来没有想过这个。首先,在安全飞地内运行的代码在环 3 中运行。因此适用于不受信任的非飞地环 3 代码的所有限制都适用。所以飞地不能写入MSR。

接下来,规范没有明确提及任何有关 MSR 的内容,但它确实告诉您与 IA32 功能的交互。对于您提供的分支跟踪示例,请查看 LBR(最后一个分支记录)部分。这会准确地告诉你它是如何相互作用的。据我了解,EENTER/EXIT 指令被视为一个长分支,每个分支都指向 enclave 内的入口点。无论权限如何,在您跳转到 enclave 内的代码后发生的任何事情都不会被记录或对不受信任的代码可见,因为分支记录会在 enclave 退出时从 LBR 堆栈中弹出。它仅在 enclave 的开发人员可以设置的 debug opt in 条目上可见,并且正如名称明确指出的那样,enclave 处于调试模式。(参见第 7 章,第 5 节关于分支跟踪。)所以侧通道你说的应该是不可能的。

分支跟踪侧通道攻击可能不是问题,但其他类型的性能监控可能是问题。仍然可以监视页面错误、内存访问、缓存行为等。基于缓存的侧信道攻击仍然是可能的。因此,是的,对 enclave 代码的侧信道攻击是可能的。微软的Haven 论文解释了 SGX 在侧信道攻击方面仍然存在的限制。

为了回答您的问题,飞地开发人员需要了解的有关 MSR 的信息取决于开发人员在其代码中期望的攻击类型。我假设在设计和开发 enclave 时会有某种威胁建模,并且根据您预期的威胁,您需要弄清楚 SGX 如何处理这些威胁。分支侧通道附加是弄清楚 SGX 如何处理它的一个示例。

在大多数情况下,我希望任何可能泄漏有关 enclave 及其执行信息的 MSR/寄存器/处理器状态都被隐藏/保护不受不受信任的代码、特权或非特权代码的影响,并且 enclave 编写者不必担心它。