这个答案试图简单地解决主要问题。这里的细节可能不准确或不完整。如果可能,我会尝试链接到更详细的解释。
什么是投机执行,它有什么作用?
推测执行是现代处理器的一项优化功能。为了允许并行处理进入处理器流水线的指令,可以使用分支预测、值预测或内存预取等技术提前处理指令。然后可以乱序执行指令。
这是一种通过正确预测接下来会发生什么来赢得时间的方法,而不是让处理器保持空闲状态。当预测失败时,指令回滚。
熔毁和幽灵有什么区别?
Meltdown 漏洞利用在全球范围内比 Spectre 更容易实施。
Meltdown 利用乱序指令中的内存读取,Spectre 作用于分支预测机制。
Spectre 允许跨/内部进程内存泄露,Meltdown 允许将内核内存泄露给用户空间进程(通常不可访问)。
Meltdown 有一个已知的软件缓解措施。
两者都依赖于缓存侧通道攻击,这是在访问某些内存块以推断其他未知信息时测量时间差异的方法。
熔断是如何运作的?
简而言之,Meltdown 的工作原理是要求处理器加载用户空间程序不应访问的内存。内存以乱序方式读取并放入缓存中。对缓存使用侧通道攻击(执行时间测量),可以推断出该内存位置的值。
幽灵是如何工作的?
Spectre 在不同的级别上工作,不允许从用户空间访问内核空间数据。在这种攻击中,攻击者欺骗推测执行以错误地预测执行指令。简而言之,预测器被强制预测一个特定的分支结果(如果 -> true),这会导致请求受害进程通常不会请求的越界内存访问,从而导致错误的推测执行。然后通过旁路,检索此内存的值。这样,属于受害进程的内存就会泄露给恶意进程。
我该如何保护自己?
更新您的操作系统和/或管理程序。
主要的操作系统发行商已经发布了补丁来实现 KPTI/KAISER 行为。这是一种通过删除内核的用户内存映射来减少攻击面的一种方法,这些映射对于处理器运行并不是绝对必要的。
微码(固件)更新可能会在某个时候发布。
KPTI/KAISER 补丁是否足以保护我的计算机?
不,它只涵盖 Meltdown。
问题在于处理器的架构设计。要完全解决问题(甚至在 Spectre 的情况下部分解决),至少需要进行固件更新。处理器也有可能必须更换为没有此设计缺陷的更新型号。
该补丁声称会导致性能损失,这是真的吗?这意味着多少?
是的,但产生的损失取决于软件工作流程。声称它可能会造成 5% 到 30% 的损失,具体取决于您的软件对系统调用的依赖程度。据报道,具有高内核到用户空间转换的基准(例如数据库)受到的影响最大。
这仍在调查中,初步报告已作出(见链接)。但是,由于影响因应用程序而异,因此您应该在您的环境中测试性能影响,而不是依赖通用基准。
初步结果(独立??):
官方公告:
如果我担心性能损失,我可以/应该禁用新补丁吗?有哪些风险?
不,你可以,但绝对不推荐。
首先,如果您要管理来自他人的数据,您的客户就会容易受到数据盗窃的影响。
然后,仍然必须正确评估性能损失,并且高度依赖于您的特定工作流程。这不是性能直接下降30%。
如果您禁用 KPTI,您将面临机密数据泄露的风险。
哪些平台和哪些 CPU 易受攻击?
大多数Intel CPU都容易受到这两种攻击。AMD CPU 似乎只受 Spectre 的影响。一些ARM Cortex 处理器受到影响,而所有其他 ARM 处理器则不受影响。POWER 7、POWER 8 和 POWER 9 系列中的 PowerPC 处理器会受到影响,其他处理器可能会受到影响。
(有关详细信息,请参阅链接)。
我正在运行虚拟机/容器,我在多大程度上易受攻击?
根据Steffen Ullrich 的回答
- Meltdown 攻击不会跨虚拟机,只会将内核内存泄漏到本地进程。
- Spectre 可以跨虚拟机工作。
此外,Steffen 再次指出,Meltdown 和 Spectre 与容器一起工作,因为容器依赖于主机内核。
我可以在我的计算机上检测到 Meltdown/Spectre 攻击吗?
这是非常困难的,如果可能的话。
Meltdown 和 Spectre 都使用了 CPU 的设计属性,该属性始终由无害程序触发,使得恶意程序难以与良性程序区分开来。
这些攻击是远程代码执行漏洞吗?
不,他们不是。
为了能够应用这种攻击,攻击者需要能够在目标主机上执行代码。但是请注意,如果这些与其他攻击媒介(例如文件上传或跨站点脚本攻击)结合使用,则有可能远程执行它们。
我需要修补我的软件/网站吗?
在理想的世界里,没有。
实际上,一些浏览器供应商已经实施了降低时间精度测量以减轻侧信道攻击。KPTI 应该已经为使用本机系统调用的程序提供了足够公平的修复。
我在访问网站时会受到影响吗?
是的,已经有一个针对 Spectre 的 Javascript 漏洞利用的概念证明(仅)。
你能用一张图片解释一下吗?
不,但兰德尔·门罗可以:
[来源 XKCD : https://xkcd.com/1938/ ]