2018年第一起“魔幻现实主义”事件:四组研究人员几乎同时发现了存在几十年的漏洞【鹏越·精选】
2018-01-10 09:30:46
  • 0
  • 0
  • 0

 来源:鹏越网络空间安全研究院

让我恐惧的问题是,还有多少类似的事情已经存在了10年或15年了?

编者按:这并不是一个小说,而是现实。四组研究人员在互不知情的情况下,在同一段时间发现了同一类型的bug,而且这个bug已经存在了几十年了。为什么这些年这个bug都没有被人发现?或者说被人发现了却没有曝光出来?这背后有什么故事?他们为什么能够在同一时间发现这一漏洞?《连线》杂志发表了一篇文章,对这一令人不可思议的事件背后的故事进行了报道。文章由36氪编译。

上个月初一个寒冷的星期天,在奥地利的格拉茨市,三个年轻的研究人员坐在家中的电脑前,试图打破他们最基本的安全保护措施。

在这两天前,在格拉茨科技大学的实验室里,莫里茨·利普(Moritz Lipp)、丹尼尔·格鲁斯(Daniel Gruss)和迈克尔·施瓦茨(Michael Schwarz)决定理清困扰了他们几周的想法——一个关于安全防护措施的模糊线索,支撑着处理器如何保护数十亿台计算机最敏感的内存。在周六的晚上和朋友喝酒之后,他们第二天就开始工作了,每个人都独立地编写代码来测试对可疑漏洞的理论攻击,并通过即时消息分享他们的进展。

那天晚上,格鲁斯告诉另外两名研究人员他成功了。他的代码旨在从计算机操作系统内核中最深层、最受保护的部分窃取信息,不再是随机吐出字符,而是从机器的敏感内存中抽取出真实的数据:来自他的网页浏览历史和私人邮件。除了成就感之外,他还感到震惊和沮丧。

“这真的非常非常可怕,”格鲁斯说,“你不会希望你的私人信息能从一个没有权限访问的程序中出来。”

利普和施瓦茨很快就在他们的电脑上测试了自己编写的概念验证代码,并得到了相同的结果:利普记得在数字噪音中看到了网址和文件名。“突然之间,我看到了不应该出现在那里的字符串,”他说。“我想,天呐,这真的有用。”

格拉茨科技大学的研究人员(左起)丹尼尔·格鲁斯、莫里茨·利普和迈克尔·施瓦茨,他们在几个月的时间里,独立地发现存在了20年的关于处理器的关键安全缺陷。


那天晚上,格拉茨的三个研究人员都没有睡几个小时。第二天,他们给英特尔发了一条信息,警告他们芯片中可能存在着一个潜在的足以震动行业的缺陷。他们在计算机最基本的安全防御系统中发现了一个缺口:这个安全防御系统能够将不可信任的程序隔离出来, 使它们无法访问计算机上的其他进程或者计算机操作系统的最深层, 因为那里保存着它最敏感的秘密。在他们的攻击下,任何能够在目标计算机上运行代码的黑客,都可以打破这种低权限程序的隔离状态,以访问隐藏在计算机内核中的秘密,比如私人文件、密码或加密密钥。

在像Amazon Web Services这样的云计算服务中,多个虚拟机在同一个物理服务器中共存,一个恶意的虚拟机可以深入地窥视其邻居的秘密。格拉茨团队的发现,也就是所谓的“熔毁”(Meltdown),被证明是计算机最基本的安全措施之一的关键bug。或许最令人不安的是,这一功能在20世纪90年代中期就已经引入英特尔芯片,而且一直没有任何明显的公共发现。这也就说明了,这个bug可能被人利用了几十年。

然而,在经历了长达一周的沉默之后,英特尔对他们的警告做出了令人惊讶的回应。尽管英特尔确实在努力解决这个问题,但格拉茨团队并不是第一个向这个芯片巨头透露这一bug的团队。事实上,还有另外两支研究团队发现了bug。英特尔告诉研究人员,他们实际上是第四个报告这种新型攻击的团队,而这一切都发生在短短几个月的时间内。

“据我所知,这是一个疯狂的巧合,”著名的安全研究员保罗·科舍尔(Paul Kocher)说。他向芯片制造商报告了与这种不同但有关联的“幽灵”(Spectre)攻击。“这两条线没有共同点,”他补充道。“没有什么理由能让人在几年前发现不了这个问题,而在今天发现了问题。”

四重碰撞


事实上,如此多不同的研究人员同时发现了一个20年前的漏洞,这就引发了这样的一个问题:在曝光漏洞和对漏洞软件修复之前, 还有谁可能在他们之前发现了这些攻击, 而这些人可能已经秘密利用它们从事了间谍活动。

安全研究员、哈佛大学贝尔佛中心(Harvard Belfer Center)研究员布鲁斯·施奈尔(Bruce Schneier)认为, 这些处理器攻击发现的同步性, 不仅仅是一个孤立的谜团, 还是一个政策教训:当像美国国家安全局这样的情报机构发现可攻击的bug,并秘密加以利用时,他们不能认为这些bug不会被其他黑客重新发现,安全行业称之为“bug碰撞”。

熔毁和幽灵事件并不是第一次同时发现重大的bug。就像莱布尼兹和牛顿在17世纪后期发明微积分一样,世界上最好的安全研究人员也在同一时间有了同样的发现。在20世纪20年代,五名不同的工程师独立地发明了电视。

“这很奇怪,对吧?这就像是水里有什么东西一样,”施奈尔说,他去年夏天与人合作撰写了一篇关于漏洞发现的论文。“社区里发生了一些事情,它让人们思考,让我们看看这里。然后他们就这么做了。这是一种非常普遍的现象。而且,这种情况肯定比偶然发生的几率更大。”

因此,当美国国家安全局发现所谓的“零日漏洞”——一个以前不为人知的软件或硬件的可破解漏洞时,施奈尔认为,重新发现的倾向需要考虑到该机构是否在暗中利用这个漏洞进行间谍活动, 还是将其报告给任何能够修复漏洞的政党。

施奈尔认为, 像幽灵和熔毁这样的bug碰撞意味着,他们应该在信息披露方面犯了错:根据他与人合著的哈佛大学研究报告中的粗略估计,在某一年里使用的所有“零日漏洞”中,有多达三分之一可能是由美国国家安全局首次发现的。

“如果我发现一些隐藏了10年的东西,一些东西让我发现了它,而这些东西是随机的,并不会让别人也发现它,”施奈尔说。“如果美国国家安全局发现了它,其他情报机构也很可能会发现它,或者至少比随机的机会更有可能。

投机炒作


虽然幽灵和熔毁出现了四重碰撞——或者说是一个bug堆积——但仍然无法解释,一些研究人员是否对他们的发现做了同样的事情。最重要的是,安全研究员安德斯·福格(Anders Fogh),德国GData公司的恶意软件分析师,7月在他的博客上写道,他一直在探索现代微处理器的一个奇怪特性,即所谓的Speculative_execution。芯片制造商们渴望更快的性能,他们长期以来设计的处理器为了节省时间,可以跳过代码的执行,而不是在计算过程中的某个瓶颈处等待。

福格表示,也许,这种无序的灵活性可能会让恶意代码操纵处理器,在芯片实际检查代码是否应该有权限之前,来访问它不应该访问的部分内存——比如内核。即使在处理器意识到自己的错误并删除了非法访问的结果之后,恶意代码也会再次欺骗处理器。通过观察处理器检查的时间,程序可以找到内核秘密的痕迹。

其他研究人员现在认为他的测试设置有些怪异,福格自己也没能建立起有效的攻击。不过,福格还是警告称,对未来的安全研究来说,投机性的执行很可能是一个“潘多拉魔盒”。

尽管如此,福格的警告帖子并没有被更广泛的硬件安全研究社区所重视,但仅仅几个月后,格拉茨科技大学的研究人员就开始认真考虑他的警告。他们第一个真正的线索来自于Linux内核邮件列表:去年10月,他们注意到来自英特尔、亚马逊和谷歌等大公司的开发人员突然对一个名为KAISER的操作系统的新防御性重新设计感兴趣,这是格拉茨研究人员创建的,目的是更好地将程序的内存从操作系统的内存中分离出来。

格拉茨的研究人员希望KAISER能够解决一个远比幽灵或熔毁更严重的问题,他们的重点是将计算机内存的位置隐藏在恶意的位置,而不是屏蔽对它的访问。“我们感到很兴奋,”利普回忆道。“人们有兴趣部署我们的对策。”

然而很快,开发者们就开始注意到,KAISER补丁可能会使一些英特尔芯片的速度减慢5%到30% , 这比格拉茨研究人员发现的要严重得多。然而,英特尔和其他科技巨头仍在推动这一方案的实施,争取解决问题。

“这里肯定有更大的东西,”利普回忆说。这些科技公司使用KAISER来修补一个更严重的秘密芯片级缺陷吗?直到那时,他和其他格拉茨的研究人员才想起了福格已经失败的Speculative_execution。当他们自己决定尝试一下时,他们惊讶的发现,他们对福格技术进行细微调整后发挥了作用。

他们并不是唯一一个团队发现了这个问题。

就在几周前,德国安全公司Cyberus的研究人员托马斯·普雷舍尔(Thomas Prescher)也开始对福格的方法进行测试。“我在半年前就看到过,觉得这个想法很有趣,但在某种程度上,我只是把它忘了。”普雷舍尔说。“去年11月,我再次遇到了这个问题,于是决定试一试。我的工作非常迅速。”

最终,Cyberus和格拉茨研究人员在12月初的几天内就向英特尔报告了他们的研究成果。直到英特尔在那个月中旬对每一个研究人员的bug报告做出回应之后,他们才发现有人在几个月前独立发现并报告了他们的熔毁攻击,以及被称为“幽灵”的Speculative_execution。这一警告来自Project Zero,谷歌内部进行漏洞追踪的超级黑客团队。事实上,Project Zero的研究人员简恩·霍恩(Jann Horn)于6月发现了这一攻击,比安德斯·福格的博客文章还早了几周。

从零开始


霍恩是如何独立地发现英特尔芯片的投Speculative_execution的?正如他说的那样,通过阅读手册。

去年4月下旬,这位22岁的黑客在瑞士苏黎世和同事一起工作,编写一段处理器密集型软件,他们知道这款软件对英特尔芯片的性能非常敏感。因此,霍恩深入研究了英特尔的文件,以了解英特尔的处理器可以运行多少程序,以加速其运行速度。

他很快发现, 他正在编写的代码中有一点是英特尔用来提高芯片速度的Speculative_execution,可能会导致被霍恩称为“秘密”的价值被意外访问,然后存储在处理器的缓存中。"换句话说, (这会)使攻击者能够发现这个秘密,"霍恩在写给《连线》的一封电子邮件中写道。“我后来意识到,这至少在理论上可以影响到我们正在开发的代码片段,并决定对此进行研究。”

到了5月初,霍恩已经将这种技术发展到后来被称为“幽灵”的袭击中。与熔毁对处理器的直接滥用不同,幽灵利用了Speculative_execution,在电脑上欺骗无辜的程序或系统进程,将它们的秘密植入处理器的缓存中,然后这些程序会被泄露给一个执行类似于熔毁的定时攻击的黑客。例如,通过一些操作,网页浏览器可以泄露用户的浏览历史或密码。

对于攻击者来说,幽灵比熔毁更难利用,但修复起来也要复杂得多。它不仅在英特尔的芯片上运行,在ARM和AMD芯片上也同样如此,这对整个行业来说是一个更加棘手和长期的问题。6月1日,霍恩向芯片制造商报告了他的发现。当他继续研究Speculative_execution的其他可能性时,他发现并在三周后想英特尔报告了熔毁攻击。

最后,在围绕着熔毁和幽灵的bug碰撞风暴中,还有一个更大的巧合。就在霍恩开始对他的攻击进行测试的时候,总部位于旧金山的密码学研究公司创始人保罗·科彻(Paul Kocher)开始休假。在某种程度上, 他想要时间来探索他在计算机安全领域看到的一个广泛的问题:不惜一切代价从微芯片中榨取越来越大的性能, 就算代价可能包括它们的基本安全。

在去年9月于台北举行的一次密码学与硬件研讨会议上,科彻的前同事迈克·汉伯格(Mike Hamburg)对Speculative_execution提出了质疑。科彻立即下定决心要证明这一问题。他说:“当我开始研究投机性行为时,我很清楚,作为一名安全人员,这是一个非常糟糕的主意。”

在从台北回来不久,科彻就自己编写了一个工作漏洞——他并不知道谷歌的霍恩在几个月前就发现了同样的,存在了几十年的问题。

异想天开还是在讲故


对于科彻来说,关键的问题不在于如此多的研究人员是如何在大致相同的时间偶然发现同一类攻击的。这就是为什么这些攻击在很长一段时间内都没有被发现——或者它们是否真的被发现了,并被用来秘密地侵入不知情的目标。

“如果你问我,情报机构是否在几年前发现了这个问题,我肯定会说,是的,”科彻说。“在这类事情上,他们是世界上花费精力最多的一群人。他们很有可能会注意到这一点。如果他们发现了这样的东西,只要它能产生良好的效果,他们就不会告诉任何人。”

“不只是美国国家安全局,”他补充道。其他国家支持的黑客可能也有能力——而且有时间——发现了幽灵和熔毁的攻击。

上周五,白宫网络安全协调员、前美国国家安全局高级官员罗伯特·乔伊斯(Rob Joyce)在接受《华盛顿邮报》采访时表示,美国国家安全局并不知道幽灵和熔毁的存在,也从未利用过这些漏洞。乔伊斯还大力宣扬了一项举措,即披露更多有关美国国家安全局发现的漏洞的规定。

尽管关于幽灵和熔毁所代表的的错误被人再次发现有很多离奇的轶事证据,但目前还不清楚这种现象已经变得多么普遍。

由布鲁斯·施奈尔与他人共同撰写的哈佛研究报告,对一份包含4300个漏洞的漏洞报告数据进行了研究。在最初发现的60天内,14%的安卓漏洞被再次报告,大约13%的Chrome漏洞被再次发现。施奈尔说:“对美国国家安全局来说,考虑到原始数据,抓住漏洞比你想象的要危险得多。”

但是,兰德(RAND)公司去年发布的另一项研究发现,在一年之内,只有5.7%的漏洞会在一年内再次发现并报告,不过这项研究并没有考虑到其他的秘密发现。

兰德研究报告的作者之一莉莲·阿布隆(Lillian Ablon)认为,幽灵和熔毁的重新发现并不是一个广泛的信号,表明所有的错误都被发现了好几次,但是计算机安全的趋势会突然让很多人把目光聚焦在一个关单一而又狭窄的领域。“在一个领域可能会发生bug碰撞,但我们无法得出一个更大的结论,即bug的碰撞总是会发生,”她说。

保罗·科彻认为,真正的教训是,安全研究界不要追随彼此的脚步,而是要找到并修复那些晦涩难懂、很难引起广泛关注的代码中的bug。

“在我的职业生涯中,每当我在某个没有看到有关安全研究人员的地方,我就会在那里发现一些令人讨厌和不愉快的东西,”科彻说。“对我来说,令人震惊的是,这些攻击已经存在很久了还没有被发现。让我恐惧的问题是,还有多少类似的事情已经存在了10年或15年了?”

原文链接:https://www.wired.com/story/meltdown-spectre-bug-collision-intel-chip-flaw-discovery/

最新文章
相关阅读