幽靈(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