英特尔深陷处理器安全泥潭
星期五, 六月 12, 2020
安全牛点评:英特尔最近有些流年不利,昨天彭博社爆料苹果将在本月的WWDC大会上宣布PC产品处理器架构全面转向ARM。如果说合作伙伴跳船只是“外忧”,那么困扰英特尔的处理器安全问题则是更加令人头疼的“内患”。
过去的两年中,现代CPU(尤其是英特尔生产的CPU)持续受到一系列无休止的攻击的困扰,这些攻击使技术高超的攻击者能够从芯片内存中窃取密码、加密密钥和其他机密信息。
周二,坏消息再次传来,两个独立的学术团队披露了两个新的独特漏洞(SGAxe和CrossTalk),这些漏洞使英特尔的Software Guard eXtension(SGX)成为迄今为止公司处理器最敏感(脆弱)的部分。
2015年发布的SGX,顾名思义,是对英特尔体系的一个扩展,用于增强软件的安全性。具体来说是为加密密钥和其他敏感数据提供类似Fort Knox的保护,即使操作系统或虚拟机被严重破坏这些敏感信息也不会泄露。
SGX通过创建受信任的执行环境来工作,以保护敏感代码及其所用数据免受系统上其他任何事物的监视或篡改。通俗地讲,SGX对于软件的保护并不是识别或者隔离系统中出现的恶意软件,而是将合法软件对于敏感数据(如加密密钥、密码、用户数据等)的操作封装在一个“小黑匣”中,使得恶意软件无法对这些数据进行访问。
SGX的安全性和真实性的关键是创建所谓的安全区或安全内存块。安全区内容在离开处理器之前已加密并写入RAM。它们只有在返回后才被解密。SGX的工作是保护安全区内存,并阻止CPU可信部分以外的任何其他人访问其内容。
周二的漏洞攻击并非SGX的首次溃败。2018年,另外一支研究队伍利用Meltdown攻击闯入了坚固的“小黑匣”,通过运行在一个“小黑匣”中的攻击程序(malware)对其他“小黑匣”的敏感程序实施攻击,这样便打破了SGX的安全。因为攻击程序malware也运行在一个“小黑匣”中,主机上的反病毒软件很难发现并清除攻击程序。
Meltdown与Spectre攻击激发了处理器漏洞利用的迅猛发展。就在今年早些时候,另有一个研究小组也成功攻破了SGX(https://lviattack.eu/)。
英特尔通过引入微代码更新来缓解了早期的SGX漏洞。但是,这些缓解措施并未持续太久,最近的这两次攻击促使英特尔忙不迭地设计了新的防御措施。英特尔周二发布了更新,并计划在未来几周内将这些更新提供给最终用户。根据计算机类型的不同,该修复程序将自动安装或需要手动干预。英特尔用户,尤其是那些依赖SGX的用户,应与设备制造商联系,并确保尽快安装更新。
新的SGX攻击代号SGAxe和CrossTalk。两者都使用单独的旁路攻击闯入强化的CPU区域,这是一种通过测量时序差异、功耗、电磁辐射、声音或来自存储它的系统的其他信息来推断敏感数据的一种黑客技术。两种攻击的前提大致相同。攻击者已经能够通过破坏系统完整性的软件漏洞或恶意虚拟机破坏目标计算机的安全性。尽管这种攻击有着很高的技术门槛,但这也恰恰正是SGX应该防御的情况。
SGAxe能够窃取大量受SGX保护的数据。一类敏感数据是属于目标用户的数据,例如,钱包地址或涉及区块链的金融交易中使用的其他秘密信息。下图显示了存储在安全区域中的图像文件。右图显示了使用SGAxe提取后的同一图像。
攻击可以很容易地窃取SGX用于“证明”的加密密钥,可以向远程服务器证明该硬件是真正的Intel处理器而不是恶意模拟。远程服务器在进行金融交易,播放受保护的视频或执行其他受限制的功能之前,可能需要连接设备提供这些证明密钥。密歇根大学和澳大利亚阿德莱德大学的研究人员在题为“SGAxe:SGX在实践中溃败”的论文(https://sgaxe.com/)中写道:
由于机器的生产环境证明密钥受到损害,服务器提供的任何机密信息都可以立即由客户端的非授信应用程序读取,而客户端安全区所产生的所有输出均无法保障其正确性,这直接导致基于SGX的DRM应用程序失效。最后,我们通过远程认证的能力还意味着基于SGX的安全远程计算协议也失去效用。
SGAxe起源于一次更早的攻击,名为CacheOut,同一攻击团队(还有一名参与者)于1月发现了这种攻击。 而CacheOut又是2019年5月份一次攻击的变体,该攻击于2019年5月公开,业内的代号五花八门,包括RIDL、Fallout、ZombieLoad和Microarchitectural Data Sampling等,每个代号均来自一个独立发现该缺陷的研究团队。CacheOut和SGAxe都利用了CVE-2020-0549,该漏洞是发现RIDL攻击的研究人员于1月27日(即CacheOut论文发表的同一天)作为附录披露的。
RIDL和其他相关攻击通常使攻击者能够读取CPU与目标共享的数据包。从本质上讲,RIDL类似于镶嵌在墙上的玻璃,一个公寓单元的居民可以听到相邻单元的情况。英特尔CPU就是公寓房间,而墙是line fill buffer(行填充缓冲区)——硅片上存储最近访问的数据的填充缓冲区。就像墙壁泄漏声音一样,缓冲区也会泄漏时钟数据,攻击者可以推断其中包含的数据。
英特尔从未修复芯片中的潜在漏洞。取而代之的是,该公司的工程师发布了一个微代码更新,该更新使CPU在每次处理器开始新的对安全性敏感的操作时,都用垃圾信息覆盖缓冲区内容。而CacheOut则找到了一种绕过此缓解措施的方法。
除了绕开英特尔2018年的缓解措施外,CacheOut还引入了一种使漏洞利用更加有效的方法。原始RIDL攻击的局限性在于,它仅允许攻击者监视相邻单元中主动发生的对话,即仅访问在超线程中处理的数据。如果未在同一CPU内核共享的超线程中对其进行处理,则攻击者无法访问数据。但是,使用CacheOut,攻击者可以克服此限制。更具体地说,在CacheOut中,攻击者首先从高速缓存中抽取自己选择的数据,方法是先将数据发送到行填充缓冲区,然后使用RIDL将其提取出来。如果说RIDL就像墙体镶嵌的玻璃,让攻击者可以听到邻居间的队话,那么通过CacheOut,攻击者可以强迫邻居们讨论任何攻击者想要知道的话题。
至于SGAxe,这是CacheOut的一种新的更有效的用法。它使用称为分页的内存管理方案将安全区数据移到L1高速缓存中,在那里解密内容。然后通过CacheOut将数据移到缓冲区,最后使用RIDL技术将其提取出来。
英特尔发言人说,一旦将微码修复程序安装在最终用户计算机上,将重新分配安全密钥,以解决旧密钥泄露的可能性。发言人还说,当证明服务使用英特尔推荐的可链接签名模式来检测对平台密钥的欺诈使用时,可以减轻所有证明密钥暴露的严重性。她还表示,SGAxe和CacheOut在“已应用的虚拟环境中几乎没有影响”,2018年发布的缓解措施,可以用于保护名为L1 Terminal Fault的另一种推测性执行漏洞。
但是,密歇根大学研究员,SGAxe和CacheOut论文的合著者之一丹尼尔·金金(Daniel Genkin)表示,可链接签名模式并非总是有效,不能在所有情况下都减轻证明密钥泄漏的威胁。他还不同意L1 Terminal Fault缓解可以阻止CacheOut和SGAxe攻击,但Genkin承认这会使攻击变得更加困难。
值得注意的是,第二次SGX攻击基于以前未知的副通道,该副通道是由Intel CPU内核使用的未记录缓冲区创建的。阿姆斯特丹的弗里耶大学和苏黎世联邦理工学院的研究人员称之为“暂存缓冲区”,它保留了先前在所有CPU内核上执行的脱机指令的结果。这是此内核间缓冲区的工作原理图:
该发现非常重要,原因有若干。首先,当前缓冲区保留了RDRAND和的输出RDSEED,这是Intel CPU可以执行的最敏感的指令之一,因为它们提供生成加密密钥时所需的随机数。下图显示了泄漏的工作方式:
获得随机数的攻击者可以使用它们来推断密钥。这一发现使研究人员能够设计出一种推测执行攻击,该攻击基于SGX安全区中生成的ECDSA加密算法提取密钥。
同样重要的是,这个新发现的缓冲区提供的辅助通道使攻击者能够发动全球首个跨CPU内核的推测性执行攻击。此前所有的攻击都需要攻击者和目标使用相同的处理器内核,因此许多安全防御者认为将受信任和不受信任的代码分配给不同的内核可有效缓解投机执行攻击(又称瞬态执行攻击)。作为新漏洞的命名,CrossTalk攻击将迫使研究人员和工程师重新考虑这一假设。
研究人员在一封电子邮件中写道:
例如,许多人认为禁用Intel SMT(超线程)足以阻止大多数已知/未来的攻击,或者,在不同的内核上运行互不信任的代码就可以缓解迄今为止的所有攻击。事实上,问题比想象得更加严重,基于内核的隔离可能还不够。
在一份研究论文(vusec.net/projects/crosstalk)中,研究人员总结如下:
通过许多Intel CPU上的此缓冲区,加密的RDRAND和RDSEED指令会将其输出泄漏给攻击者,我们已经证明这是一种现实的攻击。我们还再次证明,利用这些攻击来破坏英特尔SGX安全区中运行的代码是轻而易举的。
更糟糕的是,缓解现有瞬态执行攻击的方法几乎没有效果。当前大多数缓解措施都依赖于边界上的空间隔离,由于这些攻击的跨核心性质,这些边界不再适用。新的微代码更新将这些指令锁定在整个内存总线上,可以缓解这些攻击-但前提是没有尚未发现的类似问题。
研究人员测试了2015年至2019年发布的Intel CPU,发现证据表明,大多数常规客户端CPU(包括Xeon E3系列处理器)都容易受到CrossTalk的攻击。英特尔表示,至强E5 / E7中的服务器微体系结构不容易受到攻击。研究人员尚未测试今年发布的任何第10代Core CPU,但根据他们从Intel获得的信息,其中一些会受到攻击。
英特尔解决此错误的微代码更新会在更新活跃缓冲区之前锁定整个内存总线,并仅在清除其内容后才将其解锁。进行此更改的策略是确保没有信息暴露给其他CPU内核发出的脱机请求。英特尔只更新了几个对安全性至关重要的指令,包括RDRAND、RDSEED和EGETKEY。研究人员说,这意味着其他指令(例如WRMSR)的输出仍然会在CPU内核之间泄漏。
对于大多数英特尔CPU用户来说,最重要的是,接下来的几周内英特尔需要修复的漏洞可能在未来几年中都将成为严重问题。在不相关的(云计算)客户之间共享同一CPU的云环境,风险可能更高,但是即使在这些环境中,熟练的工程师也可以做一些事情来减轻攻击。
本周最新一轮攻击得出的更大结论是,困扰英特尔的处理器漏洞利用不太可能在短期内缓解。与AMD和ARM处理器相比,英特尔CPU报告的漏洞数量“大幅领先”,因此这家全球最大的芯片制造商有责任重新设计安全的开发生命周期,确保基业长青。
相关阅读