如何确保一段代码永远不会离开CPU缓存(L3)?

7
最新的Intel XEON处理器拥有30MB的L3内存,这足以容纳一个轻型1类Hypervisor。
我想了解如何将这样的Hypervisor保留在CPU内部,即防止其被刷新到RAM或至少在发送到内存/磁盘之前加密数据。
假设我们在裸机上运行,并且我们可以使用DRTM(Late Launch)引导此过程。例如,我们从不受信任的内存/磁盘加载,但只有在设置适当的规则确保发送到RAM的所有内容都被加密后,我们才能加载真正的操作系统,解开用于解密操作系统的秘密。
附注:我知道TXT的ACEA aka ACRAM(认证代码执行区域aka认证代码RAM)被认为具有这种保证(即它受到CPU缓存的限制),因此我想知道是否可以围绕此进行一些技巧。
附注2:看起来这已经超出了当前的研究范围,因此我实际上并不确定是否可能回答这个问题。

1
我可能错了,因为已经有一段时间了,但我怀疑在Xeon上仍然无法锁定缓存行。 - Joachim Isaksson
看起来PrivateCore.com/vcage在这方面很成功。 - northox
1
请看此 Twitter 讨论:https://twitter.com/jf/status/377582143490510848 - northox
@northox - 如果你关心安全问题,也许这个链接会很有趣 - http://theinvisiblethings.blogspot.co.il/2013/08/thoughts-on-intels-upcoming-software.html - Leeor
@Leeor 是的,我知道这一点,但与此同时,我对了解如何实现这一点(并且似乎是由privatecore完成的)很感兴趣。到目前为止,我所看到的唯一能够做到这一点的东西是ACEA(Authenticated Code Execution Area - 由TXT使用)。我将在我的问题中添加一些细节。 - northox
显示剩余2条评论
1个回答

8
您的问题有些含糊,但似乎归结为您是否能在Intel Xeon上锁定缓存行。答案似乎是否定的,因为在Intel 64或IA-32的文档中没有提到此功能...至少对于公开可用的型号而言。如果您向Intel投入数百万美元,可能可以获得具有此功能的定制Xeon。Intel现在从事定制处理器业务。
缓存锁定通常适用于嵌入式处理器。Intel XScale具有此功能,许多ARM处理器等也具有此功能。
请注意,缓存锁定并不意味着缓存的数据/指令永远不会在RAM中找到。您似乎想要的是一种安全的私有内存(而不是缓存),可能在微码级别。但那不是缓存,因为它与缓存的定义相矛盾...正如您可能知道的,过去十年中生产的每个Intel CPU都拥有可更新的微码,该微码相当安全地存储在CPU内部,但您需要具有正确的加密签名密钥才能生成被CPU接受的代码(通过微码更新)。您似乎想要的是相当于这个的东西,但是在x86 / x64指令级别而不是在微码级别。如果这是您的目标,则授权x86 / x64兼容的IP核并向其添加受加密保护的EEPROM是正确的方法。
您在进一步的评论中提到的未来的Intel软件保护扩展(SGX)并不能解决您的超级管理员代码从未以明文存储在RAM中的问题。这是SGX的设计,以便可以在将其包含之前扫描病毒等。
最后,我无法真正评论privatecore的技术,因为我找不到有关他们所做的真正技术描述。 Twitter评论和面向初创企业网站的新闻文章都没有提供这些信息,他们的网站也没有。他们的商业模式现在归结为“相信我们,我们知道我们在做什么”。我们可能会在某一天看到他们的东西的真正安全描述/分析,但我现在找不到它们。他们声称自己 “PRISM免疫” 的说法可能会让NSA内部的某个人发笑...
重要更新:实际上,可以在x86世界中禁用(整个)缓存写回RAM。这些是在AMD领域被称为“cache-as-RAM mode”,在英特尔公司则被称为“no-fill mode”的官方未记录的模式。详情请参见https://www.youtube.com/watch?v=EHkUaiomxfE。由于这是未记录的内容,因此英特尔(至少)保留以奇怪的方式破坏该“功能”的权利,如https://software.intel.com/en-us/forums/topic/392495讨论的那样。
更新2:一份2011年的联想专利http://www.google.com/patents/US8037292讨论了在英特尔CPU上使用新的(?)无驱逐模式(NEM)来将BIOS加载到CPU缓存中。该方法可能可用于其他类型的代码,包括监管程序。然而,有一个很大的警告。除了已经缓存的内容之外的代码将运行非常缓慢,因此我认为这在引导过程之外并不真正可用。有一些coreboot代码展示了如何启用NEM (https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/84defb44fabf2e81498c689d1b0713a479162fae/src/soc/intel/baytrail/romstage/cache_as_ram.inc)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接