旅行者一号探测器在浩瀚的宇宙中享受星际之旅,飞行的几十年来它不仅看过许多景色,而且还用照片的形式记录下来了,人类喜出望外的同时发现旅行者一号发回神秘照片竟然透露着恐怖,这些照片有何恐怖之处呢?下面小编就和大家一起了解下吧!...
发布时间:2024-09-21 06:02:48

本故事根据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分支里的指令先提前做一些?大家看怎么样”

我和负责数据回写的老K互相看了一眼,都点头表示同意。
于是,就在等待的间隙,我们又给内存那家伙打了电话,让他把array1[x]的内容也传过来。
等了一会儿,数据总算传了过来:
x: 2
array1[x]: 3
拿到结果之后,我们开始一边执行x<16的比较指令,一边继续打电话给内存索要array2[3]的内容。
比较指令执行的结果不出所料,果然是true,接下来就要走入我们预测的分支,而我们提前已经将需要的数据准备到缓存中,省去了不少时间。
就这样,我们成功的预测了后续的路线,我们真是一群机智的小伙伴。
遭遇滑铁卢
天有不测风云,不久,事情发生了变化。
“呀!比较结果是false,这一次的x比16大了”,我执行完结果后发现和我们预期的有了出入。
小A闻讯而来,“额,咱们提前执行了不该执行的指令不会有问题吧?”

老K安慰道:“没事儿,咱们只是提前把数据读到了我们的缓存中,没问题的,放心好啦”
我想了想也对,大不了我们提前做的准备工作白费了,没有多想就继续去执行>16的分支指令了。
随后,同样的事情也时有发生,渐渐的我们就习惯了。
灾难降临
夜越来越深,我们都有点犯困了,突然,领导来了一通电话,让我们放下手里的工作火速去他办公室。
我们几个不敢耽误,赶紧出发。
来到领导的办公室,里面多了两个陌生人,其中一个还被绑着,领导眉头紧锁,气氛很是紧张。
“阿Q啊,你知不知道你们新发明的乱序执行和分支预测技术闯了大祸了?”
我们几个一听傻眼了,“领导,这是从何说起啊?”
领导从椅子上站了起来,指着旁边的陌生人说到:“给你们介绍一下,这是操作系统那边过来的安全员,让他告诉你们从何说起吧!”
这位安全员向大家点了点头,指着被捆绑那人说道:“大家好,我们抓到这个线程在读取系统内核空间的数据,经过我们的初审,他交代了是通过你们CPU的乱序执行和分支预测功能实现的这一目的。”
我和小A几个一听都是满脸问号,我们这两个提升工作效率的技术怎么就能泄漏系统内核数据呢?
真相大白
安全员显然看出了我们的疑惑,指着被捆绑的那个线程说道:“你把之前交代的再说一遍”
“几位大爷,你们之前是不是遇到了分支预测失败的情况?”,那人抬头看着我们。
“有啊,跟这有什么关系?失败了很正常嘛,既然是预测那就不能100%打包票能预测正确啊”,我回答道。
“您说的没错,不过如果这个失败是我故意策划的呢?”
听他这么一说,我的心一下悬了起来,“纳尼,你干的?”
“是的,就是我,我先故意给你连续多次小于16的参数,误导你们,误以为后面的参数还是小于16的,然后突然来一个特意构造的大于16的参数,你们果然上钩了,预测失败,提前执行了一些本不该执行的指令。”
“那又如何呢?我们只是把后面需要的数据提前准备到了缓存中,并没有进一步做什么啊”,我还是不太明白。
“这就够了!”
“你小子都被捆上了,就别吊胃口了,一次把话说清楚”,一旁急性子的老K忍不住了。

“好好好,我这就交代。你们把数据提前准备到了缓存中,我后面去访问这部分数据的时候,发现比访问其他内存快了很多”。
“那可不,我们的缓存技术可不是吹牛的!哎等等,怎么又扯到缓存上去了?”,老K继续问道。
那人继续说道:“如果我想知道某个地址单元内的值,我就以它作为数组的偏移,去访问一片内存区域。利用你们会提前预测执行而且会把数据缓存的机制。你们虽然预测失败了,但对应的那一块数据已经在缓存中了,接着,我依次去访问那一片内存,看看谁的访问时间明显比其他部分短,那就知道哪一块被缓存了,再接着反推就能知道作为偏移的数值是多少了,按照这个思路我可以知道每一个地址单元的内容”

我们几个一边听着一边想着,琢磨了好一会儿总算弄清楚了这家伙的套路,老K气得火冒三丈,差点就想动手修理那人。
“好你个家伙,倒是挺聪明的,可惜都不用在正途上!好好的加速优化机制竟然成为了你们的帮凶”,我心中也有一团火气。
亡羊补牢
事情的真相总算弄清楚了,我们几个此刻已经汗流浃背。
经过和安全员的协商,操作系统那边推出了全新的KPTI技术来解决这个问题,也就是内核页表隔离。

以前的时候,线程执行在用户态和内核态时用的是同一本地址翻译手册,也就是人们说的页表,通过这本手册,我们CPU就能通过虚拟地址找到真实的内存页面。
现在好了,让线程运行在用户态和内核态时使用不同的手册,用户态线程的手册中,内核地址空间部分是一片空白,来一招釜底抽薪!
本以为我们可以回去了,没想到领导却给我们出了难题,“这祸是你们闯下的,人家操作系统那边虽然做了保护,你们是不是也该拿出点办法来呢,要不然以后我们CPU还怎么抬得起头来?”
你有什么好办法吗,帮帮我们吧!
幕后
本文描述的是两年前爆发的大名鼎鼎的CPU的熔断与幽灵漏洞。
乱序执行与分支预测是现代处理器普遍采用的优化机制。和传统软件漏洞不同,硬件级别的漏洞影响更大更深也更难以修复。
通过判断内存的访问速度来获知是否有被缓存,这类技术有一个专门的术语叫侧信道,即通过一些场外信息来分析得出重要结论,进而达成正常途径无法达成的目的。
后面的文章中此类手法的故事还将继续上演,敬请期待!
特别鸣谢:网友几多风雨劲提供的技术支持
钱姓排于百家姓中的第二位,虽然起源和来历并不多,但是钱姓人却分布广泛,成为了中国姓氏中的第二大姓。钱姓的主要来源就是彭祖的儿子篯孚,彭祖的真名叫做篯铿,是因为被尧封于大彭而得姓-彭,而他的儿子篯孚因为掌管着钱财,任职钱府上士,所以便为“钱”姓,所以彭钱是一家。...
发布时间:2024-09-20 20:03:27
胡服最早是由春秋战国时的赵武灵王-赵雍引入中原的,因为当时赵国的地形和地理位置都非常不好,常年深受战争威胁,加上赵武灵王继位之后,时局不稳,周边国家都想要攻打赵国,所以赵武灵王便下令让全员都推行胡服,并且学习骑射,相较于宽大的汉服更加便于行动。...
发布时间:2024-09-20 19:05:44
赛艇运动起源于英国的泰晤士河上,当时还是17世纪,英国泰晤士河上的船工在工作之余经常会举办一些赛船,久而久之就形成了一种习俗,在1715年的时候,为了庆祝英王的卫冕,所以第一次正式举办了赛艇比赛,最终在1775年发展为一个正式的运动项目,并且成立了相应的运动俱乐部。...
发布时间:2024-09-20 18:04:28
人们之所以不愿意或者不敢以“宸”为名,主要是因为在古时候“宸”有着“深邃的房屋”的意思,也就是专指皇帝的居住场所,象征着无上的权力,所以“宸”字自然也就成为了禁忌,不过现代人大多是害怕这个字的气势,普通人的命格扛不住。...
发布时间:2024-09-20 17:00:53
商细蕊是电视剧《鬓边不是海棠红》中的京剧名旦,很多人都为他和海归商人程凤台的知己故事而动容,但遗憾的是在历史长河中并没有商细蕊真正的原型,只能说他可能是作者根据历史上著名的京剧名旦构建的一个角色,因为他和梅兰芳、程砚秋、尚小云以及徐碧云等四人的经历和性格都有着极为相似之处。...
发布时间:2024-09-20 16:05:01
在中华上下五千年的历史长河中,除了王朝更替的政治生活与文化生活,还有一些美貌的女子点缀着历史的绘卷,那么在悠悠岁月中有哪些著名的美女呢?下面小编就来为大家盘点一下吧!...
发布时间:2024-09-20 15:04:04
谈及古代帝王,最让人津津乐道的当属那后宫佳丽三千,不过也不是所有的帝王都有那么充实的后宫,比如历史上有一位皇帝就只有一位妻子,是不是让人有点不敢相信,下面小编就带大家一起了解下吧!...
发布时间:2024-09-20 14:01:05
自古无情帝王家,说到帝王的爱情多是奢望,很多帝王后宫的妃子换了一个又一个,几乎都是薄情寡义的,但是漫长的历史长河中也有例外,有的皇帝便与众不同,特别的长情,下面小编来为大家介绍一下历史上最长情的皇帝吧!...
发布时间:2024-09-20 13:03:24
可以说人的成长伴随着无数的武侠剧,尤其是电视剧中的那些绝世高手更是让人影响深刻,有不少人小时候都幻想过可以武功盖世,一统江湖,那么有人知道武侠剧中有哪些绝世高手吗?下面小编为大家盘点一下吧!...
发布时间:2024-09-20 12:02:19
古装电视剧中有许多的美丽的女子,她们身着美丽的衣裳,一举一动摇曳生姿,美得让人挪不开双眼,可以说是一场视觉盛宴,下面就让小编为大家盘点一下那些古装美女吧!...
发布时间:2024-09-20 11:09:01
近年清朝古装剧收视率暴涨,这些电视剧不仅剧情引人入胜,身着清装的美人也同样吸引了不少目光,有着让人过目不忘的美貌,那么清朝古装剧中有哪些美人呢?下面小编就来为大家盘点一下吧!...
发布时间:2024-09-20 11:02:08
养龟市场上经常可以看到小青龟,这种乌龟乖巧可爱以及性情温顺,所以很多人都会选择小青龟来饲养,不过一直都是见到小青龟都比较小,这不禁令人好奇这种乌龟能长多大?下面小编就带大家一起了解一下小青龟吧!...
发布时间:2024-09-20 10:01:47