JVM系列之沙箱安全機制筆記
1.沙箱機制的概念
Java安全模型的核心就是Java沙箱(sandbox)。沙箱機制就是將Java代碼限定只能在虛JVM虛擬機中特定的運行范圍,并且嚴格限制代碼對本地系統(tǒng)資源訪問,通過這樣的方式來保證對Java代碼的有效隔離,防止對本地操作系統(tǒng)造成破壞。
2.沙箱的作用
主要限制系統(tǒng)資源(CPU、內存、文件系統(tǒng)、網絡)的訪問。不同級別的沙箱對系統(tǒng)資源訪問的限制也有差異。
3.本地代碼和遠程代碼
Java的執(zhí)行程序分為:本地代碼和遠程代碼。,本地代碼:默認視為可信任的,可以訪問一切本地資源。遠程代碼:被看作是不受信的。對于授信的本地代碼,對于非授信的遠程代碼在早期的Java實現(xiàn)中,安全依賴于沙箱(Sandbox)機制。
4.沙箱安全機制模型
4.1 JDK1 .0安全模型
JDK1 .0安全模型本地代碼可以訪問系統(tǒng)資源,遠程代碼無法訪問系統(tǒng)資源,比如用戶希望遠程代碼訪問本地系統(tǒng)的文件時候,就無法實現(xiàn)。
4.2 JDK1 .1安全模型
JDK1 .1 安全模型版本中,針對安全機制做了改進,增加了受信任安全策略,允許用戶指定代碼對本地資源的訪問權限
4.3 JDK1 .2安全模型
JDK1 .2安全模型改進了安全機制,增加了代碼簽名。不論本地代碼或是遠程代碼,統(tǒng)一按照用戶的安全策略設定,由類加載器加載到虛擬機中權限不同的運行空間,從而來實現(xiàn)差異化的代碼執(zhí)行權限控制。
4.4 目前最新的安全模型
目前最新的安全模型引入了域 (Domain) 的概念。JVM虛擬機會把所有代碼加載到不同的系統(tǒng)域和應用域,系統(tǒng)域部分專門負責與關鍵資源系統(tǒng)進行交互,而每個應用域部分則通過系統(tǒng)域的部分代理來對各種需要的資源進行精細劃分然后可以進行訪問。JVM虛擬機中不同的受保護域 (Protected Domain)對應不一樣的權限 (Permission)。存在于不同域中的類文件就擁有了它所包含應用域所有可訪問資源之和。
5.沙箱安全機制的基本組件
5.1 字節(jié)碼校驗器(bytecode verifier)
確保lava類文件遵循lava語言規(guī)范。這樣可以幫助Java程序實現(xiàn)內存保護。但并不是所有的類文件都會經過字節(jié)碼校驗,比如核心類。
5.2 類裝載器(class loader)
防止惡意代碼去干涉善意的代碼,比如:雙親委派機制
守護了被信任的類庫邊界;
將代碼歸入保護域,確定了代碼的權限范圍可以進行哪些資源操作
5.3 存取控制器(access controller)
存取控制器可以控制核心API對操作系統(tǒng)的存取權限,用戶可以設定控制策略。
5.4 安全管理器(security manager)
安全管理器主要是核心API和操作系統(tǒng)之間的主要接口。比如實現(xiàn)權限控制,比存取控制器優(yōu)先級高。
5.5 安全軟件包(security package) :
java.security下的類和擴展包下的類,允許用戶為應用增加所需要安全特性:安全提供者、消息摘要、數字簽名keytools、加密、鑒別。