1月2日,Google Project Zero 在博客发文公布了一系列CPU漏洞信息,其中就包括在外网及云计算供应商中引起轩然大波的 Meltdown:该漏洞由硬件设计引发,在同一物理空间的虚拟用户A可以任意访问到另一个虚拟用户B的数据,包括受保护的密码、应用程序密匙等,该漏洞需要进行OS级别修复,同时将导致严重的性能下降。。。
漏洞详情
Meltdown 技术可以读取 Linux、Mac OS 的整个物理内存和 Windows 的大部分物理内存。Linux 内核 2.6.32 ~ 4.13.0 的版本以及最新的 Windows 10 均受到影响。
可以读取其他进程的物理内存。即使在使用内核共享技术(例如 Docker, LXC)或者用 Xen 芯片的 paravirtualization 功能制作的沙箱中,也可以读取内核或 hypervisor 内存。
影响了大部分从 2010 年开始生产的 Intel 芯片。在 ARM 和 AMD 芯片上的实验没有成功。
漏洞根本原因是“预测执行”技术的设计缺陷。
漏洞原理
为了提高处理效率,当代处理器内嵌有预测技术:通过预测下一条指令,处理器可以填满内部流水线,充分发挥运作效率。Intel的推测执行(Speculative Execution)技术是业界标杆水平,行业内所有公司都在向Intel靠拢,但是这个漏洞说明Intel的推测性执行在芯片内部的访存执行单元Load/Store Unit和重排序缓冲区ROB上存在安全检查漏洞,导致操作系统核心的安全保护出现问题,使得用户程序可以窥测内核数据,包括系统访问历史记录,密码等等隐私,同时会造成KASLR(Kernel Address Space Layout Randomization,内核位址空间布局随机化)的无效化,导致攻击者可以推断出内核地址,进而发动攻击控制控制整个系统,造成严重的安全风险。受影响用户包括服务器环境、PC环境和移动环境。
该漏洞使得攻击者可以通过构造一段代码完成如下的利用过程:
使得一句需要访问受保护内存的指令本来永远无法达到,但是可能因为“预测执行”而提前执行。
该代码根据受保护的数据内容不同而访问内存中的不同位置。(例如如果 data 是想破译的数据,那么 prob_array[data*4096] 会根据 data 的不同而访问不同的内存页)。
芯片发现权限不足,因此回滚之前的操作,将状态恢复到那条指令执行之前的情况。然而,CPU 中的内存缓存没有回滚。
攻击程序检测 prob_array 中的每个内存页取回数据的时间。如果某内存页的取回时间很短,说明该页在缓存中,是之前刚刚访问过的页面。从这个页面的下标就可以推断出 data 是什么。
如何修复
目前该漏洞的解决方案方案只有两个:进行OS级别修复或者购买重新设计的CPU。至关重要的一点是,OS级别的修补措施会对 Linux 和 Windows 系统在 Intel 处理器上的运行性能造成影响。
目前 Linux 系统已经修复该漏洞,采用的方案被称为内核页表分离。主要功能是通过KPTI(Kernel Page Table Isolation)完全分离系统内核与用户内存,让系统使用另外一个分区表,使得用户程序无法访问系统内核。
漏洞影响
性能影响:
KPTI会导致CPU频繁地从内核模式切换到用户模式,引发耗时的TLB缓存刷新,拉低系统效能。根据初步测试,Intel CPU效能会降低5%-30%,相当于回退1~2代。举例来说,第八代的酷睿CPU打上补丁后的效能可能低于同档次的第七代的酷睿CPU。
目前phoronix已对此进行了测试,IO性能几乎下降了50%,编译性能下降了接近30%,postgresql和redis也有差不多20%的性能下跌。
个人用户:
对于个人用户来说,本次漏洞在大部分使用场景下的影响并不严重, CPU 性能下降带来的换机需求除外。。。。。。
云计算服务商:
本次的漏洞会影响所有的云厂商,包括但是不限于Amazon、Microsoft、Google等巨头。
如果漏洞被利用,那么在同一物理空间的虚拟用户A可以任意访问到另一个虚拟用户B的数据,包括受保护的密码、应用程序密匙等。让人担心的是,已经有迹象表明有黑客在利用本漏洞攻击云系统。短期来看,云厂商的服务成本或有较大提升。
由于云平台应用了大量的虚拟化技术,这些补丁比针对个人电脑的补丁更为复杂,由于云厂商的服务器拥有极高的数据吞吐,补丁对服务器系统效能的影响会比对PC更为严重。
运维工程师:
对于运维工程师而言,当务之急是将Linux系统内核升级至最新版,防止即将到来的一大波攻击。
未来一段时间服务器性能下降不可避免,运维工程师需要提前做好准备。
本文由Python头条团队原创整理,转载请保留出处。
领取26集Python入门视频教程
领取专属 10元无门槛券
私享最新 技术干货