世界上有没有一种安全漏洞,广泛存在于各种电子设备之中,破坏力极强并且难以被修复?2018年1月,Google Project Zero和一些独立安全研究人员发现了CPU芯片硬件层面漏洞Spectre和Meltdown,对业界产生了巨大冲击,似乎让世界又一次因为安全漏洞而陷入恐慌之中。因此,漏洞一经爆出,芯片厂商便在修复路上,不停与时间赛跑。截止目前,业内公认防御方案当属KPTI+SMAP+user-kernel isolation这套组合拳法。

然而,就在3月26日-29日于新加坡召开的Black Hat Asia 2019上,来自百度安全实验室的Yueqiang Cheng、Zhaofeng Chen、Yulong Zhang、Yu Ding、Tao Wei发表了关于Meltdown新变种创新性研究的议题报告,报告集中阐述了已有的Meltdown和Spectre攻击是如何被KPTI+SMAP+user-kernel isolation的组合防御技术所打败的,以及首度披露新型Meltdown变种,可以完全攻破这套防御组合。据悉,这也是业内首例能够完全攻破这套防御的最新变种。

“最强”防御组合拳法解析

处理器上有许多运算和执行单元,分别完成运算,逻辑,测试和访问等等各种功能,是计算机的大脑。为了提高性能,处理器采用了一种叫推测执行(Speculative Execution)的技术。

在分支指令发出后,相比传统处理器,具有预测性执行能力的处理器则会验证这些假设,如果假设有效,那么执行继续,如果无效,则解除执行,并处理其会根据实际情况开始正确的执行路径。但需要注意的是,处理器在处理指令时,并不是严格按照指令原顺序执行的,往往会结合指令的优先性进行排序,这就是说,处理器在指令执行时,会有乱序执行(Out-of-Order Execution)的情况发生。

而由于处理器访问主存的速度较慢,在处理器内部内置了多级缓存,以缓存最近访问的主存数据,方便处理器快速访问,这就是高速缓存技术。

就 Meltdown 而言,这种攻击方式主要利用的是当代处理器的乱序执行特性,可以在不需要进行系统提权的情况下,就读取任意内核内存位置,包括敏感数据和密码,甚至拿下整个内核地址空间。而spectre攻击,则是利用了处理器的分支猜测及高速缓存技术。

从理论层面来说,这组漏洞可以影响到 1995 年发布的处理器。由于这个漏洞是架构上的缺陷,无论你使用什么样的系统(Windows、IOS、Android)、什么样的设备(电脑、手机、服务器)都可能受到影响。而该漏洞严重的破坏力也不可小视,其将会造成CPU运作机制上的信息泄露,低权级的攻击者可以通过漏洞来远程泄露用户信息或本地泄露更高权级的内存信息。

本质上 Meltdown 和 Spectre 两类攻击方式造成的后果是“读取”系统任意地址空间的数据,由于大部分操作系统将所有内核数据都映射到了用户进程空间中,所以到目前为止,业内唯一认可有效的防御措施是通过强制内核隔离(KPTI)来尽可能避免用户进程映射内核中的数据,以此来防御“读取”内核数据的攻击。该解决方案在不同的平台上有不同的名称:Linux上的内核隔离(KPTI)、Windows上的内核虚拟地址(KVA)阴影和OS X上的双映射(DM)。

会议现场,来自百度安全的研究员们集中讲解了“组合拳法”的防御体系。KPTI/KVA/DM方案要求操作系统维护两个页表,一个页表给用户程序使用,一个给kernel使用,并且确保程序所使用的页表不会映射高优先级的页面,即不会映射kernel的页面。两个页表的切换,会导致CR3的重新加载,从而引起TLB刷新,进而降低内存的访问速度。如果某些应用场景需要大量的内核和用户空间切换(两个页表之间的切换),会造成较高的性能开销。为了降低这些性能开销,kernel需要使用充分的利用PCID特性,把TLB的刷新降低。

同时SMAP (Supervisor Mode Access Protection)也使得Spectre的变种(gadget在kernel space)不能成功获取kernel的数据。SMAP机制不允许内核访问用户地址空间。任何非法访问,都会触发CPU异常。

面对KPTI+SMAP+user-kernel isolation的最强防御组合,业内公认还没有任何攻击可以允许一个低特权级的应用程序获取内核数据。

百度安全发现最新Meltdown攻击变种

在本届Black Hat Asia 2019,百度安全发表的最新研究成果表明:存在新型变种v3z,允许恶意进程绕过kpti/kva/dm并可靠地读取任何内核数据。据百度安全介绍,v3z是第一个能够击败kpti/kva/dm的熔毁变型。这也就是说,当前业内唯一认可的有效防御措施也就此被打破。V3z主要是利用了用户页表与内核页表共存的内存区域,我们在这里把这个区间取名为bridge。通过对bridge的探测,间接获取内核其他地方的数据。

V3z攻击的步骤包括以下步骤:

Offline阶段

对共享的内存区间(bridge)进行数据采集。采集的主要目的就是要在后面probe的时候减小时间代价。这一步骤主要利用了一个gadget来使得meltdown的目标数据进入l1d缓存。

Online阶段

对目标内核数据与共享内存区间(bridge)之间建立数据依赖。这里也需要一个特殊的gadget

对共享的bridge区间,使用meltdown进行probe。优化前,需要256*256次probe。由于已经知道了bridge对应slot的数据,可以大大减少probe的次数,减少到了256次。

由此,百度安全发现的最新Meltdown变种V3z可以攻破最强防御组合KPTI+SMAP+user-kernel isolation。攻击者可以轻易从一个普通用户程序偷取系统里面的任务数据,比如内核里面的保密数据(比如RSA密钥)或其他敏感服务中的用户隐私(比如password)。

目前针对这个攻击还没有很好的防御措施,因为bridge区间是无法消除的(这个区间的代码需要处理异常和中断以及系统调用等,所以无法彻底移除)。议题最后,百度安全建议内核开发者尽量减小bridge区间的大小,并且可以引入地址随机化,增加攻击者发起攻击的难度。另外一个可行的方法就是消除可以用的gadget,但是内核里面有大量的第三方代码(比如设备驱动等),这样使得这个工作变得异常艰难。总之,要彻底抵御v3z攻击,各大操作系统(Linux,MacOS和Windows)厂商需要做大量的升级工作来尽量减缓v3z带来的危害。

关于Black Hat

Black Hat是由传奇极客Jeff Moss于 1997 年创办的全球安全技术大会,每年在亚洲、欧洲、美国举办三场,为保证会议内容的技术先进性和客观性,Black Hat对报告内容有严苛的评审机制,报告入选率不足20%。

在3月26日-29日于新加坡召开的Black Hat Asia 2019上,来自百度安全对于深度神经网络(DNN)模型算法安全性、Rowhammer新型攻击方法、Meltdown新变种三大创新性研究报告成功入选。此次议题的入选,也充分显示百度安全在AI安全、系统安全、软件安全等重要安全领域方面具有世界领先的技术储备。在大会现场,受到了来自欧洲,澳洲、亚洲和美洲等多个研究学者的高度评价。

同时,百度安全也旨在呼唤全行业加深对安全问题的重视和投入,从底层核心做起,从架构和开发上融入安全,夯实下一代网络安全的基石。