Spectre 的情况在这里只略作介绍,下文也不再进行展开。笔者认为,Spectre 的利用难度要大很多(攻击成本更高),但牵涉面更广。Spectre 基本思路和 Meltdown 是差不多的,最终也是通过 FLUSH+RELOAD 这样的 cache 边信道攻击来获取内存里面的东西,只不过切入方式利用的是分支预测——就是我们前面提到的,比如 If Then 语句出现,处理器在还没有判断 if 条件是否满足的情况下,就会去预测后面的分支,如果预测正确就可以有效提升运算效率。对分支预测的利用,无论是分析成本,还是攻击成本,都大了不少,只不过包括 AMD、ARM、Intel、等在内的处理器全部都中招。
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 引擎。
这种攻击还涉及一些复杂的问题,比如说需要对分支预测机制首先进行训练,令其足以产生错误的预测结果;然后操作目标进程,执行上述构造出来的代码模式;最后用上咱们文章第一部分提到的 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 也提到,所有提出来的从硬件到软件层面的缓解建议只是折中选择,治标不治本。
谷歌倒是针对 Spectre 自己开发了一个名为 Retpoline 的补丁(该补丁也得到了 Intel 的支持)[7],这可能也是个缓解方案:可以避免内核中的“预测间接调用”,将预测执行与间接分支进行隔离,可应用于基于 Linux 的系统、系统程序、库以及软件程序,主要面向 x86 架构——而且按照谷歌的说法,从已经部署到 Linux 服务器的实验结果来看,这个补丁对性能的影响也比较小(这就叫自己挖洞,自己补)…
Mozilla 方面已经确认,Spectre 的又一厉害之处就在于,它能够绕过同源策略,使用 JavaScript 程序从 web 浏览器读取敏感信息[8, 9],不依赖于恶意程序,而是欺骗用户点击一个链接,通过 web 端来窃取信息——但笔者以为,通过浏览器进行攻击依然存在很大限制,可能需要结合其他漏洞进行组合攻击才能发挥比较大的成效。不过各浏览器厂商,包括 Chrome、IE/Edge、Firefox 都牟足劲儿开发新版本来缓解 Spectre 带来的影响。
要发表评论,您必须先登录。
叹为观止!终于有人讲明白这两个漏洞是怎么回事了
典型的理论分析吧。。。
看来amd说自己安全保险也有吹牛的成分在里面
9代应该也是暗藏隐患,毕竟很早就开始设计定型了,也许10代都不一定是重新设计的
nb
炸裂
+1
叹为观止,终于有人讲明白这两个漏洞是怎么回事了
叹为观止,终于有人讲明白这两个漏洞是怎么回事了