硬科技:被Intel处理器漏洞吓傻前 科科们要先知道的事(下)

现在也差不多是各位科科们该好好瞧瞧Google Project Zero公布的「幽灵 (Spectre)」和「熔断 (Meltdown)」的时候了。

还是一句老话,一个简单的比较表,总是胜过千言万语不著边际的废话。

天底下所有的技术,终究都是为了解决人类碰到的问题,关于这两个命名看起来很恐怖的攻击手段,也自然可以用生活化的比喻来解释。目前网路上已不乏诸多「文科生」的野人献曝,同样文组背景的笔者,参考了某些颇具创意的解释,自己也来掰一个。

看来依然无解的「幽灵 (Spectre)」

小明每天固定都在同一间金拱门... M记... 算了,不重要,买一样的汉堡,他的爱慕者小强也想知道他吃哪种汉堡,所以乔装路人「尾行」在后,进行调查。

小明对收银员说:「点和昨天一样的」,然后就付钱拿走汉堡 (密码) 闪人了。

小强接着就对收银员讲:「我要点和前面一样的。(非法读取)」

收银员:「你不能窥探他人隐私!」,然后就把小强轰出去了。(被执行权限挡下,停止执行)」

隔天,小强就找了另一位帮手,跟在他的后面排队 (旁路攻击)。

小强在小明点餐时,一直高喊「我要点和前面一样的。(非法读取)」,然后就被轰出去了 (被执行权限挡下,停止执行),但是厨房里面做汉堡的厨师听到了 (制造错误分支预测),为了提升工作效率,多做了一个汉堡丢到空荡荡的输送台上 (预测执行错误的指令,将不该被存取的记忆 *** 址载入快取内)。

轮到帮手时:「我饿死了,我要点店内全部的汉堡,但是哪个最快就先给我。(旁敲侧击)」

最后帮手就拿到了和小明一样种类的汉堡 (因为资料已经在快取内,读取最快),小强也就搞清楚小明吃的到底是什么了,真是可喜可贺。至于小强有没有塞给帮手足够的汉堡钱,我们就不得而知了。

更糟糕的是,这奇计淫巧在Google引发大爆炸时,乍看之下没有啥有效的处理方法,但后来Google又宣称已经找出不伤害效能的完美解决之道,看来秘诀是「在厨房和柜台中间,插入一位假装厨师的中间人,或著弄出个假厨房,隔离两者 (设置「陷阱 (Trap)」,让预测执行跳到人畜无害的位址)」,无法直接骗到厨师。效果如何,我们可以继续观望。

「幽灵 (Spectre)」:透过欺骗手法,让其他应用程式能进入记忆体内的任意位置存取内容,Intel AMD ARM都集体躺着中枪,现在就看Google公布的「绝招」到底有没有那么神。

只有Intel独享的「熔断 (Meltdown)」

假设某位不良男子大学生想知道暗恋的对象在不在系学会,但对方和友人早已对他的痴汉行径深感反感,根本宁愿打死他也不让他知道倒楣的女主角身处校园的何处,所以他就打电话去系学会问助教:

「请帮我查询XXX (被骚扰的女主角) 在系学会帮忙的日程表,看看她是不是在系办帮忙 (非法存取)。如果在的话,也请一并协助我有哪些科目已经快要被当了,需要我去跑系办一个一个对教授磕头跪算盘求Pass,这些可能需要请她帮忙讲好话der。」

助教一时不察,先看了系学会义工的日程表,嗯,她的确正在系学会,然后又花了不少时间去查询这在系上恶名昭彰无聊男子快要挂掉的科目。(预测执行)

但助教随后突然反应过来:我没事去帮这快被二一的痴汉干嘛 (察觉侵犯权限)?于是就在电话的另一端回复:「你去死吧,打死不让你去骚扰XXX。」(被执行权限挡下,停止执行)

「那好吧,就请助教大人告诉我有哪些科目需要在教授前面跪算盘的?」(旁敲侧击)

因为助教已经花了不少时间查询到这些资讯,而且这家伙就算再该死,也总得有权知道自己是怎么死的,所以就「你快被死当的科目总计有....」 (预测执行错误的指令,将不该被存取的记忆 *** 址载入快取内)。

通常要找出这些资料需要好几分钟,但助教很快就告诉你答案,代表她真的有帮你处理,足以推测倒楣的XXX的确正在系办,恭喜他,这位不良男子大学生可以准备拔腿冲过去了。

这招也不限只找一个人,假如他不想看到女主角身边的姊妹掏亲卫队碍事,他也可以设定一份名单 (索引范围) 和不同的衍生条件,去尝试推敲出系办现在到底有哪些讨厌鬼,只是助教可能会先想砍死他,像「你现在给我来系办,我保证不会打死你 (我并没有违反我不杀的誓言,只是把你活活打个半死)」之类的。

这招的解法也很简单:聘请另一位根本不认识系上同学的临时工,专职负责查学生成绩 (隔离分页表),让助教连「预测执行」的机会都没有,但代价就是要多花钱雇用另一个人,助教要查成绩时也只能请他查,提高时间成本。

「熔断 (Meltdown)」:打破应用程式被禁止任意存取系统记忆体的保护机制,让应用程式也能跟着存取到记忆体内的内容,目前仅Intel受害,透过隔离分页表可以处理,只是成本很高。

面对排山倒海的媒体报导,莫惊慌、莫紧张、莫害怕

世上多数媒体的基因总是内建惟恐天下不乱的本能,但我们回到原点,这些利用处理器预测执行缺陷的攻击手段,真的如部份媒体绘声绘影般的可怕吗?笔者觉得:不会。

这都是「本地端」的攻击手段,并不是骇客远在地球的另一端按下按键、你的电脑就瞬间自爆的远端攻击。 现阶段只有资料被不当读取的风险 (读出来也不见得有用),但不会破坏现有运行中系统的强固性。 成功的攻击都需要搭配大量的「助攻」,现实世界不太可能出现如此理想的环境。讲的更白一点,无论是幽灵还是熔断,其实际危险性恐怕不会比十多年前Intel HyperThreading旁路攻击的安全性事件严重到哪里去。

目前最积极介入此事的Google和Amazon,其最担忧的莫过于资料中心内虚拟机器Hypervisor被用户端作业系统偷读重要资料、导致影响虚拟机安全性这档事,对人类最大的冲击也就是数以万计的伺服器要安装修正档并重新开机,进而冲击云端服务的总体效能吧。手机的话,再看看。总之,静观其变即可,为了这种蠢事而惊呆,不是站在时代浪头的科科们该有的作为。

但这次所有晶片厂商的反应与危机处理,特别是首当其冲的Intel,过程和态度是否「社会观感不佳」,那又是另外的故事了。不过,难道你不会好奇,既然Intel AMD ARM的非循序执行处理器都中枪了,难道IBM Oracle Fujitsu的,就能保证全身而退吗?

至于这两种攻击的根除之道,不学无术的笔者已经想到了完美的解决方案,但如同费玛最后定理,碍于文章字数限制写不出来,我们下次有机会再好好谈谈,科科。 ?