多獨(dú)立安全級(jí)別 (MILS) 操作系統(tǒng)支持安全部署多個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序表示屬于不同安全領(lǐng)域的數(shù)據(jù)。編寫用于使用 MILS 操作系統(tǒng)部署的軟件需要注意主流操作系統(tǒng)上不需要的細(xì)節(jié)。在 MILS 操作系統(tǒng)中集成 Java 虛擬機(jī) (VM) 可簡(jiǎn)化 MILS 應(yīng)用軟件的開發(fā)。
通常,多獨(dú)立安全級(jí)別 (MILS) 操作系統(tǒng)是更通用的實(shí)時(shí)操作系統(tǒng)的特殊配置,旨在簡(jiǎn)化支持多個(gè)獨(dú)立安全級(jí)別的軟件系統(tǒng)的開發(fā)。這種系統(tǒng)在軍事場(chǎng)景中尤其常見,例如,同一計(jì)算機(jī)系統(tǒng)可能需要將屬于一個(gè)國(guó)家政府的絕密數(shù)據(jù)與屬于北約等政府聯(lián)盟的機(jī)密數(shù)據(jù)隔離開來(圖1)。
圖1:配置為限制分區(qū)之間信息流的安全 MILS 操作系統(tǒng)
從概念上講,MILS 操作系統(tǒng)維護(hù)邏輯分區(qū)以隔離內(nèi)存、CPU 時(shí)間和特定應(yīng)用程序可訪問的其他資源,并限制在不同邏輯分區(qū)中運(yùn)行的應(yīng)用程序之間的交互。為一組特定的應(yīng)用程序配置 MILS 操作系統(tǒng)允許開發(fā)人員建立控制分區(qū)之間交互的規(guī)則。例如,規(guī)則可能聲明僅允許分區(qū) A 將消息傳遞到分區(qū) C 和 D。
MILS 分區(qū)的理想是降低證明系統(tǒng)足夠安全所需的安全審核成本。操作系統(tǒng)的分區(qū)實(shí)現(xiàn)由操作系統(tǒng)供應(yīng)商認(rèn)證為安全,此認(rèn)證的費(fèi)用由所有被許可方分擔(dān)。鑒于操作系統(tǒng)可以保證在不同分區(qū)中運(yùn)行的應(yīng)用程序之間沒有通信,因此了解和記錄每個(gè)應(yīng)用程序的安全敏感行為所需的工作量要少得多。將 Java 虛擬機(jī) (VM) 添加到 MILS 操作系統(tǒng)可極大地簡(jiǎn)化應(yīng)用程序軟件到 MILS 環(huán)境的移植和開發(fā)。
案例研究:在 MILS 環(huán)境中部署軟件的實(shí)用性
為了便于安全審計(jì)以確保獨(dú)立分區(qū)之間沒有通信,開發(fā) MILS 操作系統(tǒng)的公司通常會(huì)將操作系統(tǒng)提供的服務(wù)集限制為在 MILS 分區(qū)內(nèi)運(yùn)行的應(yīng)用程序。每個(gè) MILS 環(huán)境在有效執(zhí)行 Java 虛擬機(jī)方面都面臨著不同的挑戰(zhàn)。讓我們看一下應(yīng)軍事和航空航天工業(yè)客戶的要求將實(shí)時(shí)虛擬機(jī)產(chǎn)品移植到特定的商用現(xiàn)貨 (COTS) MILS 操作系統(tǒng)時(shí)遇到的一些問題。
在此 MILS 操作系統(tǒng)中遇到的限制中,此 MILS 操作系統(tǒng)為確保系統(tǒng)安全而實(shí)施的一些約束包括:
無法寫入程序的文本段。
系統(tǒng)沒有提供用于設(shè)置環(huán)境變量的命令行工具。
該系統(tǒng)不支持本地圖書館的動(dòng)態(tài)鏈接。
雖然不是此 COTS MILS 操作系統(tǒng)的一般限制,但我們客戶的目標(biāo)平臺(tái)缺少文件系統(tǒng)。
鑒于這些限制(這是深度嵌入式 MILS 部署的典型限制),很明顯,在大多數(shù)現(xiàn)成的應(yīng)用程序在此環(huán)境中運(yùn)行之前,需要大量的移植和集成工作。Java的可移植性提供了顯著降低這種移植和集成工作成本的潛力。
Java 與 MILS 應(yīng)用的相關(guān)性
Java與安全軟件的開發(fā)特別相關(guān),因?yàn)樵撜Z言比C和C++更強(qiáng)烈。自從早期開發(fā)專注于互聯(lián)網(wǎng)應(yīng)用程序的Java語言以來,安全性在其設(shè)計(jì)中一直至關(guān)重要。例如,Java禁止指針和非指針數(shù)據(jù)類型之間的強(qiáng)制,并且禁止指針?biāo)阈g(shù)。此外,每次訪問 Java 數(shù)組都會(huì)執(zhí)行數(shù)組邊界檢查。拋出異常,而不是允許軟件應(yīng)用程序超出數(shù)組有效數(shù)據(jù)的末尾。同樣,Java 運(yùn)行時(shí)環(huán)境會(huì)檢查堆棧溢出并引發(fā)異常,而不是允許線程踐踏超出線程分配堆棧末尾的內(nèi)存。通常,Java 語言中內(nèi)置的這些安全功能完全消除了通常在特洛伊木馬和病毒軟件的實(shí)現(xiàn)中利用的絕大多數(shù)漏洞,這些漏洞通常會(huì)感染 C 和 C++ 應(yīng)用程序。
Java的一個(gè)優(yōu)勢(shì)與在MILS環(huán)境中實(shí)現(xiàn)新軟件功能的挑戰(zhàn)特別相關(guān),因?yàn)榕c更傳統(tǒng)的語言相比,Java顯著減少了實(shí)現(xiàn),移植和將獨(dú)立開發(fā)的軟件組件集成到工作應(yīng)用程序中所需的工作量。代表性項(xiàng)目發(fā)現(xiàn),開發(fā)人員在開發(fā)新功能時(shí)的效率通常是其兩倍,而在使用 Java 而不是 C 或 C++ 工作時(shí),重用軟件組件的工作效率通常提高 10 倍。這是因?yàn)?Java 語言支持更高級(jí)別的抽象,更具可移植性,并且鼓勵(lì)比 C 和 C++ 更緊密的封裝。這些好處的價(jià)值在經(jīng)驗(yàn)報(bào)告中得到了強(qiáng)調(diào),如圖 2 所示。
圖2:Java與開發(fā)專用、安全的專用系統(tǒng)的相關(guān)性
內(nèi)置的跟蹤垃圾回收功能(可自動(dòng)回收與應(yīng)用程序不再相關(guān)的動(dòng)態(tài)分配對(duì)象的內(nèi)存)是一項(xiàng) Java 功能,它使將獨(dú)立開發(fā)的 COTS Java 組件集成到 MILS 應(yīng)用程序中變得特別容易。每當(dāng)一個(gè)對(duì)象由一個(gè)組件分配并由其他組件使用時(shí),C 或 C++ 工程師都需要設(shè)計(jì)和實(shí)現(xiàn)一個(gè)協(xié)議,用于檢測(cè)對(duì)象的使用壽命結(jié)束并回收其當(dāng)時(shí)的內(nèi)存。使用Java,自動(dòng)檢測(cè)和回收死對(duì)象,并且回收的內(nèi)存會(huì)自動(dòng)進(jìn)行碎片整理,這是大多數(shù)自動(dòng)垃圾收集技術(shù)的寶貴副作用。除了減少開發(fā)和集成軟件組件所需的智力工作外,此功能還消除了調(diào)試與懸空指針、內(nèi)存泄漏和內(nèi)存碎片相關(guān)的許多常見內(nèi)存管理編程錯(cuò)誤的需要。
因此,能夠用Java語言實(shí)現(xiàn)MILS應(yīng)用程序是非常可取的。該語言比 C 和 C++ 等傳統(tǒng)傳統(tǒng)語言更安全,它減少了實(shí)現(xiàn)定制功能所需的工作量,并且在重用和集成獨(dú)立開發(fā)的軟件組件期間節(jié)省了大量成本。
將 Java VM 移植到 COTS MILS 環(huán)境
要在 MILS 分區(qū)中部署 Java 軟件,首先需要在 MILS 分區(qū)中安裝 Java 虛擬機(jī)運(yùn)行時(shí)環(huán)境。Java 虛擬機(jī)提供標(biāo)準(zhǔn) Java 庫(kù)、Java 類裝入器、Java 字節(jié)碼解釋器和/或?qū)崟r(shí) (JIT) 編譯器,以及跟蹤垃圾回收器的實(shí)現(xiàn)。有了 Java 虛擬機(jī),Java 編程的所有傳統(tǒng)優(yōu)勢(shì)都很容易獲得。
鑒于 MILS 環(huán)境提供的服務(wù)通常比同一操作系統(tǒng)的類似非 MILS 配置少得多,因此已配置為在傳統(tǒng)或?qū)崟r(shí)操作系統(tǒng)上運(yùn)行的虛擬機(jī)產(chǎn)品可能不會(huì)在 MILS 分區(qū)中運(yùn)行。最近,一位客戶要求我們?yōu)樘囟ǖ?COTS MILS 操作系統(tǒng)環(huán)境提供虛擬機(jī)支持。
由于 MILS 環(huán)境施加的 MILS 限制,有一些 Java 功能無法得到支持。但在大多數(shù)情況下,所描述的虛擬機(jī)技術(shù)的 MILS 配置支持所有標(biāo)準(zhǔn)版 Java。以下五個(gè)部分構(gòu)成了 Java 配置的基本原理和可用解決方法的案例研究。
#1 – 高保證網(wǎng)絡(luò)堆棧 (HANS)
根據(jù)其支持提高安全性的目標(biāo),客戶選擇的 MILS 操作系統(tǒng)在分發(fā)時(shí)可以選擇使用高保證網(wǎng)絡(luò)堆棧。此網(wǎng)絡(luò)堆棧在隔離的 MILS 分區(qū)中運(yùn)行,允許它以非常高的優(yōu)先級(jí)運(yùn)行,而不會(huì)影響為其他 MILS 分區(qū)預(yù)算的公平 CPU 時(shí)間份額。將網(wǎng)絡(luò)堆棧放在自己的小分區(qū)中,可以將堆棧與單個(gè)應(yīng)用程序中的錯(cuò)誤隔離開來。不同分區(qū)中的應(yīng)用程序可能會(huì)崩潰并重新啟動(dòng),而不會(huì)影響 HANS 的完整性。此外,HANS 消耗的 CPU 時(shí)間和內(nèi)存資源受到其運(yùn)行分區(qū)約束的限制。這為網(wǎng)絡(luò)堆棧實(shí)現(xiàn)提供了針對(duì)拒絕服務(wù)攻擊的某些保護(hù)。
鑒于專用于 HANS 實(shí)現(xiàn)的內(nèi)存量和 CPU 時(shí)間受到 MILS 操作系統(tǒng)的限制,只有 HANS 分區(qū)本身受到另一臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)通信請(qǐng)求的影響,以高于其準(zhǔn)備處理的速率與此計(jì)算機(jī)進(jìn)行交互。雖然在這種情況下,HANS 可能會(huì)丟棄數(shù)據(jù)包,但在其他 MILS 分區(qū)中運(yùn)行的應(yīng)用程序不會(huì)受到拒絕服務(wù)攻擊的影響。
虛擬機(jī)與此 MILS 環(huán)境的集成支持 HANS 的使用,從而適應(yīng)了 HANS 和標(biāo)準(zhǔn)網(wǎng)絡(luò)堆棧 API 之間的少量差異。特別是,HANS 未枚舉為特定 MILS 虛擬板配置配置的網(wǎng)絡(luò)設(shè)備。相反,命令行選項(xiàng)允許系統(tǒng)集成商提供已配置網(wǎng)絡(luò)設(shè)備的列表。域名服務(wù)函數(shù) gethostname() 和 hostGetByName() 也不被 HANS 支持。Atego Perc Ultra 虛擬機(jī)技術(shù)的 MILS 集成為客戶提供了在必要時(shí)使用這些服務(wù)的專有基于表的查找來實(shí)施這些服務(wù)的機(jī)會(huì)。
#2 – 不調(diào)試已編譯的代碼
由于 MILS 環(huán)境禁止寫入文本段,因此無法在靜態(tài)編譯并鏈接到運(yùn)行時(shí)映像的 Java 代碼中設(shè)置斷點(diǎn)。
但是,需要調(diào)試功能的 Java 開發(fā)人員可以使用幾種方法。首先,由于Java是一種可移植的編程語言,因此通常可以在功能更全的平臺(tái)上完全調(diào)試應(yīng)用程序,然后將調(diào)試后的應(yīng)用程序部署在MILS平臺(tái)上。其次,如果在 MILS 環(huán)境中調(diào)試是絕對(duì)必要的,那么仍然可以調(diào)試以解釋字節(jié)碼運(yùn)行的 Java 應(yīng)用程序。
#3 – 沒有動(dòng)態(tài)加載本機(jī)庫(kù)
許多 Java 應(yīng)用程序由 Java 和本機(jī)代碼的組合組成,通常用 C 或 C++ 編寫。當(dāng)本機(jī)組件是 Java 應(yīng)用程序的一部分時(shí),最常見的是在 Java System.loadLibrary 服務(wù)的指導(dǎo)下動(dòng)態(tài)加載本機(jī)代碼。此服務(wù)在實(shí)時(shí)虛擬機(jī)的 MILS 集成中不可用。相反,系統(tǒng)集成商可以選擇靜態(tài)鏈接本機(jī)庫(kù)。
#4 – 專用虛擬文件系統(tǒng)
為了支持缺乏文件系統(tǒng)支持的 MILS 平臺(tái),我們實(shí)現(xiàn)了虛擬文件系統(tǒng)作為 MILS 端口的一部分。此虛擬文件系統(tǒng)允許 Java 應(yīng)用程序創(chuàng)建、寫入和讀取存儲(chǔ)在內(nèi)存中的文件數(shù)據(jù)。虛擬文件系統(tǒng)的可用性使得測(cè)試虛擬機(jī)實(shí)現(xiàn)和將現(xiàn)成的 Java 代碼移植到 MILS 平臺(tái)上變得更加容易,否則這些平臺(tái)將缺少文件支持。
#5 – 沒有環(huán)境變量
環(huán)境變量通常用于保存關(guān)鍵配置數(shù)據(jù),以方便用戶。環(huán)境變量指定的配置選項(xiàng)不需要在每次啟動(dòng)應(yīng)用程序時(shí)在命令行上重復(fù)。由于 MILS 環(huán)境不為用戶提供設(shè)置環(huán)境變量的能力,因此這種便利性通常不可用。相反,MILS Java 應(yīng)用程序通常以命令行參數(shù)的形式接收配置數(shù)據(jù)。
Java降低了成本,增加了MILS軟件系統(tǒng)的可靠性
在 MILS 操作系統(tǒng)分區(qū)中啟用 Java 開發(fā)非常有意義。虛擬機(jī)技術(shù)(如Atego Perc Ultra)使得在MILS上運(yùn)行標(biāo)準(zhǔn)版Java成為可能,為利用多個(gè)獨(dú)立安全級(jí)別的項(xiàng)目提供成本節(jié)約和可靠性優(yōu)勢(shì)。
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
11083瀏覽量
217180 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7154瀏覽量
125647 -
JAVA
+關(guān)注
關(guān)注
20文章
2989瀏覽量
109949
發(fā)布評(píng)論請(qǐng)先 登錄
鴻道Intewell實(shí)時(shí)操作系統(tǒng)有哪些應(yīng)用場(chǎng)景
開源鴻蒙星載實(shí)時(shí)操作系統(tǒng)標(biāo)準(zhǔn)的制定與意義
如何將VCP功能添加到UVC應(yīng)用程序代碼中?
什么樣的才叫實(shí)時(shí)工業(yè)操作系統(tǒng)

如何將ENWF9408AVEF Wi-Fi模塊添加到1064EVK wifi_cli SDK項(xiàng)目中?
SEGGER發(fā)布下一代安全實(shí)時(shí)操作系統(tǒng)embOS-Ultra-MPU
實(shí)時(shí)操作系統(tǒng)RTOS選型指南及實(shí)例分析
鴻道Intewell操作系統(tǒng)的Linux實(shí)時(shí)拓展方案

鴻道Intewell操作系統(tǒng)的Windows實(shí)時(shí)拓展方案

基于國(guó)產(chǎn)化鴻道Intewell操作系統(tǒng)的高性能實(shí)時(shí)運(yùn)動(dòng)控制解決方案
國(guó)產(chǎn)實(shí)時(shí)操作系統(tǒng):和RT-Linux,Zephyr的實(shí)時(shí)性對(duì)比

linux是實(shí)時(shí)系統(tǒng)還是分時(shí)操作系統(tǒng)
ARM開發(fā)板上的實(shí)時(shí)操作系統(tǒng)介紹
鴻道Intewell實(shí)時(shí)操作系統(tǒng)MIPS架構(gòu)生態(tài):龍芯2K1000

評(píng)論