Raspberry Pi是否容易受到Spectre或Meltdown攻击的影响?


58

发现了两个新的严重安全漏洞,即Spectre和Meltdown。

Raspberry Pi是否容易受到幽灵和/或崩溃的影响?


1
据研究人员称:目前,尚不清楚ARM和AMD处理器是否也受Meltdown影响。
— Janghou

1
有一个示例,您可以在浏览器(Chrome / Firefox)中使用Java脚本窃取密码。
— Janghou

4
@ alex2003super:不要害怕。尽管受影响的设备规模惊人,但实际上以任何实际方式受到此问题影响的几率都非常低。即使他们没有这么做,但抓狂也无济于事。:)
— 轻轨赛将于

1
看来,他们是不容易,这里是关于这个主题的一篇文章raspberrypi.org/blog/...
— 奥马尔Elabd

5
您可能会发现此帖子有趣:raspberrypi.org/blog/…–
— pfm

Answers:


61

根据ARM本身,Pi 4之前所有型号中使用的处理器内核都不易受到攻击。

大多数Arm处理器不受此侧通道推测机制的任何变化的影响。可以在下面找到有关Arm设计的处理器的子集的明确列表。[请参阅表格链接]

较早的Pis使用的处理器核心是:

以上任何一个内核都没有被列出容易受到任何版本的攻击(实际上,根本没有列出它们,因为这些攻击没有已知的漏洞)。

的覆盆子裨4使用的Cortex-A72,其被列为容易变体1,2,图3a和4中所述是对树莓裨4易受幽灵攻击?,Raspbian包含针对这些漏洞的软件缓解措施,因此被利用的风险应该较低。其他操作系统可能没有适当的缓解措施,尽管ARM表示已为Cortex-A72发布了硬件缓解措施,但尚不清楚这是否已应用于Pi 4。

请注意,变体1和2(CVE-2017-5753和CVE-2017-5715)被称为Spectre,而变体3(CVE-2017-5754)和3a(ARM研究的相关攻击)被称为Meltdown。因此,没有人认为Pi 4之前的Raspberry Pi设备容易受到Spectre或Meltdown的影响。


我想知道其他架构所需的Linux内核更改是否会推送到Raspberry Pi上运行的Linux版本吗?可能这些更改会使系统变慢,因此即使不需要补丁,RP也可能会受到影响。
— 鲍比·杜勒特

4
内核补丁会检测到它正在运行的处理器,如果不是受影响的型号,则会自动禁用自身。此外,Raspberry Pi(和大多数其他单板计算机)的内核是为可用的硬件专门构建的,维护人员没有理由包括或启用有问题的补丁。
— 珀金斯

1
@BobbyDurrett,对内核的Meltdown更改位于代码库特定于x86的部分。与Spectre有关的更改无处不在,但是大多数更改都在代码的特定于处理器的部分中,或者由编译器处理。某些内容(例如,网络代码的结构更改)可能会泄漏到Pi中,但大多数不会。
— 马克

感谢您的评论。考虑一下Linux内核代码的哪些部分特定于处理器是很有趣的。我猜想在一个运行于许多不同类型CPU的操作系统上,您必须出色地分解出每个处理器专用的代码。
— 鲍比·杜勒特

22

Pi(所有版本)不容易受到攻击。

Spectre和Meltdown都需要乱序执行。早期Pi 2中使用的Cortex-A7和后期Pi 2和Pi 3中使用的Cortex A53是严格按顺序排列的体系结构。Pi 1中使用的ARM11出现了部分故障,但不允许Spectre或Meltdown正常工作。

ARM证实了这一点:只有极少数的ARM处理器子集具有使其容易受到Spectre攻击的硬件,更有限的子集易于受到Meltdown的攻击,并且据信所有这些处理器都可以缓解威胁。


10

我想对此提出不同的看法。

关于Meltdown,这在某些处理器中是一个非常特殊的漏洞,因此如果ARM表示Raspberry Pi中的CPU不易受攻击,则它可能会受到信任。

但是,Spectre是一个更普遍的漏洞。到目前为止,仅展示了两个变体,但我敢肯定还有更多变体。CPU中的故障是执行上下文切换时分支预测器状态没有刷新,并且分支预测器状态由分支指令地址的低位索引,并且根本没有标记。因此,即使跨越过程边界,您也可能有两个分支共享相同的分支预测变量状态。

我非常有信心,所有Raspberry Pi型号中的CPU都几乎与那里的所有其他CPU相似,因为分支预测变量只是一大堆2位饱和计数器(强采用,弱采用,弱不采用,强不采取)。该数组的索引是分支指令地址的低位,并且没有标签,并且永远不会清除此预测变量状态。

现在,如果两个分支共享相同的预测变量状态,则可以测量特定分支在最近的过去采取的方式。因此,Spectre的信息泄漏就在那里!如果您可以可靠地触发浏览器对您的密码执行一些来自JavaScript的代码分支,并测量分支经过的方式,那么您确实可以提取密码。现在这是一个极端的例子,没有人理智地以可以从JavaScript触发的方式在密码的每一位上分支,但这证明了问题所在。

不要相信ARM所说的一切。ARM的意思可能是Google开发的漏洞利用方法不适用于这些ARM CPU。这并不意味着它们将对Spectre不可侵犯。其他某种利用方式也可能起作用。

请参阅以下问题:https : //security.stackexchange.com/questions/176678/is-branch-predictor-flush-instruction-a-complete-spectre-fix,并了解其答案的含义。在浏览器中运行的恶意JavaScript代码可能会由于Spectre来衡量进程中其他分支的走出方式。甚至分支预测变量刷新指令也无法解决这个恶意的JavaScript问题,除非浏览器在运行不受信任的代码之前主动刷新分支预测变量。

幽灵将与我们在一起非常长的时间,因为使用14位作为索引的分支预测变量不会被32位地址空间的其余18位标记,因为这将需要20位(2位饱和计数器) ,18位标记),而不仅仅是2位。这会将分支预测变量的大小乘以10!我期望CPU制造商添加一条分支预测变量刷新指令,该指令甚至可以在没有特殊特权的用户空间中工作,而内核在上下文切换时可以使用它,而在用户空间中运行不受信任的JIT代码时可以使用它。这将在实践中解决大多数“幽灵”问题,但从理论上讲,并不是全部。


“ 现在,如果两个分支共享相同的预测变量状态,则可以测量特定分支在最近的过去采取的方式。 ”如何在不进行推测性执行的情况下执行此操作?
— 彼得·泰勒

@PeterTaylor这些ARM CPU具有分支预测器,因此具有推测性执行。他们缺少的是乱序执行。
— juhist

它们被记录为具有推测性指令获取,但这不是推测性执行。很公平的一点是,仍然有可能将其用作Oracle。
— 彼得·泰勒

即使是推测性提取也足够了,因为会有微小但可测量的延迟差异。
— juhist

Linux已经在增加内核地址随机化了。您无法预测分支机构的地址。
— MSalters
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.