摘 要 移动Agent技术已成为计算机网络和分布式系统最具活力的发展方向,但在复杂的网络环境下,移动Agent对安全性提出了非凡的要求。本文介绍了移动Agent所带来的安全隐患、讨论了Java语言的安全机制,最后给出了用Java安全机制解决移动Agent安全问题的方法。虽然Java的安全机制本身存在一些不完善的地方,但随着其进一步改进,Java的安全机制将为移动Agent的应用提供更有力的保障。
要害词 移动Agent, Java,安全
引言
随着Internet覆盖范围的日益扩大,有价值的信息资源在不断的增长,对网络的高效性、智能性、主动性和灵活性提出了更多的要求,对于如何捆绑分布异构环境中信息源的问题变得越来越突出。在网络分布式系统的实际应用中,一般采用Server/Client结构,在这种结构中,运行于Server和Client上进程间的通信是通过信息传送和远程过程调用(RPC)实现的,一般是同步实现的,即Client向服务器发出请求后就挂起本地进程而等待结果,远地Server按要求执行完所要求的数据处理后返回结果,当本地进程得到结果后就恢复运行。移动agent是这些概念的延伸,它是一个由Client向Server发送的一个程序,包括了代码、数据和执行逻辑。移动agent不必把结果返还给客户机,它可以迁移到其它服务器,把信息传回给源客户机,也可以通过适当安排迁移回源客户机。因此,与简单的过程调用相比,移动agent具有更强的自治性。它很好地解决了网络通信的瓶颈问题,增加了任务处理的并行程度,增强了系统的灵活性、可扩充性及容错能力。因此移动agent己经逐渐应用到各种分布式网络中,相信移动agent在未来的军事信息安全、企业信息传输安全保密方面会有好的发展前景。
移动Agent技术应用范围日益广泛,随之而来的系统安全性问题也就日益突出。本文对移动Agent系统中的主要安全威胁和Java语言的安全机制做了细致的分析,提出了利用java安全机制解决移动Agent安全问题的方法。
移动agent 的安全问题
虽然移动Agent技术具有很多优点,但是一个严重的问题——安全却阻碍了它的应用。移动Agent可以把多台分布的计算机连接起来,构成一个计算基础设施,在其上可同时运行属于不同用户而且是潜在的不可信任用户的分布式应用程序。这些计算机分别属于不同的组织,有各自不同的用途,通过公共通信设施进行通信。在这样的环境下,存在着各种可能的不安全因素以及安全攻击。例如,未被授权的用户可以监听网络线路,在移动Agent 传输过程中窃听甚至修改其代码或数据;当 Agent 运行时,可能会攻击当地的主机,故意占用过多资源,或者利用系统中的漏洞取得特权,进而攻击主机或其它Agent 等等。归纳为如下几类:
第一类安全问题主要是恶意的或者是有错误的 Agent 利用主机上安全设施的不足或缺陷发起针对主机的攻击,主要有伪装、拒绝服务和未授权访问。
第二类问题是指 Agent 可能会利用系统的缺陷对在主机上运行的其它Agent 进行攻击,包括伪装、未授权访问、拒绝服务和抵赖。其实这个问题可以看成是第一类问题的子问题,首先,因为主机上的Agent 支持环境可能就包含一些 Agent,如负责通信的Agent,治理 Agent 名字空间的Agent 等,对这类Agent 的攻击等于是对系统进行攻击。其次,可以把主机上运行的Agent 看成是主机的一部分资源,Agent 对其它Agent 进行攻击也就是对主机的攻击。再次,从目前已有的安全措施来看,解决这两类问题所使用的技术十分类似。
第三类,在移动 Agent 环境下,不仅可能会有恶意的 Agent,而且也会存在恶意的主机对 Agent 进行破坏。由于 Agent发送到主机后要在其上运行,它的代码和数据以及运行时刻的通信对主机来说都是暴露无疑的,可以说主机为刀俎,Agent 为鱼肉,主机可以对 Agent 采取任何动作,所以保护 Agent 是所有问题中最困难的。也正因如此,才吸引了许多人花费大量的精力进行研究。
第四类,Agent 可以在一个站点上只消耗少量的资源,其行为也完全符合站点的安全策略,但它却暗中以隐蔽的方式破坏着网络的可用性,进而会使一些主机瘫痪。如恶意移动Agent不断地复制自身,产生大最的移动Agent,并让它们在网络上往返流动,从而大量染耗系统的通信与计算资很,并可能最终导致运行环境的瘫痪。对这类攻击的防治也比较困难,从单个主机着手显然不能解决问题,必须从网络整体考虑。当网络从属于一个治理者时,网络上的各个主机之间比较信任,找到一个统一的方法相对来说还轻易一些,否则,在像 Internet 这样无中心、无权威的网络上,困难就会大得多。
Java语言的安全机制
移动Agent需要在不同的主机上迁移,这样异质的环境下,移动Agent需要有可移植性,能在不同的主机上执行,因此,像JAVA这样的语言具有平台无关性、动态类装载、多线程和对象序列化等特点,使用相关的Java安全机制解决移动Agent的安全问题便是最佳的选择。
在Java中能够安全地运行通过Internet传递的各种Applet,正因为如此,Java不像别的语言和系统,在事后才想到要实现安全性,或者作为一种对应措施,插入一些安全性组件,安全机制是Java技术的一个不可分割的组成部分。
1、Java沙箱 (早期安全机制)
Java安全模式的重点在于保护最终用户不受从网上下载的破坏性程序的干扰。为达到这个目的,Java提供了一个专用的运行Java程序的沙箱。 安全模型的要害在于沙箱(sandbox)的概念。其思想是,若在主机上答应驻留一个程序,就必须为该程序提供一个“玩耍”的场所(即运行环境),但是一般情况下,必须保证程序限制在沙箱中,Java程序在它的沙箱内可做任何事情,但出此边界就不能有任何操作。例如,未经确认的Java Applet的沙箱禁止许多操作,其中包括: