问题标签 [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 投票
0 回答
79 浏览

arm - Arm Cortex-A8 程序流预测

我正在检查 ARM-Cortex A8 流预测能力,为了做到这一点,我实现了以下代码:

在上面的代码中,我将执行 8 次条件为真的 if 语句来训练 CPU 的分支预测器,在第 9 次我希望 cpu 可以推测性地访问 SecretDispatcher[9 * 512],但条件不正确。这只是简单的 Spectre-v1 PoC 攻击,我在 Intel X86 处理器上以相同的逻辑成功实施了这种攻击,我希望这项工作也可以在 Cortex-A8 中工作,因为 arm 澄清该处理器容易受到这种攻击。

有什么我想念的吗?我应该做些什么来启用 ARM-Cortex A8 上的程序流预测?

0 投票
1 回答
174 浏览

arm - Cortex-A8 乱序执行和 Spectre

我正在阅读有关 ARM Cortex-A8 处理器的信息,发现该处理器不支持乱序执行。但是,在https://developer.arm.com/support/arm-security-updates/speculative-processor-vulnerability中, Arm 澄清说 Cortex-A8 容易受到 Spectre-v1 和 Spectre-v2 攻击。

我想知道如何在没有乱序执行的情况下实施 Spectre 攻击。谁能帮我找出原因?

0 投票
0 回答
50 浏览

assembly - X86 中的 Melt-Down 攻击实现

下面的代码是崩溃攻击的一部分,我无法理解它在做什么,谁能解释一下下面的代码在做什么。

0 投票
1 回答
4742 浏览

visual-studio-2019 - 要在 VS2019 中使用 WDK,应该安装哪个 Spectre-mitigated 库

在 VS2019 中使用 WDK 时,出现此构建错误:

错误 MSB8040:此项目需要 Spectre-mitigated 库

VS2019 设置中有很多项目包含“幽灵”。

https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk#wdk-for-windows-10-version-1903说:

对于您打算为其构建驱动程序的每个架构,请通过单个组件 -> 编译器、构建工具和运行时 -> MSVC v142 - VS 2019 C+ x64/x86 Spectre 缓解库 (v14.21) 安装 Spectre 缓解库。

https://developercommunity.visualstudio.com/content/problem/746245/spectre-mitigated-libraries-are-required-for-this.html

我认为您需要安装以下组件: MSVC V142 - VS 2019 C++ x64/x86 Spectre-mitigated libs (v14.xx) C++ ATL,用于最新的 v142 构建工具和 Spectre-mitigations (x86 & x64) C++ MFC,用于最新的 v142 构建具有 Spectre-mitigations 的工具(x86 和 x64)

安装哪个?

0 投票
3 回答
294 浏览

c - 程序完成时分支预测器条目失效?

我试图了解分支预测器条目何时失效。

以下是我做过的实验:

代码1:

因此,我多次运行此代码。我可以看到,在第一次运行之后,误预测率降低了。分支预测器学习如何正确预测。但是,如果我一次又一次地运行这个实验(即通过写入./experiment终端),所有的第一次迭代都是从高误预测率开始的。因此,在每次执行时,这些分支预测单元都会conditional branches失效。我正在使用nokaslr并且我已禁用ASLR. 我也在一个独立的核心上运行这个实验。我已经运行了几次这个实验以确保这是行为(即不是因为噪音)。

我的问题是:程序停止执行后 CPU 是否会使分支预测单元失效?或者这是什么原因?

我做的第二个实验是:

代码 2:

在这个实验中,我从两个不同的终端运行不同的进程。第一个固定在core 1这样它就可以在核心 1 上运行,它会做这个实验,直到我停止它(通过杀死它)。然后,我从另一个终端运行第二个进程,并将该进程固定到不同的核心。由于这个进程在不同的内核中,它只会执行 do-while 循环 1 次。如果第二个进程被固定到第一个进程的兄弟核心(相同的物理核心),我看到在第一次迭代中,第二个进程几乎正确猜测。如果我将第二个进程固定在另一个不是第一个进程同级的内核上,那么第二个进程的第一次迭代会产生更高的错误预测。这是预期的结果,因为同一物理内核上的虚拟内核共享相同的分支预测单元(这是我的假设)。所以,

据我了解,由于 CPU 没有完成第一个进程(执行繁忙循环的核心 1 进程),分支预测条目仍然存在,第二个进程可以从中受益。但是,在第一个中,从一个运行到另一个运行,我得到了更高的错误预测。

编辑:正如其他用户要求的代码,这里是。您需要从此处下载性能事件标头代码

编译:$(CXX) -std=c++11 -O0 main.cpp -lpthread -o experiment

编码:

如果您想尝试第一个代码,只需运行./experiment 1两次。它将与第一个代码具有相同的执行。

如果您想尝试第二个代码,请打开两个终端,./experiment X在第一个中运行,然后./experiment Y在第二个中运行,其中 X 和 Y 是 cpuid 的。

请注意,您可能没有相同的性能事件计数器。另外,请注意您可能需要更改busyloop 中的cpuid。

0 投票
2 回答
850 浏览

linux - 如何在 raspbian 中发送内核命令行参数

我需要在 raspbian os 中发送内核命令行参数来关闭 Spectre/meltdown 补丁。据我所知,我们可以通过“/etc/default/grub”文件通过更改“GRUB_CMDLINE_LINUX=”在其他 Linux 发行版中执行此操作。但在 raspbian os 中,该文件不存在,甚至“grub-update”命令和“grub-mkconfig”也没有安装。

谁能告诉我如何在 raspbian os 中传递内核命令行参数?

0 投票
0 回答
24 浏览

spectre - 为什么降低 Spectre V1 攻击的带宽会禁用攻击

我正在做一些降低幽灵带宽以建立规避攻击的实验。但是,当我达到一定的带宽时,就没有泄漏。为了降低带宽,我注入了安全指令,在攻击的原始阶段之前一次又一次地读取某个地址。

我使用原始的 Spectre v1 PoC。Spectre V1 只依赖于一个分支历史条目的状态和一个缓存行的状态,我确信我添加的安全代码不会篡改这些状态​​,因为它只是读取一个独立的地址。但是,当我使用这种方法暂停迭代时,攻击所需的微架构状态会以某种方式丢失,但我不知道如何准确解释它,因为我没有中断 Spectre 的主要原子任务,并且注入的指令在之前和幽灵阶段完成后。

我还尝试让代码进入睡眠状态并观察到同样的情况;带宽减少 75% 后攻击禁用。

以下论文指出,应该可以以高成功率降低带宽: 链接到论文。我应用了与他们报告的构建规避攻击的最佳方法相同的技术(在原子任务之前插入安全代码),但无法将带宽降低到低于原始 PoC 的 75%。

我很欣赏为什么当我达到一定水平的较低带宽时幽灵可能会被禁用的任何见解。

0 投票
1 回答
1254 浏览

assembly - 是否可以为单个 ret 指令暂时抑制英特尔 CET,或者以其他方式使用 retpolines?

英特尔 CET(控制流执行技术)由两部分组成:SS(影子堆栈)和 IBT(间接分支跟踪)。如果您需要间接分支到endbr64由于某种原因无法放置的地方,您jmp可以call使用notrack. 是否有等效的方法来抑制单个ret指令的 SS?

对于上下文,我正在考虑这将如何与 retpolines 交互,其关键控制流或多或少类似于push real_target; call retpoline; pop junk; ret. 如果没有办法为此抑制 SS ret,那么在启用 CET 时是否有其他方法可以让 retpolines 工作?如果没有,我们会有什么选择?我们是否需要为所有东西维护两组二进制包,一组用于需要 retpolines 的旧 CPU,另一组用于支持 CET 的新 CPU?如果 Intel 证明是错误的,我们最终仍然需要在他们的新 CPU 上进行 retpolines 怎么办?我们是否必须放弃 CET 才能使用它们?

0 投票
0 回答
143 浏览

websecurity - 为什么需要跨域隔离和CORB/CORP?

使用的缩写:

  • CORP:跨域资源策略
  • CORS:跨域资源共享
  • CORB:跨源读取阻塞
  • SSCA:投机侧信道攻击,如 Spectre

看了这篇文章,还是不明白为什么需要跨域隔离和CORB/CORP。具体来说:

  • 如果网页可以在不使用跨域隔离功能(如SharedArrayBuffer)的情况下执行 SSCA,这就是 Chromium 的假设

    • 为什么需要跨域隔离才能访问这些功能?
  • 否则,如果网页在不使用跨域隔离功能的情况下无法执行 SSCA:

    • 为什么需要 CORB 和 CORP?

另外,由于网页可以使用跨域隔离功能执行 SSCA,那么使用Cross-Origin-Resource-Policy: cross-origin和之间有什么区别Access-Control-Allow-Origin: *,因为 SSCA 可以通过嵌入资源来读取数据并且Access-Control-Allow-Origin: *不需要它?

0 投票
2 回答
2524 浏览

security - Flush & Reload 缓存侧通道攻击

我试图了解 Flush + Reload 缓存侧通道攻击。据我所知,攻击利用了可以将非特权数据加载到缓存中的事实(利用分支预测、推测执行等)。然后,攻击者使用探针阵列来访问内存,快速加载的内存被假定在缓存中(秘密数据的一部分)。

我发现不清楚的一件事是攻击者如何能够遍历作为非特权内存的虚拟内存?例如 - 迭代内核虚拟内存或其他进程的内存。