手机号
验证码

正在加载验证码......

请先拖动验证码到相应位置

密码
确认密码
已有账号, 立即

已发送密码重置邮件到您的注册邮箱,请立即点击密码重置链接修改密码!

验证邮件24小时内有效,请尽快登录您的邮箱点击验证链接完成验证。若未收到邮件请先确认是否在垃圾邮件中。

查看邮箱

找回密码

手机号
验证码
新密码
确认新密码
没有账号? 立即 注册
Follow us on
@EVOLIFE 公众账号
On Wechat
@爱活新鲜播
On Weibo
@EVOLIFE.CN
On Instagram
Nina@evolife.cn
Mail us
@RSS
Follow our feed
核武按钮终被劫持?Meltdown与Spectre攻击深入解析

Spectre,处理器背后的幽灵

Spectre 的情况在这里只略作介绍,下文也不再进行展开。笔者认为,Spectre 的利用难度要大很多(攻击成本更高),但牵涉面更广。Spectre 基本思路和 Meltdown 是差不多的,最终也是通过 FLUSH+RELOAD 这样的 cache 边信道攻击来获取内存里面的东西,只不过切入方式利用的是分支预测——就是我们前面提到的,比如 If Then 语句出现,处理器在还没有判断 if 条件是否满足的情况下,就会去预测后面的分支,如果预测正确就可以有效提升运算效率。对分支预测的利用,无论是分析成本,还是攻击成本,都大了不少,只不过包括 AMD、ARM、Intel、等在内的处理器全部都中招。

QQ20180110-014829@2x

Spectre 攻击涉及到两个漏洞,分别是 CVE-2017-5753 和 5715。针对 CVE-2017-5753,如上面这个语句,绿色部分那一行是个 if 条件语句。上述代码,如果 arr1->length, arr2->data[0x200] 和 arr2->data[0x300] 都还没有进入 cache,处理器都还没有判断条件语句,但其它数据都已经 cache,而且分支条件预测为真,那么处理器在加载 arr1->length 之前就会加载 arr1->data[untrusted_offset_from_caller] 的值,并开始载入 arr2->data 数据依赖偏移,将相应 cache line 载入 L1 cache。

但最后处理器发现,预测错误,此刻包含 arr2->data[index2] 的 cache line 已经位于 L1 cache,那么此时由恶意程序去请求 arr2->data[0x200] 和 arr2->data[0x300],测量请求载入的时间,就能判断 index2 的值是 0x200 还是 0x300 了,也就可以知道 arr1->data[untrusted_offset_from_caller]&1 是 0 还是 1。

篇幅有限,我们无法再展开做更为具体的分析和讲解,不过这个逻辑本质上和 Meltdown 对于乱序执行的利用有些相似,都建基于处理器率先执行了后面的指令,而且还把数据放在了 cache 中,但明显更为复杂。最终也都通过恶意程序去检查读取加载指令所需时间,来推测某值。

要利用这样的行为,攻击者需要在目标环境中构造这样的代码模式执行。有两种思路,要么这种代码模式在现有代码中就有,要么需要有个解释器(interpreter)或者 JIT 引擎,最终可以生成这种代码模式。第一种攻击思路,对实际环境的要求太苛刻或者说很难达成;第二种是谷歌采用的方案,他们选择了 eBPF 字节码解释器和 JIT 引擎。

code_meltdown_spectre_2

这种攻击还涉及一些复杂的问题,比如说需要对分支预测机制首先进行训练,令其足以产生错误的预测结果;然后操作目标进程,执行上述构造出来的代码模式;最后用上咱们文章第一部分提到的 cache 边信道攻击。

而相关 CVE-2017-5715,Spectre 攻击可利用 CPU 的间接分支预测器(Indirect branch predictor),执行特定代码片段;条件间接分支可被用于攻击,分支目标地址被攻击者控制;通过控制间接跳转目标位置,或其代码,利用边信道攻击来推测敏感信息。为此,谷歌的研究人员还专门逆向分析了 Intel Haswell 的分支预测器。这一思路的实现难度也不小,莫说不同 CPU 在分支预测机制方面的差异需要攻击者差别对待,应对超线程,Spectre 的攻击还需要解决同一 CPU 核心之上两个线程与间接分支预测器极为复杂的关系问题——AMD 方面甚至认为由于架构方面的差异,CVE-2017-5715 几乎不可能对 AMD 处理器造成影响。

Meltdown 的 paper 中提到,Spectre 攻击需要专门为目标进程的软件环境做定制。许多安全专家也都认为,Spectre 攻击是有目标明确指向性的,它很难造成大规模无差别攻击。笔者意见:Spectre 可能会成为未来 APT(高级持续性威胁)攻击中的一环,毕竟它适用于几乎所有处理器,但攻击难度略高;指望黑客专攻小网民,其成本收益可能并不对等。尤为值得一提的是,到目前为止,针对 Spectre 攻击的补丁无法从根本上杜绝其影响,充其量只是增加攻击难度的缓解方案。Spectre 的研究 paper 也提到,所有提出来的从硬件到软件层面的缓解建议只是折中选择,治标不治本。

CPU-1

谷歌倒是针对 Spectre 自己开发了一个名为 Retpoline 的补丁(该补丁也得到了 Intel 的支持)[7],这可能也是个缓解方案:可以避免内核中的“预测间接调用”,将预测执行与间接分支进行隔离,可应用于基于 Linux 的系统、系统程序、库以及软件程序,主要面向 x86 架构——而且按照谷歌的说法,从已经部署到 Linux 服务器的实验结果来看,这个补丁对性能的影响也比较小(这就叫自己挖洞,自己补)…

Mozilla 方面已经确认,Spectre 的又一厉害之处就在于,它能够绕过同源策略,使用 JavaScript 程序从 web 浏览器读取敏感信息[8, 9],不依赖于恶意程序,而是欺骗用户点击一个链接,通过 web 端来窃取信息——但笔者以为,通过浏览器进行攻击依然存在很大限制,可能需要结合其他漏洞进行组合攻击才能发挥比较大的成效。不过各浏览器厂商,包括 Chrome、IE/Edge、Firefox 都牟足劲儿开发新版本来缓解 Spectre 带来的影响。

3
文章来自:爱活网
了解更多

发表评论

全部评论 9条
  1. 匿名:

    叹为观止!终于有人讲明白这两个漏洞是怎么回事了

  2. 匿名:

    典型的理论分析吧。。。

  3. 匿名:

    看来amd说自己安全保险也有吹牛的成分在里面

  4. 匿名:

    9代应该也是暗藏隐患,毕竟很早就开始设计定型了,也许10代都不一定是重新设计的

  5. 匿名:

    叹为观止,终于有人讲明白这两个漏洞是怎么回事了

  6. 叹为观止,终于有人讲明白这两个漏洞是怎么回事了

评论
真的是没有最丑!只有更丑·····
光叔叔 2020/04/02
还以为Q5也快了,结果是马坎换平台。
带就不 2020/03/19
石研究员真的是……唉……
KALOL 2020/02/13
galaxy z不支持5G,我要死了!!
KALOL 2020/02/12
版权 © 2017 爱活网 Evolife.cn 科技进化生活 [沪ICP备12022400号]
版权 © 2017 爱活网 Evolife.cn 科技进化生活
[沪ICP备12022400号]