近日,Intel的cpu被披露了三个重大漏洞,cve-2017-5753,cve-2017-5715,cve-2017-5754。这三个漏洞,对AMD,ARM架构的部分CPU也有一定影响。
阅读披露机构发布的分析报告spectre、meltdown及复现已经公布的POC,有些收获和问题,在此做下笔记。
攻击成因是:CPU的并行执行机制和Cache共同导致的侧信道攻击,从而打破进程之间、用户态和内核态之间的内存隔离,造成内存信息泄露。
为了提高CPU的性能,现代CPU采用了乱序执行(out of order execution)和预测执行(speculative execution),指令的执行周期通常有:取指,指令译码,取操作数,执行等阶段。当前指令在取操作数阶段,由于访问内存(cache line hit miss)会导致CPU空闲时间较长,故会进行下一条指令的执行周期。如果当前指令为分支判断指令,CPU会预测执行其中的一条分支,若预测正确,那么无疑提高指令的执行速度;若预测失败,则预测执行的分支指令序列会被撤销,回滚执行状态:寄存器,内存。但是,预测执行的指令序列对于Cache的影响却没有消除。
由于CPU和内存的速度存在差异,为了提高访问内存的效率,通常在CPU和内存之间增加速度介于寄存器和内存之间的三级Cache。根据程序的(空间和时间)局部性原理,Cache会缓存当前被访问的内存;下次再次访问到相同地址的内存时,若被Cache命中(cache line hit),取数速度加快。
这次的侧信道攻击,诱导CPU在执行分支指令时,会预测执行后续的指令序列:访问内存地址A处重要数据secret,以secret为下标,访问数组B对应中对应的B[secret],这样B[secret]就会被缓存到Cache中。攻击程序后续会遍历B,显然,访问B[secret]速度要明显快于B[!secret]。从而,可以根据时间差异,得到secret。
目前,国内多个安全研究员基于分析报告,和poc发了相关的技术分析:1、性能VS安全?CPU芯片漏洞攻击实战(1) - 破解macOS KASLR篇,2、性能VS安全?CPU芯片漏洞攻击实战(2) – Meltdown获取Linux内核数据,3、处理器A级漏洞Meltdown(熔毁)和Spectre(幽灵)分析报告,4、CPU芯片级漏洞MeltDown(CVE-2017-5754)和 Spectre(CVE-2017-5715/5753),5、影响全球的CPU漏洞深度解读:熔断与幽灵目前,还没有看到从硬件角度去分析漏洞成因的文章。