芯片级漏洞

首先,申明一下,我不是搞芯片设计的,虽然我也想刨根问底,但是很遗憾,无法把究竟是什么指令引发的bug翻出来。只能通俗的说一下这个漏洞

 

芯片级漏洞

 

芯片漏洞的本质,是CPU的错误执行,指向了不应该指向的地址,然后读写了本不应该被读写的数据。这一次Intel漏洞也不例外。

网上的新闻是这样说的:

“Meltdown”利用的是处理器设计中的预测执行特性来获取用户程序中的内核数据,直接打破核心内存的保护机制,允许恶意代码直接访问敏感内存,影响了所有采用乱序执行设计的Intel处理器,其他顺序执行的处理器不会有影响。而“Spectre”漏洞则通过篡改其他应用程序的内存,欺骗他们去访问核心内存的地址,对云服务提供商的威胁更大。

猜测性的分析漏洞,其实是一种魔法。这有点儿类似于C语言当中未初始化内存,或者野指针的感觉。一个新开辟的内存,如果不去初始化,那么可能是什么值呢?可能是曾经执行过的程序的某个中间结果。这有点儿像租房子,进入到房间以后,总会有点儿上一个租客的东西。一般,新租到房子的时候,我们应该去打扫卫生的。这就好比新开辟内存初始化,但是,有些别有用心的程序可能就不这么干,他就希望去读取之前程序留下的数据。利用漏洞,就好像ps游戏输入秘笈指令一样。比如,在某个特定的位置,反复左右,然后执行什么按键,你就会获得终极武器。在cpu执行指令的时候,因为,现代cpu,早就不那么单纯的是包含了各种预处理的,或者高级计算的。比如,假设说,intel的架构设计者,为了执行效率的提高,当cpu在执行一个程序的时候,比如这个程序是一个需要读磁盘文件的程序,而为了速度,CPU预先读取了程序中指定的某些数据,然后后面,再根据权限或者分级指令等等来判断是否有权去真的拿到这部分数据。那么问题就在这里了,假如说,数据已经预先读取到内存了,那么别有用心的程序开发者,就可以借用刚刚提到的C的未初始化内存来搞事。他一运行,就知道某个特定的地址段里面有一部分想要得到的数据,而且这个是高等级的权限才能获得的信息,比如,一个虚拟机的承载物理机的物理磁盘数据。拿他可以直接就说,释放内存,等CPU释放以后,这段内存的数据是真实存在的,且没有被擦写,而因为现代操作系统的程序设计,通常,内存是一段一段的开辟的,所以,这时候,程序设计者,故意输入指令要求读取本程序的所有内存信息,那么他就可以拿到之前本不应该被拿到的信息,这样,漏洞就成功的被利用了。然后,他反复执行这个过程,就可以把想要的所有信息都读取出来。

过程大概的猜测就是这样的,所以,现在intel打补丁了,其实,这种漏洞不局限于intel。打补丁的方式是软件的,比如发给微软,微软就制作一个操作系统级别的补丁出来,于是,以后在执行程序的时候,就屏蔽预先读取的功能,只能等程序真正有权限的时候,再去读取,这样当然是会导致性能损失的,这个也是我们所看到的网上的说法。cpu打补丁,导致性能损失。