幽灵(Spectre)是利用现代处理器芯片预测执行机制的一类漏洞的总称,因其怎么都杀不尽而得名。

虽然英特尔、谷歌等公司提出了系列缓解措施,最近英国达特茅斯的计算机科学家也宣布解决了幽灵变种1,还有新近提出的名为SafeSpec的芯片设计修复方案,但新变种和亚变种还在接连出现。

这些变种的出现也重新引发了人们对当前和过去设计的芯片是否能够真正修复的疑问。

仅仅2周之前,7月10日,研究人员披露了新的数据窃取漏洞利用程序,名为幽灵1.1 和幽灵1.2。

如今,又一个漏洞利用横空出世——利用返回栈缓冲区(RSB)的SpectreRSB。RSB是现代CPU中用以替代分支预测单元,辅助预测返回地址的一套系统。

电子预印服务器ArXiv上一篇题为《幽灵回归!利用返回栈缓冲区的预测攻击》的论文中,研究人员详细描述了与幽灵变种1效果类似的新型幽灵攻击。该攻击能使恶意软件染指本不应涉足的内存区域,盗取口令、密钥等敏感信息。

很凑巧的是,发表这篇论文的研究人员正好也是开发了SafeSpec缓解方案的那几位。

该最新数据盗取技术会在x86架构上利用调用指令向RSB压入一个值,让该调用指令的返回地址不再匹配RSB的内容,迫使处理器出现预测错误。

SpectreRSB论文发布于7月20日,描述了该攻击的6个变种及攻击涉及的具体步骤:

(1) 指令执行上下文切给攻击者后,他/她会刷新共享地址条目(为了刷新重载),还会以受害者地址空间中载荷程序的目标地址来污染RSB;

(2) 攻击者将CPU交给受害者;

(3) 受害者执行返回,最终在攻击者注入到RSB的地址上发生预测执行。

(4) 切回给攻击者以评估泄露情况。

论文中还给出了一些示例代码:

1. Function gadget()

2. {

3. push %rbp

4. mov %rsp, %rbp

5. pop %rdi //remove frame/return address

6. pop %rdi //from stack stopping at

7. pop %rdi //next return address

8. nop

9. pop %rbp

10. clflush (%rsp) //flush the return address

11. cpuid

12. retq //triggers speculative return to 17

13. } //committed return goes to 23

14. Function speculative(char *secret_ptr)

15. {

16.  gadget(); //modify the Software stack

17.  secret = *secret_ptr; //Speculative return here

18. temp &= Array[secret * 256]; //Access Array

19.  }

20.  Function main()

21. {

22.  speculative(secret_address);

23.  for (i = 1 to 256) //Actual return to here

24.  {

25.   t1 = rdtscp();

26.   junk = Array[i * 256]; //check cache hit

27.   t2 = rdtscp();

28.  }

29.  }

研究人员在英特尔 Haswell 和 Skylake  处理器及 Core i7 Skylake 的 SGX2 安全飞地上测试了SpectreRSB。AMD和Arm芯片不在被测芯片之列,但这两大芯片制造商都使用RSB机制,所以研究人员还是把自己的发现也向这两家制造商做了通报,同时通报的还有Chipzilla公司。

研究人员称,包括谷歌Retpoline和英特尔微代码补丁在内的所有已知防御措施都阻挡不了SpectreRSB攻击。

不过,英特尔发言人称,Xeon芯片制造商认为,程序员们目前可用的缓解措施确实可以阻止SpectreRSB边信道攻击:

SpectreRSB与分支目标注入漏洞( CVE-2017-5715 )相关,我们认为论文中描述的漏洞利用可以用同样的方法加以缓解。我们已经在开发者白皮书《预测执行边信道缓解》中发布了相关指南。感谢研究界正在进行的工作,我们一同保护客户的安全。

ELF安全

上周,达特茅斯大学的研究人员提出了针对幽灵变种1的防御措施。英特尔之前也曾针对幽灵变种1提出在代码中添加LFENCE指令以防止预测执行。

达特茅斯的解决方案采用所谓ELFbac策略技术,让程序员设置内存权限策略,令其可执行可链接文件(ELF)能告诉操作系统该怎么保护内存的特定区域,挫败幽灵边信道攻击。

为内存页表设置的权限也受到预测执行分支的尊重,因此,如果开发人员想要保护程序中的特定秘密,攻击者即便利用了幽灵漏洞也无法读取到这些秘密。这些权限策略是用静态链接器和构建工具链的现有功能在应用程序二进制接口(ABI)层定义的。

该技术通过Linux内核内存管理机制实施,不止针对幽灵漏洞,还可推广应用到更宽泛的进程内存类攻击上。

达特茅斯的解决方案就像是在用户级软件中实现内核页表隔离(KPTI)一样(比如,只在需要的时候才映射秘密所在的内存区域)。这么做可能会大幅增加性能开销,尤其是在秘密数据要被经常访问的情况下。而且,程序员也得足够自律,能做到隔离所有秘密数据。

基于软件的修复当然有其价值,但价值还不够大,想要杜绝预测执行漏洞,就不得不重新设计芯片。

虽然修复很重要,但得在新处理器设计中考虑此类漏洞,才可以完全解决问题。

AMD也表示,当前边信道缓解方案可以杀死SpectreRSB:

AMD注意到了有关处理器预测执行和返回栈缓冲区漏洞的新研究论文。AMD建议的间接分支预测障碍(IBPB)设置应该能缓解该论文中描述的漏洞。正如AMD白皮书所声明的,只要软件中设置了上下文切换时应用IBPB,处理器就能保证旧间接分支无法影响未来间接分支的预测,可以有效缓解论文中描述的漏洞。

同时,Arm发言人称:“我们注意到了该报告,并更新了我们安全更新页面上的信息(https://developer.arm.com/support/arm-security-updates/speculative-processor-vulnerability)。”

需要了解的是,虽然SpectreRSB是真正的幽灵亚变种,但芯片和软件工程师都认为,该漏洞利用用现有的防御机制就可缓解。而且,当下也没有哪种恶意软件在真实的攻击中利用这些边信道。

SpectreRSB论文下载地址:

https://people.csail.mit.edu/vlk/spectre11.pdf

英特尔缓解白皮书下载地址:

https://software.intel.com/sites/default/files/managed/c5/63/336996-Speculative-Execution-Side-Channel-Mitigations.pdf

AMD白皮书下载地址:

https://developer.amd.com/wp-content/resources/Architecture_Guidelines_Update_Indirect_Branch_Control.pdf

声明:本文来自安全牛,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。