目录

什么是沙箱安全机制

沙箱安全机制的发展史

沙箱的组成


 

什么是沙箱安全机制

 

Java安全模型的核心就是Java沙箱(sandbox)。沙箱是一个限制程序运行的环境。沙箱机制就是将Java代码限定在虚拟机特定的运行范围中,并且严格限制代码对本地系统资源的访问,通过这样的措施保证对代码的有效隔离,防止对本地系统造成的破坏,沙箱主要限制系统资源访问(cpu、内存、文件系统、网络)

 

 

沙箱安全机制的发展史

 

在Java中将执行程序分为本地代码和远程代码两种。本地代码默认视为可信任的,而远程代码则被看作是不受信任的,对于授信的本地代码,可以访问一切本地资源。而对于非授信的远程代码在早期的java实现中,安全依赖于沙箱机制。下图为jdk1.0安全模型

沙箱安全机制

这种一分为二的方式,阻挡了远程代码访问本地系统的文件。jdk1.1中增加了安全策略,运行用户指定代码对本地资源的访问权限。

沙箱安全机制

jdk1.2再次进行了改进,增加了代码签名。不论本地代码或远程代码,都会按照用户的安全策略设定,由类加载器加载到虚拟机中权限不同的运行空间,来实现差异化的代码执行权限控制。

沙箱安全机制

jdk1.6版本的安全机制更加完善,普遍在使用。1.6引入了域(Domain)的概念。虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责与关键资源进行交互,而各个应用域部分则通过系统域的部分代理来对各种需要的资源进行访问。虚拟机中不同的受保护域(Project Domain)对应不一样的权限(Permission)。存在于不同域中的类文件就具有了当前域的全部权限。

沙箱安全机制

 

 

沙箱的组成

 

  • 字节码校验:确保java类文件遵循java语言规范。这样可以帮助java程序实现内存保护,但并不是所有的类文件都会经过字节码校验,比如已经默认通过校验的java包和javax包下的内容。
  • 类加载器:类加载器防止了恶意代码去干涉善意的代码,守护了被信任的类库边界,将代码归入保护域,确定了代码可以进行哪些操作。类加载器严格通过包来区分访问域,外层恶意类通过内置代码也无法获得权限访问内层类,破坏代码自然无法生效。
  • 存取控制器:存取控制器可以控制核心API对操作系统的读取权限,而这个控制策略可以由用户设定
  • 安全管理器:是核心API和操作系统的主要接口。实现权限控制,比存取控制器优先级更高
  • 安全软件包:java.security下的类和扩展包下的类,允许用户未自己的应用增加新的安全特性包括(安全提供者、消息摘要、数字签名、加密、鉴别)

相关文章: