今天主要给大家分享JVM的沙箱安全机制笔记
1、沙箱机制的概念
Java安全模型的核心就是Java沙箱(sandbox)。
沙箱机制就是将Java代码限定只能在虚JVM虚拟机中特定的运行范围,并且严格限制代码对本地系统资源访问,通过这样的方式来保证对Java代码的有效隔离,防止对本地操作系统造成破坏。
2、沙箱的作用
主要限制系统资源(CPU、内存、文件系统、网络)的访问。
不同级别的沙箱对系统资源访问的限制也有差异。
3、本地代码和远程代码
Java的执行程序分为:本地代码和远程代码。,
本地代码:默认视为可信任的,可以访问一切本地资源。
远程代码:被看作是不受信的。对于授信的本地代码,对于非授信的远程代码在早期的Java实现中,安全依赖于沙箱(Sandbox)机制。
4、沙箱安全机制模型
4.1 JDK1 .0安全模型
JDK1 .0安全模型本地代码可以访问系统资源,远程代码无法访问系统资源,比如用户希望远程代码访问本地系统的文件时候,就无法实现。
4.2 JDK1 .1安全模型
JDK1 .1 安全模型版本中,针对安全机制做了改进,增加了受信任安全策略,允许用户指定代码对本地资源的访问权限
4.3 JDK1 .2安全模型
JDK1 .2安全模型改进了安全机制,增加了代码签名。不论本地代码或是远程代码,统一按照用户的安全策略设定,由类加载器加载到虚拟机中权限不同的运行空间,从而来实现差异化的代码执行权限控制。
4.4 目前最新的安全模型
目前最新的安全模型引入了域 (Domain) 的概念。JVM虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责与关键资源系统进行交互,而每个应用域部分则通过系统域的部分代理来对各种需要的资源进行精细划分然后可以进行访问。JVM虚拟机中不同的受保护域 (Protected Domain)对应不一样的权限 (Permission)。存在于不同域中的类文件就拥有了它所包含应用域所有可访问资源之和。
5、沙箱安全机制的基本组件
5.1 字节码校验器(bytecode verifier)
确保lava类文件遵循lava语言规范。这样可以帮助Java程序实现内存保护。但并不是所有的类文件都会经过字节码校验,比如核心类。
5.2 类装载器(class loader)
- 防止恶意代码去干涉善意的代码,比如:双亲委派机制
- 守护了被信任的类库边界;
- 将代码归入保护域,确定了代码的权限范围可以进行哪些资源操作
5.3 存取控制器(access controller)
存取控制器可以控制核心API对操作系统的存取权限,用户可以设定控制策略。
5.4 安全管理器(security manager)
安全管理器主要是核心API和操作系统之间的主要接口。比如实现权限控制,比存取控制器优先级高。
5.5 安全软件包(security package) :
java.security下的类和扩展包下的类,允许用户为应用增加所需要安全特性:安全提供者、消息摘要、数字签名keytools、加密、鉴别。