可怕!CPU竟成了黑客的帮凶!

2020-06-14 14:14:28 来源:网络整理 作者:管理员

原标题:可怕!CPU 竟成了黑客的帮凶!

可怕!CPU竟成了黑客的帮凶!

本故事根据CPU真实漏洞改编

作者 | 轩辕之风

来源 | 编程技术宇宙(ID:xuanyuancoding)

还记得我吗,我是阿Q,就是那个CPU一号车间的阿Q啊。如果你忘记了我,记得看看这里回忆一下哦:完了!CPU一味求快出事儿了!

自从我们车间用上了乱序执行和分支预测后,生产效率那是大大提升,领导不仅在全厂的员工大会表扬了我们,还把这两项技术向全厂推广,在我们8个CPU核心车间都铺开了,性能甩开竞争对手CPU几条街。

可是,就在我们还沉醉在取得的成绩时,不知不觉我们竟埋下了灾难的种子······

事情还得从不久前的一个晚上说起。

神秘代码

这天晚上,我们一号车间遇到了这样一段代码:

uint8_tarray1[ 160] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};

uint8_tarray2[ 256* 512];

uint8_ttemp = 0;

voidbad_guy( intx) {

if(x < 16) {

temp &= array2[array1[x] * 512];

}

}

不到一会儿功夫,我们就执行了这个bad_guy函数很多次,这不,又来了。

负责取指令的小A向内存那家伙打了一通电话,让内存把参数x的内容传输过来,我们知道,以内存那蜗牛的速度,估计得让我们好等。

这时,负责指令译码的小胖忍不住说了:“你们看,我们这都执行这个函数好多次了,每次的参数x都是小于16的,这一次估计也差不多,要不咱们启动分支预测功能,先把小于16分支里的指令先提前做一些?大家看怎么样”

可怕!CPU竟成了黑客的帮凶!

我和负责数据回写的老K互相看了一眼,都点头表示同意。

于是,就在等待的间隙,我们又给内存那家伙打了电话,让他把array1[x]的内容也传过来。

等了一会儿,数据总算传了过来:

x: 2

array1[x]: 3

拿到结果之后,我们开始一边执行x<16的比较指令,一边继续打电话给内存索要array2[3]的内容。

比较指令执行的结果不出所料,果然是true,接下来就要走入我们预测的分支,而我们提前已经将需要的数据准备到缓存中,省去了不少时间。

就这样,我们成功的预测了后续的路线,我们真是一群机智的小伙伴。

遭遇滑铁卢

天有不测风云,不久,事情发生了变化。

“呀!比较结果是false,这一次的x比16大了”,我执行完结果后发现和我们预期的有了出入。

小A闻讯而来,“额,咱们提前执行了不该执行的指令不会有问题吧?”

可怕!CPU竟成了黑客的帮凶!

老K安慰道:“没事儿,咱们只是提前把数据读到了我们的缓存中,没问题的,放心好啦”

我想了想也对,大不了我们提前做的准备工作白费了,没有多想就继续去执行>16的分支指令了。

随后,同样的事情也时有发生,渐渐的我们就习惯了。

灾难降临

夜越来越深,我们都有点犯困了,突然,领导来了一通电话,让我们放下手里的工作火速去他办公室。

我们几个不敢耽误,赶紧出发。

来到领导的办公室,里面多了两个陌生人,其中一个还被绑着,领导眉头紧锁,气氛很是紧张。

“阿Q啊,你知不知道你们新发明的乱序执行和分支预测技术闯了大祸了?”

我们几个一听傻眼了,“领导,这是从何说起啊?”

领导从椅子上站了起来,指着旁边的陌生人说到:“给你们介绍一下,这是操作系统那边过来的安全员,让他告诉你们从何说起吧!”

这位安全员向大家点了点头,指着被捆绑那人说道:“大家好,我们抓到这个线程在读取系统内核空间的数据,经过我们的初审,他交代了是通过你们CPU的乱序执行和分支预测功能实现的这一目的。”

我和小A几个一听都是满脸问号,我们这两个提升工作效率的技术怎么就能泄漏系统内核数据呢?

真相大白

安全员显然看出了我们的疑惑,指着被捆绑的那个线程说道:“你把之前交代的再说一遍”

“几位大爷,你们之前是不是遇到了分支预测失败的情况?”,那人抬头看着我们。

“有啊,跟这有什么关系?失败了很正常嘛,既然是预测那就不能100%打包票能预测正确啊”,我回答道。

“您说的没错,不过如果这个失败是我故意策划的呢?”

听他这么一说,我的心一下悬了起来,“纳尼,你干的?”

“是的,就是我,我先故意给你连续多次小于16的参数,误导你们,误以为后面的参数还是小于16的,然后突然来一个特意构造的大于16的参数,你们果然上钩了,预测失败,提前执行了一些本不该执行的指令。”

“那又如何呢?我们只是把后面需要的数据提前准备到了缓存中,并没有进一步做什么啊”,我还是不太明白。

“这就够了!”

“你小子都被捆上了,就别吊胃口了,一次把话说清楚”,一旁急性子的老K忍不住了。

可怕!CPU竟成了黑客的帮凶!

“好好好,我这就交代。你们把数据提前准备到了缓存中,我后面去访问这部分数据的时候,发现比访问其他内存快了很多”。

“那可不,我们的缓存技术可不是吹牛的!哎等等,怎么又扯到缓存上去了?”,老K继续问道。

那人继续说道:“如果我想知道某个地址单元内的值,我就以它作为数组的偏移,去访问一片内存区域。利用你们会提前预测执行而且会把数据缓存的机制。你们虽然预测失败了,但对应的那一块数据已经在缓存中了,接着,我依次去访问那一片内存,看看谁的访问时间明显比其他部分短,那就知道哪一块被缓存了,再接着反推就能知道作为偏移的数值是多少了,按照这个思路我可以知道每一个地址单元的内容”

可怕!CPU竟成了黑客的帮凶!

我们几个一边听着一边想着,琢磨了好一会儿总算弄清楚了这家伙的套路,老K气得火冒三丈,差点就想动手修理那人。

“好你个家伙,倒是挺聪明的,可惜都不用在正途上!好好的加速优化机制竟然成为了你们的帮凶”,我心中也有一团火气。

亡羊补牢

事情的真相总算弄清楚了,我们几个此刻已经汗流浃背。

经过和安全员的协商,操作系统那边推出了全新的KPTI技术来解决这个问题,也就是内核页表隔离。

可怕!CPU竟成了黑客的帮凶!

以前的时候,线程执行在用户态和内核态时用的是同一本地址翻译手册,也就是人们说的页表,通过这本手册,我们CPU就能通过虚拟地址找到真实的内存页面。

现在好了,让线程运行在用户态和内核态时使用不同的手册,用户态线程的手册中,内核地址空间部分是一片空白,来一招釜底抽薪!

本以为我们可以回去了,没想到领导却给我们出了难题,“这祸是你们闯下的,人家操作系统那边虽然做了保护,你们是不是也该拿出点办法来呢,要不然以后我们CPU还怎么抬得起头来?”

你有什么好办法吗,帮帮我们吧!

幕后

本文描述的是两年前爆发的大名鼎鼎的CPU的熔断与幽灵漏洞。

乱序执行与分支预测是现代处理器普遍采用的优化机制。和传统软件漏洞不同,硬件级别的漏洞影响更大更深也更难以修复。

通过判断内存的访问速度来获知是否有被缓存,这类技术有一个专门的术语叫侧信道,即通过一些场外信息来分析得出重要结论,进而达成正常途径无法达成的目的。

后面的文章中此类手法的故事还将继续上演,敬请期待!

特别鸣谢:网友几多风雨劲提供的技术支持

显示全文
为您推荐
曲阜市美食
曲阜市美食

【导读】 曲阜市美食,下面是小编为你收集整理的,希望对你有帮助!曲阜市美食有曲阜熏豆腐、曲阜煎饼、吊炉烧饼、羊肉泡粥、孔府糕点、孔府宴、水煎包、御带虾仁、孔府一品锅、带子上朝等。1、曲阜熏豆腐:曲阜熏豆腐,又称孔府熏豆腐,驰名中外,为山东独具风味的特色传统小吃。风......

发布时间:2023-10-14 14:01:08

win10刻录光盘格式化失败
win10刻录光盘格式化失败

【导读】 win10刻录光盘格式化失败,下面是小编为你收集整理的,希望对你有帮助!原因及解决方法为:1、可能是DVD刻录光驱光头功率不足,这个是硬件问题,不是软件问题;2、一般笔记本的刻录机刻录功能方面的寿命在一年左右,刻录功能不好的光驱,读压制出来的光盘没有问题,但不能读可刻光盘......

发布时间:2023-10-14 13:01:05

博鳌在什么地方
博鳌在什么地方

【导读】 博鳌在什么地方,下面是小编为你收集整理的,希望对你有帮助!博鳌在哪里海南省琼海市。位于琼海市东部海滨,万泉河入海口。东临南海、南与万宁市交界,西与琼海市朝阳乡、上甬乡相邻,北与潭门镇接壤。距离琼海市嘉积镇17千米、海口市105千米、三亚市180千米。博鳌是海......

发布时间:2023-10-14 12:56:21

贵州千年石崖产蛋之谜,产蛋崖为什么会产石蛋(地质原因)
贵州千年石崖产蛋之谜,产蛋崖为什么会产石蛋(地质原因)

【导读】 贵州千年石崖产蛋之谜,产蛋崖为什么会产石蛋(地质原因),下面是小编为你收集整理的,希望对你有帮助!小鸡产蛋非常常见,但大家见过石壁产蛋吗?在我国贵州就有这样一个奇闻,一个千年的石崖,每隔30年就会产下一些石蛋。对于千年石崖产蛋之谜,人们曾疑惑不解。但直到近年,千年石崖产蛋之谜才被揭开谜团。贵州产蛋......

发布时间:2023-10-14 12:01:06

宣汉龙图片
宣汉龙图片

【导读】 宣汉龙图片,下面是小编为你收集整理的,希望对你有帮助!宣汉龙在恐龙世界中,食肉恐龙总是更受人关注的,不过在目前已命名的700多种恐龙中,大家知道的食肉恐龙很少。为了丰富大家的恐龙知识,今天小编将为大家介绍宣汉龙,它是一种大型食肉恐龙,一起去认识看看。宣汉......

发布时间:2023-10-14 11:01:05

清明节的来历简单介绍
清明节的来历简单介绍

【导读】 清明节的来历简单介绍,下面是小编为你收集整理的,希望对你有帮助!1、清明节的名称来由得名于节气,《历书》:春分后十五日,斗指丁,为清明,时万物皆洁齐而清明因此得名。2、清明节,是中华民族最隆重的祭祖大节,属于礼敬祖先、慎终追远、弘扬孝道的一种文化传统节日。清明节历......

发布时间:2023-10-14 10:01:05

外星人控制着轮回?人类的肉体只是灵体的牢笼(匪夷所思)
外星人控制着轮回?人类的肉体只是灵体的牢笼(匪夷所思)

【导读】 外星人控制着轮回?人类的肉体只是灵体的牢笼(匪夷所思),下面是小编为你收集整理的,希望对你有帮助!导语:大家会不会有一种感觉,自己现在正在经历的事情感觉好像发生过,但是又完全不知道是什么时候发生的。这种匪夷所思的感觉有专家对此进行了解答,他称这是外星人控制着轮回,现在做的事情可能我们轮回前也做过呢......

发布时间:2023-10-14 09:01:05

巨嘴龙:中国小型植食恐龙(长1米/上嘴壳内勾尖锐)
巨嘴龙:中国小型植食恐龙(长1米/上嘴壳内勾尖锐)

【导读】 巨嘴龙:中国小型植食恐龙(长1米/上嘴壳内勾尖锐),下面是小编为你收集整理的,希望对你有帮助!巨嘴龙是一种角龙下目中的原角龙科恐龙,诞生于1亿-6500万年前的白垩纪早期,体长只有1米,属于植食性小型恐龙的一种,它和其他原角龙科恐龙最大的不同就是长有类似鹦鹉鸟喙状的庞大嘴壳,尤其是上嘴壳极度弯......

发布时间:2023-10-14 08:01:06

傈僳族的传统节日:基本每个月都有节日度过(傈僳族介绍)
傈僳族的传统节日:基本每个月都有节日度过(傈僳族介绍)

【导读】 傈僳族的传统节日:基本每个月都有节日度过(傈僳族介绍),下面是小编为你收集整理的,希望对你有帮助!僳族节日是非常多的,大规模活动的节日有“阔时节”、“新米节”、“刀秆节”、“火把节”、“收获......

发布时间:2023-10-14 07:01:05

我国十大未解之谜是什么?双鱼玉佩是怎么回事?
我国十大未解之谜是什么?双鱼玉佩是怎么回事?

【导读】 我国十大未解之谜是什么?双鱼玉佩是怎么回事?,下面是小编为你收集整理的,希望对你有帮助!在这个世界上充满着未解之谜,不是所有的事情都是能够用一种有理有据的方法才能解释的通的。而且随着时间的推移,事情的真相可能变得更加的模糊。在我国的历史当中,就存在着十大未解之谜,而这十大未解之谜当中,双......

发布时间:2023-10-14 06:01:06

安全防范措施
安全防范措施

【导读】 安全防范措施,下面是小编为你收集整理的,希望对你有帮助!1、落实安全责任、实施责任管理,建立、完善以项目经理为第一责任人的安全生产领导组织。承担组织、领导安全生产的责任并建立各级人员的安全生产责任制度,明确各级人员的安全责任。2、安全检查是发现危险源的重要......

发布时间:2023-10-14 05:01:04

李商隐最出名的诗是哪一首?(含赏析)
李商隐最出名的诗是哪一首?(含赏析)

【导读】 李商隐最出名的诗是哪一首?(含赏析),下面是小编为你收集整理的,希望对你有帮助!李商隐是我国晚唐时期的著名诗人,也是我国在唐朝时期少见的擅于精雕词句,堆砌典故的诗人。他非常擅于作诗,诗风或华丽优美(如:重过圣女祠);或晦涩难懂(如:锦瑟);或缠绵悱恻(如:无题·相见难时别亦难)。......

发布时间:2023-10-14 04:01:05