阿姆斯特丹自由大学(Vrije Universiteit Amsterdam)的学术研究人员证实,在现实场景中,可利用 CPU 瞬时执行漏洞(transient execution CPU vulnerabilities)从公共云服务上运行的虚拟机(VM)中窃取内存数据。
研究表明,2018 年 1 月披露的英特尔处理器漏洞L1 终端故障(L1TF,又称 Foreshadow),以及被认为无法在新一代 CPU 上利用的 “半幽灵”(half-Spectre)漏洞组件(此前认为其无法直接泄露机密数据),二者结合后可用于从公共云环境中窃取数据。
上个月,这些研究人员发布了名为 “L1TF Reloaded” 的漏洞报告(PDF 文档)。该漏洞通过结合 L1TF 与 “半幽灵” 技术,绕过了当前广泛部署的软件防护措施,成功从谷歌云(Google Cloud)的虚拟机监控程序(hypervisor)及同一物理机上的其他租户(co-tenant)系统中窃取敏感数据。
研究人员指出:“我们基于一种新颖的‘指针追踪’技术(通过主机与客户机进行指针遍历),获取了在软件中手动执行‘二维页表遍历’所需的全部信息;借助这一能力,我们可将客户机的任意虚拟地址转换为主机物理地址,进而通过 L1TF 漏洞窃取受害者内存中的任意字节数据。”
漏洞背景与影响
L1TF 漏洞于 2018 年披露,披露当天恰逢臭名昭著的 “Spectre(幽灵)” 与 “Meltdown(熔断)” 漏洞公开。这三类漏洞的最终危害一致:攻击者可获取 CPU 在执行指令时意外访问、且已缓存到内存中的机密数据。
研究人员表示,尽管这类漏洞以往的现实影响有限(因攻击者需具备 “远程代码执行” 能力,才能触发 CPU 中的相关指令),但 “L1TF Reloaded” 的测试结果表明,公共云服务商面临的这类攻击具有实际可行性 —— 本质上,公共云服务商向客户提供的 “云服务”,相当于 “远程代码执行即服务”(remote code execution as a service)。
在云环境中,客户的虚拟化系统虽运行在同一硬件上,但彼此应被视为 “不可信对象”,因此需要针对 “Spectre” 等瞬时执行漏洞部署所有合理的防护措施。
攻击测试与结果
研究人员在谷歌云的 “单租户节点”(sole-tenant node,指仅分配给单个客户使用的物理服务器)上开展测试,结果显示:在 “高干扰环境”(noisy conditions)下,即便对主机或客户机的细节一无所知,仍能窃取目标虚拟机中 Nginx 服务器的 TLS 密钥,平均耗时 14.2 小时。
此次攻击的核心逻辑是:针对 Linux 系统 KVM(基于内核的虚拟机)子系统中的 “半幽灵” 漏洞组件,通过 “推测执行”(speculative execution)将内存中的数据加载到 L1 缓存中,随后利用 L1TF 漏洞从 L1 缓存中窃取这些机密数据。
具体而言,攻击者可从恶意虚拟机出发,实现三层数据窃取:
从主机操作系统(host OS)中窃取数据,识别该物理机上运行的其他虚拟机;
从目标客户机操作系统(guest OS)中窃取数据,了解目标虚拟机上正在运行的进程;
最终从目标虚拟机的 Nginx 服务器中窃取私有 TLS 密钥。
研究人员还在亚马逊云(AWS)上进行了相同攻击测试,但由于 AWS 部署了深度防御机制,最终仅能窃取非敏感的主机数据,无法获取核心敏感信息。
奖励与防护建议
谷歌为研究人员提供了测试所需的 “单租户节点”,并向其颁发了 151,515 美元奖金 —— 这是谷歌云漏洞奖励计划(Google Cloud VRP)的最高级别奖励,谷歌方面同时指出,这也是该计划首次发放此级别奖金。
研究人员强调:“我们的攻击表明,若仅针对单个瞬时执行漏洞进行孤立防护,效果十分有限 —— 攻击者可通过组合利用多个漏洞,不仅能绕过现有防御措施,还能构建更具破坏力的攻击原语(attack primitives)。而以下防护措施可有效阻止此类攻击:AWS 已部署的‘跨页表防护(XPFO)’与‘进程本地内存’机制,以及业内提议的‘地址空间隔离’或‘无机密数据虚拟机监控程序’方案。”