《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于Internet的Java安全性分析

基于Internet的Java安全性分析

2008-12-19
作者:何海龙 王精业

0 引言 

    随着Internet的迅猛发展,世界正进入以计算机互联网络为中心的计算时代。要使用计算机就必然会同时用到网络,不会使用网络就等于不会使用计算机。Sun公司1995年推出的Java技术适应了网络新时代的需求。Java语言具有简单,独立于平台,面向对象,分布式,安全性,可移植性,动态性,多线程等特点。Java的设计思想是最大限度地利用网络,它提供的代码可移植性和平台无关性,使网络交换的不仅是信息,还可以是程序实体。在Web网页中可以嵌入Java可执行程序,给互联网增添了多姿的色彩。但恶意的Applet,也能非法侵入,服务攻击,窃取保密性数据,因此有必要对Java的安全性进行探讨。 

1 Java Applet的危害性 

    WWW万维网技术,伴随着网络技术的飞速发展而日新月异。Java技术也应运而生,可以说WWW是网络计算体系结构演变的必然结果。个人PC在某种意义上,可以是基于Java技术的一种面向网络的,可运行Java程序的客户机。Java的诸多优秀特性使之成为个人PC的灵魂和强有力的武器。个人PC上的网络浏览软件实际上就是提供一个Java运行环境。 

1.1 Java程序分类 

    Java是与平台无关的编程语言,它允许在Web文档中嵌入可执行的内容JavaApplet。当客户端的Web浏览器访问一个含有Applet的页面时,可执行的程序(编译过的Java字节码)将通过浏览器下载到本地客户机上,在支持Java的浏览器中的Java虚拟机这个解释的环境内执行。 

    利用Java可以编写两种程序,一种是独立的、可执行的程序,称为Java应用程序" title="应用程序">应用程序(Application),它有一个main()方法,可以从命令行运行。另一种是嵌入到HTML网页中的JavaApplet,即Java小程序,在浏览Web页面时,代码被下载执行。基于Java的Web浏览器必须在确保它们的客户没有受到不必要的安全性攻击下才能允许小程序即Applet的执行。 

1.2 Applet的危害和限制 

    Java可执行程序,在完成动画播放、交互操作、实时计算等各种功能的同时,某些恶意的Applet可能破坏客户机文件系统的信息,占用系统运行所需的资源(如内存),泄露用户的私有信息,或者以运行所在的客户机为跳板,攻击其它局域网内的其它操作系统。 

    由于个人PC的主板、硬盘上存有用户的数据信息和程序,Applet可能会造成的巨大的危害。严重的如修改Cmos或者硬盘引导区数据,将会对PC造成不可恢复的破坏。轻则如占用系统内存,导致内存用光而死机,重则窃取用户个人信息。因此,仍然有必要对Applet的运行进行限制以保证可靠的安全性。 

2 浏览器安全性机制 

    浏览器是Applet的安全性的底层,它的安全性依赖于Java语言的设计所提供的相关联的三层安全机制" title="安全机制">安全机制,以及上层浏览器自身对Applet访问能力控制。 

2.1 浏览器安全管理器" title="安全管理器">安全管理器机制 

    浏览器中的安全性访问控制是通过安全管理器SecurityManager机制实现的,安全管理器可以有选择地通过限制小程序的敏感操作来实施不同的安全性策略。 

    安全管理器的工作由一个类来完成,这个类是java.lang.securityManager类的子类。最初securityManager类被设计成抽象的,没有实现,而留给应用程序实现。应用程序需要编写自己的安全管理器类,这个类继承java.lang.securityManager    类,根据安全策略实现securityManager类中的抽象方法。 

    SecurityManager类中执行安全检查" title="安全检查">安全检查的方法如表1,它们覆盖了对系统各种资源的访问控制和对网络连接" title="网络连接">网络连接的控制。 

表1 SecurityManager类进行安全检查的方法 

操作对象 

验证方法 

Sockets 

CheckAccept(string host,int port) 

CheckConnect(string host,int port) 

CheckConnect(string host,int port,Object executionContext) 

CheckListen (int port) 

Threads 

CheckAccept(Thread thread) 

CheckAccept(ThreadGroup threadgroup) 

Class loader 

ChectCreatClassloader() 

System commands 

CheckExec(string command)  

… 

… 

2.2 安全管理器的实现方法 

    浏览器作为应用程序实现了自己的安全管理器后,就可以安装和使用这个安全管理器。一般在浏览器启动时安装,通过调用System.setsectyManager(new browsersecurityManager)来安装浏览器并进一步实现安全管理器browsersecurityManager。安全管理器在浏览器运行期间不能被修改和覆盖。 

    安装了安全管理器之后,浏览器执行的操作就要受到安全管理器的检查。当Java类库中各种方法执行某些敏感操作前,将调用上述这些以Check作为名字开头的方法。如: 

SecurityManager security=System.getsecurityManager(); 

If(security!=null) 

{Security.checkXXX(argument,……);} 

    如果该操作被允许,这些方法正常返回;若操作不被允许,就抛出安全性异常SecurityException。 

    SecurityManager类中还提供了一些非抽象的方法可以从虚拟机中得到当前方法的信息。这些信息可为我们实现不同的安全策略提供判断的依据。在实现安全检查方法时,安全性策略可以基于代码来进行动态调整。Socket类提供了这样的例子。  Socket类实现安全性策略可以动态调整以反映对调用它的代码的可信任性,以及调用调用者的代码的可信任性,直到方法执行链的开始。 

3 java安全性机制分析 

3.1 Java语言规范说明和编译器 

    语言和编译器组成了防护结构的第一层,确保源代码没有违反安全规则。Java语言在设计时,总结并限制了在C、C++中可能出现的不安全操作。Java不允许对内存的直接访问。它对分配的对象采用引用而不是指针。Java不能对指针进行数学操作,不能更改指针。Java中有真正的数组,对数组的访问遵循严格的边界检查。另外,编译时进行所有的类型转换以检查其合法性。但这些限制只能保证恶意的攻击不能躲过符合语言规范的编译器的检查。 

3.2 字节码校验和类装载器 

    字节码校验是第二安全层。可信任的Java编译器保证Java源代码不违反安全规则。但恶意的攻击者可能更改编译器,产生非法字节码。字节码校验防止改造的编译器产生的不符合安全规则的代码,检查字节码格式的正确性。通过检查,能保证以下属性:没有伪造指针;没有违反访问限制;以对象的本来访问对象;使用正确类型和数量的参数调用方法;没有栈溢出。安全层之三是类装入器。类装入器是抽象类java.fang.ClassLoader的子类的实例。类装载器负责从网上下载Applet,确保类在装入时不违反名字空间和访问限制。运行Java字节码的线程可以被看成一个被分成几个名字空间的类的集合。 

3.3 浏览器环境对Applet增加的限制 

    Java的安全理论模型整体非常严整,并且得到很好的实现,没有严重的概念性安全漏洞。但这种模式实现中的一些小错误也使得Java安全系统上存在漏洞,恶意的小程序仍然可能在客户系统上开展攻击性的任务。 

    为了防止下载小程序可能有的危害,浏览器环境需要对JavaApplet增加进一步的限制。这是最后一层安全机制。浏览器中对小程序的限制依靠前三层提供的安全保证。浏览器可以实现不同的安全性策略,以控制从网络上下载的APPLET访问本地系统关键资源的权限,以及控制能够创建的网络连接。这些限制可以防止Applet对系统资源的破坏和非法访问本地网络上的其它主机。 

4 java安全模型的设计 

4.1 Java安全模式分析 

    针对浏览器及Java语言的安全性机制,主要的安全模式有以下三种 

    (1)原始的沙盒模型 

    沙盒模型为从网上获得的Java可执行代码的运行提供一个严格受限的环境,它的本质是本地代码受到完全的信任,有完全的权限可以访问系统的关键资源。而从网上下载的代码只能访问受限制的沙盒中的少数资源。 

    (2)支持签名Applet的沙盒安全模式 

    从Jdki1.l或兼容版本开始提出签名小程序“Signed Applet”的概念,经过正确数字签名的Applet被认为是可信任的,和本地一样对待,签名Applet和它们的签名通过JAR格式传送,没有签名的Applet仍然和沙盒模型中一样处理,而签名Applet在浏览器中运行。 

    (3)新的安全模式 

    从JDKI.2或兼容版本开始出现一种新的更加灵活的安全模式,在这种安全模式下,SecurityManager类不再是一个抽象类,各个检查方法CheckXX()都已经实现。这些方法能够根据一个安全策略配置文件,进一步判断Java对安全敏感的操作是否允许进行。这些代码在运行时有不同的许可,并没有内置的信任代码的概念。模型如图1所示。 

 

4.2 实例设计与分析 

    根据浏览器的层次结构,以某网吧的代理服务器为例,对JavaApplet的安全性做如下设计。 

    (1)浏览器设计 

    为了使界面更加美观,浏览器用户界面的设计主要采用了JFC Swing类库中的组件。JFC(Java Foundation Class)是Sun Microsystem公司的图形用户界面开发包,Swing是其中的一个包,它包括基本组件,以及一个能使GUI(Graphical User Interfaces)独立于特定平台进行显示的框架。浏览器启动时安装安全管理器,浏览器所执行的操作就要受到安全管理器的检查。 

    (2)HTML文档的获取 

    当应用程序第一次创建某种协议的URL对象时,运行环境将为这种协议创建该协议的处理器。本例采用URLStreamHandlerFactory类作为URL的流协议处理器工厂,然后调用该实例的createURLstreamHandler(String Protocol)方法为特定的协议创建协议流处理器。 

    (3)Web页面的显示 

    经过HTML文档的获取工作,客户浏览器从服务器得到一个包含HTML文档的字符流。接着,浏览器可以对这个包含HTML文档的字符流进行分析处理,提取出需要处理的标记,然后解释这些标记的涵义,并按照一定的格式在屏幕上浏览器窗口中显示标记的内容。 

    (4)JavaApplet小程序的运行监控 

    在浏览器运行期问,用户可以对其进行监视和控制,在这里面采用图2所示新的安全模型,来实现不同的安全性策略,用以控制从网络上下载的Applet访问本地系统关键资源的权限,以及控制能够创建的网络连接。在安全策略文件中,语言和编译器确保源代码没有违反安全规则。字节码校验防止改造的编译器产生的不符合安全规则的代码,使用安全策略配置文件,并进一步判断Java对安全敏感的操作是否允许进行。安全策略配置文件可以根据不同的安全等级进行不同的设置,以满足不同用户的安全需要。 

5 主要结论 

    由于Internet自身的开放性和复杂性以及Java程序的可移植、分布等特点,导致了其安全问题的复杂性。本文通过对Java语言的类安全机制及实例的分析,主要结论有: 

    (1)浏览器能提供关于下载的Applet的可信任的信息。最简单的方法是系统检查代码的来源来判定它来自防火墙的内部或外部。另一种复杂的方法是在代码上加上公用密匙和密码信息(签名Applet),不仅能识别谁写了代码而且保证代码的完整性。 

    (2)应用程序可以使用自己的安全策略文件。安全策略文件定义了来自不同地点,不同签名的代码对特定资源的访问权限。这样安全性控制可以变得非常灵活、简单。 

    (3)浏览器作为应用程序,其安全性取决于虚拟机采用的安全模式和类库中SecuntyManager类的实现。这种编程方法对安全特别敏感,技术要求高,需要建立在对计算机安全性知识透彻了解的基础之上,否则可能出现大的安全性漏洞。 

    (4)虚拟机在应用新的安全模式后,应用程序所做的就是要配置安全策略文件。这种方法相对安全可靠。 

Java语言是面向对象的的卓越代表,它的移植性使其能够用于不同的操作系统和平台,同时也对传统的安全模型提出了挑战。本文只做了相关安全性的探讨,对于适应计算机不同平台的安全性和效率方面以及扩展HTML标记的处理能力,有待于进一步的研究。 

参考文献 

[1] 曾明,李建军.Internet访问管理与代理服务器.北京:人民邮电出版社,2000 

[2] Strebe M,Perkins C,吴焱等译.高效构筑与管理防火墙.北京:电子工业出版社,2000 

[3] Levis M,Berg M,关欣译.深入学习:Java多线程编程.北京:电子工业出版社,2000 

[4] 刘波,王克.Java程序设计.北京:清华大学出版社,1998 

[5] 王佑中.Web动态技术入门.北京:机械工业出版社,1997 

[6] 马小军,沈辉,季全芝.网络程序设计与Java语言,2002 

The Analysis of Java Security Based on Internet 

HE Hai-long Wang Jing-Ye 

(Academy of Armored Force Engineering PLA, Command and Management Department, 100072, Beijing) 

Abstract: This paper’ aim is to solve the security problems that the application of java based on Internet brings. Banding together the security mechanism of the bottom of browser, the java applet’ security hiberarchy is analyzed, and three kinds of java security models are bring up. Then an example is analyzed. At last, the conclusion and prospect are given. 

Keywords: internet  java  security 

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。