大白话描述Intel的处理器漏洞,让所有人都能看懂
作为科班出身码农,对计算机体系结构有一定了解,那我就尝试用大白话来说一下这个问题吧。AMD其实也存在漏洞,但是最终没读到数据,发论文的人猜测AMD跑的太慢才没成功,哈哈哈。Spectre (幽灵)与Meltdown (熔断)其实原理差不多。
漏洞概述
漏洞是Google Project Zero发表的,漏洞有三个:bounds check bypass (CVE-2017-5753),branch target injection (CVE-2017-5715)以及rogue data cache load (CVE-2017-5754),其中前两个被归为一类,被命名为Spectre (幽灵),另一个被命名为Meltdown (熔断)。其中Meltdown (熔断)主要涉及的是Intel的CPU,AMD的暂时不受影响(根据meltdownattack网站的论文的猜测可能是AMD处理器跑的太慢所以没成功,农企吐血三升坚持没倒),可以通过系统的升级来防范,后果是性能会差5%——30%,其实个人用户影响不明显,你可以照常吃鸡,云服务商会比较头疼。另一个Spectre (幽灵)就没法改进了,这涉及到计算机的体系架构,所以AMR、ARM也会有问题,只能等全新设计的新处理器了。
Meltdown需要系统加入KPTI机制,会降低性能
为了大部分人能看懂,这里会采用一些不是特别准确但比较容易理解的方式描述。我们打开电脑、手机什么都不干会查看内存会发现内存已经被占用了一大块,这一块是什么呢?系统内核。
我们可以把内存看作是一个酒店,内存里的内容看作是用户,系统看作是管理人员。在这个内存酒店里,管理人员平时也是在酒店里的,有自己待的房间,通常是房间号最大的房间里。酒店的管理人员中也许会有人有问题,小偷可以直奔房间号最大的房间去找这个有问题的管理人员,后果就会不堪设想。
那如何阻止小偷找到酒店管理人员呢?那就让管理人员每天换个房间,不是固定在房间号最大的那间房间里。小偷确实不好办了,但是不是完全阻止,但是花点实际还是能找出来这个管理人员住的房间的,(通过时间判断系统内核所在的地方,内核内存泄漏)那这种方式就失效了。
那怎么不让小偷找到酒店管理人员的房间呢?也简单,让酒店管理人员进入密室里面(需要转动个碗,书架自动一开那种),外面房间里留个清洁阿姨,小偷找到这个管理员所在的房间看到的也是清洁阿姨,接触不到酒店管理员,真正需要酒店管理员的时候去转一下碗叫管理员从密室回到这个房间进行操作(这就是TLB 页表切换)。这么做的缺点是要找到管理员还需要转换一下,效率低,这就是操作系统要更新的KPTI机制。据说会降低5%-30%的性能,但是目前已经后很多跑分和测试了,普通用户影响不大,可以照常吃鸡,影响大的是云服务商。
那小偷是通过什么办法找到管理员的呢?其实Meltdown与Spectre的原理差不多,下面一起讲吧。
Spectre漏洞无法解决,只能换新架构处理器(目前还没有)
Spectre与Meltdown漏洞攻击方式都涉及计算机体系结构,这个不太好说,里面异常机制,乱序执行与测序执行。
比如说某个小区住了很多的明星,卓伟的狗仔们都在外面蹲着,不能一直蹲着不吃东西呀,那就去超市采购点吧,最后卓伟结账。狗仔们排队来到超市,一个狗仔采购完第二个狗仔再进去买?那不行,太慢了,所有狗仔都一起进去吧,拿自己要拿的东西(乱序执行),虽然还没结账,但是每个狗仔都拿了相应的物品(预先执行)然后在结账台那集合排队顺序出去,最后卓伟结账,卓伟突然发现没带钱手机也没电了没法支付(遇到异常),好吧,前面结账的都得回来不能拿东西走,订单无法生成。这个过程很正常,但是每个狗仔都拿了自己要的东西,这个东西被放到结账台旁边(缓存)了,这也不会有影响。事实上还是有影响的,因为超市会根据消费者的购买习惯变动货物架的摆放位置,很多人应该都见过,计算机也是一样,缓存访问过的内存地址取数据会更快,这样效率更快一些,这个访问的快慢就是一个可以被利用的漏洞。
结账的时候,收银员会问你,要手机支付、刷卡还是现金?(分支)你不告诉收银员后面没法进行。结帐的队伍排的那么长,得提高点效率呀,收银员发现最近手机支付的用户在年轻人中占多数,一看你是年轻人一边询问一边默认选择手机支付(预测执行)。这么做有80%(据说Intel的预测执行准确率就有80%)的时候都是正确的,虽然再切换回来会慢一点但是总体来说是快的。
解释完这些基本的概念,那就说下漏洞的攻击吧,Meltdown就是利用乱序处理器(现在的处理器基本都是乱序的)的预测执行,进行的攻击,防范方面就是上面说的。而Spectre靠的是分支预测执行的错误来进行攻击的,所以要想根本上解决这个问题就要把现代处理器的体系结构进行重新设计,Meltdown也是一样,只是Meltdown还有另一种解决方式那就是前面说的KPTI机制,而Spectre就不行了,所以影响了几乎所有处理器,而且系统也无法解决,只能等全新设计的处理器。
但是就目前看到的消息Spectre影响可能没那么大,原因是读取的速度太慢了,而Meltdown读取内存的速度就很快,大家现在都在讨论。
举例和大白话的描述是为了让更多人理解,里面可能会有一些描述并不十分准确,也欢迎讨论
最后除了谷歌的blog,再推荐个网站meltdownattack,可以加深了解。此外,这篇科普也很浅显易懂,而且说了如何通过数组越界的方式获得数据,https://bbs.ngacn.cc/read.php?tid=13191205评论说AMD的,你先看paper好不好,问题是存在的,只是没有执行成功。
作者:养猫的哈士奇
共有 1 条讨论