HSM TA MMU SEE 資料中心 AXI TEE

全程隔離打造可信賴執行環境 TEE架構守護安全關鍵應用

2020-04-13
安全已成為所有市場日漸重視的問題。透過諸如Zynq UltraScale+平台上的可信賴執行環境(Trusted Execution Environment, TEE)將安全關鍵元素與系統其餘部分隔離,為其提供重要的安全保障。

 

可信賴執行環境(TEE),也稱為安全執行環境(Secure Execution Environment, SEE),是專用於運作安全關鍵任務的環境。TEE包含可信賴硬體與可信賴軟體,稱為可信賴環境(Trusted World)。非可信賴(Untrusted)環境或非安全(Non-secure)環境指非可信賴硬體與非可信賴軟體兩者。由於TEE與非可信賴環境隔離,因此能提供較高的安全性。在正常情況下,TEE與同一處理器或系統單晶片(SoC)上的非可信賴環境平行運作,並為其提供可信賴的服務。

可信賴執行環境系統運作基礎

與將安全性封裝在高度安全獨立實體元件中的可信賴平台模組(TPM)或智慧卡(Smart Cards)等外部安全模組相比,TEE具有更高的運算效能(千兆赫相對於兆赫),同時能存取較大量的RAM集(千百萬位元組相對於千位元組),以及整合更多元的周邊設備(如十億位元乙太網路、可編程邏輯(PL)、硬體加速器等)。TEE能夠存取的資源僅受TEE處理器的限制。此外,外部安全模組因通常由非可信賴系統控制和存取,因此仍然存在安全漏洞,使其容易受到攻擊。例如,外部模組需要密碼才能存取特定安全功能,該密碼就會透過非可信賴系統處理,使其暴露在多種類型的攻擊下。然而,將TEE與可信賴輸入裝置(例如指紋辨識器、密碼鍵盤等)配合使用,密碼就只能被可信賴軟硬體讀取與處理,便能盡量減少可能出現的攻擊,同時大量縮減受攻擊面。上述簡單的範例展現TEE為何能夠透過隔離提供更高安全性。具體如圖1所示。

圖1  TEE與典型非安全系統相比受攻擊面縮減

在TEE中運作任何安全關鍵軟體,皆須使用可信賴作業系統來處理安全軟體的調整與運作。可信賴作業系統不同於Linux、Windows等典型作業系統,其代碼基數極小,只有幾千位元。由於小代碼基數便於檢查測試任何已知漏洞,因此對於可信賴作業系統極為重要,其盡可能縮減可信賴作業系統的受攻擊面,同時為任何非可信賴軟體提供軟體隔離機制。

可信賴應用(Trusted Applications, TA)在可信賴作業系統內運作,並提供系統所需的任何安全關鍵功能。如同非可信賴應用,可信賴應用能夠在執行相同安全作業系統的多個結構間轉移,TA開發人員就毋需為欲使用的每個平台都重新編寫TA。除了能夠對任意非可信賴軟體進行隔離,使用可信賴作業系統還能在可信賴應用之間建立隔離,進而提供更深入的隔離功能。

能夠存取特定AES加密金鑰的TA則不需存取另一個TA使用的特定RSA金鑰。即便安全性的作業系統有助於強化TA之間的隔離,若一旦有需要,TA仍然能夠調用另一個TA,有助於保持可信賴應用代碼的小型化與模組化。

以下將介紹在系統上運作可信賴執行環境所需的架構與零件,其中包含:

・硬體隔離

・軟體隔離

・安全監測器

・共用記憶體

・可信賴啟動

任何單一元件本身都不利於TEE的使用,但將這些元件一起使用時則大不同。

以獨立處理器實現硬體隔離

將可信賴環境與非可信賴環境隔離的機制之一是使用實體獨立的處理器。此類機制類似上述所介紹的外部硬體模組,但不同之處在於兩個處理器都屬於高效能處理器。這類架構的缺點在於,使用多個處理器會增加總體成本且占用面積較大。如果使用多核心處理器,則能將一個核心專門用於可信賴環境,另一個專用於非可信賴環境。與多處理器架構相比,這種類型的架構可節省成本和電路板空間。然而,這兩種架構的主要缺點在於,其仍然需存取外部周邊設備,如DRAM、乙太網路等。獨立實體外部設備的代價是提高成本與增加占用面積,才能完成兩個環境之間的實體隔離,否則必須共用外部設備;而外部設備之間的隔離只能透過強度較弱的軟體隔離機制來完成,不夠滿足高度安全的TEE需求。

若要同時使用單一處理器與一組周邊設備並完成硬體隔離,有平台如Xilinx Zynq UltraScale使用Arm TrustZone技術來建構硬體隔離。TrustZone不僅在處理器與其各自的核心間提供硬體隔離,也在整個平台上執行硬體隔離,進而提供系統級的安全。啟用該技術後,所有AXI任務、記憶體位置、外部設備、中斷控制器、硬體加速器、快取與處理器的執行狀態都將自動儲存在實體寄存器中,用單位元標記該資源是否可供安全環境或非安全環境存取。設置該位元時,該資源為非安全資源;清除該位元時,該資源為安全資源。

可信賴環境是可以存取非可信賴環境的,反之則不行。當非安全資源試圖存取安全資源時,會觸發安全例外,立即阻斷任何實體硬體層面的潛在威脅。例如,在非安全狀態下執行的處理器對任何安全記憶體的存取都會被拒絕。另一方面,為寄存配置或讀取非可信賴記憶體快取,安全環境可能需要存取非可信賴資源。

TrustZone提供的另一項重要功能是能夠在安全狀態和非安全狀態下使用同一資源,此功能通常在處理器上執行,讓其在安全狀態下完成部分處理,隨後切換到非安全狀態下運作。由於處理器的快取記憶體和其他相關記憶體能感知到它,因此可信賴環境和非可信賴環境之間的情景切換速度較快。在兩個環境進行切換時,毋需更新與再度載入快取和其他相關記憶體。

運算平台強化硬體隔離

有廠商像賽靈思(Xilinx)在Zynq UltraScale+平台上,外設保護單元(Xilinx's Peripheral Protection Unit, XPPU)與記憶體保護單元(Xilinx's Memory Protection Unit, XMPU)進一步強化硬體隔離。在該平台上使用XMPU和XPPU能更深入隔離系統,因為這些保護單元除了檢查入站任務的TrustZone狀態以外,還使用入站主控AXI身份識別(ID)來篩選任何請求。透過這項額外的強化功能,不僅可以將該平台劃分為安全和非安全兩個環境,還能劃分為多個網域。XMPU專門用於隔離DDR、內部記憶體(On-Chip Memory, OCM)與任何全功耗網域(Full-power Domain, FPD)外部設備。XPPU專門用於隔離低功耗網域(Low-power Domain, LPD)外部設備、QSPI、處理器間中斷(IPI)訊息快取與ARM Cortex-R5處理器緊密整合的記憶體組(Tightly Coupled Memory, TCM)。

就主控ID而言,ARM Cortex-A53的所有四個核心都被分組到一個主控ID中,而不是四個獨立的ID,這就意謂著在任何時間點,這四個核心都只能同時在安全模式或非安全模式下運作。另一方面,ARM Cortex-R5處理器在分離模式運作時,會為每個處理器分配單一個ID;而在鎖步模式(Lock-step Mode)運作時,就會將統一的ID分配給所有處理器。多個ID可以直接分配給PL,也可以將其設計為PL內的IP,這樣硬體隔離就不僅局限於處理單元。

而ARM Cortex-A53核心採用記憶體管理單元(Memory Management Unit, MMU)來實現虛擬定位,而ARM Cortex-R5處理器則採用記憶體保護單元(MPU)來控制對L1快取與外部記憶體間的存取。為了將MMU的功能拓展至SoC層面,Zynq UltraScale+平台採用了系統MMU(SMMU)。

此外,進階可擴展介面(Advanced eXtensible Interface, AXI)與進階外部設備匯流排(Advanced Peripheral Bus, APB)隔離資料段(Advanced Isolation Blocks, AIB)接在平台上執行,以防止AXI/APB主設備對AXI/APB附屬設備的不當存取。該元件還採用AXI超時資料段(Advanced Timeout Block, ATB),以防止AXI主設備在未收到來自AXI附屬設備的回應時當機。ATB並非是一種額外的隔離形式,其為該平台的重要安全功能,假如任何AXI附屬設備為防止阻斷服務(DoS)攻擊而上鎖,AXI主設備則可以恢復它的功能。

安全監測器切換建構軟體隔離執行機制

正如TrustZone被當作硬體隔離的機制,將系統隔離成兩個獨立的環境,Armv8-A處理器還可提供被稱為異常級別的軟體隔離機制,例如Zynq UltraScale+平台的ARM Cortex-A53處理器所提供的機制。

其中包含非可信賴環境中運作時的非安全異常級別(Exception Levels, EL),和在可信賴環境中運作時的安全異常級別(Secure Exception Levels, SEL)。表1是對異常級別與其常態應用的統整。值得留意的是,在可信賴環境中運作時不存在SEL2;同時,雖然EL3駐留在可信賴環境中,但並未將其名稱指定為SEL3。

為讓處理器從非可信賴環境切換到可信賴環境執行,需要使用名為安全監測器(Secure Monitor)的機制進行切換。在ARM系統中,安全監測器只能在EL3範圍之外執行。按照命名法來看,似乎表示EL3是不安全的;然而,當處理器在EL1、SEL1或EL2下執行時,只能透過發出安全監測器調用(Secure Monitor Call, SMC)指令才能存取EL3。ARM擁有自己的開源安全監測器軟體,稱為ARM可信賴韌體(Arm Trusted Firmware, ATF),賽靈思也同時支援與Zynq UltraScale+平台配套使用的ATF版本。

圖2總結如何在TEE架構下使用軟硬體隔離,展示TrustZone和ARM異常級別的運用方法。圖3所示的則是一種增強型TEE系統架構作為對照,具體為在該平台上實現的附加硬體隔離機制層;該圖為ARM Cortex-A53處理器的架構圖。簡而言之,RPU與PL被當作處理器的外部設備處理。

圖2  硬體隔離的Armv8-A TEE架構透過在ARM異常級別上進行隔離的TrustZone軟體完成
圖3  Zynq UltraScale+平台採用增強隔離的Armv8-A TEE架構

非安全環境和安全環境間切換的關鍵是SCR_EL3寄存器。只有處理器在EL3級別下才能存取該寄存器,這就是安全監測器需要在EL3級別外運作的原因。SCR意為安全控制寄存器;該寄存器的位元3到0如表2所示。

該寄存器內最重要的位元是NS位元。設置該位元時,處理器將在非可信賴環境中運作;如果清除該位元,處理器將在可信賴環境中運作。若要切換環境,處理器則需透過SMC指令進入安全監測器軟體,修改NS位元,然後從安全監測器軟體返回,在可信賴環境或非可信賴環境中運作。

SCR_EL3寄存器中的另外三組位元也相當重要:快速中斷要求(Fast Interrupt Request, FIQ)、中斷要求(Interrupt Request, IRQ)與外部記憶體存取中止(External Abort, EA)位元。上述位元是用來提示中斷是透過安全檢測器、程式管理器,抑或作業系統進行路由,全取決於處理器的配置。在正常情況下,FIQ預留給安全中斷,IRQ預留給非安全中斷。此外,中斷路由也受到Zynq UltraScale+平台上的GICv2寄存器的控制,該寄存器的存取能感知TrustZone,如此一來,中斷寄存器只會在安全環境下進行修改。透過EL3下的安全監測器代碼中斷傳遞,不僅能提供較靈活的中斷方案,也有助於確保及時處理安全或非安全中斷。例如,如果在非安全環境下運作,安全中斷路徑可經安全監測器並立即得到處理,毋需處理器切換到可信賴環境後再處理;透過安全監測器傳遞非安全中斷也便於檢查中斷的有效性,避免任何惡意中斷干擾系統。這些只是中斷路由的簡單範例,其最終會由系統架構來處理。

安全啟動TEE以存取非安全環境共用記憶體

如果可信賴應用要針對非安全環境提供可信賴服務,則需能夠往返傳輸資料的機制,並且需透過TEE來存取非安全記憶體。Zynq UltraScale+平台等能夠感知TrustZone的系統,透過TEE即可啟動非安全記憶體的存取。

在可信賴環境和非可信賴環境間往返傳輸資料最常用的方法是指定一部分共用記憶體。在非安全環境下運作時,可以載入記憶體並調用TA,然後在TA完成後讀回。而在安全環境下運作時,安全作業系統或TA可將該記憶體的副本置於安全記憶體的一部分內,直接在非安全記憶體上運作,或將共用記憶體的狀態從非安全更改為安全,再重新改為非安全。記憶體共用運作完全取決於TEE架構。

為讓TEE安全運作,必須以安全的方式載入TEE,否則TEE內的任何運作都無法被視為安全運作,至於Zynq UltraScale+平台也支援認證啟動模式或加密啟動模式。

TEE與程式管理器各有優勢執行背景

兩種類型的程式管理器:

・第一類程式管理器直接在硬體上執行

・第二類程式管理器作為應用在作業系統上執行

在本文中僅討論類第一類程式管理器,因為第二類程式管理器的安全性高度依賴其運作的基礎作業系統。

程式管理器是在EL2上執行的一套軟體,用於模擬硬體系統並以虛擬機器(VM)的形式提供。由於程式管理器能透過將處理器時間和記憶體分配給每個虛擬機器,因此可以平行執行多個虛擬機器,程式管理器有時也可以透過模擬傳統通訊外部設備或導入客製介面,提供虛擬機器間的通訊。

程式管理器與TEE都能分別執行獨立環境、虛擬機器和安全應用,這意味兩者都能對資源配置進行管理,但在提供的服務與針對執行環境的介面則存在極大的差異。程式管理器提供模擬硬體系統所需的低層次介面,而作業系統則提供用於應用開發的高層次介面。若想在虛擬機器上開發應用,應根據所需將應用安裝在虛擬機器的作業系統上。

安全作業系統提供高階功能

由於硬體介面級別非常低,應用程式開發人員通常依賴作業系統來提供高階服務,如中斷控制、記憶體管理和內部傳輸溝通。應用程式可以直接透過低階硬體開發,但這涉及到處理硬體介面的複雜性。在安全功能方面,若以裸機達成,等同於直接在安全函數中完成高階抽象化(Abstraction)。即便不考慮實際狀況,只從理論上來談論,難度也相當高,尤其對於SoC來說,因為每項安全功能開發所需的高階抽象化也容易發生錯誤,其將會嚴重擴大系統的受攻擊面。

程式管理器無法替代TEE

即便使用採用演繹形式所開發的程式管理器ProvenVisor,也無法安全地在程式管理器本身導入安全功能。在單獨的裸機虛擬機器上開發安全功能以緩解非安全作業系統帶來的問題是可行的,但是安全功能自身仍存在上述問題。

安全功能的正確導入取決於基礎作業系統,若在其中一個虛擬機器中的不安全作業系統上開發安全應用程式,會使安全功能容易受到攻擊。唯一可行的解決方案是採用TEE安全托管功能。但是如果需要實現虛擬化,TEE將不會取代虛擬機器管理程式的使用。值得一提的是,TEE既可以結合程式管理器使用,也可以單獨使用。

在運算平台上執行ProvenCore TEE

有廠商聯手如賽靈思與Prove&Run合作,將經EAL7認證的ProvenCore TEE移轉至Zynq UltraScale+元件上。透過這樣的方式能讓該元件在減少攻擊概率的同時,執行多種類型的安全應用。在Zynq UltraScale+平台上執行的ProvenCore如圖4所示。 與ProvenCore的每個通訊埠(Port)一樣,ProvenRun經過設計能在該元件上安全啟動。在啟動過程中,第一階段啟動載入器(First-stage Boot Loader, FSBL)載入ATF,再以安全方式載入ProvenCore。在完成ProvenCore的初始設置後,ProvenCore返回到ATF,然後在非安全模式下啟動U-Boot,以完成Linux的啟動。

圖4  在Zynq UltraScale+平台執行ProvenCore

ProvenCore內含安全驅動程式可為外部設備存取設置安全規則。在Zynq UltraScale+平台上,該驅動程式搭載ARM TrustZone、XMPU與XPPU,以符合給定的安全性原則。XMPU可以確保只有ProvenCore能存取其安全記憶體區域;XPPU將根據ProvenCore的請求能完整或臨時地預留安全環境給可能要用到的外部設備;eMMC控制器專門用於安全環境下的儲存,而乙太網路控制器則完全在安全環境下運作。如果Linux損毀或毀壞,ProvenCore的安全外部設備將持續運作並恢復系統。此外,ProvenCore也借助Zynq UltraScale+平台的加密核心為加密功能加速。

Linux和ProvenCore之間的通訊由Linux TrustZone驅動程式所提供,該通訊也在ProvenCore內執行Linux使用者空間應用和執行通訊。該驅動程式透過公用DRAM區域,在安全環境和非安全環境間交換請求與回應。按照Prove&Run的TEE術語,將使用者空間應用與TA間透過該驅動程式的每個連結稱為「會話(Session)」。每個會話都有專用的共用記憶體區域,並能夠建立自己的通訊協議。借助兩個專用的SMC調用可送出環境切換的請求,隨後由安全檢測器管理的兩個預留軟體中斷生成進行分派:其中一個SMC調用可用於從非可信賴環境(一般是Linux)切換到ProvenCore;另一個SMC調用則用於從ProvenCore切換回非可信賴環境。除了為切換到可信賴環境而接收來自非可信賴環境的SMC調用,ProvenCore還提供使用者配置計時器,方便ProvenCore在毋需非可信賴環境調用的條件下定期運作。當時間由非安全作業系統分配時,大部分TEE會按調度運作。

該平台的PL能透過互連IP中的TrustZone位元,告知資料轉換的安全狀態。此外,透過將在ProvenCore執行的驅動程式與在PL內執行的Prove&Run硬體模組整合,ProvenCore也可以PL內的外部設備進行管理。這樣一來,Prove&Run的TEE架構就能攔截在PL安全硬體的任何非安全存取。

TEE應用實例提升多領域安全性

汽車正越來越廣泛地與外界環境互連。許多汽車製造商正傾向於選擇擁有多個安全領域(Security Domain)的安全架構。這些安全領域透過硬體虛擬化或多個硬體元件來達成隔離。

增強汽車安全性

其中一些領域負責管理與非可信賴環境之間的通訊,因此在遭受遠端攻擊時處於前端應變位置。部分汽車架構中採用了入侵預防系統(Intrusion Prevention System, IPS),嚴格審查所有入站流量,以檢測對不同通訊層可能發起的攻擊。不過,通訊堆疊結構複雜,缺點在所難免。

攻擊者會利用這些漏洞與底層非安全作業系統(負責運作IPS)的其他漏洞達到控制的目的。此時,攻擊者能夠繞開一切用於攔截惡意流量抵達汽車安全關鍵領域的安全功能。

然而,如果IPS在安全作業系統上執行,就能夠化解大部分的遠端攻擊風險。與典型的非安全作業系統相比,單獨安全作業系統本身就能明顯降低受攻擊的機會,進而減少安全作業系統被攻破的機率。即便IPS在安全環境下執行,其依然能夠針對通訊協定堆疊的不同層執行訊息再封裝,進而防範利用通訊堆疊設計漏洞發起的攻擊,降低受攻擊的機會。此外,還可以對訊息的有效負載一致性進行初步檢查。同時也更有利於對從安全作業系統向非安全作業系統上保護執行應用所傳送的訊息。

在本例中,單獨仰賴安全程式管理器不能解決此問題。程式管理器架構能夠為托管IPS提供專門的虛擬機器,但運作在這個虛擬機器上的作業系統可能被入站訊息攻破,作業系統就不能降低受攻擊的風險。從虛擬機器向汽車其餘部分發出含IPS的訊息,可能和直接來自外部的訊息一樣被視為是惡意訊息。因此,需要為虛擬機器配備運作IPS的安全作業系統。

提升資料中心安全性

將演算法應用於醫療診斷需要大量的運算,該需求推動雲端運算以因應這些服務。然而,駭客覬覦的病患資料必須發送到資料中心進行分析。加密通訊與儲存有助於防範資料竊取,其通常依賴硬體安全模組(Hardware Security Modules, HSM)來完成主要的管理與加密運算。

在圖5所示的典型架構中,Linux伺服器負責使用HSM的加密服務建立與使用者端的安全通訊。伺服器隨後對未加密的病患資料進行運算,借助FPGA外部設備來加速運算,隨後,伺服器使用安全通訊通道將資料傳回到使用者端。目前,Linux伺服器可存取未加密的病患資料與診斷資訊,駭客可以在伺服器中安裝後門,或是利用常見漏洞竊取資料。然而,在ProvenCore等安全作業系統上執行的TEE能避免病患保密資料出現在不安全的Linux伺服器上。病患資料在TEE內被安全地解密與處理並重新加密,再透過Linux伺服器傳回,避免資料受到毀損。此外,由於Zynq UltraScale+平台的PL TrustZone感知,任何高效能處理都能安全在TEE內部進行運算。

圖5  醫療資料分析的典型資料中心架構

本文探討在Zynq UltraScale+平台上執行的TEE如何大幅縮小安全關鍵應用的受攻擊面,並提升系統級安全。透過充分發揮該平台上的所有安全功能,包括TrustZone、XMPU、XPPU、SMMU、AIB、ARM異常級別、賽靈思ATF與可信賴啟動,採用單個SoC即可創造出良好的可信賴執行環境。同時亦闡述程式管理器仍然需要使用TEE來隔離安全關鍵任務的原因,因為這些任務可能會在作業系統上遺留潛在的安全缺陷。Prove&Run設計的TEE架構展現如何透過平台實現其安全作業系統(ProvenCore),而TEE廣泛適用於各類應用。此外,更以汽車應用與資料中心應用為例,詳細介紹在這兩種應用中TEE如何大幅提升安全性。

(本文由賽靈思與其TEE合作夥伴Prove&Run共同撰寫)

 

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!