ARM架构CPU漏洞

cve-2017-5753           边界检查绕过                     Spectre(幽灵)
cve-2018-3693          边界检查绕过
cve-2017-5715          分支目标注入                      Spectre(幽灵)
cve-2017-5754          未授权数据缓存加载          Meltdown(熔断)
cve-2018-3640          恶意系统注册读取
cve-2018-3639          推理存储绕过

         Meltdown漏洞,低权限用户可以访问内核的内容,获取本地操作系统的信息。Meltdown漏洞影响几乎所有的Intel CPU和部分ARM CPU.
         Spectre则影响所有的Intel CPU和AMD CPU,以及主流的ARM CPU。当用户通过浏览器访问了包含Spectre恶意利用程序的网站时,用户的如账号,密码,邮箱等个人隐秘信息可能会泄漏;在云服务场景中,利用Spectre可以突破用户间的隔离,窃取其他用户的数据。

         现代CPU为了提高处理性能,会采用乱序执行(Out-of-Order-Execution)和预测执行(SpeculativePrediction)。乱序执行是指CPU并不是严格按照指令的顺序串行执行,而是根据相关当前掌握的信息预测某个条件判断的结果,然后选择对应的分支提前执行。乱序执行和预测执行在遇到异常或预测执行前的正确状态,然后选择对应正确的指令继续执行,这种异常处理基址保证了程序能够正确的执行。CPU恢复状态时并不会恢复CPU缓存的内容,而这两组漏洞正式利用了这一设计上的缺陷进行测信道攻击

乱序执行的每个阶段:
         1.获取指令,解码后存放到执行缓冲区Reservations Stations
         2.乱序执行指令,结果保存在一个结果序列中
         3.退休期Retired Circle,重新排列结果序列及安全检查(如地址访问的权限检查),提交结果到寄存器

//rcx = kernel address
//rbx = probe array
1.mov al,byte[rcx]
2.shl rax,0xc
3.mov rbx,qword[rbx+rax]
Meltdown漏洞的利用过程有4个步骤:
         1.指令获取解码
         2.乱序执行3条指令,指令2和指令3要等指令1中的读取内存地址的内容完成后才开始执行,指令3会将要访问的rbx数组元素所在的页加载到CPU Cache中
         3.对2的结果进行重新排列,对1-3条指令进行安全检测,发现访问违例,会丢弃当前执行的所有结果,恢复CPU状态到乱序执行之前的状态,但并不会恢复CPU Cache的状态
         4.通过缓存测信道攻击,可以知道哪一个数组元素被访问,也即对应的内存页存放在CPU Cache中,从而推测出内核地址的内容

Spectre的原理是,当CPU发现分支预测错误时会丢弃分支执行的结果,恢复CPU的状态,但是不会恢复CPU Cache的状态,利用这一点可以突破进程间的访问限制(如浏览器沙箱)获取其他进程的数据。

if(x < array1_size){
y = array2[array1[x]*256];
//do something using Y that is observable when speculatively executed
}
具体攻击过程分为三个阶段:
         1.训练CPU的分支预测单元使其运行代码时会进行特定的预测执行
         2.预测执行使得CPU将要访问的地址的内容读取到CPU Cache中
         3.通过缓存测信攻击,可以知道哪一个数组元素被访问过,也即对应的内存页存放在CPU Cache中,从而推测出地址的内容

漏洞验证Poc
         https://github.com/Eugnis/spectre-attack
         https://github.com/feruxmax/meltdown
         https://github.com/gkaindl/meltdown-poc
         https://github.com/turbo/KPTI-PoC-Collection

猜你喜欢

转载自blog.csdn.net/qq_31932681/article/details/109772685