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

Raspberry Pi是否容易受到Spectre和/或Meltdown的破坏?

评论

研究人员表示:目前,尚不清楚Meltdown是否还会影响ARM和AMD处理器。

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

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

看来他们并不脆弱,这是有关该主题的最新文章raspberrypi.org/blog/…

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

#1 楼

根据ARM自己的观点,Pi 4之前在所有型号中使用的处理器内核都不易受到攻击。 。可以在下面找到有关Arm设计的处理器的子集的明确列表。 [请参阅表的链接]


较早的Pis使用的处理器内核为:


Pi 1和零(W):ARM11
Pi 2 V1:ARM Cortex-A7
Pi 2 V1.2和Pi 3:ARM Cortex-A53

以上任何内核均未列出可受任何版本的攻击(实际上根本没有列出它们,因为这些攻击没有已知的漏洞)。

Raspberry Pi 4使用Cortex-A72,被列为容易受到变体1、2、3a和4的攻击。正如Raspberry Pi 4是否容易受到Spectre漏洞利用吗?软件可以缓解这些漏洞,因此被利用的风险应该较低。其他操作系统可能没有适当的缓解措施,尽管ARM表示已针对Cortex-A72发布了硬件缓解措施,但尚不清楚是否已将其应用于Pi4。

请注意,变体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也可能会受到影响。

– Bobby Durrett
18年1月4日在22:09

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

–珀金斯
18年1月4日在23:07

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

–马克
18年1月7日在7:17

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

– Bobby Durrett
18年1月8日在15:40

#2 楼

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

Spectre和Meltdown都需要乱序执行。早期Pi 2中使用的Cortex-A7和后期Pi 2和Pi 3中使用的Cortex A53是严格按顺序排列的体系结构。 Pi 1中使用的ARM11出现了部分故障,但不允许Spectre或Meltdown正常工作。这使它们容易受到Spectre的攻击,甚至更有限的子集也容易受到Meltdown的攻击,并且据信所有这些都可以缓解威胁。

#3 楼

我想对此表示不同的看法。

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

但是,Spectre是一个更常见的漏洞。到目前为止,仅展示了两个变体,但我很确定还有更多变体。 CPU中的故障是执行上下文切换时分支预测器状态未刷新,并且分支预测器状态由分支指令地址的低位索引,并且根本没有标记。因此,即使跨进程边界,您可能会有两个分支共享相同的分支预测器状态。分支预测变量只是大量的2位饱和计数器(强采用,弱采用,弱不采用,强不采用)。此数组的索引是分支指令地址的低位,并且没有标签,并且永远不会刷新此预测变量状态。

现在,如果两个分支共享相同的预测变量状态,您可以衡量特定分支在最近的过去采取了哪种方式。因此,Spectre的信息泄漏就在那里!如果您可以可靠地触发浏览器以从JavaScript上对您的密码执行一些代码分支,并测量分支经过的方式,则确实可以提取密码。现在这是一个极端的例子,没有人会理智地以一种可以从JavaScript触发的方式在密码的每一位分支,但这证明了问题。 ARM的意思可能是Google开发的漏洞利用方法不适用于这些ARM CPU。这并不意味着它们对Spectre而言是无敌的。其他一些利用方式也可能起作用。

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

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

评论


“现在,如果两个分支共享相同的预测变量状态,则可以衡量特定分支在最近的过去采取了哪种方式。”您如何在不进行投机执行的情况下做到这一点?

– Peter Taylor
18年1月5日在23:02

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

– juhist
18年5月5日在23:19

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

– Peter Taylor
18年1月6日在8:07

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

– juhist
18年1月6日在9:16

Linux已经在增加内核地址随机化了。您无法预测分支的地址。

– MSalters
18年1月7日14:01