尽管Meltdown和Spectre两大CPU漏洞发生在2018年年初,但半年的时间并没有让其带来的影响完全消除。自从1月份以来,新的CPU漏洞不断被曝出,不论是英特尔、AMD、ARM、Power等无一幸免,"下一代Spectre"、"Meltdown-Spectre变种"等字眼不断出现在各大科技媒体头条。虽然各家厂商纷纷推出补丁来防止漏洞对于安全性的影响,然而用户在使用补丁时,却发现漏洞补丁带来了应用性能的下降,有的应用性能甚至下降非常大。那么是否能有一种方法能打破性能和安全性之间的鸿沟,从而不必在性能和安全性之间二选一?
由于Meltdown和Spectre问题来源于CPU,最根本的解决办法就是改变CPU从内存和磁盘读取数据的方式,实现既不损失性能又有安全保障。但是这是一个很艰巨的任务,很难在短期内实现。
当前的最佳解决方案就是尽量做到CPU Offload,减少内核层和用户层之间的沟通, 比如使用RDMA技术来Bypass CPU,使用NVMe over Fabric Offload来将CPU操作的内核拷贝跳过,使用GPU Direct RDMA技术跳过GPU内存和CPU内存的拷贝等。另外使用网卡硬件来做应用和应用之间的安全隔离来避免使用CPU来做软件隔离,也是预防漏洞的有效方法之一。
以CPU Offload如 RDMA 和 DPDK的方案带来的明显价值是让用户不用在安全性和在应用性能之间做权衡。
查看更多>>乱序执行(Out-of-order Execution)、推测执行(Speculative Execution)和分支预测(Branch Prediction)三大CPU采用的技术是造成漏洞产生的根本原因。简单理解,Meltdown破坏了位于用户应用和操作系统之间的基本隔离,导致程序可能访问其他程序和操作系统内存,从而产生敏感信息会被窃取的可能性。Spectre则是破坏了不同应用程序之间的隔离, 处理器会推测在未来有用的数据并执行计算,当这些数据被需要时可立即使用。但是处理器没有很好地将低权限的应用程序与访问内核内存分开,这意味着攻击者可以使用恶意应用程序来获取应该被隔离的私有数据。
从对于业界应用的影响来看,英特尔确认性能损失取决于工作负载。比如常见的OLTP应用,为了提升效率,往往需要将资料缓存到内存中,所有的OLTP操作都是由内核来完成,如果不使用Meltdown和Spectre的补丁,应用很容易被黑客攻击;如果使用补丁,根据第三方测试数据,应用性能可能会有8% 到19%的损失。对于一些内核层和用户层很少通讯的应用来讲,性能影响就会小些甚至不受影响。
由于预测执行技术已经被广泛用于各种CPU中,要想解决这个问题的最根本方法是有新的CPU体系架构。目前的补丁技术只能是使用软件来降低黑客利用预测执行来入侵内核内存,主要的补丁是将每个进程的内核地址和用户地址共享映射表改为内核地址和用户地址各有自己独立的映射表PGD(Page Global Directory),这样一来在用户空间根本没有内核空间的映射表,即使漏洞存在,黑客也不会从内核获得数据。但是这样的代价就是每次系统调用或者中断发生时都需要切换映射表,这无疑会影响应用的性能。使用牺牲性能的方式来解决问题,无疑不是一个好的方案。
由于Meltdown和Spectre问题来源于CPU,最根本的解决办法就是改变CPU从内存和磁盘读取数据的方式,实现既不损失性能又有安全保障。但是这是一个很艰巨的任务,很难在短期内实现。当前的最佳解决方案就是尽量做到CPU Offload,减少内核层和用户层之间的沟通, 比如使用RDMA技术来Bypass CPU,使用NVMe over Fabric Offload来将CPU操作的内核拷贝跳过,使用GPU Direct RDMA技术跳过GPU内存和CPU内存的拷贝等。另外使用网卡硬件来做应用和应用之间的安全隔离来避免使用CPU来做软件隔离,也是预防漏洞的有效方法之一。
解决Meltdown和Spectre问题的关键就是减少CPU和应用的沟通,RDMA和智能网卡做的就是让CPU尽量只做计算,所有通讯和安全的操作由网络来做,从而切断黑客访问应用的途径。此外,还包括DPDK技术,它们实际是把原来由内核操作的很多工作放到用户态去做,这样很多操作就跟内核态没有关系了。通过在用户态之间建立应用和应用之间隔离,避免和内核态之间的交互,来降低这些漏洞带来的风险。现在RDMA技术已经被广泛应用到了各种各样的应用当中,从很多采用RDMA的应用来看,可以看到它被Meltdown和Spectre这两个漏洞影响的机会非常小,而且对性能的影响非常低,甚至做到没有影响。
所以,这在另一个层面又回到了卸载技术与加载技术的争论。卸载技术寻求克服CPU的性能瓶颈,主要方式是对在集群内移动的数据执行各种网络功能以及复杂的通信操作,如协同操作和数据聚集操作。以Mellanox为代表的网络厂商推出了卸载技术(如 RDMA 和 DPDK),将处理TCP/IP和存储堆栈的重任转移至网络适配器,缓解主要系统处理器的压力。这样可以提升性能,并缓解了修补Spectre 和Meltdown 后通常造成的性能损失。