![]() |
1
3
崩溃攻击依赖于(推测性地)直接访问目标虚拟地址(从攻击过程中) 一 . 但幽灵不是。 你是最好的 支路预测器 因此,受攻击的代码会推测性地访问自己的虚拟地址空间,而这是它有权做的。 分支预测器别名意味着您通常/有时可以在无法/未映射的虚拟地址为分支预先进行预测。(例如,在内核中。) 通常的侧通道是缓存读取攻击,它基于在您自己的地址空间中逐出阵列的缓存。但是,其他的通道可以将幽灵数据从目标返回给攻击者,比如启动缓存,然后寻找哪个条目被冲突丢失的地址所驱逐 别名 一些内存在被攻击的进程中。(更难,因为现代x86 CPU中的L3缓存使用复杂的索引函数,而不像简单的缓存使用简单的位范围作为索引。但可能您可以使用L2或L1D未命中。 二级未命中/三级命中应仍然比二级命中长。 或者使用SMT(例如,超线程),一种ALU定时攻击,在这种攻击中,Spectre小工具创建与数据相关的ALU端口压力。在这种情况下,唯一相关的内存访问是受攻击的数据(这是硬件允许的,只有对分支的错误推测才会导致回滚,而不是加载错误)。 当攻击内核时,它将把攻击进程的物理内存页映射到某个地方。 . (大多数内核将所有物理内存映射到一个连续的虚拟地址范围,允许轻松访问任何物理地址。) 缓存基于物理地址,而不是虚拟地址。 通过同一页面的不同映射使缓存线变热的幽灵小工具仍然有效。
在系统调用的上下文中,内核通常将用户空间内存映射到进程内使用的相同虚拟地址。
,所以系统调用如下
Spectre小工具本身甚至可能在用户空间内存中,尽管使用单独的页表可以解决崩溃问题,但是通过将内核页表设置为在没有exec权限的情况下映射用户空间vas,可以减轻这种情况。 脚注1:meltdown是对页表中的u/s位的绕过,允许用户空间潜在地读取内核所映射的任何内存。是的,[1]是一个足够的解决方法。见 http://blog.stuffedcow.net/2018/05/meltdown-microarchitecture/ . |
![]() |
Christian Bouwense · 进程如何跟踪其局部变量 7 年前 |
![]() |
BeeOnRope · 在x86中是否允许访问跨越零边界的内存? 7 年前 |
|
Lee.HW · chrono库的实现 7 年前 |
![]() |
Zephyr · 虚拟索引物理标记缓存同义词 7 年前 |
![]() |
Uchia Itachi · VIPT缓存:TLB和缓存之间的连接? 7 年前 |