1

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

x86ARM中都存在一种方法来禁用特定内存页面上的缓存/推测访问。因此,对这些内存区域的任何侧信道攻击 ( spectre, meltdown) 应该是不可能的。那么,为什么我们不使用它来通过将所有安全信息(密码、密钥等)存储到缓慢但安全的(?)内存区域,同时将不安全的数据放入快速但不安全的普通内存中来防止侧信道攻击呢?这些页面上的访问时间将大大减少(~100),但内核修复也不便宜。所以也许只减少几个内存页面的性能比稍微整体下降要快吗?

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

所以我的问题是

  1. 使用“设备”内存页面真的可以防止此类攻击吗?
  2. 它有什么缺点?(除了明显的性能问题)
  3. 使用起来有多实用?
4

1 回答 1

1

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

同样 AFAIK,即使您愿意,您也无法在 Linux 上的用户空间进程中分配一页 UC 内存。当然,这可以通过mmap和/或的新标志来改变mprotect。希望它可以被设计成在旧系统上运行新的二进制文件可以获得常规的回写内存(因此仍然可以工作,但没有安全优势)。

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

于 2018-07-25T12:40:24.807 回答