問(wèn)。可提供實(shí)時(shí)操作系統(tǒng)58或信任管理器以管理軟件庫(kù)55之間的切換。 當(dāng)一個(gè)庫(kù)設(shè)法訪問(wèn)與界定為受操作系統(tǒng)58保護(hù)的另一庫(kù)關(guān)聯(lián)的數(shù)據(jù)或代碼時(shí),MPU硬件可 檢查此舉是否被允許,且若不允許則可觸發(fā)故障。在這樣的實(shí)現(xiàn)方式中,不提供圖1的安全 保護(hù)硬件40。當(dāng)切換庫(kù)時(shí),需要中斷處理電路4上的處理,以使得操作系統(tǒng)58中的安全處 置器可被執(zhí)行。這降低了處理電路4的處理性能,且因此該技術(shù)與硬件技術(shù)相比較為緩慢。
[0064] 另一方面,圖3示出了用于分離不同域的硬件技術(shù)的示例。在此情況中,安全保護(hù) 硬件40維護(hù)較不安全域與安全域之間的邊界70且各個(gè)軟件庫(kù)60具有自己的域。由于通 過(guò)硬件來(lái)控制域之間的轉(zhuǎn)換的安全,庫(kù)之間的轉(zhuǎn)換快速且不一定要調(diào)用軟件處置器。然而, 圖3的硬件實(shí)現(xiàn)方式難以維護(hù)大量不同、互相保護(hù)的軟件庫(kù),因?yàn)榘踩Wo(hù)單元42中所存 儲(chǔ)的數(shù)據(jù)量變得非常大,且因此實(shí)際上這限制了可支持的不同域的數(shù)目。
[0065] 為解決這些問(wèn)題,圖4示出了混合硬件/軟件技術(shù),該技術(shù)使得許多互相不信任軟 件庫(kù)能夠以比圖3所示的技術(shù)更加硬件有效率的方式被維護(hù),但是具有比圖2所示的途徑 高的性能。安全保護(hù)硬件40提供用于維護(hù)較不安全域80與安全域90之間的邊界70的安 全保護(hù)。在安全域中執(zhí)行多個(gè)安全軟件庫(kù)100,且使用安全MPU 50及也在安全域中執(zhí)行的 庫(kù)管理軟件110保護(hù)這些安全軟件庫(kù)100避免相互訪問(wèn)。庫(kù)管理軟件110管理不同安全庫(kù) 100之間的轉(zhuǎn)換。庫(kù)管理軟件110選擇一個(gè)或多個(gè)庫(kù)100作為活動(dòng)庫(kù)并且選擇其他庫(kù)作為 不活動(dòng)庫(kù)。例如,在圖4中,將安全庫(kù)0設(shè)置為活動(dòng)庫(kù)及其他庫(kù)1至N設(shè)置為不活動(dòng)庫(kù)。通 過(guò)設(shè)置安全MPU 50中的MPU權(quán)限來(lái)選擇活動(dòng)及不活動(dòng)庫(kù),使得對(duì)應(yīng)于活動(dòng)庫(kù)的區(qū)域?yàn)榭稍L 問(wèn)并且對(duì)應(yīng)于不活動(dòng)庫(kù)的區(qū)域?yàn)椴豢稍L問(wèn)。庫(kù)管理軟件100使用庫(kù)配置數(shù)據(jù)112來(lái)確定當(dāng) 某些庫(kù)為活動(dòng)時(shí)將訪問(wèn)權(quán)限寫入安全MPU 50中。
[0066] 當(dāng)函數(shù)Call 120為從較不安全域80中的軟件至活動(dòng)庫(kù)時(shí),則安全保護(hù)硬件40執(zhí) 行安全檢查操作。由于以硬件形式執(zhí)行安全檢查,所以該安全檢查是快速的且可直接對(duì)安 全庫(kù)100做出函數(shù)Call 120而不必首先通過(guò)處理電路4執(zhí)行其他軟件例程。
[0067] 另一方面,若函數(shù)Call 130為從較不安全域80中的代碼至安全域90中的不活動(dòng) 庫(kù)100,則安全MPU 50將觸發(fā)存儲(chǔ)器保護(hù)故障,因?yàn)閷?duì)應(yīng)于不活動(dòng)庫(kù)的區(qū)域當(dāng)前被設(shè)置為 不可訪問(wèn)。該故障觸發(fā)存儲(chǔ)器管理異常140且此異常調(diào)用庫(kù)管理器110中的故障處置器 150,該故障處置器引發(fā)活動(dòng)庫(kù)被切換,使得當(dāng)前被函數(shù)Call 130作為目標(biāo)的庫(kù)(此示例中 的庫(kù)1)變?yōu)榛顒?dòng)庫(kù),而先前的活動(dòng)庫(kù)(此示例中的庫(kù)〇)變?yōu)椴换顒?dòng)。故障處置器150基 于庫(kù)配置數(shù)據(jù)112切換安全MPU 50的配置,使得對(duì)新活動(dòng)庫(kù)的后續(xù)函數(shù)調(diào)用將被允許以及 對(duì)現(xiàn)為不活動(dòng)的舊庫(kù)的函數(shù)調(diào)用將觸發(fā)故障。再者,故障處置器150改變安全棧指針寄存 器24中的棧指針以指示與新活動(dòng)庫(kù)相關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)裝置6中的棧,而非指示與先前活動(dòng) 庫(kù)關(guān)聯(lián)的棧。此舉確保新庫(kù)可訪問(wèn)與之相關(guān)聯(lián)的棧。若新庫(kù)尚不具有棧,則在數(shù)據(jù)存儲(chǔ)裝 置6的安全區(qū)域44中分配棧。庫(kù)管理器110還可執(zhí)行一些軟件安全檢查以確定是否許可 切換庫(kù)。與此同時(shí),由于函數(shù)Call 130越過(guò)域邊界70,所以又通過(guò)安全保護(hù)硬件40以與函 數(shù)Call 120相似的方式提供硬件安全措施。
[0068] 因此,庫(kù)管理器110虛擬化在相同硬件安全域中操作的不同安全庫(kù)100,使得一次 僅一些庫(kù)為活動(dòng)且防止活動(dòng)庫(kù)訪問(wèn)不活動(dòng)庫(kù),由庫(kù)管理器110管理對(duì)不活動(dòng)庫(kù)的調(diào)用以確 保安全。僅當(dāng)對(duì)不活動(dòng)庫(kù)做出調(diào)用時(shí)才會(huì)遇到使用庫(kù)管理器110改變安全MPU 50配置的 開銷,且對(duì)相同庫(kù)的后續(xù)調(diào)用不引發(fā)故障140并且具有最小開銷。這允許支持對(duì)應(yīng)于不同 軟件庫(kù)100的幾乎無(wú)限數(shù)目的保護(hù)域。
[0069] 圖5示出了數(shù)據(jù)存儲(chǔ)裝置6的存儲(chǔ)器地址空間的示例。地址空間具有安全區(qū)域44 及較不安全區(qū)域46。盡管圖5示出一個(gè)較不安全區(qū)域44及一個(gè)安全區(qū)域46,但可提供更 多數(shù)目的安全區(qū)域及較不安全區(qū)域。安全保護(hù)單元42存儲(chǔ)數(shù)據(jù),該數(shù)據(jù)界定數(shù)據(jù)存儲(chǔ)裝置 6中的哪些區(qū)域?yàn)榘踩珔^(qū)域及哪些區(qū)域?yàn)檩^不安全區(qū)域。
[0070] 安全區(qū)域44包括對(duì)應(yīng)于安全軟件庫(kù)100中的至少一些的一個(gè)或多個(gè)安全棧30。 不必要在地址空間中為所有軟件庫(kù)100提供棧。而是,可隨著庫(kù)變?yōu)榛顒?dòng)的而將棧存儲(chǔ)空 間分配給庫(kù)100。安全區(qū)域34還包括對(duì)應(yīng)于軟件庫(kù)100的非特權(quán)安全代碼46及對(duì)應(yīng)于庫(kù) 管理軟件110的特權(quán)安全代碼47。安全MPU 50控制哪些程序碼及數(shù)據(jù)為非特權(quán)的或特權(quán) 的。
[0071] 類似地,較不安全區(qū)域46包括在較不安全域80中執(zhí)行的較不安全代碼48 (包括 特權(quán)及非特權(quán)代碼)、較不安全代碼48所使用的較不安全棧32、以及較不安全數(shù)據(jù)39。較 不安全MPU 52控制較不安全區(qū)域46中的數(shù)據(jù)或代碼是特權(quán)的還是非特權(quán)。通常的,非特 權(quán)代碼不可訪問(wèn)特權(quán)數(shù)據(jù)或代碼。
[0072] 存儲(chǔ)器地址空間還包括保留地址范圍150,該保留地址范圍不對(duì)應(yīng)于任何有效指 令地址。此保留范圍可用于特殊函數(shù),諸如虛設(shè)返回地址,如下文將描述的。例如,保留地 址范圍150可包括范圍從0xR)000000至OxFFFFFFFF中的地址。
[0073] 當(dāng)越過(guò)較不安全域80與安全域90之間的邊界70時(shí),安全保護(hù)硬件40執(zhí)行安全 保護(hù)操作,這些操作可包括以下操作中的至少一者:
[0074] ?在從較不安全域80分支至安全域90后,若分支目標(biāo)地址處的指令不含有表示進(jìn) 入安全代碼的有效入口點(diǎn)的防護(hù)指令,則安全保護(hù)硬件40可生成故障。此舉防止較不安全 代碼試圖分支至安全函數(shù)中間的情況下的攻擊,這些攻擊可為危險(xiǎn)的,因?yàn)樗梢栽试S在 函數(shù)中較早執(zhí)行的安全檢查(例如,密碼檢查)被避開,從而允許在沒(méi)有適當(dāng)安全授權(quán)的情 況下實(shí)施安全操作。
[0075] ?當(dāng)由安全域90中的庫(kù)執(zhí)行分支并引發(fā)轉(zhuǎn)換至較不安全域時(shí),則返回地址被自動(dòng) 推向與該庫(kù)100相關(guān)聯(lián)的棧,并且來(lái)自保留地址范圍150中的保留虛設(shè)值被放置在鏈接寄 存器22中。當(dāng)后續(xù)函數(shù)返回分支至虛設(shè)值時(shí),則通過(guò)安全保護(hù)硬件40檢測(cè)此情況,從而從 安全庫(kù)100的棧提取實(shí)際返回地址。此操作防止安全地址對(duì)非安全代碼可訪問(wèn)。下文關(guān)于 圖11更詳細(xì)地描述此操作。
[0076] ?當(dāng)從較不安全域80調(diào)用安全函數(shù)時(shí),可通過(guò)安全保護(hù)硬件40修改由公共代碼 提供的函數(shù)返回地址,以指示當(dāng)從函數(shù)返回時(shí)處理將返回至較不安全域80。例如,可在返 回地址中設(shè)置目標(biāo)域位以指示函數(shù)返回應(yīng)返回至較不安全域80。當(dāng)實(shí)施函數(shù)返回時(shí),可檢 查函數(shù)返回地址是否實(shí)際上對(duì)應(yīng)于從由所設(shè)目標(biāo)域位所指示的域可調(diào)用的位置,且若不對(duì) 應(yīng),則可觸發(fā)故障。此舉防止黑客修改由較不安全域80所傳遞的函數(shù)返回地址以試圖觸發(fā) 從安全域至其他安全代碼的不受控轉(zhuǎn)換情況下的攻擊。這能夠是危險(xiǎn)的,因?yàn)榘踩涟踩?分支通常將不由安全保護(hù)硬件40管控。通過(guò)在實(shí)施函數(shù)返回前對(duì)從較不安全域傳遞的函 數(shù)返回地址進(jìn)行消毒,可防止此類攻擊。
[0077] 因此,硬件40可采取各種安全措施。然而,當(dāng)在安全域90內(nèi)的安全庫(kù)100之間切 換時(shí)提供相同的保護(hù)也是可取的,如同在單獨(dú)的硬件保護(hù)域中實(shí)施這些庫(kù)。圖6及圖7示 出了用于實(shí)現(xiàn)此保護(hù)的不同技術(shù)。
[0078] 在圖6中,從第一安全庫(kù)0至第二安全庫(kù)1的函數(shù)調(diào)用引發(fā)在切換回安全域90中 的第二安全庫(kù)1之前切換至較不安全域80。通過(guò)臨時(shí)切換至較不安全域80,在硬件40看 來(lái)對(duì)第二安全庫(kù)的調(diào)用如同自較從安全域80至安全域90的切換,且因此由安全保護(hù)硬件 40以與在較不安全代碼調(diào)用第二安全庫(kù)1情況下會(huì)發(fā)生的相同的方式執(zhí)行上文所描述的 硬件保護(hù)措施。庫(kù)管理器100檢查并確保調(diào)用經(jīng)由較不安全域進(jìn)行,但是卻不需要執(zhí)行由 硬件40所執(zhí)行的安全措施。觸發(fā)臨時(shí)切換域的一種方式為將上文所論述的目標(biāo)域位設(shè)置 在函數(shù)調(diào)用的目標(biāo)地址中,以指示較不安全域80,而實(shí)際目標(biāo)地址對(duì)應(yīng)于安全域90中的位 置,該位置對(duì)應(yīng)于安全庫(kù)1。
[0079] 然而,當(dāng)切換至較不安全域80時(shí),正在兩個(gè)安全庫(kù)之間傳遞的任何操作數(shù)可對(duì)較 不安全代碼可見(jiàn)。當(dāng)處理器處于較不安全域80中時(shí),攻擊者能夠觸發(fā)中斷以獲得對(duì)正經(jīng)由 ?;蚪?jīng)由寄存器傳遞的任何操作數(shù)的訪問(wèn)。對(duì)于一些應(yīng)用,這可能無(wú)關(guān)緊要。對(duì)于一些軟 件應(yīng)用,軟件供貨商可能需要庫(kù)100之間的安全保護(hù)來(lái)阻止競(jìng)爭(zhēng)者復(fù)制他們的軟件代碼, 而非保護(hù)對(duì)數(shù)據(jù)的訪問(wèn)。對(duì)于此類應(yīng)用,圖6中所示的技術(shù)可為可接受的且在較不安全域 中是否可訪問(wèn)由安全庫(kù)所處理的數(shù)據(jù)可能無(wú)關(guān)緊要。
[0080] 然而,對(duì)于其他應(yīng)用(例如,銀行),數(shù)據(jù)本身可為敏感的且應(yīng)防止較不安全域訪 問(wèn)正在安全庫(kù)之間傳遞的操作數(shù)。對(duì)于此類應(yīng)用,不同安全庫(kù)100之間的函數(shù)調(diào)用可全部 發(fā)生在安全域中,如圖7所示,且?guī)旃芾砥?10可執(zhí)行安全保護(hù)函數(shù),這些安全保護(hù)函數(shù)正 常情況下本將由安全保護(hù)硬件40執(zhí)行。因此,庫(kù)之間的轉(zhuǎn)換具有與較不安全域與安全域之 間的轉(zhuǎn)換相同的保護(hù),而無(wú)需調(diào)用硬件。盡管以軟件方式執(zhí)行安全措施比使用硬件更慢,但 是該方法維護(hù)了庫(kù)之間所傳遞的任何操作數(shù)的安全。
[0081] 對(duì)于一些系統(tǒng),可支持圖6及圖7中所示的兩種技術(shù)。對(duì)于安全庫(kù)之間的給定函數(shù) 調(diào)用,庫(kù)管理器110可檢測(cè)調(diào)用是否經(jīng)由較不安全域80進(jìn)行。若是,則可假定硬件將執(zhí)行 安全保護(hù)操作。若調(diào)用并非經(jīng)由較不安全域80進(jìn)行,則庫(kù)管理器110執(zhí)行安全保護(hù)操作。 在其他實(shí)施例中,可支持圖6及圖7中所示的技術(shù)中的僅一者或另一者。
[0082] 當(dāng)執(zhí)行函數(shù)調(diào)用時(shí),傳統(tǒng)系統(tǒng)通常使用通用寄存器8來(lái)傳遞自變量。若通用寄存 器中沒(méi)有足夠空間,則??捎糜趥鬟f過(guò)量自變量。然而,當(dāng)一安全庫(kù)100調(diào)用另一安全庫(kù) 100 (如圖6及圖7所示)時(shí),不可使用此途徑,因?yàn)楦鱾€(gè)庫(kù)100在數(shù)據(jù)存儲(chǔ)裝置6中具有自 己的棧30,其他庫(kù)100不可訪問(wèn)這些棧。若函數(shù)自變量不敏感,則可通過(guò)將自變量存儲(chǔ)至較 不安全棧32來(lái)在庫(kù)100之間傳遞這些自變量,該較不安全??捎砂踩?0中的任何安全 庫(kù)100訪問(wèn)。另一方面,若在庫(kù)之間傳遞敏感數(shù)據(jù),則諸如由庫(kù)管理軟件110提供的郵箱之 類的軟件方法可用于確保自變量的安全。
[0083] 圖8示出了使用硬件40以及安全MPU 50和較不安全MPU 52執(zhí)行安全檢查的方 法。在步驟200處,發(fā)生分支操作以將程序流改變?yōu)槟繕?biāo)地址處的指令。在步驟202處,安 全保護(hù)單元42以及安全保護(hù)硬件40確定是否存在訪問(wèn)違規(guī)。若操作的當(dāng)前域?yàn)檩^不安全 域,目標(biāo)地址處于安全區(qū)域44中,并且目標(biāo)地址處的指令并非防護(hù)指令,則檢測(cè)到訪問(wèn)違 規(guī)。若檢測(cè)到訪問(wèn)違規(guī),則在步驟20