带有设备内存的幽灵

spectre with device memory

关于 spectre 安全问题和边信道攻击。

在两个 x86 and ARM 中都存在一种方法来禁用 caches/speculative 对特定内存页面的访问。因此,对这些内存区域的任何侧信道攻击(spectremeltdown)应该是不可能的。那么,为什么我们不使用它来通过将所有安全信息(密码、密钥等)存储到缓慢但安全(?)的内存区域,同时将不安全的数据放入快速但不安全的正常内存来防止旁路攻击?这些页面上的访问时间将大大减少(~100),但内核修复也不便宜。因此,也许仅降低几个内存页面的性能比整体略有降低更快?

它将解决问题的责任从 OS 转移到应用程序开发人员,这将是一个巨大的变化。但希望内核能以某种方式修复所有错误似乎也不是一个好方法。

所以我的问题是

  1. 使用 "device" 内存页真的能防止此类攻击吗?
  2. 它有什么缺点? (除了明显的性能问题)
  3. 实际使用情况如何?

因为我们的编译器/工具链/操作系统不支持对某些变量使用不可缓存的内存,也不支持将它们的副本溢出到堆栈。 (或根据它们计算出的临时值。)

此外 AF​​AIK,即使您愿意,您甚至无法在 Linux 上的用户 space 进程中分配一页 UC 内存。这当然可以用 mmap and/or mprotect 的新标志来改变。希望它可以设计成 运行 旧系统上的新二进制文件将获得常规的回写内存(因此仍然可以工作,但没有安全优势)。

我认为让非特权用户 space 映射 WC 或 UC 内存不会有任何拒绝服务影响;您已经可以使用 NT 存储和/或 clflush 强制内存访问并争夺更大份额的系统内存控制器时间/资源。