一步一步理解CPU芯片漏洞:Meltdown与Spectre

飞来科技  发布时间:2018-01-14 14:02:32

本文关键词:google for linux

2018年1月3日,Google Project Zero(GPZ)团队安全研究员Jann Horn在其团队博客[1]中爆出CPU芯片的两组漏洞,分别是Meltdown与Spectre。

Meltdown对应CVE-2017-5754(乱序执行缓存污染),Spectre对应CVE-2017-5753(边界检查绕过)与CVE-2017-5715(分支目标注入)。看CVE编号就能知道,这两组漏洞早在2017年6月就已经由GPZ团队向英特尔提交,而在差不多时间由Lipp等人发布的论文Meltdown[2]与Spectre Attacks[3]也详细描述了这一攻击,从文中的声明来看,Lipp等人与GPZ团队似乎是独立发现了这两组漏洞。

中国是全球增长最快的服务器芯片市场,受棱镜门的影响中国希望摆脱对美国企业intel的依赖,去年美国禁止intel向中国发售高性能的服务器芯片增强了中国研发自主服务器芯片的意愿,但是intel由于拥有超过九成的服务器芯片市场其并无意愿授权中国研发x86架构的服务器芯片,如此中国最有可能使用的就是arm架构了。

另外除intel公司之外,amd和cyrix等厂家也相继生产出能使用x86指令集的cpu,由于这些cpu能运行所有的为intel cpu所开发的各种,所以电脑业内人士就将这些cpu列为intel的cpu兼容产品.由于intel x86系列及其兼容cpu都使用x86指令集,所以就形成了今天庞大的x86系列及兼容cpu阵容.当然在目前的台式()电脑中并不都是使用x86 系列cpu,部分服务器和苹果(macintosh)机中还使用美国digital(数字)公司的alpha 61164和powerpc 604e系列cpu.。

intel的千兆网卡芯片具有兼容性好(intel主板平台),cpu占用量低,传输速度快,使用稳定的特点,是中高端服务器/工作站/个人电脑产品的较好选择。

intel曾用8086、80286、80386等作为其pc用cpu的型号表示法,x86指intel制造的普通cpu(提出x86这个表示法时,个人电脑上以32位intel的cpu为主),x64是x86_64的缩写,指x86基础上的改进版(加入64位地址扩展等性能),而纯64位架构用ia64表示,32位兼容的64位架构用amd64表示(amd是这一架构的主要生产商)。

0X01 漏洞原理

乱序执行与预测执行

早期的处理器依次顺序执行既定的处理器指令,而现代处理器为了提高性能并不严格按照指令的顺序串行执行,而是对执行进行相关性分析后并行处理乱序执行。比如当处理器中的某些指令需要等待某些资源,处理器不会真的在这里等待而停止指令的执行,而是利用等待资源的时间继续执行后续的指令。在支持乱序执行的CPU中,后面的指令可能在前面指令执行结束前就开始执行了。

为了保证程序运行的正确性,处理器会对指令执行安全检查,只有当前用户权限符合指令权限时才能被执行,比如用户空间的指令访问内核内存处理器就会抛出异常。然而安全检查这个操作只有在指令退休(retirement-一条指令退休只有当它的执行的结果真正被提交并对系统可见时才会发生)时才会进行。也就是说,如果在乱序执行中,指令并没有真正执行完成而只是加载到缓存中(下文会提)是不会执行安全检查的。而此时由于乱序执行而被提前执行的指令会被处理器丢弃,但由于乱序执行的指令对缓存的操作在这些指令被丢弃时不会被重置。正是安全检查与乱序执行的空窗期才会让Meltdown有机可乘。

预测执行涉及到程序的控制流,现在处理器不是去解析所有分支指令后然后决定执行哪个操作,而是预测哪个控制流会更有可能被运行再提取相应的指令代码执行。如果预测正确的话,会带来很高的性能提升并提高处理器的并行性。如果预测错误,那些被预测执行的不正确结果会被丢弃,处理器会将状态恢复到预测执行行前的正确状态,再重新跳转到正确执行的分支或指令中运行。google for linux与乱序执行类似,预测执行对处理器缓存的操作会被保留。

本文来自互联网,由机器人自动采编,文章内容不代表本站观点,请读者自行辨别信息真伪,如有发现不适内容,请及时联系站长处理。

相关阅读