📜  Meltdown 安全漏洞

📅  最后修改于: 2021-10-21 05:59:22             🧑  作者: Mango

什么是 Meltdown 安全漏洞?
Meltdown,也称为 Rogue Data Cache Load,是一种安全漏洞,通过允许一些恶意进程读取内存,甚至未经授权,影响 Intel x86、IBM Power 和 ARM 类型的微处理器。
利用竞争条件,此漏洞允许进程绕过正常权限检查,该检查防止进程访问属于其他进程和操作系统的数据,从而使未经授权的进程能够从映射到当前进程内存空间的任何地址读取数据.因此,来自未经授权地址的数据被加载到 CPU 的缓存中,从那里它可以很容易地被处理器执行,即使权限检查器以某种方式识别出试图访问 RAM 中其他地址的恶意进程。恶意进程也有可能有效地读取任何物理、内核或任何其他进程的映射内存,即使它可能没有这样做的权限。

Meltdown 利用如何运作?
Meltdown 利用了 CPU 设计中固有的以下特性:

  • 虚拟内存
  • 权限级别
  • 指令流水线和推测执行
  • CPU缓存

上述功能提供了所有现代 CPU 工作方式的基础,并且被认为是安全的。然而,崩溃利用了它们之间的相互作用。以下几点解释了利用机制:

  1. 操作系统的虚拟地址空间没有权限控制检查以最大化效率。控制机制委托给CPU权限控制。像其他所有进程一样,流氓进程也在这里分配了一些地址空间。
  2. 如果一个进程试图从未经授权的内存中读取,读取指令将被 CPU 调度和流水线化。在允许指令产生任何输出之前,权限检查将在其他地方完成。在未授权读取的情况下,执行单元将被告知该指令未通过权限检查。
  3. 在指令执行的早期阶段,CPU 的调度程序调度了两个事件——权限检查和执行指令的第一步。作为其中的一部分,在等待权限检查完成时,执行单元通过获取数据开始。在流氓进程的情况下,数据来自未经授权的地址,但在指令执行的初始阶段它仍然被内存控制器获取,即使在特权检查完成并失败时它被丢弃和放弃。
  4. 尽管指令失败,但数据已经被执行单元请求并被内存控制器获取,以便准备处理它,尽管执行单元在权限检查失败时丢弃数据,但实际上CPU缓存是作为从内存中获取数据的自动部分进行更新,以防第二次可能很快需要相同的数据。在这一点上,Meltdown 开始了。
  5. 通过使用缓存时序旁道攻击,流氓进程可以确定来自特定地址的数据是否保存在 CPU 缓存中,即使它本身无法从那里读取实际数据。
  6. 如果来自某个地址的数据已被 CPU 缓存,那么读取该地址的第二条指令将使用 CPU 缓存(快),如果没有,则 CPU 将不得不请求从内存中读取数据(更慢) .流氓进程可以使用这种时间差异来检测发生了哪些,以及地址是否已经在 CPU 缓存中。 Meltdown 可以将其与 CPU 指令集的其他功能结合使用,以获得对所有映射内存的完全访问权限。

    处理器供应商如何解决此漏洞?
    2018 年初发现的崩溃漏洞在整个处理器制造行业以及多家硬件/软件公司引起了极大的恐慌。因此,为了应对这场危机,英特尔。 AMD、Snapdraggon 等为自己的产品发布了不同的补丁。然而,它们都松散地实现了相同的缓解策略,称为内核页表隔离,它将用户空间和内核空间页表完全分开。一组页表包括内核空间地址和用户空间地址,与以前相同,但仅在系统运行在内核模式时使用。用于用户模式的第二组页表包含用户空间的副本和最小的内核空间映射集,提供进入或退出系统调用、中断和异常所需的信息。虽然 KPTI 使设备免受崩溃问题的影响,但它也导致了性能损失,一些英特尔处理器损失了高达 30% 的性能。但是,英特尔已向消费者保证,所发布的性能将随着时间的推移而修复。
    还发布了一些指导方针来帮助最终用户不受新发现的漏洞的影响,其中包括定期更新软件、不点击无法识别的超链接以及不从不受信任的来源下载软件或文档。

    参考资料:https://en.wikipedia.org/wiki/Meltdown_(security_vulnerability)
    https://meltdownattack.com/