我已多次阅读有关cache-as-ram模式(无填充模式)的信息,并且想知道是否可以编写第一个可执行代码并跳转到可执行代码,如果是这样,可执行代码限制为一级的一半缓存(因为缓存实际上只是sram)。
答案 0 :(得分:5)
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中并期望它运行。
还有一家商业公司创建了保护代码Frozen memory attacks的产品(当攻击者冻结DRAM,拉动DRAM模块并将其移动到其他PC进行读取时,大多数数据将被保存数十秒)。他们的产品将整个os / hypervisor内核加载到缓存中,代码和数据都存储在CPU中。该产品是来自PrivateCore的vCage(通过Reverse engineering a Docker deployment on private cloud和Preventing reverse engineering with binary code and secret key,感谢AdamNYC user获取信息):
https://security.stackexchange.com/questions/53165/is-it-possible-to-boot-an-encrypted-server-remotely-and-securely,comment,security.SE user northox:(“vCage主机打包为RAM磁盘上的无状态实时映像Linux KVM”。)
的幻灯片36“对于vCage,您基本上只需要信任Intel和Private Core。简而言之,vCage提供了一个通过远程证明验证的L3驻留虚拟机管理程序。”
“CPU作为计算周边•物理安全性是CPU包本身•将无状态映像加载到CPU缓存中”
图像加载到CPU缓存(L3);操作系统是linux! (幻灯片39)
最大的挑战•将Linux内核挤压到<同时保留10MB - 保持所有虚拟化功能 - 保持稳定(不允许OOM)•将CPU缓存保持在我们的控制之下
这意味着vCage能够从Cache执行代码;但该公司现在还不是Facebook的公共部分,所以没有更新的细节或Linux补丁的开源。