衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ARM的Trustzone是怎樣確保系統(tǒng)安全設(shè)計(jì)的

電子設(shè)計(jì) ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2020-02-12 08:40 ? 次閱讀

Trustzone可以追溯到十多年前,ARMv7公布的時(shí)候就有了,可惜一直沒(méi)有什么實(shí)際應(yīng)用。直到近幾年開(kāi)始,才真正的有廠商開(kāi)始把這個(gè)方案大規(guī)模用于芯片里。目前看到的主要有四個(gè)應(yīng)用領(lǐng)域:

第一是無(wú)人機(jī)芯片,大疆已經(jīng)走在了最前面,第二名連影子都沒(méi)看見(jiàn)。無(wú)人機(jī)上幾大應(yīng)用,圖像傳輸,圖像處理,識(shí)別,飛控,存儲(chǔ),每一塊都有安全的訴求。利用Trustzone可以做到,在芯片里流動(dòng)的數(shù)據(jù),每一步都在安全系統(tǒng)的控制之下,哪怕飛機(jī)被人搶去,都需要極大的代價(jià)才能拿到閃存以及內(nèi)存里面的數(shù)據(jù)。如果以后上安卓或者其他操作系統(tǒng),哪怕軟件系統(tǒng)被黑客攻破,數(shù)據(jù)和控制還是安全的。最后,如果國(guó)家或者行業(yè)出臺(tái)政策,要求實(shí)施禁飛區(qū),那么哪怕無(wú)人機(jī)的主人自己去修改閃存和軟件,都可以被強(qiáng)制接管。這些功能必須在芯片設(shè)計(jì)階段就考慮到,大疆在這方面的眼光確實(shí)比別人長(zhǎng)遠(yuǎn)。

第二是DRM,數(shù)字版權(quán)管理,也就是內(nèi)容保護(hù)。如果國(guó)內(nèi)用戶要在手機(jī)上看最新好萊塢大片,那么播放設(shè)備必須經(jīng)過(guò)一個(gè)認(rèn)證,這個(gè)認(rèn)證可以用trustzone來(lái)實(shí)現(xiàn)。國(guó)內(nèi)已經(jīng)在積極的推動(dòng)這個(gè)事情,估計(jì)再過(guò)一段時(shí)間就可以實(shí)現(xiàn)了。當(dāng)然,這是一把雙刃劍,肯定也有用戶反而不愿買(mǎi)支持DRM的設(shè)備,而去看盜版。用了Trustzone本身并不限制盜版,只不過(guò)多了一個(gè)看好萊塢大片的渠道。

第三是支付。把Trustzone用于支付支付在技術(shù)上沒(méi)有困難,對(duì)芯片性能要求也不高,難的是把各個(gè)利益方擺平。銀行和運(yùn)營(yíng)商想把支付控制權(quán)握在自己手里,所以會(huì)去大力推廣NFC,會(huì)去和蘋(píng)果合作。而手機(jī)支付軟件廠商,比如支付寶和微信,想通過(guò)和手機(jī)芯片和硬件廠商,把所有功能都自己的平臺(tái)上實(shí)現(xiàn)。目前的支付大多數(shù)還是基于軟件和遠(yuǎn)端密鑰驗(yàn)證。如果有人把手機(jī)破解,那還是可以讀取到支付圖層的密碼的。而trustzone做的,就是硬件上杜絕這類情況。

第四是物聯(lián)網(wǎng)。物聯(lián)網(wǎng)的安全有好幾種做法,可以把安全檢測(cè)放在服務(wù)器端或者末端芯片上。末端通常是一個(gè)MCU加上傳感器和互聯(lián)模塊,面積較小。用硬件trustzone實(shí)現(xiàn)的話,加解密和密鑰管理等功能會(huì)需要額外內(nèi)模塊,可能比MCU本身都大,成本太高。但如果是附加值高的芯片就沒(méi)什么問(wèn)題。

讓我們從技術(shù)層面來(lái)定義Trustzone到底能做什么:

1、防止操作系統(tǒng)被攻破后關(guān)鍵數(shù)據(jù)泄密,關(guān)鍵數(shù)據(jù)存放在特定內(nèi)存區(qū)域,而那塊區(qū)域,只有安全操作系統(tǒng)才有可能讀到。

2、防止通過(guò)JTAG等調(diào)試接口讀到寄存器,緩存,內(nèi)存或者閃存數(shù)據(jù)。

3、從芯片制造開(kāi)始,最初的密鑰可以用芯片熔絲實(shí)現(xiàn),往后啟動(dòng)的每一步都需要最高特權(quán)級(jí)和密鑰驗(yàn)證,建立信任鏈,杜絕軟件被替換或者被惡意讀取。

4、防止邊帶攻擊,比如量取內(nèi)存顆粒的信號(hào)猜測(cè)數(shù)據(jù),制造故障讓檢驗(yàn)?zāi)K停止工作,替換外圍器件,輸入特定數(shù)據(jù)確定電磁信號(hào)特征,打開(kāi)芯片直接量?jī)?nèi)部信號(hào)線等。

上圖是一個(gè)典型的ARM SoC內(nèi)部結(jié)構(gòu),在這個(gè)結(jié)構(gòu)里,Trustzone做的事情是保護(hù)數(shù)據(jù)在芯片內(nèi)部的安全,不允許非授權(quán)的訪問(wèn),哪怕這個(gè)訪問(wèn)來(lái)自CPU。初看有些復(fù)雜,不過(guò)我們可以拆開(kāi)慢慢分析。從硬件角度開(kāi)始比軟件更清楚些,說(shuō)不定哪天過(guò)認(rèn)證的時(shí)候需要答辯,從頭到尾解釋系統(tǒng)安全設(shè)計(jì)。

首先,按照Trustzone的劃分,一個(gè)芯片內(nèi)被劃分為安全世界和非安全世界。上圖中,中間黑色的部分是總線,總線上面是主設(shè)備,下面是從設(shè)備(主設(shè)備中的緩存是例外,這個(gè)以后說(shuō))。讀寫(xiě)請(qǐng)求總是從主設(shè)備發(fā)往從設(shè)備的。

作為從設(shè)備,區(qū)分它是不是屬于安全世界相對(duì)簡(jiǎn)單。如果一個(gè)從設(shè)備不存在成塊的空間映射,比如I2C或者PWM,那么我只要在總線訪問(wèn)它的時(shí)候,額外的加入一個(gè)管腳(取名為PROT),就可以告訴它本次訪問(wèn)是不是來(lái)自安全世界。如果從設(shè)備本身是完全屬于被保護(hù)的安全世界,不接受非安全的訪問(wèn),那么只要簡(jiǎn)單的拒絕,返回錯(cuò)誤或者無(wú)意義數(shù)據(jù)即可。同樣,如果從設(shè)備本身處于非安全世界,那么對(duì)于安全和非安全訪問(wèn),都可以返回正確數(shù)據(jù)。還有,從設(shè)備所處于的世界,是可以動(dòng)態(tài)配置的,且動(dòng)態(tài)配置本身需要處在安全世界,這個(gè)以后討論。

對(duì)于塊設(shè)備,包括閃存,sram和內(nèi)存等,它們的某些地址塊需要處于安全世界,其他的處于非安全世界。為了實(shí)現(xiàn)這一點(diǎn),就需要在它們前面插入一個(gè)檢驗(yàn)?zāi)K(例如圖中左方,DDR上面的TZC400),來(lái)判斷某個(gè)地址是不是能被訪問(wèn)。當(dāng)?shù)刂繁凰偷竭@個(gè)檢驗(yàn)?zāi)K,模塊會(huì)結(jié)合PROT管腳去查表,看看本次訪問(wèn)是不是被允許,然后做相應(yīng)措施。表本身和之前的動(dòng)態(tài)配置一樣,必須是在安全世界里面配置的。

至此,從設(shè)備就分析完了,是不是感覺(jué)特別簡(jiǎn)單?還有些細(xì)節(jié),在把主設(shè)備也講完后,我們會(huì)從系統(tǒng)角度來(lái)關(guān)注。

對(duì)于一般主設(shè)備,不考慮自帶的緩存時(shí),其實(shí)和從設(shè)備也差不多,也分為安全和非安全,可以在安全世界動(dòng)態(tài)配置。配置完成后,這些主設(shè)備會(huì)按照自己所處的世界,驅(qū)動(dòng)PROT管腳和地址來(lái)訪問(wèn)從設(shè)備,得到相應(yīng)返回。不過(guò)這里的一般主設(shè)備不包括中斷控制器,系統(tǒng)MMU,調(diào)試模塊和處理器,接下來(lái)對(duì)這些例外模塊進(jìn)行具體分析。

首先是處理器。

在上圖情況,接了CCI總線后,處理器接在緩存一致性端口ACE上(不明白的請(qǐng)參考以前的文章),它的緩存是可以被別人訪問(wèn)的,并且這個(gè)訪問(wèn),是從主設(shè)備到主設(shè)備(當(dāng)然,在處理器內(nèi)部是從端口),不會(huì)經(jīng)過(guò)總線送到內(nèi)存,也不會(huì)經(jīng)過(guò)檢驗(yàn)?zāi)KTZC400。這時(shí)就有個(gè)漏洞,通過(guò)操縱一個(gè)非安全世界的模塊,比如上圖的橙色主設(shè)備,假裝去讀一個(gè)被安全世界保護(hù)的內(nèi)存地址。這個(gè)地址本來(lái)存在于內(nèi)存,被TZC400保護(hù),可是由于總線的監(jiān)聽(tīng)功能,讀請(qǐng)求有可能被發(fā)往處理器緩存,從而繞過(guò)保護(hù)。

為了防止這種情況,處理器在所有的頁(yè)表和緩存都做了特殊設(shè)計(jì),加了一個(gè)標(biāo)志位,標(biāo)志本緩存行是否屬于安全世界。如果別的非安全世界主設(shè)備來(lái)監(jiān)聽(tīng)安全世界緩存行,由于安全位不同,處理器會(huì)認(rèn)為這是兩個(gè)不同地址,哪怕它們的地址一致,返回緩存未命中。這樣,就不會(huì)把數(shù)據(jù)泄漏。

有人會(huì)問(wèn),這個(gè)標(biāo)志位于頁(yè)表,改了頁(yè)表中的這一位不就可以訪問(wèn)了?其實(shí)不行。因?yàn)榘踩澜珥?yè)表位于被保護(hù)的內(nèi)存區(qū)域或者緩存,就算破解了操作系統(tǒng)也無(wú)法訪問(wèn)。

又有人會(huì)說(shuō),那改了非安全世界的頁(yè)表中安全位,并偽造一個(gè)安全世界的地址,豈不是可以讓CPU模擬出一個(gè)訪問(wèn)安全世界的傳輸,送到總線和TZC400?TZC400或者對(duì)端緩存一看地址和PROT管腳都是符合要求的,應(yīng)該就會(huì)返回保密數(shù)據(jù)吧?想法是不錯(cuò),可是當(dāng)CPU位于非安全世界時(shí),它會(huì)忽略頁(yè)表中的安全位,所以不可能發(fā)出PROT為安全的傳輸。所以,我們可以對(duì)這點(diǎn)放心。

以上是別的主設(shè)備訪問(wèn)處理器,那如果處理器本身處于非安全世界,有沒(méi)有可能訪問(wèn)其他主設(shè)備的安全緩存?當(dāng)然有。所以不要把其他主設(shè)備接到ACE端口,以免被監(jiān)聽(tīng),一般主設(shè)備是不會(huì)做緩存上的安全與非安全區(qū)分的。接到ACE-Lite接口無(wú)所謂,反正設(shè)計(jì)上就無(wú)法被讀取緩存數(shù)據(jù)。

除此之外,還存在一個(gè)例外,就是GPU。在最新的ARM G71圖形處理器上,是支持雙向硬件一致性的。也就是說(shuō),GPU也可以被監(jiān)聽(tīng)緩存的。為了簡(jiǎn)化設(shè)計(jì),圖形處理器被設(shè)成永遠(yuǎn)處于非安全世界,CPU盡管讀,不在乎,它使用另外一種機(jī)制來(lái)保護(hù)數(shù)據(jù),以后介紹。

對(duì)處理器緩存熟悉的人可能會(huì)想到用跨緩存行的非安全變量來(lái)訪問(wèn)被保護(hù)的數(shù)據(jù)。沒(méi)用的,處理器設(shè)計(jì)者早就想到這點(diǎn),要不就是非對(duì)齊訪問(wèn)異常(包含exclusive access的時(shí)候),要不就不會(huì)給你數(shù)據(jù),具體到每個(gè)處理器有所不同。

還有一個(gè)漏洞沒(méi)堵上,那就是緩存維護(hù),TLB和分支預(yù)測(cè)操作。ACE端口包含了DVM操作來(lái)維護(hù)它們,安全性如何保障?同樣的,地址中也有安全和非安全位。不過(guò)話說(shuō)回來(lái),DVM操作無(wú)非就是無(wú)效化某些緩存,分支預(yù)測(cè)和TLB項(xiàng),不存在安全數(shù)據(jù)被讀取,TLB被篡改的情況。

到這里可能你會(huì)覺(jué)得有點(diǎn)暈,不少漏洞需要堵。我們可以回顧一下,需要記住的是各種緩存操作,通過(guò)安全標(biāo)志位保護(hù),避免漏洞。對(duì)比處理器設(shè)計(jì)者所要考慮的情況,這點(diǎn)漏洞不值一提。

杜絕了緩存漏洞后,還有別的隱患,比如仿真器。調(diào)試模塊可以被用來(lái)訪問(wèn)各個(gè)從設(shè)備,也可以訪問(wèn)和影響處理器內(nèi)部資源。從設(shè)備側(cè)的防護(hù)很容易,把調(diào)試模塊當(dāng)成一般的主設(shè)備處理就行。處理器內(nèi)部的寄存器,緩存等資源,需要處理器從設(shè)計(jì)開(kāi)始,就要為所有資源定義安全級(jí)別。被保護(hù)的資源對(duì)于來(lái)自調(diào)試模塊的未授權(quán)訪問(wèn)會(huì)被禁止。只有通過(guò)安全啟動(dòng)鏈,安全世界的軟件才能打開(kāi)寄存器SDER,從而允許外部仿真器影響被保護(hù)的安全世界資源和處理器運(yùn)行狀態(tài),訪問(wèn)被保護(hù)的資源。

那處理器內(nèi)部的資源是怎么劃分的?以ARMv8舉例,如下圖:

這幅圖相信很多人都看到過(guò)。ARMv8的處理器被分成四個(gè)特權(quán)等級(jí),通常EL0跑用戶態(tài)程序,EL1內(nèi)核,EL2虛擬機(jī)。EL0-1分為安全與非安全,EL3只有安全世界,EL2不區(qū)分,兩個(gè)世界的切換必須經(jīng)過(guò)EL3。我們談到的處理器內(nèi)部資源,包括寄存器,緩存,異常,MMU,很多都會(huì)分組,組之間看不到或者低級(jí)不可訪問(wèn)高級(jí),從而保證安全。沒(méi)有分組的,比如通用寄存器,就需要軟件來(lái)維護(hù),防止非安全世界的看到安全世界的數(shù)據(jù)。

引起安全切換的會(huì)有幾種可能:中斷和SMC指令。中斷分為如下幾種情況:

非安全世界下,在EL1或者EL0,當(dāng)一個(gè)非安全中斷來(lái)臨,那么系統(tǒng)沒(méi)必要切換安全狀態(tài),作為一般中斷處理,切到EL1即可。

非安全世界下,在EL1或者EL0,當(dāng)一個(gè)安全中斷來(lái)臨,那么系統(tǒng)必須先切到EL3,不然就沒(méi)法做安全世界切換。

安全世界下,在EL1或者EL0,當(dāng)一個(gè)安全中斷來(lái)臨,沒(méi)必要做安全世界切換,作為一般中斷處理,切到EL1即可。

安全世界下,在EL1或者EL0,當(dāng)一個(gè)非安全中斷來(lái)臨,那么系統(tǒng)必須先切到EL3,不然就沒(méi)法做安全世界切換。

當(dāng)跳到EL3的Secure Monitor程序處理上下文切換時(shí),IRQ/FIQ中斷屏蔽位不起作用,哪怕打開(kāi)了也不會(huì)觸發(fā),直到Secure Monitor處理完,向下跳到相應(yīng)的安全世界EL1時(shí),才會(huì)讓原來(lái)的中斷屏蔽恢復(fù),從而觸發(fā)中斷。此時(shí)處理中斷的是安全世界的中斷程序,處于被保護(hù)的內(nèi)存區(qū)域,杜絕非安全世界的程序篡改。

那怎樣觸發(fā)安全與非安全中斷呢?這在中斷控制器里有定義,早年的定義中只有FIQ可以作為安全中斷,后期的可配置,并且,相應(yīng)的安全世界配置寄存器只有在處理器的安全世界中才可以訪問(wèn)。

SMC指令和中斷觸發(fā)類似,只不過(guò)軟件就可以觸發(fā),切換到Secure Monitor。這里,非安全軟件可以提出觸發(fā)請(qǐng)求,在通用寄存器填入參數(shù),卻無(wú)法控制安全世界的處理程序做什么,也依然看不到被保護(hù)內(nèi)存數(shù)據(jù)。所以防止數(shù)據(jù)泄密的任務(wù)就靠安全操作系統(tǒng)了。

至此,安全啟動(dòng)后的基本硬件防護(hù)已經(jīng)完成,但如果你以為這就是Trustzone,那就錯(cuò)了,精彩的在后面。

我們可以把Trustzone放到實(shí)際應(yīng)用里面看看是不是可行。以DRM舉例,如下圖:

在播放授權(quán) 視頻的時(shí)候,視頻流來(lái)自網(wǎng)絡(luò)或者閃存,它們不需要在安全世界,因?yàn)閿?shù)據(jù)本身就是加密過(guò)的。然后被解密并放到被保護(hù)內(nèi)存,等待解碼。上圖中,密碼保護(hù)和解密是通過(guò)安全硬件模塊Crypto來(lái)完成的,這個(gè)我們以后再分析,先處理解密完成后的視頻流。此時(shí)有兩種方案:

第一中,非常自然的,可以把所有的過(guò)程在安全世界完成,那么圖形處理器,視頻處理器和顯示模塊必須都工作在安全世界,能訪問(wèn)安全世界的數(shù)據(jù),才能完成工作。可這樣就帶來(lái)一個(gè)問(wèn)題,那就是驅(qū)動(dòng)。我們知道,圖形處理器的驅(qū)動(dòng)是非常復(fù)雜的,并且手機(jī)上只存在Linux和windows下的圖形驅(qū)動(dòng),和OpenGL ES/DirectX配合。

而安全世界的操作系統(tǒng)(TEE,Trusted Execution Environment)是完全不兼容的安全系統(tǒng),甚至有的都不支持SMP, 完全不存在可能性把圖形驅(qū)動(dòng)移植上去,也沒(méi)有任何意義。這樣的話,就只能把圖形處理器從流程中挖掉,只留下相對(duì)簡(jiǎn)單也不需要生態(tài)的視頻和顯示模塊的驅(qū)動(dòng),工作在安全世界,而GPU的輸出送到顯示模塊,由顯示模塊進(jìn)行混合。

這是一種可行的方案,也確實(shí)有公司這么做。但是從長(zhǎng)遠(yuǎn)看,圖形處理器總是會(huì)參與到這個(gè)過(guò)程的,別的不說(shuō),只說(shuō)VR和AR流行以后,要是虛擬個(gè)顯示屏出來(lái),上面播放視頻,然后放在一個(gè)虛擬出的房間,那他們之間肯定是要進(jìn)行互動(dòng)的,此時(shí)顯示模塊就需要把視頻圖層送回GPU進(jìn)行運(yùn)算。如果GPU不在安全世界,那就會(huì)造成泄密。

為了解決上述問(wèn)題,有了第二種解決方案,稱作TZMP1(Trustzone Media Protection 1),引入了保護(hù)世界的概念。

保護(hù)世界工作于非安全世界,這樣才能兼容圖形驅(qū)動(dòng)。那安全怎么辦?它需要添加四根管腳NSAID,類似于安全世界的PROT信號(hào),只不過(guò)做了更細(xì)的劃分,使得GPU/視頻/顯示模塊要訪問(wèn)被保護(hù)內(nèi)存時(shí),預(yù)先定義好了權(quán)限。而這個(gè)權(quán)限的設(shè)置,也是通過(guò)前文的TZC400來(lái)實(shí)現(xiàn)的,在安全啟動(dòng)鏈中就完成。CPU的權(quán)限通常是0,也就是最低。而顯示控制器權(quán)限是只讀。

這樣一來(lái),我們之前的老問(wèn)題,惡意緩存監(jiān)聽(tīng),又回來(lái)了。在新的A73和G71加CCI500/550總線系統(tǒng)里,可以支持雙向硬件一致性。這意味著GPU也能被監(jiān)聽(tīng)。這下大家都在非安全世界,緩存里的安全位不起作用,怎么解決?這需要總線的配合。

ARM的總線CCI500/550,有一個(gè)保護(hù)模式,打開(kāi)后,不光支持上文的NSAID管腳,還可以在監(jiān)聽(tīng)的時(shí)候,把監(jiān)聽(tīng)傳輸替換成緩存行無(wú)效化命令,直接讓目標(biāo)把相應(yīng)緩存行無(wú)效化。這樣一來(lái),數(shù)據(jù)還是需要從內(nèi)存讀取,保證安全。并且這個(gè)過(guò)程對(duì)軟件透明,無(wú)需做任何改動(dòng)。

可是此時(shí),辛辛苦苦設(shè)計(jì)的硬件一致性就完全起不到加速作用了,性能受到影響。好在運(yùn)行OpenGL ES的時(shí)候,GPU是不會(huì)發(fā)出共享傳輸?shù)模珻PU也不會(huì)沒(méi)事去監(jiān)聽(tīng)GPU的數(shù)據(jù)。而下一代的圖形接口Vulkan,會(huì)開(kāi)始使用GPU雙向一致性,那時(shí)候會(huì)有影響。還有一點(diǎn)不利的是,如果同時(shí)運(yùn)行OpenCL和DRM,OpenCL也用不上雙向硬件一致性,必須重啟系統(tǒng)切換到非保護(hù)模式才行。

還有,在實(shí)際使用中,現(xiàn)有的TZC400作為內(nèi)存保護(hù)模塊,有幾個(gè)致命的缺陷。

第一,它的配置只能在啟動(dòng)時(shí)完成,無(wú)法動(dòng)態(tài)改變,也就是說(shuō),一旦某塊內(nèi)存給了安全世界,就無(wú)法再被非安全世界的操作系統(tǒng)使用,哪怕它是空閑的。在4K視頻播放時(shí),需要分配幾百兆內(nèi)存,還不止一塊。

如果一直被占著,這對(duì)于4GB內(nèi)存手機(jī)來(lái)說(shuō)是個(gè)沉重的負(fù)擔(dān)。怎么解決?只能改成動(dòng)態(tài)配置。此時(shí),如果內(nèi)存不夠了,非安全操作系統(tǒng)提請(qǐng)求給安全系統(tǒng),讓它把暫時(shí)不用的物理內(nèi)存設(shè)到非保護(hù)內(nèi)存區(qū),并定個(gè)時(shí)間收回。不過(guò)這樣一來(lái)內(nèi)存分配機(jī)制就復(fù)雜了,說(shuō)不定還得改內(nèi)核,很危險(xiǎn)。

如果忽視這點(diǎn),繼續(xù)往下走,還會(huì)遇到第二個(gè)問(wèn)題。TZC400和它的改進(jìn)版最多只能支持最小顆粒度為2MB的內(nèi)存塊管理。為什么不弄細(xì)些呢?很簡(jiǎn)單,如果設(shè)成4KB,和系統(tǒng)頁(yè)大小一致,那么4GB的物理內(nèi)存就需要一百萬(wàn)條目來(lái)管理。如果做成片上內(nèi)存,比二級(jí)緩存還大,不現(xiàn)實(shí)。

而做內(nèi)存映射,就和MMU一樣了,經(jīng)過(guò)CPU的MMU后,數(shù)據(jù)訪問(wèn)還要再穿越一次MMU,延遲顯然大。此外,這一層的MMU無(wú)法利用一二級(jí)緩存放頁(yè)表,效率極低。如果繼續(xù)保持2MB的顆粒,那么在分配內(nèi)存的時(shí)候,很快就會(huì)因?yàn)閴K太大而用完。就算使用了上一節(jié)的方法,問(wèn)題也沒(méi)法很好解決。這就是TZMP2V1。

在這種情況下,第三種基于虛擬機(jī)的方案就出現(xiàn)了。不過(guò)這個(gè)方案基本上推翻了Trustzone最初的設(shè)計(jì)意圖,我們來(lái)看下圖:

在這里,作為內(nèi)存保護(hù)的TZC400完全移除,而系統(tǒng)MMU加了進(jìn)來(lái)。內(nèi)存保護(hù)怎么做?靠物理地址重映射。先看處理器。在啟動(dòng)鏈中,從EL3向EL2跳的過(guò)程時(shí),就定義好保護(hù)內(nèi)存,并且EL2,也就是虛擬機(jī)的頁(yè)表存放于保護(hù)內(nèi)存,EL1的安全頁(yè)也同樣放在保護(hù)內(nèi)存。

這樣,當(dāng)處理器進(jìn)入到EL1,哪怕通過(guò)篡改EL1非安全頁(yè)表的安全位,也最終會(huì)被映射到它所不能訪問(wèn)的安全內(nèi)存,從而起到保護(hù)作用。同樣的,給處于非安全世界的控制器也加上系統(tǒng)MMU,讓設(shè)備虛擬化,同樣可以控制安全。這就是TZMP2V2。有了系統(tǒng)MMU,頁(yè)表可以做成4KB大小了,也不用擔(dān)心CPU那里穿越兩次MMU。這時(shí)候,也不用擔(dān)心惡意監(jiān)聽(tīng)緩存,因?yàn)樗写┻^(guò)二級(jí)MMU的訪問(wèn)里,安全位都是經(jīng)過(guò)檢驗(yàn)的的。

但是,不看別的,光是為設(shè)備加入這些系統(tǒng)MMU,就會(huì)增加很多面積。還有,光加MMU不夠,還要加入系統(tǒng)的三級(jí)甚至四級(jí)緩存,才能讓MMU效率更高,不然延遲太大。當(dāng)然,如果設(shè)備使用的頁(yè)表并不很多,可以對(duì)MMU簡(jiǎn)化,比如增大最小顆粒度,減少映射范圍,直接使用片內(nèi)內(nèi)存。這需要系統(tǒng)設(shè)計(jì)者來(lái)做均衡。對(duì)于GPU來(lái)說(shuō),要支持雙向一致性,還得考慮讓監(jiān)聽(tīng)傳輸通過(guò)MMU,不然功能就出問(wèn)題了。

如果使用了TZMP2V2,那么虛擬化就變成了一個(gè)切實(shí)需求。然后會(huì)發(fā)現(xiàn),ARM的中斷和設(shè)備的虛擬化還很不完善。接下來(lái)我從硬件角度解釋下虛擬化。

說(shuō)到虛擬化,先要解釋系統(tǒng)MMU。

如上圖所示,系統(tǒng)MMU其實(shí)很簡(jiǎn)單,就是個(gè)二層地址轉(zhuǎn)換。第一層,虛地址到實(shí)地址,第二層,實(shí)地址到物理地址。請(qǐng)注意,沒(méi)有第二層轉(zhuǎn)換時(shí),實(shí)地址等同于物理地址。這個(gè)模塊既可以兩層都打開(kāi),也可以只開(kāi)一層,看情況而定。

上圖比較清楚的顯示了一層映射的過(guò)程。其中,設(shè)備發(fā)出的虛地址請(qǐng)求,會(huì)先經(jīng)過(guò)TLB,它里面存了以前訪問(wèn)過(guò)的頁(yè)表項(xiàng),如果有,就直接返回,沒(méi)有就往下走到第二步table walk。

第二步里,MMU會(huì)按照預(yù)設(shè)的多級(jí)基址寄存器,一級(jí)級(jí)訪問(wèn)到最終頁(yè)表。如果MMU位于CPU內(nèi),那table walk過(guò)程中每次訪問(wèn)的基址和表項(xiàng),都可以存放于緩存中,大大提高效率。如果在設(shè)備上,只有內(nèi)建的TLB表項(xiàng),后面沒(méi)有緩存,那未命中TLB的都是訪問(wèn)DDR,效率自然下降。

所以CPU和GPU等經(jīng)常訪存的設(shè)備,都是自帶第一層MMU和緩存。而對(duì)于沒(méi)有內(nèi)部MMU,切換頁(yè)表又不是很頻繁的設(shè)備,比如DMA控制器,可以在下面掛第一層MMU,此時(shí)驅(qū)動(dòng)就簡(jiǎn)單了,直接把應(yīng)用程序看到的虛地址給DMA的寄存器就行,MMU會(huì)自己按照基地址去查找相應(yīng)頁(yè)表并翻譯,把實(shí)地址送到總線。不然,驅(qū)動(dòng)還要自己查找實(shí)地址再寫(xiě)入寄存器。

我們前面說(shuō)過(guò),在TZMP1和TZMP2v1中,內(nèi)存保護(hù)是靠TZC400來(lái)完成的。而到了TZMP2v2,取消了TZC400,這時(shí)靠虛擬化的二層地址映射。

二層映射的過(guò)程和一層映射基本一樣,不再詳述,但是性能問(wèn)題會(huì)被放大。假設(shè)在一層中,經(jīng)過(guò)四級(jí)基址查到最終頁(yè),而在二層中,這每一級(jí)的基址查找,又會(huì)引入新的四級(jí)基址訪問(wèn)。所以至少要經(jīng)過(guò)4x4+4=20次訪存,才能確定物理地址。如果沒(méi)有緩存的幫助,效率會(huì)非常低。

其他可行的辦法是減少基址級(jí)數(shù),比如linux只用了三級(jí)頁(yè)表,但即使如此,也需要3x3+3=12次查找。在包含緩存的ARM CPU上,虛擬機(jī)的效率可以做到80%以上。而二層MMU應(yīng)用于設(shè)備實(shí)現(xiàn)設(shè)備虛擬化的時(shí)候,就需要小心設(shè)計(jì)了。

有了系統(tǒng)MMU,我們就有了全芯片虛擬化的基礎(chǔ)。那在對(duì)系統(tǒng)性能和成本做完平衡,采取合適的系統(tǒng)MMU設(shè)計(jì)之后,是不是就可以實(shí)現(xiàn)虛擬化,并且靠虛擬化實(shí)現(xiàn)安全了?沒(méi)那么容易,還有其它問(wèn)題需要考慮。

虛擬化脫胎于仿真器,就是在一個(gè)平臺(tái)上模擬出另一個(gè)平臺(tái)。在指令集相同的時(shí)候,沒(méi)有必要翻譯每一條指令,可以讓指令直接被硬件執(zhí)行,這樣指令的效率算是得到了解決。當(dāng)然,對(duì)于某些特殊指令和寄存器訪問(wèn),還是需要hypervisor處理的。接著第二個(gè)問(wèn)題,訪存。

我們前面解釋過(guò),對(duì)CPU來(lái)說(shuō),高效的虛擬化訪存,就是讓指令高效的經(jīng)過(guò)兩層翻譯,而不是每次訪存都需要觸發(fā)虛擬機(jī)EL2的異常,切到Hypervisor,再得到最終物理地址。這一點(diǎn)在沒(méi)有缺頁(yè)異常的時(shí)候,ARM的虛擬化也已經(jīng)做到了,而有缺頁(yè)異常時(shí)還是需要Hypervisor處理。再接著是設(shè)備訪存虛擬化,有了系統(tǒng)MMU,也可以高效做到。再就是處理器和設(shè)備中斷虛擬化。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9169

    瀏覽量

    369239
  • 無(wú)人機(jī)
    +關(guān)注

    關(guān)注

    230

    文章

    10515

    瀏覽量

    182434
  • 大疆
    +關(guān)注

    關(guān)注

    30

    文章

    906

    瀏覽量

    82235
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TrustZone走進(jìn)MCU,ARM安全物聯(lián)網(wǎng)奠定基礎(chǔ)

    未來(lái)萬(wàn)物互聯(lián)的前景雖然令整個(gè)業(yè)界憧憬,但也不乏有人擔(dān)心安全問(wèn)題,但隨著ARM宣布TrustZone技術(shù)拓展至Cortex-M系列MCU,以及mbed云增添到ARM mbed物聯(lián)網(wǎng)設(shè)備平
    發(fā)表于 11-14 18:44 ?1771次閱讀

    embOS如何支持Arm TrustZone

    通過(guò)ARMv8-M架構(gòu)支持的TrustZone技術(shù),可以將關(guān)鍵安全固件和私有程序(如安全引導(dǎo)、固件更新和密鑰)與其余應(yīng)用程序隔離,極大降低被攻擊的可能性,增加嵌入式系統(tǒng)安全。SEGGE
    發(fā)表于 09-22 12:16 ?505次閱讀
    embOS如何支持<b class='flag-5'>Arm</b> <b class='flag-5'>TrustZone</b>

    RF功率測(cè)量及控制有助于確保系統(tǒng)安全、高效地運(yùn)行

    作者:齊凌杰 應(yīng)用工程師 世強(qiáng)電訊 目前,包括通信收發(fā)機(jī)、儀器、工業(yè)控制和雷達(dá)等在內(nèi)的許多系統(tǒng)都需要控制射頻功率,因此需要準(zhǔn)確測(cè)量射頻功率。在這些系統(tǒng)中,RF功率測(cè)量及控制有助于確保系統(tǒng)安全
    發(fā)表于 06-25 08:08

    請(qǐng)教大神怎樣去設(shè)計(jì)一種DBAS應(yīng)用系統(tǒng)安全架構(gòu)?

    軟件體系結(jié)構(gòu)是由哪些部分組成的?設(shè)計(jì)過(guò)程包括哪些部分?怎樣去設(shè)計(jì)一種DBAS應(yīng)用系統(tǒng)安全架構(gòu)?
    發(fā)表于 07-22 08:16

    Arm架構(gòu)中的TrustZone、CryptoCell以及Cryptoisland之間的區(qū)別是什么

    ,TZASC等,如果選用Arm的IP都是天生支持的,如果是自己實(shí)現(xiàn)的話,需要考慮實(shí)現(xiàn)安全擴(kuò)展。Security IP也是TrustZone系統(tǒng)中非常重要的一部分,其中CryptoCel
    發(fā)表于 07-14 14:15

    PX5的ARM TrustZone支持讓嵌入式系統(tǒng)變得更加安全

    強(qiáng)和簡(jiǎn)化設(shè)備安全。” 物聯(lián)網(wǎng)設(shè)備的全系統(tǒng)安全 ARM TrustZone技術(shù)讓不同成本級(jí)別的物聯(lián)網(wǎng)(IoT)設(shè)備都可以有健壯的安全保護(hù)。這一
    發(fā)表于 05-18 13:44

    了解體系結(jié)構(gòu)-適用于AArch64的TrustZone介紹

    在本指南中,我們介紹了TrustZoneTrustZone通過(guò)內(nèi)置在CPU中的硬件強(qiáng)制隔離,提供了一種高效的全系統(tǒng)安全方法。 我們介紹了TrustZone添加到處理器體系結(jié)構(gòu)中的功能
    發(fā)表于 08-10 07:02

    STM32 MCU TrustZone開(kāi)發(fā)調(diào)試技巧分享

    系統(tǒng)隔離與ARM V8-M TrustZone技術(shù)、TrustZone地址安全區(qū)及資源安全屬性配
    發(fā)表于 09-05 06:16

    ARM 架構(gòu)中TrustZone 安全處理技術(shù)的研究

    對(duì)基于 ARMv6 架構(gòu)的全新TrustZone 安全處理技術(shù)進(jìn)行了研究,著重從該技術(shù)的實(shí)現(xiàn)原理、運(yùn)行模式和軟硬件支持等方面,論證TrustZone 技術(shù)實(shí)現(xiàn)整體系統(tǒng)安全的有效性和可行
    發(fā)表于 08-28 11:23 ?18次下載

    ARM TrustZone技術(shù)對(duì)Zynq SoC的作用

    現(xiàn)在,你可以通過(guò)閱讀“對(duì)Xilinx Zynq-7000 All Programmable SoC中的ARM TrustZone架構(gòu)進(jìn)行編程”這本新鮮出爐的用戶手冊(cè),來(lái)理解怎樣更好的使用Zynq
    的頭像 發(fā)表于 08-01 08:28 ?3499次閱讀
    <b class='flag-5'>ARM</b> <b class='flag-5'>TrustZone</b>技術(shù)對(duì)Zynq SoC的作用

    AN5447 基于Arm? TrustZone? STM32 微控制器的安全啟動(dòng)和安全固件更新解決方案概述

    AN5447 基于Arm? TrustZone? STM32 微控制器的安全啟動(dòng)和安全固件更新解決方案概述
    發(fā)表于 11-21 17:06 ?1次下載
    AN5447 基于<b class='flag-5'>Arm</b>? <b class='flag-5'>TrustZone</b>? STM32 微控制器的<b class='flag-5'>安全</b>啟動(dòng)和<b class='flag-5'>安全</b>固件更新解決方案概述

    Arm? TrustZone? 技術(shù)簡(jiǎn)介

    ,不同廠家芯片可能不同需要參考對(duì)應(yīng)的手冊(cè)。 二.TrustZone介紹 Arm TrustZone 技術(shù)是Armv8-M 架構(gòu)一個(gè)可選的架構(gòu)擴(kuò)展。 其核心思想就是樸素的硬件隔離思想,系統(tǒng)
    的頭像 發(fā)表于 07-04 08:44 ?3300次閱讀
    <b class='flag-5'>Arm</b>? <b class='flag-5'>TrustZone</b>? 技術(shù)簡(jiǎn)介

    如何實(shí)現(xiàn)TrustZone的可信執(zhí)行環(huán)境來(lái)支持隱私計(jì)算呢?

    TrustZone技術(shù)是ARM公司開(kāi)發(fā)的一種系統(tǒng)安全擴(kuò)展技術(shù)。TrustZone技術(shù)的主要目標(biāo)是保證嵌入式系統(tǒng)
    的頭像 發(fā)表于 07-25 16:15 ?1911次閱讀
    如何實(shí)現(xiàn)<b class='flag-5'>TrustZone</b>的可信執(zhí)行環(huán)境來(lái)支持隱私計(jì)算呢?

    Arm TrustZone STM32微控制器的安全啟動(dòng)和安全固件更新解決方案

    本應(yīng)用筆記描述如何在基于 Arm Cortex ?M33 處理器的 Arm TrustZone STM32 微控制器上獲得安全啟動(dòng)和安全固件
    發(fā)表于 09-11 10:08 ?1次下載

    Arm TrustZone STM32微控制器的安全啟動(dòng)和安全固件更新解決方案概述

    電子發(fā)燒友網(wǎng)站提供《Arm TrustZone STM32微控制器的安全啟動(dòng)和安全固件更新解決方案概述.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 15:56 ?1次下載
    <b class='flag-5'>Arm</b> <b class='flag-5'>TrustZone</b> STM32微控制器的<b class='flag-5'>安全</b>啟動(dòng)和<b class='flag-5'>安全</b>固件更新解決方案概述
    游戏机百家乐的玩法技巧和规则| 百家乐赌博机有鬼吗| 真人百家乐官网分析软件是骗局 | 闲和庄百家乐官网赌场娱乐网规则| 战神国际娱乐平| 新澳博百家乐的玩法技巧和规则| 百家乐官网定位胆技巧| 百家乐官网视频游戏注册| 六合彩教程| 实战百家乐十大取胜原因百分百战胜百家乐不买币不吹牛只你能做到按我说的.百家乐基本规则 | 百家乐官网在线娱乐可信吗| 疏附县| 大发888体育竞技| 澳门百家乐要注意啥| 累积式百家乐官网的玩法技巧和规则 | 解析百家乐投注法| 怎样玩百家乐官网看路| 阜新| 大发888真钱账户注册| 沙龙百家乐娱乐场开户注册| 博彩通百家乐概率| 百家乐官网赔率计算| 保单百家乐官网游戏机| 老k娱乐城| 大发888 真钱娱乐场| 真人百家乐视频| 百家乐网址是多少| 百家乐官网五湖四海娱乐场开户注册 | 百家乐双层筹码盘| 百家乐官网高手打| 百家乐官网用什么平台| 百家乐官网波浪法则| 外围赌球网站| 德州扑克学校| 大发888娱乐城网页版| 机械手百家乐的玩法技巧和规则| 中国百家乐游戏| 网上百家乐投注法| 百家乐官网平玩法几副牌| 百家乐官网如何切牌好| 百家乐官网开户首选|