在 Spectre 中paper ,有一个利用越界数组访问的示例(第 1.2 节)。代码是
if (x < array1_size)
y = array2[ array1[x] * 256 ];
这个过程是用一些有效的x
来训练正确的路径。值(value)观。然后是无效值x
给定,同时假设 arra1_size
未缓存。由于分支预测器认为条件为真,因此它将推测性地获取 array2 的偏移量。
现在,问题来了。在推测执行中,它必须获取 array1[x]
其中 x 是恶意的并且超出范围。所以,array1[x]
实际上是无效的!那攻击又是什么?!未获取有效数据!
谁能帮我解释一下吗?这里有什么误解吗?
最佳答案
So, array1[x] is actually invalid! Then what is the attack?! no valid data is fetched!
这就是攻击的要点。索引(即x
)可能很大,因此我们能够访问我们不应该访问的数据。
例如,如果我们的代码位于 JavaScript 沙箱或 Java 虚拟机中,我们将能够访问沙箱/虚拟机之外的数据。
更重要的是,推测执行可能会访问内核页面,即我们无权访问的页面。这就是崩溃。
这是我的基于 Spectre 的 Meltdown 概念证明,只有 99 行,您可能会发现更容易理解:
关于security - Spectre 例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130274/