英特尔 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 模式下的工作方式、编写安全代码并保护其代码免受攻击?