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.