天天看點

SGX: the good, the bad and the downright ugly

文章:https://www.virusbulletin.com/virusbulletin/2014/01/sgx-good-bad-and-downright-ugly

作者:Shaun Davenport,Richard Ford

原文從安全角度談對于SGX的看法,這裡整理了其中一小部分。

How does SGX work?

SGX enclave主要是一個隔離和加密代碼與資料的區域,enclave隻在處理器内部解密,即便直接讀RAM也是安全的。enclave在應用的虛拟位址空間内。

因為enclave建立是一條特權指令,應該有處理應用建立enclave的請求的API,這樣作業系統可以對enclave建立實作通路控制。因為enclave利用強加密,是以密鑰的生成和管理成為安全保證的重點。通過EGETKEY生成enclave使用的密鑰,密鑰是三種因素組成,一是SGX的安全版本号,一些版本号顯示了處理器啟動和影響SGX指令身份的系統操作的相關階段的更新檔層次;二是裝置ID,一個綁定處理器的128位數;三是Owner Epoch,給擁有者增加密鑰熵值的能力。

有了這些密鑰,可以提供一些有用特性,其一enclave可以向遠端伺服器進行驗證,新的EREPORT指令建立了一個enclave加密報告,遠端機器可以檢查是否由SGX産生。

enclave可被調試,但是要其顯式允許才行。如果enclave沒有選擇調試,整個enclave應表現為調試器的一條大指令,這對于想保護自己算法的人是好處,但是對于白帽子進行逆向工程是阻礙。

文檔很清楚地介紹,盡管VM可以運作enclave,enclave無法被有效模拟。同樣地,對VM中運作的有問題的代碼進行标準逆向工程并手機資訊不太可能了。

Uses of SGX

The good

可以保護軟體機密性,即使是運作在不安全的系統上也不受惡意軟體攻擊,是以有很多應用可能。

(1) 如enclave内的web浏覽器可以阻止特權軟體通路其資訊(但惡意軟體仍然擷取渲染的快照)。

(2) enclave使得惡意軟體難以從記憶體擷取密鑰環密碼,VM可以使用enclave來阻止hypervisor檢視其重要資訊,這些資訊僅在遠端伺服器驗證後進行解密。

(3) 視訊遊戲可以将其代碼放入enclave,阻止一些形式的透視/自動瞄準等。

(4) 核心可以抵禦破壞和hook,等等。

The bad

SGX也可用于惡意軟體,可信惡意軟體防護廠商無法再通路enclave内容以确認安全性。是以,惡意軟體原則上可以自由地建立enclave,防止OS/hypervisor/反惡意軟體知道其在執行什麼。再加上無處不在的網絡連接配接,小型裝載程式通過加密連結遠端下載下傳惡意軟體包可能出現。

另一方面,enclave不能處理内部的異常,反惡意軟體産品可能通過檔案IO或其他IO确定是否是惡意軟體。而且,OS可以在建立enclave的API中使用白名單機制限定建立enclave的權限。但是一旦惡意軟體成功擷取ring 0權限,SGX的完整功能都能被惡意軟體利用。下面是兩種場景:

Scenario 1, the botnet creator

正常的僵屍網絡操作很直接:感染一台計算機後,bot打電話、下載下傳并更新肉機上上的惡意軟體。有了SGX後,攻擊者可建立一個enclave,在enclave中和他們的C&C伺服器執行遠端認證,基于SGX密鑰建立一些公私鑰密碼,然後接收在enclave内執行的載荷或是其他指令。而且,通過強加密,除了C&C流量(一般是加密)本身以外,這個行為無法被仿真或追蹤。防護這不能掃描記憶體中的惡意軟體且不能建立簽名,唯一的檢測方式是檢查結果(如檔案I/O)。

Scenario 2, the video game hacker

視訊遊戲可以使用enclave,攻擊者同樣可以使用。目前,大多數形式的反欺騙技術僅檢查已知的透視/自動瞄準等在記憶體中的簽名。攻擊者可以簡單地将這些程式放在enclave中,抵抗VAC或是Punkbuster反作弊工具知道其在運作。

綜上可知,SGX用于惡意行為的可能性也是無限的,可能會更加糟糕。

The ugly

Joanna Rutkowska提出程序間通信的議題:對于任何有用的代碼,必須要有安全互動的方式。然而在某種行駛的安全輸入/輸出存在之前,無法将SGX的e你多使用案例視為防攻擊的。從純安全的角度,這隻是往正确方向踏出的一步。但是,随着SGX程式設計手冊的完全釋出,SGX似乎不能提供任何形式的安全輸入/輸出。這對于白帽子使用案例是不好的,對黑帽子也是不好的一面。

此外,防護者真正可以從SGX中獲益的方面,就是每個東西都必須以enclave形式運作,提供部分代碼的強隔離。程序間通信需要程序間真實的合作,出于互操作性目的,可能會在防護中留下缺口,這些缺口不需要存在在防護的攻擊面上,一旦攻擊者找到任意一個,不清楚是否能被容易删除。

繼續閱讀