代码之家  ›  专栏  ›  技术社区  ›  Domso

带设备存储器的幽灵

  •  1
  • Domso  · 技术社区  · 8 年前

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

    两者都有 x86 ARM 存在一种在特定内存页上禁用高速缓存/推测访问的方法。所以任何侧通道攻击( 幽灵 , meltdown )在这些记忆区域应该是不可能的。所以,为什么我们不使用它来防止侧通道攻击,将所有安全信息(密码、密钥等)存储到缓慢但安全的(?)内存区域,同时将不安全的数据放入快速但不安全的正常内存?这些页面上的访问时间将减少一个很大的因素(~100),但内核修复也不便宜。所以,也许仅仅降低一些内存页的性能比稍微降低一些内存页的性能更快?

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

    所以我的问题是

    1. 使用“设备”内存页真的能防止这种攻击吗?
    2. 它的缺点是什么?(除了明显的性能问题)
    3. 这种用法有多实用?
    1 回复  |  直到 8 年前
        1
  •  1
  •   Peter Cordes    8 年前

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

    另外,在Linux上,即使您想分配一页UC内存,也不能在用户空间进程中分配。当然可以换个新旗子 mmap 和/或 mprotect . 希望它的设计能够使在旧系统上运行新的二进制文件能够获得常规的写回内存(因此仍然可以工作,但没有安全优势)。

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