问题标签 [spectre]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
86037 浏览

security - 什么是 retpoline,它是如何工作的?

为了缓解内核或跨进程内存泄露(Spectre攻击),Linux 内核1将使用一个新选项进行编译-mindirect-branch=thunk-extern引入以gcc通过所谓的retpoline执行间接调用。

这似乎是一个新发明的术语,因为谷歌搜索只出现在最近的使用中(通常都是在 2018 年)。

什么是 retpoline,它如何防止最近的内核信息泄露攻击?


1但是,它不是特定于 Linux 的 - 类似或相同的构造似乎被用作其他操作系统缓解策略的一部分。

0 投票
3 回答
1761 浏览

security - Spectre 攻击如何读取它欺骗 CPU 加载的缓存?

我理解论文中他们欺骗 CPU 以推测性地将受害者内存的一部分加载到 CPU 缓存中的部分。我不明白的部分是他们如何从缓存中检索它。

0 投票
3 回答
2423 浏览

security - 幽灵示例

在 Spectre论文中,有一个利用越界数组访问的示例(第 1.2 节)。代码是

该过程是用一些有效值训练正确的路径x。然后给出一个无效的值,x同时假设arra1_size是未缓存的。由于分支预测器认为条件为真,它会推测性地获取 array2 的偏移量。

现在,问题来了。在推测执行中,它必须获取array1[x]x 是恶意的并且超出范围的位置。所以,array1[x]其实是无效的!那么攻击是什么?!没有获取有效数据!

谁能为我解释一下?这里有什么误解?

0 投票
1 回答
530 浏览

memory - 了解 Spectre 和内存寻址

首先声明:我不打算破解任何人,我只是想在我自己的机器上看到这个漏洞。

我已经在 x64 Windows 10 上的 VS2017 中编译了 Spectre 示例。

该示例在从其自己的进程内存中读取时有效,但如果我尝试从我的测试应用程序中读取,我只会得到零字符串或其他类似字符。

测试应用:

我启动应用程序并将地址复制粘贴到 Spectre 命令行,但我没有得到字符串。

我不知道 Windows 10 是否已经打过补丁?

但我也尝试过一段时间未更新的 Ubuntu 17.04,结果相同。

我的方法有问题吗?

0 投票
3 回答
2860 浏览

caching - Meltdown 和 Spectre 有什么区别?

最近发现的硬件漏洞 Meltdown 和 Spectre 之间的主要区别是什么?我知道它们都依赖于推测执行,但是它们之间有什么不同呢?

0 投票
1 回答
182 浏览

arm - ARM MPU 嵌入式软件中的 Spectre 和 Meltdown

考虑基于 ARM Cortex-A8 或 M4 系列 CPU 和目标操作系统 RTOS 或嵌入式 Linux 的嵌入式系统的情况。Spectre 和 Meltdown 是否都会影响此类不允许安装或执行用户外部应用程序的系统?感谢你的回答。

0 投票
1 回答
160 浏览

javascript - 阅读有关幽灵的信息。我可能需要对我的代码进行哪些更改?

我阅读了有关Spectre (CVE-2017-5753) 的信息,但不清楚它实际上如何影响日常程序员?我读了几篇文章,但我仍然不确定它是否会破坏我的任何旧项目或现有代码。很高兴知道在尝试适应 Spectre 引入的有关浏览器如何处理 JavaScript 的变化时我应该注意什么。

0 投票
0 回答
184 浏览

exploit - Google Native Client (NaCl) 是否容易受到 Meltdown 或 Spectre 攻击?

我在易受Meltdown 和 Spectresel_ldr_x86_32 file32.nacl攻击的 Intel 机器上运行。sel_ldr_x86_64 file64.nacl

鉴于即使是JavaScript 也可以使用 Spectre,我很好奇 NaCl 的二进制文件是否可以。是否存在与 Meltdown 或 Spectre 相关的已知 NaCl 漏洞?NaCl 是否为二进制文件提供足够的能力来运行 Meltdown 或 Spectre?此类漏洞的示例包括逃离 NaCl 沙箱或从应用程序无法使用的任何内存中读取内容。

0 投票
1 回答
293 浏览

cpu-architecture - 针对 Spectre 和 Meltdown 的 CPU 重新设计

已经发布了很多补丁来修复最近发现的 Spectre 和 Meltdown 安全漏洞。然而,他们都通过禁用 cpu 上某些功能的使用来做到这一点(据我所知)。

所以我想知道被禁用的(预测)功能是否可能会在下一代处理器中恢复?

需要对 cpu 架构进行哪些设计更改?未来还能使用相同的预测算法还是需要对其进行调整?

我正在寻找技术解释,有哪些选项可以恢复预补丁性能并确保功能安全。

0 投票
1 回答
3631 浏览

security - 如何使用 GCC 和 Clang(或一般的 LLVM)减轻幽灵

微软/Qspectre为他们的 MSVC 编译器添加了一个方便的工具(尽管目前这似乎只是(试图)减轻 Spectre v1 的影响),它们将随着时间的推移而更新。从用户的角度来看,这非常好,只需启用该标志,您就可以获得他们存储的最新和最大的缓解措施。

使用 LLVM 和 GCC,它看起来有点不同。我认为他们的缓解措施尚未正式发布。

LLVM 应该获得一个-mretpoline编译器标志,通过返回蹦床来缓解 Spectre v2 的间接调用。

另一方面,GCC 的补丁添加了三个用于缓解 Spectre v2 的编译器选项:

  • -mindirect-branch可以设置为thunk. 据我了解,这会为每个间接调用创建 retpolines。
  • -mfunction-return可以设置为thunk. 我想这将这些 retpolines 用于每个函数返回,这对于 Skylake 可能是必要的,因为这些处理器也可以预测返回?
  • -mindirect-branch-register这使用寄存器而不是堆栈来存储间接调用的地址?

所以我很困惑。什么编译器选项可以缓解用户空间应用程序在什么情况下需要它们?

通常打开它们是个好主意吗?如果为甚至没有任何推测执行的处理器架构(如微处理器)编译,它们是否也会生成这些 retpolines?

幽灵v1怎么样?

更新:

让我问更精确的问题:

  • 我对编译器选项的理解是否正确?
  • GCC 选项是在任何地方应用还是仅在具有推测执行的处理器上应用?
  • LLVM 选项是在任何地方应用还是仅在具有推测执行的处理器上应用?
  • 这些选项究竟能缓解什么(它们是否完全缓解了 Spectre v2)?
  • 让我们考虑一下我要求的所有其他“奖励”问题”,这些问题很值得了解,但对我的问题并不重要。