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