- 手機(jī)安全和可信應(yīng)用開(kāi)發(fā)指南:TrustZone與OP-TEE技術(shù)詳解
- 帥峰云 黃騰 宋洋
- 8字
- 2019-01-03 15:01:34
第一篇 基礎(chǔ)技術(shù)篇
第1章 可信執(zhí)行環(huán)境
1.1 系統(tǒng)存在的安全問(wèn)題
隨著移動(dòng)通信和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,智能設(shè)備在各個(gè)領(lǐng)域扮演著越來(lái)越重要的角色。據(jù)統(tǒng)計(jì),在2017年,中國(guó)使用智能手機(jī)上網(wǎng)的用戶數(shù)已達(dá)6億之多。此外,無(wú)人駕駛、物聯(lián)網(wǎng)、網(wǎng)絡(luò)電視等也都與智能設(shè)備相關(guān),或者本身就是智能設(shè)備,它們都會(huì)用到操作系統(tǒng)。然而由于一些黑客能夠破解智能設(shè)備的root權(quán)限,進(jìn)而盜取用戶數(shù)據(jù)或其他關(guān)鍵信息,造成用戶數(shù)據(jù)的泄露或?yàn)E用。其次,如果用戶的車載系統(tǒng)被黑客獲取控制權(quán)限,其人身安全將無(wú)從保障。因此手機(jī)互聯(lián)網(wǎng)領(lǐng)域、電視領(lǐng)域、物聯(lián)網(wǎng)領(lǐng)域以及車載領(lǐng)域的安全越來(lái)越顯得重要。
再者,智能設(shè)備上各種應(yīng)用不斷涌現(xiàn),若開(kāi)發(fā)人員在開(kāi)發(fā)這些應(yīng)用時(shí)沒(méi)有針對(duì)安全進(jìn)行加固保護(hù),則黑客可能會(huì)利用這些應(yīng)用本身固有的安全漏洞獲取智能設(shè)備操系統(tǒng)的root權(quán)限,輕松截獲用戶的敏感數(shù)據(jù)。鑒于此,如何保障智能設(shè)備的安全變得越來(lái)越重要。
那么,如何消除甚至杜絕這類威脅呢?除了提高系統(tǒng)被破解的難度之外,最好還要在系統(tǒng)中提供一個(gè)相對(duì)可信賴的運(yùn)行環(huán)境,使用戶的關(guān)鍵數(shù)據(jù)或應(yīng)用在這個(gè)相對(duì)可信賴的環(huán)境中使用和運(yùn)行。這樣一來(lái),即便系統(tǒng)被攻破,入侵者也無(wú)法直接獲取用戶的重要信息,用戶的信息安全也就實(shí)現(xiàn)了,這就是可信執(zhí)行環(huán)境(Trusted Execution Environment, TEE)的主要作用和理念。
1.2 TEE如何保護(hù)數(shù)據(jù)安全
為了給移動(dòng)設(shè)備提供一個(gè)安全的運(yùn)行環(huán)境,ARM從ARMv6的架構(gòu)開(kāi)始引入了TrustZone技術(shù)。TrustZone技術(shù)將中央處理器(Central Processing Unit, CPU)的工作狀態(tài)分為了正常世界狀態(tài)(Normal World Status, NWS)和安全世界狀態(tài)(Secure World Status, SWS)。支持TrustZone技術(shù)的芯片提供了對(duì)外圍硬件資源的硬件級(jí)別的保護(hù)和安全隔離。當(dāng)CPU處于正常世界狀態(tài)時(shí),任何應(yīng)用都無(wú)法訪問(wèn)安全硬件設(shè)備,也無(wú)法訪問(wèn)屬于安全世界狀態(tài)下的內(nèi)存、緩存(Cache)以及其他外圍安全硬件設(shè)備。
TEE基于TrustZone技術(shù)提供可信運(yùn)行環(huán)境,還為開(kāi)發(fā)人員提供了應(yīng)用程序編程接口(Application Programming Interface, API),以方便他們開(kāi)發(fā)實(shí)際應(yīng)用程序。
在整個(gè)系統(tǒng)的軟件層面,一般的操作系統(tǒng)(如Linux、Android、Windows等)以及應(yīng)用運(yùn)行在正常世界狀態(tài)中,TEE運(yùn)行在安全世界狀態(tài)中,正常世界狀態(tài)內(nèi)的開(kāi)發(fā)資源相對(duì)于安全世界狀態(tài)較為豐富,因此通常稱運(yùn)行在正常世界狀態(tài)中的環(huán)境為豐富執(zhí)行環(huán)境(Rich Execution Environment, REE),而可信任的操作系統(tǒng)以及上層的可信應(yīng)用(Trusted Application, TA)運(yùn)行于安全世界狀態(tài),運(yùn)行在安全世界狀態(tài)中的系統(tǒng)就是前文提到的TEE。
對(duì)CPU的工作狀態(tài)區(qū)分之后,處于正常世界狀態(tài)中的Linux即使被root也無(wú)法訪問(wèn)安全世界狀態(tài)中的任何資源,包括操作安全設(shè)備、訪問(wèn)安全內(nèi)存數(shù)據(jù)、獲取緩存數(shù)據(jù)等。這很像一個(gè)保險(xiǎn)箱,不管保險(xiǎn)箱的外在環(huán)境是否安全,其內(nèi)部的物件都有足夠的安全性。這是因?yàn)镃PU在訪問(wèn)安全設(shè)備或者安全內(nèi)存地址空間時(shí),芯片級(jí)別的安全擴(kuò)展組件會(huì)去校驗(yàn)CPU發(fā)送的訪問(wèn)請(qǐng)求的安全狀態(tài)讀寫信號(hào)位(Non-secure bit, NS bit)是0還是1,以此來(lái)判定當(dāng)前CPU發(fā)送的資源訪問(wèn)請(qǐng)求是安全請(qǐng)求還是非安全請(qǐng)求。而處于非安全狀態(tài)的CPU將訪問(wèn)指令發(fā)送到系統(tǒng)總線上時(shí),其訪問(wèn)請(qǐng)求的安全狀態(tài)讀寫信號(hào)位都會(huì)被強(qiáng)制設(shè)置成1,表示當(dāng)前CPU的訪問(wèn)請(qǐng)求為非安全請(qǐng)求。而非安全請(qǐng)求試圖去訪問(wèn)安全資源時(shí)會(huì)被安全擴(kuò)展組件認(rèn)為是非法訪問(wèn)的,于是就禁止其訪問(wèn)安全資源,因此該CPU訪問(wèn)請(qǐng)求的返回結(jié)果要么是訪問(wèn)失敗,要么就是返回?zé)o效結(jié)果,這也就實(shí)現(xiàn)了對(duì)系統(tǒng)資源硬件級(jí)別的安全隔離和保護(hù)。
在真實(shí)環(huán)境中,可以將用戶的敏感數(shù)據(jù)保存到TEE中,并由可信應(yīng)用(Trusted Application, TA)使用重要算法和處理邏輯來(lái)完成對(duì)數(shù)據(jù)的處理。當(dāng)需要使用用戶的敏感數(shù)據(jù)做身份驗(yàn)證時(shí),則通過(guò)在REE側(cè)定義具體的請(qǐng)求編號(hào)(IDentity, ID)從TEE側(cè)獲取驗(yàn)證結(jié)果。驗(yàn)證的整個(gè)過(guò)程中用戶的敏感數(shù)據(jù)始終處于TEE中,REE側(cè)無(wú)法查看到任何TEE中的數(shù)據(jù)。對(duì)于REE而言,TEE中的TA相當(dāng)于一個(gè)黑盒,只會(huì)接受有限且提前定義好的合法調(diào)用,而至于這些合法調(diào)用到底是什么作用,會(huì)使用哪些數(shù)據(jù),做哪些操作在REE側(cè)是無(wú)法知曉的。如果在REE側(cè)發(fā)送的調(diào)用請(qǐng)求是非法請(qǐng)求,TEE內(nèi)的TA是不會(huì)有任何的響應(yīng)或是僅返回錯(cuò)誤代碼,并不會(huì)暴露任何數(shù)據(jù)給REE側(cè)。
1.3 現(xiàn)有TEE解決方案
TEE是一套完整的安全解決方案,主要包含正常世界狀態(tài)的客戶端應(yīng)用(Client Application, CA)、安全世界狀態(tài)的可信應(yīng)用,可信硬件驅(qū)動(dòng)(Secure Driver, SD)以及可信內(nèi)核系統(tǒng)(Trusted Execution Environment Operation System, TEE OS),其系統(tǒng)配置、內(nèi)部邏輯、安全設(shè)備和安全資源的劃分是與CPU的集成電路(Integrated Circuit, IC)設(shè)計(jì)緊密掛鉤的,使用ARM架構(gòu)設(shè)計(jì)的不同CPU, TEE的配置完全不一樣。國(guó)內(nèi)外針對(duì)不同領(lǐng)域的CPU也具有不同的TEE解決方案。
國(guó)內(nèi)外各種TEE解決方案一般都遵循GP(Global Platform)規(guī)范進(jìn)行開(kāi)發(fā)并實(shí)現(xiàn)相同的API。GP規(guī)范規(guī)定了TEE解決方案的架構(gòu)以及供TA開(kāi)發(fā)使用的API原型,開(kāi)發(fā)者可以使用這些規(guī)定的API開(kāi)發(fā)實(shí)際的TA并能使其正常運(yùn)行于不同的TEE解決方案中。
1.3.1 智能手機(jī)領(lǐng)域的TEE
智能手機(jī)領(lǐng)域的芯片廠商眾多,國(guó)外有高通(Qualcomm)、三星(Samsung)、LG,國(guó)內(nèi)有展訊、聯(lián)發(fā)科(MediaTek)、威盛電子(VIA)、華為海思(Hisilicon)等,目前手機(jī)廠商和芯片廠商支持的TEE解決關(guān)系如圖1-1所示。

圖1-1 TEE解決方案關(guān)系
各家TEE解決方案的內(nèi)部操作系統(tǒng)的邏輯會(huì)不一樣,但都能提供GP規(guī)范規(guī)定的API,對(duì)于二級(jí)廠商或TA開(kāi)發(fā)人員來(lái)說(shuō)接口都是統(tǒng)一的。這些TEE解決方案在智能手機(jī)領(lǐng)域主要用于實(shí)現(xiàn)在線支付(如微信支付、支付寶支付)、數(shù)字版權(quán)保護(hù)(DRM、Winevine Level 1、China DRM)、用戶數(shù)據(jù)安全保護(hù)、安全存儲(chǔ)、指紋識(shí)別、虹膜識(shí)別、人臉識(shí)別等其他安全需求。這樣可以降低用戶手機(jī)在被非法root之后帶來(lái)的威脅。
Google規(guī)定在Android M之后所有的Android設(shè)備在使用指紋數(shù)據(jù)時(shí)都需要用TEE來(lái)進(jìn)行保護(hù),否則無(wú)法通過(guò)Google的CTS認(rèn)證授權(quán),另外Android也建議使用硬件Keymaster和gatekeeper來(lái)強(qiáng)化系統(tǒng)安全性。
1.3.2 智能電視領(lǐng)域的TEE
當(dāng)前的智能電視領(lǐng)域大多是使用Android系統(tǒng)來(lái)實(shí)現(xiàn)的,為保護(hù)二級(jí)廠商的視頻源數(shù)據(jù)以及各廠家用戶會(huì)員權(quán)益不被盜取,需要使用TEE來(lái)實(shí)現(xiàn)數(shù)字版權(quán)保護(hù)、會(huì)員鑒權(quán)、用戶賬號(hào)信息保護(hù)等安全功能,而TEE方案一般都是由電視芯片廠商提供的,且所有的TEE源代碼都不對(duì)外公開(kāi),即使是二級(jí)廠商也無(wú)法獲取到TEE的源代碼。在我國(guó)的智能電視領(lǐng)域,智能電視芯片主要有兩家:星辰半導(dǎo)體(Mstar)和華為海思,兩家廠商使用的TEE方案都不一樣。
Mstar早期的TEE方案是在CPU的一個(gè)類似于單片機(jī)的核上運(yùn)行Nuttx系統(tǒng)作為TEE OS來(lái)實(shí)現(xiàn)TEE方案的,但最新的Mstar芯片已經(jīng)改用OP-TEE方案來(lái)實(shí)現(xiàn)TEE解決方案。
華為海思的安全操作系統(tǒng)(Secure Operating System, Secure OS)是按照GP規(guī)范自主研發(fā)的TEE解決方案,其手機(jī)芯片和智能電視芯片都是使用這個(gè)TEE方案。華為海思的TEE增加了權(quán)限校驗(yàn)功能(類似于白名單機(jī)制),即在使用華為海思的TEE方案提供的API實(shí)現(xiàn)特定安全功能的TA時(shí),需要將調(diào)用該TA對(duì)應(yīng)的CA接口的進(jìn)程或者服務(wù)的相關(guān)信息提前注冊(cè)到TEE后方能正常使用,否則會(huì)導(dǎo)致調(diào)用失敗。
1.3.3 IoT領(lǐng)域及其他領(lǐng)域的TEE
物聯(lián)網(wǎng)(Internet of Thing, IoT)領(lǐng)域和車載系統(tǒng)領(lǐng)域?qū)?huì)是未來(lái)TEE方案使用的另外一個(gè)重要方向,大疆無(wú)人機(jī)已經(jīng)使用TEE方案來(lái)保護(hù)無(wú)人機(jī)用戶的私人數(shù)據(jù)、航拍數(shù)據(jù)以及關(guān)鍵的飛控算法。ARM的M系列也開(kāi)始支持TrustZone技術(shù),如何針對(duì)資源受限的IoT設(shè)備實(shí)現(xiàn)TEE也是未來(lái)TEE的重要發(fā)展方向之一。
而在車載領(lǐng)域NXP芯片已經(jīng)集成OP-TEE作為TEE方案,MediaTek的車載芯片也已集成了Trustonic的TEE方案,相信在車載系統(tǒng)領(lǐng)域TEE也將漸漸普及。
1.4 為什么選擇OP-TEE
本書主要是介紹OP-TEE的實(shí)現(xiàn)原理,OP-TEE是由非營(yíng)利的開(kāi)源軟件工程公司Linaro開(kāi)發(fā)的,從git上可以獲取OP-TEE的所有源代碼,且OP-TEE支持的芯片也越來(lái)越多,相信未來(lái)OP-TEE將有可能是TEE領(lǐng)域的Linux,并得到更加廣泛的運(yùn)用。
OP-TEE是按照GP規(guī)范開(kāi)發(fā)的,支持QEMU、Hikey(Linaro推廣的96Board系列平臺(tái)之一,使用Hisilicon處理器)以及其他通用的ARMv7/ARMv8平臺(tái),開(kāi)發(fā)環(huán)境搭建方便,便于開(kāi)發(fā)者開(kāi)發(fā)自有的上層可信應(yīng)用,且OP-TEE提供了完整的軟件開(kāi)發(fā)工具包(Software Development Kit, SDK),方便編譯TA和CA。OP-TEE遵循GP規(guī)范,支持各種加解密和電子簽名驗(yàn)簽算法以便實(shí)現(xiàn)DRM、在線支付、指紋和虹膜識(shí)別功能。OP-TEE也支持在芯片中集成第三方的硬件加解密算法。除此之外,在IoT和車載芯片領(lǐng)域也大都使用OP-TEE作為TEE解決方案。
OP-TEE由Linaro組織負(fù)責(zé)維護(hù),安全漏洞補(bǔ)丁更新和代碼迭代速度較快,系統(tǒng)的健壯性也越來(lái)越好,所以利用OP-TEE來(lái)研究TrustZone技術(shù)的實(shí)現(xiàn)并開(kāi)發(fā)TA和CA將會(huì)是一個(gè)很好的選擇。
本書涉及的內(nèi)核源代碼使用的是OP-TEE 2.4版本,書中所有的示例都在最新版本中測(cè)試通過(guò)。
- UI圖標(biāo)創(chuàng)意設(shè)計(jì)
- 深入理解Bootstrap
- 單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例:基于STC8051+Proteus仿真與實(shí)戰(zhàn)
- 基于差分進(jìn)化的優(yōu)化方法及應(yīng)用
- WordPress Plugin Development Cookbook(Second Edition)
- Visual C++應(yīng)用開(kāi)發(fā)
- 程序員修煉之道:通向務(wù)實(shí)的最高境界(第2版)
- OpenGL Data Visualization Cookbook
- Scratch3.0趣味編程動(dòng)手玩:比賽訓(xùn)練營(yíng)
- Python數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南(全彩)
- Tableau Desktop可視化高級(jí)應(yīng)用
- Python預(yù)測(cè)分析與機(jī)器學(xué)習(xí)
- Python預(yù)測(cè)分析實(shí)戰(zhàn)
- Solr權(quán)威指南(下卷)
- Java核心編程