當前位置:
首頁 > 最新 > ARM Soc 上的 TEE 解決方案

ARM Soc 上的 TEE 解決方案

ARM 近期在安全領域動作頻頻,先是於 3 月初發布了平台安全架構(PSA),緊接著 5 月初又發布了一系列 IP 以保護晶元免受物理攻擊,就在前幾天 ARM 收購了物聯網設備管理公司 Stream Technologies,加上原有的 TrustZone 解決方案, 一個龐大的物聯網產業鏈就此形成。而隨著億萬設備的物聯化,後半場的競爭將更加激烈。

在我們了解了 TEE 以及相關的軟、硬體解決方案後。下面讓我們來基於ARM 的TrustZone 技術來看看 ARM 世界的 TEE 終極解決方案之一。我們選擇可信引導是ARM 的TF-A(Trusted Firmware-A), Trusted OS 我們則使用開源的OP-TEE。

01

Trustzone

Trustzone 技術這裡不再進行過多的闡述,直接敲黑板,看下面知識點。

Trustzone 為受信任軟體提供系統範圍內的硬體隔離。

TrustZone 在概念上將 SoC 的硬體和軟體資源劃分為安全世界(Secure World)和非安全世界(Normal World)

Secure World 和 Normal World 是需要在 Monitor Mode 模式才可以

進行轉換

ARMv8-A 架構定義了四個異常等級,分別為 EL0 到 EL3,其中數字越大

代表特權(privilege)越大,特權級別分別是:

EL0: unprivileged

EL1: OS kernel mode

EL2: Hypervisor mode

EL3: TrustZone monitor mode

本文章以及後續文檔均在 ARMv8-A 架構下展開討論以及實驗

02

TF-A

TF-A(Trusted Firmware-A) 是為 Armv7-A 和 Armv8-A 提供了一個安全世界的軟體參考實現,其主要包括一個安全的監視程序,在異常級別3 (EL3)執行,並且實現了多種 ARM 的標準介面,比如:

The Power State Coordination Interface (PSCI)

Trusted Board Boot Requirements (TBBR, Arm DEN0006C-1)

SMC Calling Convention

System Control and Management Interface

Software Delegated Exception Interface (SDEI)

ARMv8-A 的 TF-A 實現請參看下圖

TF-A 將系統啟動從最底層進行了劃分,整個boot flows 的過程如下圖所示

撿重點:

a. EL3 運行的是 Secure monitor 的功能.

b. BL1 載入 BL2 image 至 RAM 中,並跳轉執行 BL2(BL1 看起來其實

是可以移除的,我們在後面的章節中再來討論).

c. BL2 將會載入 BL31,BL32,BL33.

d. BL32 一般為 Trusted OS.

e. BL33 為非安全世界的 image, 如 u-boot, kernel 等,一般為 u-boot.

Note:

a. 這張圖片是從Linaro 的 slides 中獲取,版本號為1.0, 目前 TF-A 的release 版本是 1.5.

b. 在最新的版本中,boot flows 為 BL1 --> BL2 --> BL1 --> BL31 --> BL32-->BL31 --> BL33 --> Linux kernel.

如何為你的 target board 編譯 TF-A image?

了解了 TF-A 的原理後,其實編譯是很簡單的,選擇自己的目標設備,然後查看對用的文檔即可。

當前 TF-A 支持的平台有ARM 的 fvp/juno board, 聯發科mt8173/mt6795,

NXP Layerscpae 平台的ls1043, 華為的 hikey/960, 以及樹莓派3(rpi3)等,當然還支持qemu.

大部分都是商業平台的設備,有些人選擇用qemu,但是這裡我不建議,我建議使用 rpi3 平台進行研究。

關於如何在 rpi3 上編譯可以查閱 docs/plat/rpi3.rst,我自己是在某家的工業平台上進行開發和驗證,因為要遵守保密協議,這裡不方便進行演示。 後續會考試採用 rpi 3 進行 demo show.

03

Build TF-A

rpi3 請查看 TF-A source 目錄下的 docs/palt/rpi3.rst. 其它相關平台也可查到。

04

OP-TEE

OP-TEE是Linaro基於ARM TrustZone? 技術實現的一個 TEE OS。該組件符合GlobalPlatform TEE系統體系結構規範。它還提供了TEE內部核心API v1.1,由GlobalPlatform TEE標準定義,用於開發受信任的應用程序。

讓我們通過一張圖來看看 op-tee 的框架

撿重點:

a. 因為 op-tee 是完全符合 GP 規範來設計的,所以整體框架和我上一篇文章中描述的架構基本一致.

b. 當 Normal World 運行 Linux 時,Secure World 如果要和 Normal World 進行通信,那麼Linux Kernel 需要 Enable op-tee driver(封裝了SMC handler 相關).

c. 所有的 Trusted App 必須嚴格按照 TEE internal APIs 來進行封裝,後續會有一篇開發自己的 TA app 的教程。

d. 總結下來,Secure World 和 Normal World 通信其實就是N 多個SMC 調用.

既然說到這兒,那麼還是在看一張如何從Secure World 切到 Normal World 的切換流程圖吧, 看下圖

這裡我不得不再啰嗦幾句,我們都知道 TrustZone 的系統有三種狀態(不知道的同學現在你可以 Get 了),分別是 Secure World, Normal World 以及用於二者切換的 Monitor Mode。

由上圖可知,協處理器 CP15 的寄存器 SCR(Secure Configuration Register)有一個 NS 位用於指示當前處理器位於哪一個世界,該寄存器在 Normal World 是不能訪問的。當 CPU 處於 Monitor Mode 時,無論 NS 位是 0 還是 1,處理器都是在Secure World 運行代碼。因此 Monitor Mode 下總是安全的世界,但如果此時 NS 為1,訪問 CP15 的其它寄存器獲取到的是其在非安全世界的值。

那麼 Normal World 如何切換到 Monitor Mode?

處理器從 Normal World 進入Monitor Mode 的操作由系統嚴格控制,所有這些操作在 Monitor Mode 看來都屬於異常,所以如果要從 Normal World 切換到Monitor Mode,我們可以通過以下方式進行:

軟體執行 SMC(Secure Monitor Call) Instructions

硬體異常機制,包括

IRQ

FIQ

External Data Abort

External Prefetch Abort

關於Monitor Mode,其裡面的執行的代碼依賴於具體平台的實現,其功能類似於進程切換,不同的是這裡是不同模式間CPU狀態切換。軟體在 Monitor Mode下先保存當前世界的狀態,然後恢復下一個世界的狀態。操作完成後以從異常返回的方式開始運行下一個世界的代碼。

05

Build OP-TEE

Linaro 總結了一張簡易 Getting Started 的圖片,如下

更多編譯步驟請直接查看 README(要學會 Get Readme)。

06

驗證 TF-A and OP-TEE

如果需要將 TF-A 和 OP-TEE 一起使用,那麼遵循TF-A 的載入流程,並且在 Linux Kernel 中將 OPTEE Driver 使能即可,啟動後使用 xtest 進行驗證。

TEE 解決方案為我們提供可信任的安全執行空間,但是它的安全程度依然不夠高。那麼怎樣在億萬物聯網設備中安全的管理和部署應用? 你認為當前有那些優秀的開源物聯網設備管理雲平台(類似於Mbed Cloud)? 歡迎在評論區分享你的看法!!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 聞聲而動 的精彩文章:

TAG:聞聲而動 |