云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站建设_企业网站html模板_学生机

小七 141 0

为非技术观众解释熔毁/幽灵错误

上周宣布了两个重大的计算机漏洞的消息。他们被称为熔毁和幽灵。这些错误利用了现代CPU所实现的非常技术化的系统,使计算机速度极快。即使是技术含量很高的人也会发现很难把这些bug的工作原理弄清楚。但是,通过一些类比,我们可以确切地了解这些bug到底发生了什么。如果你发现自己对这些错误到底发生了什么感到困惑,请继续阅读-这个博客是为你准备的。"当你走到岔路口时,抓住它。"—尤吉·贝拉一天下午晚些时候,穿过家附近的一片森林,用GPS导航,你来到了一个岔口,这条路你已经走了很多次了。不幸的是,由于某些神秘的原因,你的GPS不工作,作为一个有条不紊的人,你喜欢非常仔细地跟踪它。等待GPS重新开始工作让你心烦意乱,因为你在浪费时间回家。不是等待,而是根据过去的经验,明智地猜测哪条路最有可能,然后沿着右手边的路走。在走了一小段距离后,GPS就会激活,告诉你哪条路是正确的。如果你预测正确,那么你就节省了大量的时间。如果没有,那么你跳到另一条路继续走下去。几乎每台计算机的CPU内部都会发生类似的情况。计算机的本质和操作的根本是分支能力,在两种不同的代码路径之间进行选择。当您阅读本文时,您的web浏览器正在不断地做出分支决策(例如,它的某些部分正在等待您单击某个链接以转到其他页面)。CPU达到惊人速度的一个方法是能够预测两个分支中哪一个最有可能,并在知道这是否是正确的路径之前开始执行它。例如,检查您是否单击此链接的代码可能有点慢,因为它正在等待鼠标移动和按钮单击。CPU将不再等待,而是开始自动执行它认为最有可能的分支(可能是您没有单击链接)。一旦检查实际指示"clicked"或"not clicked",CPU要么继续沿着它所接受的分支继续,要么放弃它已经执行的代码,在"fork in the path"重新启动。这被称为"分支预测",可以节省大量的空闲处理器时间。它依赖于CPU的能力来"推测性地"运行代码,并在代码一开始就不应该运行的情况下丢弃结果。过去每次你走右边的路都是对的,但今天不是。今天是冬天,树叶稀疏,你会看到一些你不应该走的路:一个隐藏着外星人技术的秘密政府基地。但是想要快速回家,你无论如何都要走这条路,却没有意识到今天GPS会指示左手的路径,让你远离危险。在全球定位系统恢复生命之前,你可以在树上瞥见一个外星人。过了一会儿,两个黑衣人出现了,抹去你的记忆,把你扔回到岔路口。不久之后,GPS发出哔哔声,你就沿着左手边的小路走了。类似的事情发生在幽灵/熔毁攻击中。CPU开始执行一个它以前学习过的代码分支,它通常是要运行的正确代码。但它被一个聪明的攻击者骗了,这次它错了。更糟糕的是,代码将访问它不应该访问的内存(可能来自另一个程序),从而访问其他机密信息(如密码)。当CPU意识到它走错了方向,它就会忘记它所做的所有错误工作(以及它访问不该访问内存的事实),而是执行正确的分支。即使非法内存被访问,它所包含的内容也被CPU遗忘了。熔毁和幽灵的核心是从这些推测性执行的代码中过滤信息的能力,这些信息是通过所谓的"侧通道"非法访问内存的。你真的听说过黑衣人的谣言,想找个办法让自己知道你是否见过外星人。因为在你看到外星人和你的记忆被抹去之间只有很短的一段时间,你就想出了一个计划。如果你看到外星人,你会大口吞下背包里的能量饮料。一旦被黑衣人放回岔口,你可以通过步行500米并自己计时来发现你是否喝了能量饮料(因此你是否看到了外星人)。如果你把多余的碳水化合物放在反应堆堆芯里,你会跑得更快。计算机也通过在CPU内部保存一份频繁或最近访问的信息而达到了高速。数据离CPU越近,使用速度越快。CPU中最近/频繁使用的数据存储称为"缓存"。分支预测和缓存都意味着CPU的速度非常快。可悲的是,它们还可以组合在一起,造成最近在Intel和其他CPU上报告的安全问题。在熔毁/幽灵攻击中,攻击者使用时间信息(而不是能量饮料)来确定访问了什么秘密信息(相当于外星人的真实世界)。在访问非法内存后的一瞬间,在运行的代码被CPU遗忘之前,攻击者的代码将一个字节加载到CPU缓存中。它完全可以合法访问的一个字节;从它自己的程序内存中取出的东西!然后,攻击者可以通过尝试读取同一个字节来确定分支中发生了什么:如果读取需要很长时间,那么它就不在缓存中,如果不需要很长时间,那么它就在缓存中。时间上的区别是攻击者只需要知道CPU不应该执行的分支中发生了什么。将其转化为实际读取非法内存的漏洞很容易。只要你读到的每一个非法内存位都要重复这个过程一次又一次。每一个位的1或0可以转换为CPU缓存中是否存在一个项,该项是使用上面的计时技巧"读取"的。虽然这看起来像是一个费力的过程,但事实上,这是一个可以很快完成的事情,从而使计算机的整个内存被转储。在现实世界中,为了泄露外星人的详细信息(他们的颜色、大小、语言等),沿着小路走下去被黑衣人干掉是不切实际的,但在计算机中,由于固有的速度(每秒100亿个分支!),可以一次又一次地重做分支。如果一个攻击者可以转储一台计算机的内存,它可以访问皇冠上的宝石:内存中的任何时刻都可能非常非常敏感:密码、密码机密、你正在写的电子邮件、私人聊天等等。结论我希望这能帮助你理解熔毁和幽灵的本质。这两种攻击都有许多变体,它们都依赖于相同的思想:让CPU推测性地运行一些代码(通过分支预测或其他技术),这些代码通过CPU缓存使用定时侧信道非法访问内存和提取信息。如果你愿意阅读所有血腥的细节,有一篇关于熔毁的文章,另一篇是关于幽灵的。感谢:我感谢所有阅读本文并给我反馈的人(包括温和地告诉我我不理解分支预测和推测执行的方式)。特别感谢大卫·雷格、肯顿·瓦尔达、克里斯·布兰奇、弗拉德·克拉斯诺夫、马修·普林斯、米歇尔·扎特琳和本·卡特赖特·考克斯。非常感谢Kari Linder的插图。