security - Spectre 例子

标签 security spectre

在 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 行,您可能会发现更容易理解:

https://github.com/berestovskyy/spectre-meltdown

关于security - Spectre 例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130274/

相关文章:

sql - 如何使用 ColdFusion 防止 SQL 注入(inject)

security - 刷新和重新加载缓存侧信道攻击

javascript - 使用 Service Worker 启用 COOP/COEP header : security concerns?

arm - Cortex-A8 乱序执行和 Spectre

security - 使用 content-disposition HTTP header 有哪些安全注意事项?

Java 8 Webstart 安全弹出窗口

javascript - 禁用 Mozilla Firefox 存储 javascript

c# - 将 C# RSACryptoServiceProvider 翻译成 JAVA 代码

linux - 使用分支预测器了解 Spectre 漏洞

javascript - 阅读有关《 Spectre 》的内容。我的代码可能需要进行哪些更改?