英特爾® Software Guard Extensions 教程系列:第一部分,英特爾® SGX 基礎


英特爾® Software Guard Extensions 教程系列:第一部分,英特爾® SGX 基礎

英特爾® Software Guard Extensions(英特爾® SGX) 教程系列的第一部分僅對該技術進行了簡單概述。 更多詳情,請參閱英特爾 Software Guard Extensions SDK提供的相關資料。 在文章介紹英特爾® Software Guard Extensions 教程系列中查找本系列所有教程列表。

了解英特爾® Software Guard Extensions 技術

軟件應用通常需涉及諸如密碼、賬號、財務信息、加密秘鑰和健康檔案等私人信息。 這些敏感數據只能由指定接收人訪問。 按英特爾 SGX 術語來講,這些隱私信息被稱為應用機密。

操作系統的任務對計算機系統實施安全策略,以避免這些機密信息無意間暴露給其他用戶和應用。 操作系統會阻止用戶訪問其他用戶的文件(除非訪問已獲得明確許可),阻止應用訪問其它應用的內存,阻止未授權用戶訪問操作系統資源(除非通過受到嚴格控制的界面進行訪問)。 應用通常還會采用數據加密等其它安全保護措施,以確保發送給存儲器或者通過網絡連接而發送的數據不會被第三方訪問到——即使是在操作系統和硬件發盜用的情況下。

盡管有這些措施提供保護,但大部分計算機系統仍然面臨着一項重大安全隱患:雖然有很多安保措施可保護應用免受其它應用入侵,保護操作系統免受未授權用戶訪問,但是幾乎沒有一種措施可保護應用免受擁有更高權限的處理器的入侵,包括操作系統本身。 獲取管理權限的惡意軟件可不受限制地訪問所有系統資源以及運行在系統上的所有應用。 復雜的惡意軟件可以鎖定應用的保護方案為目標進行攻擊,提取加密秘鑰,甚至直接從內存提取機密數據。

為對這些機密信息提供高級別的保護,同時抵御惡意軟件的攻擊,英特爾設計了英特爾 SGX。 英特爾 SGX 是一套 CPU 指令,可支持應用創建安全區: 應用地址空間中受保護的區域,它可確保數據的機密性和完整性——即便有獲取權限的惡意軟件存在。 安全區代碼可通過專用指令啟用,並被構建和加載成 Windows* 動態鏈接庫 (DLL) 文件。

英特爾 SGX 可減少應用的攻擊面。 圖 1 顯示了借助英特爾 SGX 安全區和不借助英特爾 SGX 安全區時,攻擊面的顯著差異。

Attack-surface areas with and without Intel® Software Guard Extensions enclaves.

圖 1: 借助和不借助英特爾® Software Guard Extensions 安全區時的攻擊面。

英特爾 Software Guard Extensions 技術如何確保數據安全

英特爾 SGX 可針對已知的硬件和軟件攻擊提供以下保護措施:

  • 安全區內存不可從安全區外讀寫,無論當前的權限是何種級別,CPU 處於何種模式。
  • 產品安全區不能通過軟件或硬件調試器來調試。 (可創建具有以下調試屬性的安全區:該調試屬性支持專用調試器,即英特爾 SGX 調試器像標准調試器那樣對其內容進行查看。 此措施旨在為軟件開發周期提供輔助)。
  • 安全區環境不能通過傳統函數調用、轉移、注冊操作或堆棧操作進入。 調用安全區函數的唯一途徑是完成可執行多道保護驗證程序的新指令。
  • 安全區內存采用具有回放保護功能的行業標准加密算法進行加密。 訪問內存或將 DRAM 模塊連接至另一系統只會產生加密數據(見圖 2)。
  • 內存加密秘鑰會隨着電源周期(例如,啟動時或者從睡眠和休眠狀態進行恢復時)隨機更改。 該秘鑰存儲在 CPU 中且不可訪問。
  • 安全區中的隔離數據只能通過共享安全區的代碼訪問。

受保護的內存在大小上存在硬限值,該限值由系統 BIOS 設定,通常為 64 MB 和 128 MB。 有些系統提供商可能會將此限值制定成其 BIOS 設置內的可配置選項。 內存中可同時保留 5 到 20 個安全區,這取決於每個安全區的大小。

How Intel® Software Guard Extensions helps secure enclave data in protected applications.

圖 2: 英特爾® Software Guard Extensions 如何確保受保護應用中安全區數據的安全。

設計注意事項

包含英特爾 SGX 技術的應用設計要求將應用分成兩個部分(見圖 3):

  • 可信部分。 它指的是安全區。 可信代碼中的代碼是訪問應用機密的代碼。 一款應用可以擁有一個以上可信部分/安全區。
  • 不可信部分。 它包括應用的剩余部分及其所有模塊。 需要指出的是,從安全區的角度來看,操作系統和虛擬機顯示器都被看做不可信部分。

可信部分應盡量保持最小,僅限於需要最高等級保護的數據以及必須直接作用於其上的操作。 具有復雜界面的大型安全區不僅僅會消耗更多受保護內存:還會產生更大攻擊面。

安全區還應使可信-不可信部分交互程度保持最低。 雖然安全區可離開受保護內存區域,在不可信部分(通過專用指令)調用函數,但對依賴性進行限制將會針對攻擊對安全區進行加固。

Intel® Software Guard Extensions application execution flow.

圖 3: 英特爾® Software Guard Extensions 應用執行流程。

認證

在英特爾 SGX 架構中,認證指的是以下流程,即證明在平台上建立了特定安全區。 有兩種認證機制:

  • 本地認證 適用於同一平台上兩個安全區進行相互認證時。
  • 遠程認證 適用於某一安全區獲取遠程提供商的信任時。

本地認證

當應用擁有一個以上需要相互協作才能完成任務的安全區時,或者兩款應用必須在安全區之間進行數據通信時,本地認證非常有用。 每個安全區都須對另一安全區進行驗證,以確認雙方都是可信安全區。 一旦完成認證,它們就會建立受保護會話,采用 ECDH Key Exchange 共享會話秘鑰。 該會話秘鑰可用於對必須在這兩個安全區之間進行共享的數據進行加密。

因為一個安全區不能對另一個安全區的受保護內存空間進行訪問——即使它們運行在同一應用中,所以必須將所有指針解除引用至其值和副本,且必須將完整的數據集從一個安全區封送至另一安全區。

遠程認證

借助遠程認證,英特爾 SGX 軟件和平台硬件的組合可用於生成評價,評價會被發送至第三方服務器以建立信任。 該軟件包括應用安全區,以及評價安全區 (QE) 和配置安全區 (PvE),后兩者皆由英特爾提供。 該認證硬件是英特爾 SGX 所支持的 CPU。 將該軟件信息摘要與來自該硬件的平台唯一非對稱秘鑰相組合以生成評價,再通過已認證渠道將評價發送至遠程服務器。 如果遠程服務器確認安全區得到了正確實例化且運行在真正支持英特爾 SGX 的處理器上,遠程服務器就會立即信任該安全區並選擇通過已認證渠道向其提供機密信息。

密封數據

密封數據是對數據進行加密,以便可在不泄露其內容的前提下將數據寫至不可信內存或對其進行存儲。 稍后,該安全區可將該數據讀回並進行解封(解密)。 加密秘鑰由內部按需推導,不會暴露給安全區。

有兩種數據密封方法:

  • 安全區標識。 本方法可生成一個所述安全區所獨有的秘鑰。
  • 密封標識。 本方法可生成一個基於安全區密封授權方標識的秘鑰。 相同簽名授權方的多個安全區可推導出相同秘鑰。

密封至安全區標識

密封至安全區標識時,秘鑰對於密封數據的具體安全區是獨一無二的,該安全區會影響其簽名的任何更改都會產生新秘鑰。 借助該方法,使用一版安全區密封的數據不可由其他版本的安全區訪問,因此該方法的一個副作用是,密封的數據不可遷移至較新版本的應用及其安全區中。 它專為密封的舊數據不應被新版應用使用的應用而設計。

密封至密封標識

密封至密封標識時,來自同一授權方的多個安全區可透明地對彼此的數據進行密封和解封。 這樣,來自一版安全區的數據可遷移至另一版,或在同一軟件廠商的多個應用中進行共享。

如果需要防止舊版軟件和安全區訪問較新應用版本密封的數據,授權方可在對安全區進行簽名時寫下軟件版本編號 (SVN)。 比指定 SVN 更舊的安全區版本將不可推導出密封密鑰,因此不可對數據進行解封。

我們將如何在本教程中使用英特爾 Software Guard Extensions 技術

我們描述了英特爾 SGX 的三大要素:安全區、認證和密封。 對於本教程,我們將重點實施安全區,因為安全區是英特爾 SGX 的核心。 如果不先建立安全區,您不可進行認證或密封。 這還有助於確保教程保持可管理大小。

即將推出

本教程系列第二部分,英特爾® Software Guard Extensions 教程系列: 第二部分,應用設計,將聚焦我們將為英特爾 SGX 構建和支持的密碼管理程序應用。 我們將談及設計要求、限制和用戶界面。 敬請關注!

 在文章介紹英特爾® Software Guard Extensions 教程系列中查找本系列所有教程列表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM