熔断 2.0:新英特尔CPU攻击

新漏洞可致虚拟机、安全飞地及内核内存泄密,英特尔已做缓解措施。

英特尔处理器再曝安全漏洞,黑客可以突破由虚拟机管理程序、操作系统内核及英特尔SGX安全飞地构建的安全边界,令服务器和终端系统上的数据面临泄密风险。新攻击技术可用于获取受保护内存区域中的口令及加密密钥等敏感数据,且之前的CPU攻击防护措施无法阻挡。

一年前,熔断和幽灵攻击震惊整个网络安全行业,昭示出操作系统内核与非特权应用之间,或同一服务器上不同虚拟机之间的内存隔离并不像之前设想的那么不可逾越。这些攻击利用了现代CPU所谓的预测执行这一性能增强功能,通过分析CPU缓存中的数据访问情况来盗取秘密。

熔断和幽灵攻击曝光之后,计算机安全研究社区又发现了另外的边信道攻击技术,攻击者无需直接访问秘密数据,只要分析数据在预测执行期间是怎样流经CPU微架构组件的,就能重现想要窥探的秘密。

5月14日,多所大学和私营产业的研究人员披露了与熔断和幽灵具相同影响的新攻击方法——已于去年遵循负责任披露原则向英特尔私下报告。与熔断和幽灵相比,新攻击技术的不同点在于,数据泄露利用的是英特尔CPU的缓冲区而不是缓存。

研究人员用于共享新漏洞信息的网站上写道:与现有攻击不同,我们的攻击可以从CPU内部缓冲区 (行填充缓冲区、加载端口、存储缓冲区) 泄露任意在用数据,包括从未存储在CPU缓存中的数据。研究表明,针对预测执行攻击的现有防御措施不足以抵御此新攻击技术,某些时候甚至会使情况变得更糟。因为漏洞深藏于英特尔CPU内部,即便部署了现有缓解措施,攻击者仍能运用我们的方法获取到敏感数据。

新型攻击:微架构数据采样

英特尔将该新攻击类型命名为微架构数据采样(MDS),并将上报的问题分成了具有各自CVE编号的4个漏洞:

  • CVE-2018-12126 — 微架构存储缓冲区数据采样(MSBDS)
  • CVE-2018-12127 — 微架构加载端口数据采样(MLPDS)
  • CVE-2018-12130 — 微架构填充缓冲区数据采样(MFBDS)
  • CVE-2019-11091 — 微架构数据采样非缓存内存(MDSUM)

荷兰阿姆斯特丹自由大学系统与网络安全组(VUSec) 的研究论文分析了其中3个漏洞——MLPDS、MFBDS和MDSUM。VUSec将自己的边信道攻击技术称为 “流氓在用数据加载(RIDL:Rogue In-Flight Data Load)”。

另一篇研究论文由密歇根大学、伍斯特理工学院、奥地利格拉斯科技大学、鲁汶大学和阿德莱德大学的研究人员共同撰写,介绍了第四个漏洞MSBDS。他们将自己的技术命名为 “余波(Fallout)”,可从存储缓冲区泄露数据,也可用于泄露内存信息以辅助攻击者突破内核地址空间布局随机化(KASLR)安全机制。KASLR是操作系统中的一种安全机制,用来增加内存崩溃漏洞的利用难度的。

研究人员在网站上写道:讽刺的是,与前代处理器相比,最近的 Coffee Lake Refresh i9 CPU 中,英特尔为防止熔断漏洞而引入的硬件反制措施,反而更有利于展开Fallout攻击。

过去一年中,一些同类漏洞也被其他研究人员各自发现并报告给了英特尔。

该现象表明研究社区对CPU及硬件相关漏洞的兴趣正在上升,并再次证明了不同研究人员能够各自独立地发现同样的漏洞——意味着攻击者也能。

攻击原理以及受影响用户

这些漏洞影响服务器、桌面电脑及笔记本电脑中所用的现代英特尔CPU。英特尔在其网站及向软件开发者提供的白皮书中公布了可能受影响的CPU列表。

VUSec表示,AMD和ARM在审阅了他们的论文后称其CPU不受新漏洞影响。

漏洞可为恶意进程所利用,比如未授权应用甚或浏览器内运行的JavaScript脚本,用以突破内存隔离界限,从其他进程中获取数据。

VUSec研究人员给出了自己的概念验证——用一台虚拟机从共享同一块物理CPU核心的另一台虚拟机获取到了其/etc/shadow文件内容。共享同一块物理CPU核心是多租户云环境的常见设置。在另一个概念验证中,研究人员通过未授权进程从Linux内核获取到了/proc/version信息。

由于是边信道攻击,数据值并不是直接读取的,而是通过CPU预测执行期间数据被加载进缓冲区的方式推断出来的。预测执行是用来在进程请求指令路径之前预先执行以加快操作速度的。

预测执行算法试图在程序实际走上某代码执行路径之前猜测出该程序将会选择的执行路径。如果猜错了,那产生的数据通常会被丢弃,程序执行继续沿正确路径进行。看上去似乎没什么逻辑问题,不过是提高效率节省时间的一种优化而已。然而,预测执行却也给本地攻击者留下了推断出缓存或缓冲区中数据相关信息的机会。

VUSec研究人员在论文中表示:RIDL源自一些微优化措施,这些微优化可导致CPU向预测性负载馈送无关的CPU内部在用数据。基本上,RIDL相当于在安全域隔离墙上放了个玻璃杯,让攻击者可以听到CPU组件间的喃喃自语。

获取这些数据的途径有两条:

1) 不分青红皂白地收集一切,然后进行筛选,以求理解并抽取出感兴趣的片段;

2) 迫使受害进程访问攻击者感兴趣的那些数据。

比如说,在虚拟机概念验证攻击中,研究人员就反复打开SSH连接并尝试以root身份验证登录。每次尝试都迫使目标虚拟机的操作系统去访问含有系统中所有账户密码散列值的/etc/shadow文件。

该尝试行为花了约24小时才渗漏到足够的信息以重建出整个shadow文件,但在其他MDS攻击场景中,目标数据几毫秒就能被恢复出来了。具体耗时取决于攻击者想要达成的目标和他们选择的方法。

如何缓解MDS攻击

英特尔在电子邮件声明中称:

我们最近的第八代和第九代英特尔Core处理器,以及第二代Xeon可扩展处理器很多都在硬件层就已解决了微架构数据采样(MDS)。至于其他受影响产品,今天开始可用的微代码更新,及相应的操作系统及虚拟机管理软件更新会加以缓解。我们在网站上提供了更多信息,并持续鼓励大家保持系统更新,因为这是受到保护的最佳方式之一。

CPU微代码更新为操作系统及软件开发人员提供了一条新的指令,可用于覆盖缓冲区及防止过期数据暴露。与幽灵缓解措施类似,该微代码更新可作为UEFI/BIOS更新的一部分分发,以便固化该缓解措施;也可由操作系统供应商分发,然后在每次重启时由内核再次加载应用。

即便缺乏微代码更新,软件及操作系统供应商也可运用特定的指令序列来达成相同的缓冲区覆盖效果。英特尔的白皮书中详细记录了这些指令序列,不同处理器系列各有差异。

基于软件的缓解措施比微代码缓解措施对性能的影响更大。但无论哪一种缓解措施,最终都需要操作系统和软件供应商切实开始使用缓冲区覆盖指令。这意味着用户还需从他们的操作系统和虚拟机管理程序供应商处找寻补丁。

VUSec的另一个建议是禁用同步多线程(SMT),也就是英特尔超线程技术。这么做不能完全缓解所有攻击,但可以阻止大部分攻击,并让其他攻击更难以执行。禁用SMT的不利方面是可能会影响到某些工作负载的性能。英特尔在其文档中对使用SMT的环境有所建议。

值得指出的是,去年与CPU缓冲区相关的另一个漏洞被曝光后,OpenBSD开发人员决定在其内核调度器中默认禁用SMT。

当时OpenBSD的开发人员表示:因为很多现代计算机不再在BIOS设置中提供禁用超线程的功能,我们在我们的调度器中提供了禁用额外处理器线程的途径。而由于我们怀疑超线程存在重大风险,我们决定默认禁用它们。

同时,VUSec研究人员认为“发现解决特定边信道预测执行攻击的缓解措施并非长期解决方案,因为能绕过这些缓解措施的新攻击会源源不断涌出。

我们的经验教训是,以软件缓解措施解决RIDL类攻击并不轻松,我们需要更底层的缓解措施以终结预测执行攻击时代。RIDL不适用于软件缓解,更底层的缓解措施才是发展方向。

但问题是,清除预测执行引入的风险所需的架构性调整,可能意味着要放弃某些我们已然习惯的CPU性能——那些我们如今已明白是以安全为代价换来的性能。

新漏洞信息共享网站:

https://mdsattacks.com/

MLPDS、MFBDS和MDSUM漏洞研究论文:

https://mdsattacks.com/files/ridl.pdf

MSBDS漏洞研究论文:

https://mdsattacks.com/files/fallout.pdf

英特尔公布的受影响CPU列表:

https://software.intel.com/security-software-guidance/insights/deep-dive-cpuid-enumeration-and-architectural-msrs#MDS-CPUID

英特尔有关缓解措施的信息:

https://www.intel.com/content/www/us/en/architecture-and-technology/mds.html

上一篇:DevOps成熟度与安全性的关系

下一篇:远程攻击手法:可接管任意思科1001-X路由器