TLBleed漏洞:通过探测TLB获取CPU秘钥

VUsec安全研究员Ben Gras在一篇文章中写道,一个影响英特尔处理器的边信道漏洞(称为TLBleed)可能通过窥探翻译后援缓冲器(TLB)泄漏信息。

Gras将在接下来的Blackhat 2018大会上介绍他的研究发现,声称他可以提取GPG所使用的加密密钥:

我们的TLBleed漏洞攻击成功获取libgcrypt(在GPG中使用)的256位EdDSA密钥,成功率为98%,只需单独监视共驻超线程上的签名操作,分析耗时17秒。

TLB是一种缓存,用于加快将常用虚拟地址转换为物理内存地址的速度。 TLBleed通过使用TLB来检测CPU寄存器中有用的信息,为超线程访问运行在同一内核上的另一个超线程的信息提供了一种方式。此漏洞与Spectre和Meltdown无关,这两个漏洞都利用推测执行故障泄漏CPU缓存中的信息。

关于这个漏洞,人们最关心的是,它使用了数据访问而不是正在执行的代码路径,这意味着现有对已知边信道攻击的保护措施可能无法有效对抗TLBleed。事实上,Gras提到了基于TLBleed的第二种攻击,该攻击可能会让最近的libgcrypt版本发生数据位泄漏,这一版本的libgcrypt包含了一个边信道抗RSA实现。第二种类型的攻击利用了机器学习技术。The Register特约作者Chris Williams可以访问Gras等人的白皮书,他解释说,该团队使用分类器来识别敏感操作,包括基于TLB延迟的加密操作。

英特尔不打算解决这个漏洞,他们认为,一个能够正确保护自己免受其他类型边信道攻击的程序,例如,不管是否使用加密密钥,其数据访问模式看起来都是一样的,如果能做到这样一点,也就对TLBleed免疫。Gras虽然也承认这一点,但他认为,很少有程序写得这么完美,libgcrypt泄露RSA密钥就是最好的例子。

OpenBSD维护者采取了不一样的立场,他们决定禁用对英特尔处理器禁用并发多线程(SMT):

由于很多现代机器不再提供在BIOS设置中禁用超线程的能力,因此,可以在我们的调度程序中禁用额外的处理器线程。另外,因为我们怀疑它存在严重风险,所以默认将其禁用。

OpenBSD将在未来将此策略扩展到其他CPU和其他架构。

对操作系统级具有较低侵入性的缓解措施是防止在同一内核的不同进程上并发执行两个线程,不过这要对操作系统的调度器做出修改,而且不是个小改动。

目前还不清楚其他厂商是否会在操作系统级别上采取任何措施解决TLBleed问题,或者云提供商是否会提供阻止两个不同虚拟机共享相同内核的可能性。InfoQ将会带来更多相关信息。

查看英文原文TLBleed Can Leak Cryptographic Keys from CPUs Snooping on TLBs

  • 发表于:
  • 原文链接:http://www.infoq.com/cn/news/2018/06/tlbleed-vulnerability-tlb-intel

扫码关注云+社区

领取腾讯云代金券