什么是熔毁安全漏洞? 熔毁,也称为恶意数据缓存负载,是一种安全漏洞,通过允许某些恶意进程读取内存(即使未经授权),影响英特尔x86、IBM Power和ARM类型的微处理器。 利用竞争条件,此漏洞允许进程绕过正常的权限检查,该权限检查阻止进程访问属于其他进程的数据,并允许未经授权的进程从映射到当前进程内存空间的任何地址读取数据。因此,来自未经授权地址的数据被加载到CPU的缓存中,处理器可以从那里轻松执行数据,即使特权检查器以某种方式识别试图访问RAM中其他地址的恶意进程。恶意进程也可能有效读取任何物理、内核或任何其他进程的映射内存,即使它可能没有这样做的权限。
熔毁剥削是如何运作的? 熔毁利用了CPU设计中固有的以下特性:
- 虚拟内存
- 特权级别
- 指令流水和推测执行
- CPU缓存
以上特性为所有现代CPU的工作方式提供了基础,并被认为是安全的。然而,熔毁利用了它们之间的相互作用。以下几点解释了利用机制:
- 为了最大限度地提高效率,操作系统的虚拟地址空间没有权限控制检查。控制机制受委托进行CPU权限控制。和其他进程一样,rogue进程也被分配了一些地址空间。
- 如果一个进程试图从未经授权的内存中读取数据,读指令将由CPU调度和流水线处理。在允许指令产生任何输出之前,权限检查将在其他地方完成。在未经授权读取的情况下,执行单元将被告知该指令未通过权限检查。
- 在指令执行的早期阶段,CPU的调度程序安排了两个事件——权限检查和执行指令的第一步。作为其中的一部分,在等待特权检查完成时,执行单元开始获取数据。在流氓进程的情况下,数据来自未经授权的地址,但在指令执行的初始阶段,内存控制器仍会获取数据,即使在特权检查完成并失败时,数据被丢弃和放弃。
- 尽管指令失败,但数据已经被执行单元请求并由内存控制器提取,以便准备处理它,尽管执行单元在特权检查失败时丢弃数据,但CPU缓存实际上是从内存提取数据的自动部分,以防第二次可能需要相同的数据。此时,熔毁开始了。
- 通过使用缓存定时侧通道攻击,恶意进程可以确定特定地址的数据是否保存在CPU缓存中,即使它自己无法从那里读取实际数据。
- 如果CPU缓存了某个地址的数据,则读取该地址的第二条指令将使用CPU缓存(快速),否则CPU将不得不请求从内存中读取数据(较慢)。流氓进程可以利用这种时间差来检测发生了哪种情况,以及地址是否已经在CPU缓存中。Meldown可以将其与CPU指令集的其他功能结合使用,以获得对所有映射内存的完全访问。
处理器供应商如何解决此漏洞? 该漏洞于2018年初被发现,在整个处理器制造行业以及几家硬件/软件公司引发了大量恐慌。因此,为了应对这场危机,英特尔。AMD、Snapdraggon等公司为自己的产品发布了不同的补丁。然而,它们都松散地实现了相同的缓解策略,称为内核页表隔离,它将用户空间和内核空间页表完全分离。一组页表包括与以前相同的内核空间和用户空间地址,但它仅在系统以内核模式运行时使用。在用户模式下使用的第二组页表包含一个用户空间副本和一组最小的内核空间映射,这些映射提供了进入或退出系统调用、中断和异常所需的信息。 尽管KPTI使设备不受熔毁问题的影响,但它也导致了性能损失,一些英特尔处理器的性能损失高达30%。不过,英特尔已向消费者保证,发布的性能将随着时间的推移而固定。 为了帮助最终用户不受新发现的漏洞的影响,还发布了一些准则,其中包括定期更新软件、不点击未识别的超链接,以及不从不可信来源下载软件或文档。
工具书类 : https://en.wikipedia.org/wiki/Meltdown_(安全漏洞) https://meltdownattack.com/