Shielding Software From Privileged Side-Channel Attacks
摘要
商用作業系統核心,例如Windows、Mac OS X、Linux、FreeBSD,容易受到多種安全漏洞的影響,攻擊者能夠通過這些漏洞控制作業系統核心,獲取對於所有的應用資料和系統資源的訪問許可權。
InkTag、Haven、Virtual Ghost等防護系統能夠在作業系統核心被攻擊者控制的前提下保護敏感應用資料。然而,這些防護系統依舊沒有辦法防護惡意作業系統核心實施的側通道攻擊。
文章提出了針對惡意作業系統核心實施的頁表側通道攻擊與LLC(Last-Level Cache)側通道攻擊的防護方案,並通過在優化過的Virtual Ghost系統上部署以上防護方案,提出了防護系統Apparition。
1 介紹
商用作業系統的單核心架構雖然具有效能表現優異的優點,但是由於缺乏有效的隔離措施,攻擊者能夠通過一個單一的漏洞控制整個作業系統核心,竊取損壞系統中的所有資料。
InkTag、Virtual Ghost等軟體解決方案與Intel SGX、ARM TrustZone等硬體解決方案雖然能夠防止惡意作業系統核心直接讀取損壞應用資料,但是惡意作業系統核心依舊能夠通過利用共享的硬體資源以及應用程式碼與作業系統程式碼的互動,以側通道攻擊的方式竊取敏感應用資料。
防護系統Apparition以Virtual Ghost系統為原型,通過使用Intel MPX(Memory Protection Extensions)技術以及消除序列化指令(Serializing Instructions)的方式對於原始Virtual Ghost系統進行了優化,並在此基礎上部署針對惡意作業系統核心實施的頁表側通道攻擊與LLC側通道攻擊的防護方案。
文章提出的針對惡意作業系統核心實施的側通道攻擊的防護方案不需要對於現有的處理器架構進行任何修改。Apparition通過防止作業系統核心讀取或修改儲存應用機密資訊的記憶體頁所對應的頁表項(Page Table Entry),以防護頁表側通道攻擊,並通過採用Intel CAT(Cache Allocation Technology)技術以及防止實體記憶體共享的技術,以防護LLC側通道攻擊。
2 攻擊模型
文章的攻擊模型假設攻擊者控制了作業系統核心,並希望竊取敏感應用資料。應用開發者採取了相應的安全加固措施保證了應用本身的安全性。攻擊者無法物理接觸裝置,且由於Virtual Ghost等防護系統的存在,攻擊者無法直接直接讀取應用記憶體資料。
文章重點關注通過軟體實施的頁表側通道攻擊與LLC側通道攻擊,通過硬體實施的側通道攻擊以及預測執行側通道攻擊不在文章的討論範圍之內。
3 側通道攻擊
現代作業系統中程序間共享的系統資源狀態是導致側通道攻擊的主要原因。此外,惡意作業系統能夠通過控制特權處理器狀態等方式創造另外的側通道攻擊方式。
3.1 頁表側通道
在存在防護系統的前提下,作業系統核心無法直接讀取或修改儲存應用私密資料的記憶體頁所對應的頁表項,惡意作業系統核心依舊能夠通過以下方式利用虛擬地址至實體地址的變換機制推測應用的記憶體訪問模式:
交換
惡意作業系統核心通過將特定記憶體頁交換到磁碟上,並監視防護系統何時要求將此頁面交換回記憶體中,以推測應用的記憶體訪問模式。
讀取頁表項
許多處理器會在訪問頁面資料或向頁面寫入資料時,在記憶體頁所對應的頁表項中設定髒位或訪問位。通過持續不斷地檢查記憶體頁所對應的頁表項中的內容,惡意作業系統便能夠知道應用何時第一次讀寫特定的記憶體頁。
推測地址變換的快取
惡意作業系統通過對儲存虛擬地址至實體地址變換的Cache,使用PRIME+PROBE與FLUSH+RELOAD的Cache側通道攻擊推測應用的記憶體訪問模式。
3.2 Cache側通道
惡意作業系統通過測量應用的Cache使用模式以推測機密資料。兩種常見的Cache側通道攻擊為PRIME+PROBE與FLUSH+RELOAD,這兩種側通道攻擊均可用於攻擊私有Cache與共享LLC。現有的Cache分隔技術僅能夠有效防止非特權攻擊者實施的Cache側通道攻擊,而對於特權攻擊者,即惡意作業系統核心則無能為力。
3.3 指令追蹤側通道
如果應用的指令序列存在對敏感應用資料的控制依賴,則惡意作業系統便可以根據應用對於指令記憶體的訪問模式,推測應用的機密資訊。
4 Virtual Ghost改進
4.1 設計
Virtual Ghost是一個基於編譯器的虛擬機器,以SVA為基礎。作業系統核心程式碼被編譯成V-ISA指令的形式,Virtual Ghost虛擬機器將V-ISA指令翻譯成N-ISA指令執行。Virtual Ghost虛擬機器強制要求所有的作業系統程式碼被編譯成V-ISA指令的形式,而應用的程式碼則可以被編譯成V-ISA或N-ISA指令的形式。V-ISA指令包括SVA-Core指令與SVA-OS指令。作業系統核心通過SVA-OS指令對於特權硬體狀態進行配置。
Virtual Ghost將每個程序的虛擬地址空間劃分為4個區域:
User Memory:應用和作業系統均可讀寫,不可執行;
Kernel Memory:只有作業系統可以讀寫,不可執行;
Ghost Memory:只有應用可以讀寫,存放應用私密資料;
Virtual Ghost VM Memory:Virtual Ghost存放其自身的資料結構,V-ISA指令至N-ISA指令的翻譯程式,應用的N-ISA指令程式碼段,應用與作業系統均不可訪問。
Virtual Ghost使用SFI與CFI技術保證程序虛擬地址空間中以上4個區域之間的相互隔離。程序頁表被對映為只讀記憶體,Virtual Ghost允許作業系統核心讀取頁表資訊,並通過SVA-OS指令修改頁表資訊。
4.2 Intel MPX
Intel MPX通過4個邊界暫存器儲存記憶體物件地址的上界與下界,並通過邊界檢查指令檢查程序訪問的虛擬地址的合法性。
文章使用Intel MPX技術,通過將程序的User Memory與Kernel Memory合併作為一個單獨的記憶體物件對待,並將這個大記憶體物件的地址上下界作為邊界檢查條件,以改進實現Virtual Ghost採用的SFI技術。
4.3 SVA內部直接對映
直接對映是指將一系列連續的虛擬記憶體頁對映到連續的實體記憶體地址上,以加速虛擬地址至實體地址的變換過程。Virtual Ghost將頁表的直接對映儲存在Kernel Memory中,並設定防寫功能。當作業系統核心使用SVA-OS指令請求修改頁表資訊時,Virtual Ghost臨時清除X86 CR0.WP位,以臨時關閉頁表的防寫功能。然而,清除X86 CR0.WP位是一個序列化操作,開銷大效能低。
文章通過將頁表的直接對映從Kernel Memory轉移到Virtual Ghost VM Memory中,並取消防寫的設定,由Virtual Ghost直接讀取或修改頁表資訊,避免了臨時清除X86 CR0.WP位的開銷。
5 側通道防護
5.1 頁表側通道
防護系統必須保護頁表資訊的機密性與完整性,以防護頁表側通道攻擊。
頁表限制
- 防止作業系統核心修改對映Ghost Memory的頁表項(Virtual Ghost已實現);
- 防止儲存Ghost Memory的頁表被對映到能被作業系統核心訪問的記憶體區域(Virtual Ghost已實現);
- 防止作業系統核心讀取對映Ghost Memory的頁表項:Apparition回收了作業系統核心對於所有頁表記憶體頁的讀寫許可權,並僅允許使用SVA-OS指令請求Apparition讀取或修改頁表資訊。
交換
在作業系統核心請求換出記憶體頁時,Apparition隨機地選擇一個記憶體頁並將其交換到磁碟上;在作業系統核心請求換入記憶體頁時,Apparition將該程序所有被換出的記憶體頁全部換入記憶體中。
Apparition通過以上措施,防止作業系統核心根據記憶體頁的交換推測應用的記憶體訪問模式。
5.2 記憶體頁分配側通道
Apparition通過對Ghost Memory禁用請求頁面排程的方式,防止作業系統核心根據Ghost Memory的記憶體頁分配行為推測應用私密資料。
此外,Apparition還重新設計了Ghost Memory的實體記憶體分配方式,通過每次分配隨機數量的記憶體頁,以混淆應用的記憶體分配大小資訊。
5.3 程式碼翻譯側通道
儘管Apparition的頁表側通道防護以及記憶體頁分配側通道防護消除了針對於指令記憶體的側通道攻擊,Apparition還必須防護將V-ISA指令翻譯成N-ISA指令過程中的側通道攻擊。
Apparition將應用的V-ISA指令全部拷貝至Virtual Ghost VM Memory中,並僅允許使用SVA-OS指令請求Apparition翻譯V-ISA指令至N-ISA指令,以防護程式碼翻譯側通道攻擊。
5.4 LLC側通道
防止記憶體頁共享
防止應用的Ghost Memory被作業系統核心或其他應用訪問(Virtual Ghost已實現)。
Cache分隔
Apparition將Intel CAT技術與Virtual Ghost已有的記憶體保護機制相結合,以防止作業系統核心的LLC側通道攻擊。
Apparition通過Intel CAT技術將LLC分割槽。核心程式碼、Apparition VM程式碼各使用一個分割槽,每個應用分別使用一個獨立的分割槽。當應用的數目超過能夠使用的分割槽時,Apparition VM控制多個應用複用一個或多個分割槽,並在進行上下文切換時清空相應的LLC分割槽。
此外,Apparition VM負責維護LLC的分隔,防止作業系統核心重新配置或禁用Cache分隔功能。
5.5 指令追蹤側通道
Virtual Ghost將中斷程式的狀態存放在Virtual Ghost VM Memory中,僅允許作業系統核心使用SVA-OS指令讀取或修改中斷程式的狀態。此外,結合上文所述的程式碼翻譯側通道防護措施的部署,Apparition能夠防護惡意作業系統核心的指令追蹤側通道攻擊。
6 對預測執行側通道的影響
儘管預測執行側通道並不在文章的討論範圍內,但是Apparition能夠通過一些改進,以防護這類攻擊中利用Cache側通道的一些變種。
- 針對Spectre攻擊,Apparition無法防止不可信程序之間的所有實體記憶體共享,包括指令記憶體以及使用者空間記憶體,故Apparition無法防止Spectre攻擊;
- 針對預測訪問越界資料的Meltdown與Spectre攻擊,Apparition能夠使用抗預測的SFI插樁以及lfence指令插樁的方式,防止預測執行訪問越界資料的指令;
- 針對Meltdown攻擊,Apparition能夠令使用者空間程式碼、核心空間程式碼和Apparition VM程式碼透明地使用不同組的頁表和PCID,防護Meltdown攻擊。
7 實現
8 評估
8.1 方法論
文章的評估採用以下的benchmark與應用,這些程式高度依賴作業系統核心服務,例如檔案系統與網路棧:
- LMBench
- OpenSSH客戶端(不使用Ghost Memory)
- Ghosting OpenSSH客戶端
- Ghosting Bzip2
- Ghosting GnuPG
- Ghosting RandomAccess
- Ghosting Clang
文章的評估採用以下配置的FreeBSD SVA核心:
- VG:原始Virtual Ghost系統;
- Opt-VG:優化Virtual Ghost系統;
- Opt-VG-PG:部署了頁表側通道防護的優化Virtual Ghost系統;
- Opt-VG-LLCPart:部署了LLC側通道防護的優化Virtual Ghost系統;
- Apparition:部署了頁表側通道防護與LLC側通道防護的優化Virtual Ghost系統,即Apparition系統。
8.2 Virtual Ghost優化
文章所採用的針對Virtual Ghost系統的優化措施,優化效果較好,如下所示:
Microbenchmarks
應用
8.3 頁表側通道防護與LLC側通道防護
Ghosting RandomAccess
Ghosting Bzip2
Ghosting Clang
Ghosting OpenSSH客戶端
Ghosting GnuPG