background image

密 扩 展 包 ) 、 JSSE(Java Secure Sockets Extension , Java   安 全 套 接 字 扩 展 包 ) 和
JAAS(Java Authentication and Authorization Service,Java 鉴别与授权服务)。它们
所提供的技术都为 Java 的安全性助了一臂之力。
  利用 Java 解决移动 agent 的安全问题
  Java 不仅提供了一套安全机制,而且由于移动 Agent 中的很多功能在 Java 中有直
接的对应实现,Java 具有丰富的支持对象串行化、支持远程方法调用以及映射的库。移动
Agent 状态的移动可以用 Java 对象的串行化表示;Agent 代码的移动用字节码的传递和
加载;Agent 运行上下文用方法的控制流表示。因此 Java 是开发移动 Agent 系统的优先
选择。本文利用 Java 所提供的安全模型,提出了一些解决移动 Agent 系统安全问题的措
施。
  1、利用 Java 的字节码验证器保证 Agent 的正确性
  字节代码验证器保证只有合法的代码才可以执行,“

合法 的具体含义如下:

  · JVM 对类文件中的代码作了严格的格式和结构限制;
  · 验证器也核查是否违反内存管理规定、堆栈下溢或溢出、以及非法数据类型的丢弃。
  字节码验证器可以检测 Agent 的程序代码是否被破坏,然后采取相应的措施。但是
由于 Agent 本身需要和服务器交换数据,这对于数据窃取和篡改的检测来说是一个难点。
可以使原始状态数据只能读取,已查询到的结果加密起来,只对某台特定主机可见,而
其它主机不能访问。并且可以建立可信主机列表来让 Agent 避免到不能保证安全的运行
环境上运行,但这要求提供评价各主机可信度的方法,同时这也是同 Agent 的移动性相
抵触的。
  2、利用 Java 的类装载器、命名空间和线程组来实现动态 agent 的隔离
  当执行一个 Java 程序时,该程序可能需要从网络上装载一到多个类。如果传送过来
的代码顺利通过了字节码检验器的检查,并被确认为完全正确,那么下一道安全防线就
是 Java 类装载器。
  所有 Java 类都是通过一个或多个类装载器实现载入的。类装载器可以程序化地设置
其载入类的权限。JVM 对每个它所载入的类都记下了是用哪种类载入程序装入的,当一个
被载入的程序引用另一个类时,虚拟机要求用同一个类载入程序装入被引入的类。
  因为 JVM 用这种方法装载类,在默认条件下某个类只能看见用同一个类载入程序装
入的其它类。Java 体系结构用这种方法在单个 Java 应用中建立多个命名空间。命名空间
是一些由特定的类载入程序装入的类的独一无二的名字集合。JVM 为每个类载入程序维护
一个命名空间,所有由该类载入程序装入的类的名字组成了这个命名空间。
  Java 应用能使多个类载入程序对象实例化,不管它是否来自同一个类。因此它能根
据需要建立多个类载入程序对象。用不同的类载入程序装入的类在不同的命名空间中,并
且除非明确许可外都不能互相访问。因此在开发 Agent 系统时,可以把从不同来源载入
的类隔离到不同的命名空间中。这样一个 Agent 不可能用它自己的类冒名顶替另一
Agent 的类,可以防止破坏性代码访问正常的代码,从而保证了 Agent 之间的安全。
  每当一个新 Agent 到达后,就为其建立一个线程组。Agent 在执行中可能会派生一
些新线程,或者有多个 Agent 并发执行某任务,为安全需要,这些新线程必需是属于该
Agent 线程组的。这样,任何执行该 Agent 的线程其组号是相同的。那么,只要为这个线
程组分配权限,即就为该 Agent 分配了权限,就实现了 Agent 与主机的隔离。
  3、利用 Java 网络软件包实现 agent 的传输与验证
  Java 网络软件包提供了处理各种网络协议(如 FTP  

、 HTTP 和 Telnet 等)的用户接口,

其安全保障是用户在网络接口级的最前沿防线。用户可以按自己的需要来设置网络访问权
限。这些权限级别有: