自我檢查事項(sandbox) === Trusted Execution Environment (TEE) ---- ## 前情提要:了解 TEE 之前,該知道些什麼? 1. 作業系統的一致性(platform integrity) : 確保在任何平台的作業系統開機( Boot )的流程不會有任何意料之外的行為,直到系統完全開機完成並且應用程式可以正常執行,如此一來能確保使用者使用的作業系統本身是可信的。 - [ ] TPM & Cold Boot Attack 2. Arm TrustZone : Arm 於 2004 首次在 ARMV6z 引入 TrustZone,將 CPU 的架構分成「普通、加密」兩個世界,從硬體層來提昇資訊安全,而在 進一步了解 Arm 的設計,從這份 [Arm 2013 年的白皮書](https://community.arm.com/cfs-file/__key/telligent-evolution-components-attachments/01-2142-00-00-00-00-51-36/GlobalPlatform-based-Trusted-Execution-Environment-and-TrustZone-R.pdf)中可以看出總共有四層的安全策略提供程式設計師來使用: * 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,抑或上面說的「普通、加密」。 ![](https://i.imgur.com/wo1MGg2.jpg) 此圖中的處理器架構在 CPU、Cache 分隔出兩個世界,並以 Security Configuration Register(SCR) bit 0 來告知 CPU 此時的資料是從哪個世界而來。另外圖中的 EL3 則 ARMv8架構定義的四個例外層級其中之一,分別為 EL0 到 EL3,其中數字越大代表特權(privilege)越大,詳情可見[成大資工 wiki](http://wiki.csie.ncku.edu.tw/embedded/ARMv8) * EL0: 無特權模式(unprivileged) * EL1: 作業系統核心模式(OS kernel mode) * EL2: 虛擬機器監視器模式(Hypervisor mode) * EL3: TrustZone® monitor mode 3. Globalplatform:制定 TEE 標準的非營利組織,值得關注的是 TEE Subsystem & OP-TEE Driver 被納入 [4.12 Linux kernel](https://kernelnewbies.org/Linux_4.12),而這是 2017.7.2 時發生的事情! 4. Trusted Platform Module:由 TCG(Trusted Computing Group) 制定的安全標準,根據閱讀資料,jserv 提到「可以把 TPM 想為電腦的指紋一樣,可作為電腦身分的唯一辨識,非一般的電腦晶片組,利用 TPM 晶片加上 BIOS、作業系統,即可創造出唯一僅能被自己電腦所用的加密金鑰,於是透過 TPM 加密過後,即使 BIOS 被洗掉,硬碟裡的東西也受到保護。」 從功能面上 TPM 扮演幾個角色 * 儲存加密金鑰,並且絕對不會給外部存取 * 有關加解密的操作都在 TPM 內部進行 * 隔絕軟體層的駭客攻擊 5. 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 系統就被惡意程式碼污染。 ![](https://i.imgur.com/tnAEFii.jpg) 而在程式執行的階段則是讓 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,這之中經過什麼運算處理,都是不可視的。 ![](https://i.imgur.com/jmsmkWc.jpg) ## TEE : application in real world TEE 目前課程上有看到兩個實際的開源案例分別是 * BOLOS TEE : 比特幣錢包 * Soter : 生物識別 而我則是從 T6 循線找到在上海的 TrustKernel 這家公司,T6 原本是開源的 TEE 專案,不過後來轉型成商業公司之後,在 github 上的程式碼就都消失了,以下用官方的圖表示他們所帶來的解決方案 ![](https://i.imgur.com/AYqT28e.png) 這篇可以由這個 [Slide](https://www.trustkernel.com/uploads/pubs/TEE-2015%E5%AE%89%E5%85%A8%E6%94%AF%E4%BB%98%E8%AE%BA%E5%9D%9B.pdf) 看到 底下羅列 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 ---- * TEE * [Mobile Platform Security:OS Hardening and Trusted Execution Environment](https://www.owasp.org/images/8/88/Onur_Zengin_-_TEE_chapter_meeting_presentation.pdf) * [Introduction to Trusted Execution Environments (TEE) – IY5606](http://sec.cs.ucl.ac.uk/users/smurdoch/talks/rhul14tee.pdf)