教育热点问题:恐怖!CPU竟成了黑客的帮凶!

admin 4个月前 (05-13) 科技 46 0

本故事凭据CPU真实破绽改编

前情回首

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

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

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

事情还得从不久前的一个晚上提及。

神秘代码

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

uint8_t array1[160] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
uint8_t array2[256 * 512];
uint8_t temp = 0;

void bad_guy(int x) {
	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闻讯而来,“额,咱们提前执行了不应执行的指令不会有问题吧?”

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第1张

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

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

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

灾难降临

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

我们几个不敢延迟,赶快出发。

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

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第2张

“阿Q啊,你知不知道你们新发明的乱序执行分支展望手艺闯了大祸了?”

我们几个一听傻眼了,“向导,这是从何提及啊?”

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

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

我和小A几个一听都是满脸问号,我们这两个提升事情效率的手艺怎么就能泄露系统内核数据呢?

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第3张

真相大白

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

“几位大爷,你们之前是不是遇到了分支展望失败的情形?”,那人仰面看着我们。

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

您说的没错,不外若是这个失败是我有意谋划的呢?

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第4张

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

“是的,就是我,我先有意给你延续多次小于16的参数,误导你们,误以为后面的参数照样小于16的,然后突然来一个特意组织的大于16的参数,你们果真上钩了,展望失败,提前执行了一些本不应执行的指令。”

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

这就够了!

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

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第5张

“好好好,我这就交接。你们把数据提前准备到了缓存中,我后面去接见这部门数据的时刻,发现比接见其他内存快了许多”

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

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

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第6张

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

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

亡羊补牢

事情的真相总算弄清晰了,我们几个现在已经汗如雨下。

经由和安全员的协商,操作系统那里推出了全新的KPTI手艺来解决这个问题,也就是内核页表隔离

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第7张

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

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

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

你有什么好设施吗,帮帮我们吧!

幕后

本文形貌的是两年前发作的赫赫有名的CPU的熔断幽灵破绽。

乱序执行分支展望是现代处理器普遍接纳的优化机制。和传统软件破绽差别,硬件级别的破绽影响更大更深也更难以修复。

通过判断内存的接见速率来获知是否有被缓存,这类手艺有一个专门的术语叫侧信道,即通过一些场外信息来剖析得出主要结论,进而杀青正常途径无法杀青的目的。

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

稀奇鸣谢:网友几多风雨劲提供的手艺支持

往期热门回首

完了!CPU一味求快出事儿了!

哈希表哪家强?几大编程语言吵起来了!

内核地址空间大冒险4:线程切换

震撼!全网第一张源码剖析全景图揭秘Nginx

一个整数+1引发的灾难

一网打尽!每个程序猿都该领会的黑客手艺大汇总

看过无数Java GC文章,这5个问题你也未必知道!

一个Java工具的回忆录:垃圾接纳

谁动了你的HTTPS流量?

路由器里的广告隐秘

一个HTTP数据包的奇幻之旅

我是一个流氓软件线程

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第8张

教育热点问题:恐怖!CPU竟成了黑客的帮凶! 第9张

,

Sunbet

Sunbet www.6358917.com Sunbet(www.sunbet.in)是进入Sunbet的主力站点。Sunbet开放Sunbet会员开户网址、Sunbet代理开户、Sunbet手机版下载、Sunbet电脑客户端下载等业务。

Allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:教育热点问题:恐怖!CPU竟成了黑客的帮凶!

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:453
  • 页面总数:0
  • 分类总数:8
  • 标签总数:815
  • 评论总数:116
  • 浏览总数:3896