Try   HackMD

自我檢查事項(sandbox)

Trusted Execution Environment (TEE)

前情提要:了解 TEE 之前,該知道些什麼?

  1. 作業系統的一致性(platform integrity) : 確保在任何平台的作業系統開機( Boot )的流程不會有任何意料之外的行為,直到系統完全開機完成並且應用程式可以正常執行,如此一來能確保使用者使用的作業系統本身是可信的。
  • TPM & Cold Boot Attack
  1. Arm TrustZone : Arm 於 2004 首次在 ARMV6z 引入 TrustZone,將 CPU 的架構分成「普通、加密」兩個世界,從硬體層來提昇資訊安全,而在 進一步了解 Arm 的設計,從這份 Arm 2013 年的白皮書中可以看出總共有四層的安全策略提供程式設計師來使用:

    • Normal World - User mode/System mode - PL0/PL1 in ARMv7 or EL0/EL1 in ARMv8
    • Hypervisor Mode - PL2 in ARMv7 or EL2 in ARMv8
    • Trusted World - Secure state or EL3 in ARMv8
    • SecurCore

其中 Trust world 即是 TrustZone 的應用,使執行環境分離成 Rich Execution Environment & Trusted Execution Environment,抑或上面說的「普通、加密」。


此圖中的處理器架構在 CPU、Cache 分隔出兩個世界,並以 Security Configuration Register(SCR) bit 0 來告知 CPU 此時的資料是從哪個世界而來。另外圖中的 EL3 則 ARMv8架構定義的四個例外層級其中之一,分別為 EL0 到 EL3,其中數字越大代表特權(privilege)越大,詳情可見成大資工 wiki

  • EL0: 無特權模式(unprivileged)
  • EL1: 作業系統核心模式(OS kernel mode)
  • EL2: 虛擬機器監視器模式(Hypervisor mode)
  • EL3: TrustZone® monitor mode
  1. Globalplatform:制定 TEE 標準的非營利組織,值得關注的是 TEE Subsystem & OP-TEE Driver 被納入 4.12 Linux kernel,而這是 2017.7.2 時發生的事情!

  2. Trusted Platform Module:由 TCG(Trusted Computing Group) 制定的安全標準,根據閱讀資料,jserv 提到「可以把 TPM 想為電腦的指紋一樣,可作為電腦身分的唯一辨識,非一般的電腦晶片組,利用 TPM 晶片加上 BIOS、作業系統,即可創造出唯一僅能被自己電腦所用的加密金鑰,於是透過 TPM 加密過後,即使 BIOS 被洗掉,硬碟裡的東西也受到保護。」
    從功能面上 TPM 扮演幾個角色

    • 儲存加密金鑰,並且絕對不會給外部存取
    • 有關加解密的操作都在 TPM 內部進行
    • 隔絕軟體層的駭客攻擊
  3. REE & TEE : REE 即 Rich Execution Environment 就是我們一般常用的系統環境,運行常見的作業系統 e.g. Linux Android,而 TEE 則是獨立於 REE 之外的另一個隱密世界,負責掌管系統的機密的記憶體與執行秘密任務的作業系統。

TEE : From Trusted Boot to Trsut Application

TEE 要能夠讓 Secure World 的安全性被保證沒被打折扣,就必須從開機階段的一致性做起,我們可以參考底下 OP-TEE 的 truted boot 的流程是先 TEE 後 REE 並且在 TEE Boot 的階段進行簽章驗證,而在這個階段的簽章標準上是由 Original Equipment Manufacturer(OEM) 生產商來簽署,而每個階段的 bootloader 都會驗證程式碼的簽證才載入程式碼,因此這個流程被稱為 Trusted boot ,以防在 boot 階段 TEE 系統就被惡意程式碼污染。


而在程式執行的階段則是讓 REE、TEE 分別具備不同的權限,我們這邊看的是 Arm TrustZone 為硬體支援發展出來的 OP-TEE。從 Arm TrustZone 的硬體設計我們看得出 REE 不具備存取 Secure Wolrd 記憶體的權限,因此 TEE 就是一個隔離的執行環境負責機密資料的存取與運算。對於 REE 和 TEE 雙方的溝通是建立 Secure Monitor Call,SMC 的指令是 CPU 對 EL3 的進入點,,這方面 API 的標準則是由 Globalplatform 所制定,兩個系統的溝通大致上可以從下圖看出個大概,TEE 會接受來自 SMC 的事件然後給出相對應的 response,這之中經過什麼運算處理,都是不可視的。

TEE : application in real world

TEE 目前課程上有看到兩個實際的開源案例分別是

  • BOLOS TEE : 比特幣錢包
  • Soter : 生物識別
    而我則是從 T6 循線找到在上海的 TrustKernel 這家公司,T6 原本是開源的 TEE 專案,不過後來轉型成商業公司之後,在 github 上的程式碼就都消失了,以下用官方的圖表示他們所帶來的解決方案

    這篇可以由這個 Slide 看到
    底下羅列 TEE 的潛在應用
TODO:找時間補上這些潛在應用如何使用 TEE 的概述

• Secure hardware tokens
• Mobile payment
• BYOD
• Runtime integrity verification
• Trusted user interface
• Remote enablement/disablement
• Automotive (trust vs. safety)
• Secure isolation, Remote attestation
• DRM, HDCP, secure NFC in P2P mode
• Any other operation that requires verifiable

小結:看了很多文章,深入解釋 TEE 比較完整的還是有公開標準的 GlobalPlatform 妥提供的文件並搭配由 Linaro 開源的 OP-TEE 來學習會是一個不錯的方向。 TEE 基本核心精神是「隔離執行環境」,同時 TEE 系統安全則必須建構在硬體上的支援,如 Arm TrustZone、Intel SGX等等,在每個人都有手機的前提以及各種行動應用的產生,TEE 所能帶來的安全是否是 「Trustworthy」會是行動應用所關注的點。另外很多關於 TEE 的文章都是對岸整理的,要入門從對岸的文章著手是一個不錯的切入點。

尚未釐清的議題

  • Secure boot 和 trusted boot 有何差別?還是說沒什麼差別?而在只能由 OEM 簽署的程式碼 boot 的硬體是不是對 Linux 系統不方便?
  • TPM based & Arm Trusted Based 的 TEE 安全性的比較重要嗎?
  • Secure element 是什麼?跟 TPM 有什麼差別?

應用面
Reference