首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程如何在幽灵攻击中共享array2(甲骨文阵列)?

进程如何在幽灵攻击中共享array2(甲骨文阵列)?
EN

Stack Overflow用户
提问于 2019-01-02 09:55:12
回答 3查看 152关注 0票数 2

中,PoC将受害者和攻击者代码放置在同一个进程中。

代码如下:

代码语言:javascript
复制
if (x < array1_size)
  y = array2[ array1[x] * 256 ];

因此,攻击者和受害者可以使用相同的array2(因为它们在相同的代码、进程中)。

但是在现实世界中,攻击者和受害者是分开的(他们是不同的进程),所以他们不能共享array2

下面是我的问题,在本例中,攻击者如何度量对array2的访问时间?

攻击者如何知道array2的地址?

我不知道如何攻击者访问array2。这里被误解了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-21 22:34:13

问题中的代码引用了谱变体1,也称为边界检查绕行

这里被误解了什么?

与其从受害者进程和攻击者进程的角度考虑变体1,不如将其视为沙箱攻击者代码,其目标是读取沙箱外的内存。

换句话说,攻击者控制在软件沙箱中运行的一些代码,这个软件沙箱通常会强制每个代码域只访问自己的数据。然而,幽灵允许攻击者的代码绕过这种沙箱的执行。

例如,攻击者为恶意网站提供Javascript代码,该网站在执行时将由Javascript解释器进行沙箱化。Javascript解释器将检查诸如y = array2[ array1[x] * 256 ]这样的代码只有在x < array1_size时才能执行。这称为边界检查,用于确保网站不允许从运行它的浏览器进程的地址空间读取。执行时,攻击者(控制x)可以通过自己的代码训练分支预测器以获取分支if (x < array1_size),从而执行有条件的分支错误预测。最后,攻击者将x设置为期望的、超出范围的值,这将允许他们绕过沙箱的边界检查,并从浏览器进程的地址空间读取内存。总之,这里的攻击者控制一个(沙箱)网站的代码,幽灵允许他们读取打开网站的浏览器的内存(沙箱通常会阻止这一点)。

第二个例子使用eBPF,其中攻击者从Linux内核注入并执行一些代码。eBPF接口允许非特权用户这样做。这段代码通常在内核中的VM/沙箱中执行,它执行边界检查以防止加载的代码读取任意内存。但是,幽灵允许攻击者在BPF沙箱之外违反此沙箱并泄漏任意内存。总之,这里的攻击者是主机的非特权用户,幽灵允许他们读取主机上的任意内存!

但在现实世界中,攻击者和受害者是分开的(他们是不同的过程)。

在这种情况下不行。如上所述,在谱变体1中,“受害者的代码”将“攻击者的代码”封装在同一个过程中。攻击者的代码通常由受害者使用软件沙箱进行隔离,但是幽灵允许绕过它,读取受害者地址空间中的任何内存。

票数 0
EN

Stack Overflow用户

发布于 2019-05-17 17:06:29

要想在没有共享内存的情况下跨地址空间进行攻击,您需要一个不同的侧通道。

也许你会有幽灵小工具导致你的数组中的一条线被逐出,所以你必须有8条条目的时间组(在缓存中所有索引都是相同的),而不是一次1条,因为驱逐可能是集合中的任何一行。

票数 0
EN

Stack Overflow用户

发布于 2019-06-28 02:25:52

它是在没有共享内存的情况下完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54004254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档