带有设备内存的幽灵

时间:2018-07-25 08:35:33

标签: security x86 arm spectre

关于spectre的安全性问题和旁路攻击。

x86ARM中都存在一种禁用特定内存页面上的缓存/推测性访问的方法。因此,对这些内存区域进行任何旁道攻击(spectremeltdown)应该是不可能的。那么,为什么不通过将所有安全信息(密码,密钥等)存储到缓慢但安全的(?)内存区域中,同时又将不安全的数据放入快速但不安全的普通内存中来防止边信道攻击呢?这些页面上的访问时间将大大减少(〜100),但内核修复也不便宜。因此,也许只降低几个内存页面的性能要快于总体降低的速度?

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

所以我的问题是

  1. 使用“设备”存储页面是否可以真正防止此类攻击?
  2. 它的缺点是什么? (除了明显的性能问题)
  3. 这种用法有多实用?

1 个答案:

答案 0 :(得分:1)

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

还有AFAIK,即使您愿意,您甚至无法在Linux上的用户空间进程中分配UC内存页面。当然可以用mmap和/或mprotect的新标志来更改。希望可以对其进行设计,以便在旧系统上运行新的二进制文件将获得常规的回写内存(因此仍然可以工作,但是没有安全性优势)。

我认为让无特权的用户空间映射WC或UC内存没有任何拒绝服务的含义;您已经可以使用NT存储和/或clflush来强制进行内存访问,并争夺更大比例的系统内存控制器时间/资源。