Cache-as-Ram(无填充模式)可执行代码

n00*_*0ax 8 architecture x86 sys

我已多次阅读有关cache-as-ram模式(无填充模式)的信息,并且想知道是否可以编写第一个可执行代码并跳转到可执行代码,如果是这样,可执行代码仅限于一级缓存的一半(从那以后)缓存真的只是sram).

osg*_*sgx 6

Coreboot最初使用CAR来保存L1数据缓存中的C堆栈:http : //rere.qmqm.pl/~mirq/cache_as_ram_lb_09142006.pdf http://www.coreboot.org/images/6/6c/LBCar.pdf

要执行代码,我们应该将统一的L2切换到CAR模式,然后是L1i(您应该知道大多数现代桌面/应用程序CPU已分离L1:一个用于数据 - L1d - 用于读/写和其他 - 只读L1i用于代码)将能够从CAR L2中读取代码.这种模式在"UBRX - 用于x86 PC的通用BIOS恢复控制台"(akeo)中实现:http://pete.akeo.ie/2011/08/ubrx-l2-cache-as-instruction-ram.html

有两个L1缓存ondie:一个用于数据,另一个用于指令,其中一个是只读的.因此,coreboot的CAR设置方法只提供对L1数据缓存的访问,而不是指令,因此我们不能简单地将代码上传到L1-Data并期望它运行.

还有一家商业公司创建了保护代码免受冻结内存攻击的产品(当攻击者冻结DRAM,拉动DRAM模块并将其移动到其他PC进行读取时,大多数数据将被保存数十秒).他们的产品将整个os/hypervisor内核加载到缓存中,代码和数据都存储在CPU中.该产品来自PrivateCore的vCage(通过Reverse工程在私有云上部署Docker使用二进制代码和密钥防止逆向工程,感谢AdamNYC用户获取信息):

("vCage主机打包为RAM磁盘上的无状态实时映像Linux KVM").

https://security.stackexchange.com/questions/53165/is-it-possible-to-boot-an-encrypted-server-remotely-and-securely,安全评论.用户northox:

"对于vCage,您基本上只需要信任英特尔和私有核心.简而言之,vCage提供了一个通过远程证明验证的L3驻留虚拟机管理程序."

查看https://forum.stanford.edu/events/2014/2014slides/plenary/Oded%20Stanford%20Annual%20Forum%202014.pdf#page=36的幻灯片36

"CPU作为计算的边界•物理安全性是CPU包本身•将无状态映像加载到CPU缓存中"

图像加载到CPU缓存(L3); 操作系统是linux!(幻灯片39)

最大的挑战•将Linux内核压缩到<10MB,同时 - 保持所有虚拟化功能 - 保持稳定(不允许OOM)•保持CPU缓存在我们的控制之下

这意味着vCage能够从Cache执行代码; 但该公司现在还不是Facebook的公共部分,因此没有更新的细节或Linux补丁的开源.