熔断、幽灵分析以及模拟攻击、防范

熔断、幽灵分析以及模拟攻击、防范

  • 背景
  • 主要技术分析
    1. 当代cpu的存取器体系结构
    2. 乱序执行
    3. 分支预测
    4. 边信道攻击
  • 熔断、幽灵攻击分析
    1. 熔断
    2. 幽灵
  • 补丁防范
  • 补丁带来的影响
  • 攻击演示
  • 源码展示

背景

      当代cpu为了提高性能,而使用了了两项看似毫无纰漏的技术:乱序执行和分支预测。拥有这两项技术,cpu就可以不再局限于只是按顺序执行操作、也不在局限于等待条件判断完成后再执行语句的主题语句,这样cpu就可以超前执行那些相关性不强的代码或者先将语句中变量加载到内存、cache,充分的利用cpu中的空闲单元,极大的提高cpu的效率。
      对于乱序执行,初看起来好似没有纰漏,但是对于分支预测,问题就出来了:如果分支预测失败,怎么办?Intel等cpu生产商也对这种情况做了除理,如果分支预测失败,那么cpu就会回滚到分支预测前的状态,还原本应有的寄存器等,这样程序就可以从分支判断再次执行。
      可现实是,这两项技术都在未判断是否有权限访问数据的时候就,对将数据加载到了cache。如果分支预测失败,虽然cpu回滚了,但是我的cache仍然没有回滚,这样就导致了信息的泄露。

主要技术分析

  1. 当代cpu的存储器体系结构:
         根据课程我们知道,cpu在访问内存时,会先将内存中的数据加载到cache中,再从cache中访问。cpu在访问cache时的速度要远远快于访问主存中的数据。不同的进程的数据会被存放在内存的不同部分,并且通过操作系统对于权限的判断,一个进程不能对其他进程的内存中的数据进行修改。不同的进程却都能够访问cache,并对cache中的中的数据进行操作。
  2. 乱序执行
         cpu并不会严格的按照代码的顺序去依次执行程序,而是会乱序执行。
         举一个简单的例子:这里有3条语句:
    a. mov rax (rdx) b. add rax $123 c. mov rcx (rbx) 。
         如果按照顺序执行的方式,cpu会依次执行这三条语句,先将内存中的数据放到rax中,在对rax中的数据做加法,再将rbx中的数据放到rcx中。这样可以发现,c指令需要的内存加载模块,在b指令处理时是闲置的。科学家可不象这样的资源浪费,所以乱序执行就应运而生。根据乱序执行:cpu可能会在a执行结束后就湘江c中的数据加载到cache中,这样c语句的执行就会快很多。
         注意这里并没有对进程的权限进行判断,如果说c语句访问的数据这个进程并不能修改,但是乱序执行仍会将他加载到cache中,只不过在执行c语句时,操作系统会进行权限的判断,如果发现进程并没有权限,就会放弃乱序 执行的结果,回滚到最初的状态重新依次执行。
  3. 分支预测
         cpu并不会向我们代码编写的那样,先进行if的判断,在执行相应的分支,而是会预先执行分支中的语句。
         举一个简单的例子:if (a>b) {c = array[123456789];}
         一般按照我们期望的,cpu先回判断if中的条件判断语句,再去执行主体中的内存访问赋值语句,这样在判断语句执行的时候,cpu不会执行内存加载,这样就会浪费内存加载模块的资源。分支预测技术可以减少这种资源的浪费,对于这样的语句,它允许操作系统先将对应的数据加载到cache中,之后如果条件判断正确,就执行主体语句,这样主体语句在访问内存时就回去访问cache而不是内存,时间就被节省下来了。
         但是如果分支预测失败,那么cpu的状态信息就会被回滚还原,但是cache中的数据还是保持不变。
  4. 边信道攻击
         边信道攻击是一种新型的破解密码的攻击方式,它主要利用加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信而对加密设备进行攻击。
         举一个例子:我们现在要破译一段密码:345,采用最垃圾的
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值