許多嵌入式系統(tǒng)已經(jīng)采用系統(tǒng)虛擬化,通過使用虛擬機(jī)(VM)將虛擬和物理系統(tǒng)分離。關(guān)鍵任務(wù)嵌入式系統(tǒng)中的虛擬化可以使用類似于企業(yè)系統(tǒng)使用的技術(shù)來實(shí)現(xiàn),但嵌入式虛擬化的不同用例為與嵌入式系統(tǒng)的優(yōu)先級(jí)更緊密地一致的其他解決方案打開了大門。
自 2000 年代初以來,虛擬化已廣泛部署在企業(yè)服務(wù)器中。服務(wù)器虛擬化的最初驅(qū)動(dòng)力是關(guān)于服務(wù)器整合的,它將運(yùn)行不同應(yīng)用程序的多個(gè)未充分利用的服務(wù)器的服務(wù)合并到一臺(tái)計(jì)算機(jī)上。減少服務(wù)器數(shù)量節(jié)省了資本和運(yùn)營(yíng)成本。這種整合需要工作負(fù)載隔離,將應(yīng)用程序彼此分開,并將系統(tǒng)的其余部分分開,從而提供某種程度的安全性和應(yīng)用程序自主性。由于虛擬機(jī) (VM) 將應(yīng)用程序與其所依賴的操作系統(tǒng)配對(duì),因此虛擬化還允許將 VM 從一臺(tái)服務(wù)器遷移到另一臺(tái)服務(wù)器,從而在各種任務(wù)關(guān)鍵型軍事應(yīng)用程序中實(shí)現(xiàn)高可用性、負(fù)載平衡和額外的節(jié)能。
服務(wù)器虛擬化的輔助驅(qū)動(dòng)器是運(yùn)行為不同操作系統(tǒng) (OS) 或不同版本的操作系統(tǒng)設(shè)計(jì)的應(yīng)用程序的能力。例如,運(yùn)行Linux的工程工作站通常也運(yùn)行Microsoft Windows以與業(yè)務(wù)應(yīng)用程序進(jìn)行交互。這對(duì)于支持遺留系統(tǒng)特別有用,例如從大型機(jī)遷移到服務(wù)器時(shí)。
嵌入式虛擬化用例
嵌入式虛擬化與企業(yè)用例有很多重疊,但具有不同的優(yōu)先級(jí)和附加要求。嵌入式虛擬化的主要用例是支持異構(gòu)操作系統(tǒng)和提高安全性。次要用例可能包括工作負(fù)載整合、軟件許可證隔離以及促進(jìn)向多核處理器的遷移。支持異構(gòu)操作系統(tǒng)的常見驅(qū)動(dòng)因素是需要為某些應(yīng)用程序支持通用操作系統(tǒng),例如 Linux 和 Windows,而關(guān)鍵和受信任的應(yīng)用程序在實(shí)時(shí)操作系統(tǒng) (RTOS) 上運(yùn)行。在具有混合關(guān)鍵性的系統(tǒng)中,提高安全性尤為重要,以便將不太重要的應(yīng)用程序與具有更關(guān)鍵的實(shí)時(shí)、安全或安保要求的應(yīng)用程序隔離開來。
在評(píng)估安全解決方案時(shí),一個(gè)關(guān)鍵概念是受信任計(jì)算基礎(chǔ) (TCB) 的大小,該計(jì)算基礎(chǔ)由實(shí)施安全策略的硬件、軟件和控制組成??傮w目標(biāo)是最小化 TCB 的大小和接口的數(shù)量,以便更容易地進(jìn)行驗(yàn)證。TCB 和接口數(shù)越大,攻擊面就越大。最小化 TCB 需要將許多非關(guān)鍵服務(wù)移出 TCB,這反過來又需要能夠隔離這些服務(wù),并在受信任和不受信任的組件之間提供安全通信。請(qǐng)注意,最小化 TCB 不是最終目標(biāo),而只是簡(jiǎn)化驗(yàn)證的一種手段。對(duì)于需要高安全性的系統(tǒng),最終目標(biāo)是根據(jù)適用的安全保證要求進(jìn)行認(rèn)證。
與服務(wù)器虛擬化中的虛擬機(jī)不同,嵌入式系統(tǒng)中的應(yīng)用程序通常是高度集成的,需要協(xié)作。隨后,解決方案的一部分需要包括可預(yù)測(cè)的低延遲、高帶寬通信路徑,其權(quán)限由安全 TCB 強(qiáng)制執(zhí)行。特別是對(duì)于嵌入式實(shí)時(shí)系統(tǒng),滿足異構(gòu)操作系統(tǒng)的虛擬化目標(biāo)和提高安全性不能以犧牲系統(tǒng)的確定性或大大增加的延遲為代價(jià)。對(duì)于安全關(guān)鍵系統(tǒng)來說,情況更是如此。維護(hù)確定性對(duì)任何虛擬化解決方案來說都是一個(gè)挑戰(zhàn),因?yàn)楦咝У奶摂M化實(shí)現(xiàn)通常使用啟發(fā)式方法來識(shí)別不同操作系統(tǒng)和給定操作系統(tǒng)的不同版本的代碼序列的變化。
虛擬化的硬件支持
眾所周知,x86 處理器的早期虛擬化性能低下,因?yàn)槿狈?duì)虛擬化的硬件支持,包括虛擬化內(nèi)存管理單元 (MMU) 和輸入/輸出內(nèi)存管理單元 (IOMMU)。現(xiàn)代處理器為硬件輔助虛擬化提供支持。一個(gè)例子是英特爾 VT-x 和 VT-d。
英特爾 VT-x 提供了進(jìn)入和退出虛擬執(zhí)行模式的說明,在該模式下,訪客操作系統(tǒng)將自己視為以完全權(quán)限運(yùn)行,而主機(jī)操作系統(tǒng)仍受到保護(hù)。內(nèi)存虛擬化實(shí)際上需要兩個(gè)級(jí)別的虛擬化。首先,來賓操作系統(tǒng)將從物理地址空間到虛擬地址空間的映射存儲(chǔ)在頁表中。該來賓操作系統(tǒng)無法直接訪問物理內(nèi)存,因此虛擬機(jī)監(jiān)視器 (VMM) 需要提供這些頁表的虛擬化。對(duì)于英特爾處理器,頁表虛擬化的加速稱為擴(kuò)展頁表 (EPT)。
面向定向 I/O 的英特爾虛擬化技術(shù)(英特爾 VT-d)為重新映射直接內(nèi)存訪問 (DMA) 傳輸和設(shè)備生成的中斷提供了硬件輔助。IOMMU 跟蹤哪些物理內(nèi)存區(qū)域映射到哪些 I/O 設(shè)備。分配給特定 VM 的 I/O 設(shè)備不能被其他 VM 訪問,I/O 設(shè)備也無法訪問其他 VM。
即使支持 IOMMU,VMM 仍需要將數(shù)據(jù)從網(wǎng)絡(luò)接口芯片 (NIC) 復(fù)制到虛擬機(jī),反之亦然。PCI-SIG 的單根 I/O 虛擬化 (SR-IOV) 標(biāo)準(zhǔn)將 VMM 從將數(shù)據(jù)移入和移出虛擬機(jī)的過程中移除。數(shù)據(jù)直接在 VM 之間通過 DMA 傳輸,VMM 中的軟件開關(guān)永遠(yuǎn)不會(huì)碰它。
雖然虛擬化硬件加速的關(guān)鍵技術(shù)是在芯片級(jí)實(shí)現(xiàn)的,但板級(jí)決策也會(huì)影響系統(tǒng)性能。例如,具有最多虛擬化功能的處理器通常是消耗最多功率的處理器,因此通常需要在優(yōu)化尺寸、重量和功耗 (SWaP) 方面做出權(quán)衡決策。NIC 的選擇會(huì)影響加速哪些 I/O 虛擬化功能。電路板上的內(nèi)存量也是一個(gè)重要的考慮因素,因?yàn)樘摂M化會(huì)消耗大量?jī)?nèi)存。
嵌入式虛擬化技術(shù)
一旦底層硬件已經(jīng)建立并支持虛擬化的需求,下一個(gè)問題是使用什么軟件虛擬化技術(shù)。在企業(yè)領(lǐng)域,主要選擇是類型 1和類型 2 虛擬機(jī)管理程序,其中類型 1 在裸機(jī)上運(yùn)行,類型 2 在另一個(gè)操作系統(tǒng)上運(yùn)行。對(duì)于嵌入式系統(tǒng),還有第三種選擇:具有虛擬化層的微內(nèi)核。盡管將任何給定的解決方案放入這三個(gè)存儲(chǔ)桶之一中很方便,但現(xiàn)實(shí)情況是,類型 1 和類型 2 之間存在灰色區(qū)域,并且可以使用微內(nèi)核技術(shù)實(shí)現(xiàn)類型 1 虛擬機(jī)管理程序。即使有一定程度的重疊,查看定義特征和功能也很有用。
虛擬機(jī)管理程序(也稱為虛擬機(jī)監(jiān)視器 (VMM))始于企業(yè)系統(tǒng),幾乎沒有資源限制。因此,許多虛擬機(jī)管理程序及其虛擬機(jī)都是重量級(jí)結(jié)構(gòu),通常包括設(shè)備驅(qū)動(dòng)程序等功能,有時(shí)甚至包括網(wǎng)絡(luò)堆棧和文件系統(tǒng)。所有這些功能都需要大型 TCB。網(wǎng)絡(luò)堆棧具有特別高的安全風(fēng)險(xiǎn),如最近的“URGENT/11”漏洞所示。對(duì)于類型 1 和類型 2 虛擬機(jī)管理程序,來賓操作系統(tǒng)與應(yīng)用程序一起在虛擬機(jī)內(nèi)運(yùn)行。盡管在裸機(jī)上運(yùn)行的 Type 1 虛擬機(jī)管理程序通常效率更高,但如果只有一小部分應(yīng)用程序需要來賓操作系統(tǒng),則類型 2 虛擬機(jī)管理程序可能是正確的解決方案。在企業(yè)環(huán)境中,一個(gè)例子是工程環(huán)境(例如 Linux)或創(chuàng)意環(huán)境(如 macOS),它需要運(yùn)行僅在 Windows 上運(yùn)行的業(yè)務(wù)應(yīng)用程序。同樣,嵌入式系統(tǒng)通?;旌狭藢?shí)時(shí)和非實(shí)時(shí)要求。使用 Type 2 虛擬機(jī)管理程序,較大的實(shí)時(shí)應(yīng)用程序集將僅依賴于基本 RTOS,而不是 RTOS 和虛擬機(jī)管理程序,而只有非實(shí)時(shí)應(yīng)用程序才會(huì)產(chǎn)生來賓操作系統(tǒng)、虛擬機(jī)管理程序和主機(jī)操作系統(tǒng)的虛擬化開銷。
微內(nèi)核來自不同的方向,旨在通過將服務(wù)(包括虛擬化)移動(dòng)到用戶模式服務(wù)器來減少內(nèi)核中執(zhí)行的代碼量。這也最大限度地減少了TCB,以提高安全性和安全性。提供來賓操作系統(tǒng)支持的虛擬化層可以在用戶空間中實(shí)現(xiàn),類似于類型 2 虛擬機(jī)管理程序,以及網(wǎng)絡(luò)堆棧和文件系統(tǒng)。請(qǐng)注意,隔離基礎(chǔ)是在微內(nèi)核中實(shí)現(xiàn)的,包括使用硬件虛擬化功能。
從可信計(jì)算庫中獲取虛擬化層對(duì)于安全性和安全性都是一個(gè)顯著的優(yōu)勢(shì),因?yàn)樘摂M化代碼可能很大。要使來賓操作系統(tǒng)認(rèn)為它在裸機(jī)上運(yùn)行,必須對(duì)系統(tǒng)的每個(gè)部分進(jìn)行虛擬化。盡管硬件技術(shù)加速了內(nèi)存虛擬化,但直到最近,一些處理器才開始加速某些部分的 I/O。所需的虛擬化的一些示例包括設(shè)備仿真、總線仿真以及中斷仿真和路由。所有這些仿真的代碼都非常大,并且還會(huì)造成性能損失。從來賓操作系統(tǒng)對(duì)內(nèi)核的每個(gè)調(diào)用都需要捕獲、檢查并確定是否允許來賓操作系統(tǒng)進(jìn)行該訪問。為了使虛擬機(jī)管理程序高效,它需要虛擬化指令序列而不是單個(gè)指令。這種前瞻功能只是增加虛擬機(jī)管理程序已經(jīng)很大的代碼庫以最大程度地減少虛擬化性能損失的一個(gè)例子。
一種特定類型的微內(nèi)核是分離內(nèi)核,它將其控制下的所有導(dǎo)出資源分配到分區(qū)中,并且這些分區(qū)是隔離的,除了明確允許的信息流。專為最高安全性而設(shè)計(jì)的分離內(nèi)核符合美國(guó)國(guó)家安全局 (NSA) 定義的分離內(nèi)核保護(hù)配置文件 (SKPP),該配置文件是為最惡劣的威脅環(huán)境創(chuàng)建的。
虛擬機(jī)管理程序和微內(nèi)核技術(shù)的比較
如今,虛擬機(jī)管理程序和微內(nèi)核中具有虛擬化層的廣泛功能集之間存在大量重疊。這兩種技術(shù)都利用基礎(chǔ)硬件功能(如多個(gè)特權(quán)模式/級(jí)別、MMU 和 IOMMU)來提供硬件強(qiáng)制隔離,并為不同的應(yīng)用程序提供單獨(dú)的地址空間。虛擬機(jī)管理程序和具有虛擬化層的微內(nèi)核都提供了在虛擬化環(huán)境中運(yùn)行多個(gè)操作系統(tǒng)的能力,包括混合使用RTOS和非RTOS。即使有這些相似之處,這兩種技術(shù)在確定性和安全性方面也可能存在顯著差異。
基于微內(nèi)核的實(shí)時(shí)操作系統(tǒng)從一開始就是為低延遲和高確定性而設(shè)計(jì)的。在虛擬機(jī)管理程序上運(yùn)行 RTOS 會(huì)增加必須攔截和虛擬化的每個(gè)系統(tǒng)調(diào)用的延遲。結(jié)果是延遲增加,確定性降低。為了解決這個(gè)問題,一些虛擬機(jī)管理程序聲稱允許在裸機(jī)上運(yùn)行,但這確實(shí)是用詞不當(dāng)。即使沒有來賓操作系統(tǒng),應(yīng)用程序仍然必須在虛擬機(jī)監(jiān)控程序上運(yùn)行,虛擬機(jī)監(jiān)控程序通常比微內(nèi)核大。僅在沒有來賓操作系統(tǒng)的虛擬機(jī)管理程序上運(yùn)行也意味著沒有任務(wù)服務(wù)、沒有信號(hào)量和消息傳遞。
對(duì)于安全關(guān)鍵型系統(tǒng),基于虛擬機(jī)管理程序的解決方案需要安全關(guān)鍵型操作系統(tǒng)和經(jīng)過認(rèn)證為任何托管應(yīng)用程序最高級(jí)別關(guān)鍵性的虛擬機(jī)管理程序。與微內(nèi)核相比,該代碼庫的總大小會(huì)產(chǎn)生巨大的認(rèn)證負(fù)擔(dān),并帶來不必要的風(fēng)險(xiǎn)。
或者,具有虛擬化層的微內(nèi)核通過將更高延遲和降低確定性的虛擬化副作用限制為僅運(yùn)行主機(jī)微內(nèi)核 RTOS 的應(yīng)用程序來實(shí)現(xiàn)更高的性能。在安全關(guān)鍵型系統(tǒng)中,非關(guān)鍵應(yīng)用程序可以在虛擬化層上運(yùn)行,而不會(huì)增加認(rèn)證所需的代碼庫大小。
安全性通常是考慮虛擬機(jī)監(jiān)控程序的最常被引用的原因。一個(gè)常見的誤解是,虛擬機(jī)管理程序本質(zhì)上是安全的,因?yàn)樗鼈兝糜布韽?qiáng)制實(shí)施虛擬地址空間和虛擬 I/O 來隔離虛擬機(jī)。首先,其他技術(shù)(如分區(qū)操作系統(tǒng)和分離內(nèi)核)也使用相同的硬件功能來強(qiáng)制隔離。但是,安全性的主要考慮因素是完整解決方案的安全性僅與底層軟件一樣安全。虛擬機(jī)管理程序已被證明容易受到漏洞的影響,這些缺陷可能允許通過緩沖區(qū)溢出和其他漏洞執(zhí)行代碼。例如,2018年初披露的Spectre漏洞可以誘使虛擬機(jī)管理程序向來賓應(yīng)用程序泄露機(jī)密。由于虛擬機(jī)管理程序在來賓操作系統(tǒng)下運(yùn)行,因此 VM 無法檢測(cè)到受損的虛擬機(jī)管理程序。這樣的漏洞甚至有一個(gè)吸引人的名字:超級(jí)劫持。
微內(nèi)核具有較小的TCB,而使用分離內(nèi)核技術(shù)的微內(nèi)核可以具有最高級(jí)別的安全性和隔離性。該安全級(jí)別的證明是 NSA 發(fā)布的 SKPP 認(rèn)證或類似的安全標(biāo)準(zhǔn),例如通用標(biāo)準(zhǔn) EAL6。一些虛擬機(jī)管理程序包含一些分離內(nèi)核原則以提高安全性,但沒有虛擬機(jī)管理程序經(jīng)過 SKPP 或類似安全標(biāo)準(zhǔn)(如通用標(biāo)準(zhǔn) EAL6)的認(rèn)證。對(duì)于需要隔離但不需要虛擬化的系統(tǒng),基于微內(nèi)核的分離內(nèi)核可提供最高級(jí)別的安全性,而無需虛擬機(jī)管理程序的開銷和擴(kuò)展代碼庫。
針對(duì)性能和安全性進(jìn)行優(yōu)化
針對(duì)最高實(shí)時(shí)性能和最高安全性進(jìn)行優(yōu)化的虛擬化解決方案的一個(gè)例子是Green Hills Software的INTEGRITY-178 tuMP RTOS,這是一個(gè)基于微內(nèi)核的分離內(nèi)核,具有完整的虛擬化服務(wù),包括無需修改即可運(yùn)行多個(gè)來賓操作系統(tǒng)的能力。與基于虛擬機(jī)管理程序的虛擬化解決方案相反,實(shí)時(shí)應(yīng)用程序可以直接在此 RTOS 上運(yùn)行,而不會(huì)在延遲或確定性方面造成虛擬化層損失。
作為分離內(nèi)核,RTOS完全隔離多個(gè)應(yīng)用程序/分區(qū),并控制應(yīng)用程序/分區(qū)與外部資源之間的信息流。在某種程度上,這包括保護(hù)所有資源免受未經(jīng)授權(quán)的訪問,隔離除明確允許的信息流之外的分區(qū),以及一組審計(jì)服務(wù)。結(jié)果是,分離內(nèi)核提供了高保證的分區(qū)和信息流控制,滿足 NEAT[不可繞過、可評(píng)估、始終調(diào)用和防篡改] 安全策略屬性。
INTEGRITY-178是唯一獲得NSA發(fā)布的SKPP認(rèn)證以及通用標(biāo)準(zhǔn)EAL6+的商業(yè)操作系統(tǒng)或虛擬機(jī)管理程序。這種安全譜系已經(jīng)擴(kuò)展到多核INTEGRITY-178 tuMP RTOS。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5085文章
19138瀏覽量
305719 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9203瀏覽量
85546 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6838瀏覽量
123385
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論