问题标签 [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.
security - 什么是 retpoline,它是如何工作的?
为了缓解内核或跨进程内存泄露(Spectre攻击),Linux 内核1将使用一个新选项进行编译,-mindirect-branch=thunk-extern
引入以gcc
通过所谓的retpoline执行间接调用。
这似乎是一个新发明的术语,因为谷歌搜索只出现在最近的使用中(通常都是在 2018 年)。
什么是 retpoline,它如何防止最近的内核信息泄露攻击?
1但是,它不是特定于 Linux 的 - 类似或相同的构造似乎被用作其他操作系统缓解策略的一部分。
security - Spectre 攻击如何读取它欺骗 CPU 加载的缓存?
我理解论文中他们欺骗 CPU 以推测性地将受害者内存的一部分加载到 CPU 缓存中的部分。我不明白的部分是他们如何从缓存中检索它。
security - 幽灵示例
在 Spectre论文中,有一个利用越界数组访问的示例(第 1.2 节)。代码是
该过程是用一些有效值训练正确的路径x
。然后给出一个无效的值,x
同时假设arra1_size
是未缓存的。由于分支预测器认为条件为真,它会推测性地获取 array2 的偏移量。
现在,问题来了。在推测执行中,它必须获取array1[x]
x 是恶意的并且超出范围的位置。所以,array1[x]
其实是无效的!那么攻击是什么?!没有获取有效数据!
谁能为我解释一下?这里有什么误解?
memory - 了解 Spectre 和内存寻址
首先声明:我不打算破解任何人,我只是想在我自己的机器上看到这个漏洞。
我已经在 x64 Windows 10 上的 VS2017 中编译了 Spectre 示例。
该示例在从其自己的进程内存中读取时有效,但如果我尝试从我的测试应用程序中读取,我只会得到零字符串或其他类似字符。
测试应用:
我启动应用程序并将地址复制粘贴到 Spectre 命令行,但我没有得到字符串。
我不知道 Windows 10 是否已经打过补丁?
但我也尝试过一段时间未更新的 Ubuntu 17.04,结果相同。
我的方法有问题吗?
caching - Meltdown 和 Spectre 有什么区别?
最近发现的硬件漏洞 Meltdown 和 Spectre 之间的主要区别是什么?我知道它们都依赖于推测执行,但是它们之间有什么不同呢?
arm - ARM MPU 嵌入式软件中的 Spectre 和 Meltdown
考虑基于 ARM Cortex-A8 或 M4 系列 CPU 和目标操作系统 RTOS 或嵌入式 Linux 的嵌入式系统的情况。Spectre 和 Meltdown 是否都会影响此类不允许安装或执行用户外部应用程序的系统?感谢你的回答。
javascript - 阅读有关幽灵的信息。我可能需要对我的代码进行哪些更改?
我阅读了有关Spectre (CVE-2017-5753) 的信息,但不清楚它实际上如何影响日常程序员?我读了几篇文章,但我仍然不确定它是否会破坏我的任何旧项目或现有代码。很高兴知道在尝试适应 Spectre 引入的有关浏览器如何处理 JavaScript 的变化时我应该注意什么。
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 沙箱或从应用程序无法使用的任何内存中读取内容。
cpu-architecture - 针对 Spectre 和 Meltdown 的 CPU 重新设计
已经发布了很多补丁来修复最近发现的 Spectre 和 Meltdown 安全漏洞。然而,他们都通过禁用 cpu 上某些功能的使用来做到这一点(据我所知)。
所以我想知道被禁用的(预测)功能是否可能会在下一代处理器中恢复?
需要对 cpu 架构进行哪些设计更改?未来还能使用相同的预测算法还是需要对其进行调整?
我正在寻找技术解释,有哪些选项可以恢复预补丁性能并确保功能安全。
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)?
- 让我们考虑一下我要求的所有其他“奖励”问题”,这些问题很值得了解,但对我的问题并不重要。