原创精选> 正文
2018-01-04 15:00
文:冲波逐浪
英特尔芯片的漏洞背景:
大家都知道计算机的中央处理器(CPU)相当于大脑。但为了便于说明相关问题,这里采用一些不严格的比喻:中央处理器(CPU)相当于皇城,其中主要有皇帝(运算器)和大殿(缓冲储存器)。某个官员想办成件事(程序)得到大殿里捧着文案(数据)面见皇上。皇帝不可能同时见N多人,等着见皇上的也不能挤在大殿里。于是着急见皇上的(开启的程序)就先到各偏殿(内存/储存器)里候着,不着急的就在宅子里(磁盘/硬盘)歇着。
见皇上的都带着一堆文案,总得有地儿放,也不能跟其他官员的混了。于是偏殿隔成一个个单间,供面见皇上的轮流使用。最早单间都是经纬定位(物理地址),可又难记又不规整,太监们、大臣们都头疼。于是就统一编号(虚拟地址),简单易用。但说召见21号的,批文放27号,大家得知道21号、27号在哪儿。于是就修了部对照表(虚拟地址到物理地址对照,理工男称为“内存映射页表”)。对照表当然也包括皇宫各处的对照,比如书房。皇帝处理事不可能全靠官员及其自己的文案,需要皇宫里很多资源(操作系统内核),这些就放书房里。面见皇上来回的奏折、批文就按需要分别各处去放。
这竹子编的对照表也很占地方,总不能来回放东西都得得跑趟藏经楼去找对照表。所以常用的需要放大殿里(TLB,转换检测缓冲)。京城地价儿都十万一平了,金銮殿少说也得百万一平。所以这放大殿里的简要对照表TLB不能太大了。
问题就出在人穷没钱占地上。安全起见,大臣们进宫见皇上,只需要知道自己呆的地方及在哪儿放东西就是,别的地方别瞎串。但给每人一部特定对照表就太多了,大殿里常用对照表基本就没用,大家每次得跑藏经楼。于是说大臣们合用一部各单间的对照表,皇帝、太监们用一部去书房等皇家禁地的。可这两部放大殿里轮番倒腾太累。于是就用一部,一半是给大臣们的,一半是给皇家的。但这样大臣们就能看到书房在哪儿了,就可以琢磨着去那里转悠着偷些值钱的物件,窥看些其他大臣们的事了。
为了解决上述问题,就给每人发手环,是皇家的戴黄色的(Ring 0),是大臣的戴蓝色的(Ring 3)(有各种Ring,这里不重要)。大殿里举黄旗,皇家禁地的对照表可用,地方可去,举蓝旗,只有偏殿的对照表可用,单间可去。理论上这没问题。
英特尔芯片的漏洞:
皇上办事,之前一般是查好大殿的旗子、办事人员的手环及批文可去的地方,然后皇帝批后放过去。后来皇家为了跟上时代的步伐,提高工作效率,不再循规蹈矩地一步步处理事务,而是并行处理,皇帝先批着(计算),同时查着该去的地方。万一发现没地方可去或地方是皇家禁地办事人员是蓝手环,那皇帝算白批了条子作废。这称为“预测执行”,假设最后有处可去并被允许去。类似工商局为提高效率,先办理注册,同时假设公司完善其他注资等手续一样。
英特尔的皇宫(而非超微AMD)允许“预测执行”中带蓝手环的去皇家书房禁地放东西。虽然正常情况下皇家卫队会发现并制止。但“预测执行”办公中,大臣捧着一堆文案摊在大殿中、皇帝批阅着、太监们审查着、加之英特尔后来还加了SGX等功能改动了些人员去各处的方式,各种动作完成的时间顺序不同等神秘巧合会导致一阵混乱,而让大臣们有可乘之机进入书房搅局。至于具体如何发生,哪些款芯片受到影响,目前是技术圈“秘密”,行规是等微软、苹果等补丁打好了才会公开。目前英特尔1995年Pentium Pro以后的芯片全在网内,ARM也在。
解决方案:
最早发现并提供补丁的是澳大利亚的Graz技术大学,开发了KAISER(好像是两个月前)。不过只是让到皇家书房里放文案随机化,让黑客难以顺利功破而已。但是目前技术圈已经可以随意泄露及获取皇家书房的文案,所以干脆隔离了皇家书房禁地的对照表,不给大臣们看到。在Linux中称为内核页表隔离(KPTI)。Windows、MacOS,FreeBSD的补丁方案都大致相同,因为系统内存处理与处理器之间关联极紧,什么操作系统这里处理方式都一样。
解决方案的影响:
补丁就是把大殿里的对照表皇家书房的部分清空,真的皇家书房的对照表仅在皇帝、太监们间办事时提供。这实际上就失去了最早合两部对照表为一以争取效率的意义,等同于两部对照表在大殿里来回倒腾,所以导致皇家处理事务效率降低。
效率降低的影响依大臣们办事的不同而不同。办的事如果需要去皇家书房很多,效率降低很多(从上的解释中可见,如果仅仅是需要皇家去书房做些事,效率降低50%)。如果办的事情不需要皇帝、太监怎么去皇家书房,或者办的事情的费时主要在其他事情上,如派人把皇帝批文快马扬鞭送到海南(类似实时网络上读取数据库信息),大殿里倒腾对照表的时间可以忽略不计,那么效率的影响微乎其微。
超微AMD能否幸灾乐祸?
由于AMD的工程师说AMD芯片不存在相关问题,华尔街一度将AMD股价推上10%。随后,英特尔发表声明说其他厂商也难逃厄运。这其中的事情很微妙:虽然说AMD芯片没有相关问题,在Linux内核补丁中,原来的“如果是AMD芯片无需补丁”这一逻辑被技术圈绕过/取消,至今没有加回。即,AMD芯片即使不受影响,操作系统的补丁对所有x86芯片等同对待,AMD上运行的操作系统依然受同样的效率降低影响。也就是说,AMD的皇宫中也同样清空了大殿里给大臣们用的对照表中皇家书房部分,得与真实的一份来回倒腾。至于AMD央求着别同等对待,内核技术圈为何还一视同仁,目前就留给大家无限想象吧。
不过有一点可以注意,英特尔INTC总有一时疏忽之刻,总有一时逊于超微AMD之刻,但每次都会迅速解决并超出。技术、市场、宣传等手段如何不重要,重要的是INTEL这辈子基本是压着AMD没让翻过身。所以股市上的过激反应,拿INTC的不用慌张,拿AMD的也不用太兴奋。