0 引言
随着企业的发展壮大和跨国化,对安全性的要求也约来越高,各机构中安全设备也在不断增多。另外,随着嵌入式系统在安全领域的应用价值的不断提升,其也被广泛使用于各安全设备如防火墙、入侵检测系统、防病毒网关、邮件网关、VPN网关[1]的设计中。然而,网络中看似部署了各种 安全设备,其实并不安全。由于嵌入式系统本身的特点――基于不同硬件和软件平台的,这就给进行统一管理和控制带来了困难,在实际的使用过程中并不能完全发 挥各设备实际功能,并且管理员为了配置维护各安全设备需要在不同的空间和时间来完成,不但要熟悉不同的平台,而且工作量相当巨大,同时随着硬件和软件的升级,原来的控制程序都需要进行相应的升级调整,这也给安全设备的管理带来的不变,更重要的是这样很可能会产生新的安全漏洞。所以本文的目的是使它们成为一 个基于策略的[2]并可以进行远程集中控制的安全系统,以完全发挥各设备的安全效能,减少管理及维护的工作量。本文设计的控制系统是由以虚拟机为核心的系统与主控机组成。在确定了系统整体模型的前提下,进行了各任务模块间的逻辑结构设计。本系统构建了适合于嵌入式系统的64位汇编指 令集(便于扩展),并设计了相应的汇编系统,将指令生成通用代码,并且构建跨平台虚拟机,对通用代码进行解释执行,而且设计出虚拟机的机器级调试器,对指令进行调试跟踪。
1 系统总体设计
本系统是设计一个目标代码级的跨平台系统,底层是进行可执行代码解释的系统。关键模块包括:运行通用代码的虚拟机,进行程序设计的调试器和进行程序编译的汇编器。它们是整个系统设计的核心,一切设计围绕着它们来进行。系统设计的项目网络图如图1所示。

图1 系统设计网络图
Fig.1 Network diagram of the system design
系统设计的过程可以按照如下步骤进行[2]:首先,必须建立一套系统基本规则,也就是确定执行环境(是基于堆栈,还是基于寄 存器)和虚拟机将使用什么样的地址空间,还必须创建一个指令集。然后可以进行虚拟机或者汇编器的设计[3]。但由于虚拟机的设计工 作相对于汇编器的设计更加复杂,另外,先设计好虚拟机就可以有的放矢地进行汇编器的设计,故本系统的设计过程中是先进行虚拟机的设计。在设计过程中,可以手工建立一个字节码可执行文件,分步进行虚拟机设计,对其中的字码进行解释,这种设计方式更加简单。在虚拟机设计完成后,可以进行汇编器的设计,由于这时 已经用手工进行过字节码可执行文件的编写,汇编器的设计相对简单。而对于调试器的设计可以在虚拟机完成后进行,这时虚拟机已经可以正确地进行程序的解释工作,调试器只要能将运行过程正确的显示即可。
此系统的应用程序的编写和汇编在主控机完成,再通过网口将字节码可执行文件(通用代码)下载到运行虚拟机的底层控制系统执行,此外可以在主控机下进 行安全管理策略的编写,并且可以和运行虚拟机的安全设备进行进一步的数据交互,使得主控机可以在远端控制各底层控制系统来管理相关安全设备的运行。主控机程序[4]包括应用的监控交互程序、代码编译环境(汇编器)及其它配套程序,底层控制模块则包括满足系统跨平台要求的虚拟机系统、进行程序调试的调试器系统,虚拟机程序更新模块和安全策略执行模块。在进行程序开发时,可以通过在主控机运行虚拟机系统和调试器系统来进行程序开发,开发 完成后,将代码进行下载并运行。但对于不同硬软件环境,提供的功能并不一定相同,故最好在宿主机上完成程序编制工作。模型图如图2所示。

图2 模型图
Fig. 2 Illustration of model
2 虚拟机的实现
虚拟机是对保存在字节码可执行文件(byte CODe executable)里的指令进行解释执行的程序。字节码可执行文件是一种二进制文件,包括一些字节长度的机器指令(即字节码),虚拟机这些字节码指令的作用。虚拟机将从二级存储器(即磁盘驱动器)把字节码文件里的机器指令加载到它已经开辟出来的地址空间里,然后开始执行它们。虚拟机的生命期[4]可 以划分为五个阶段,这些阶段是顺序发生的,它们分别是:建立出错日志、处理命令行、构造环境、字节码验证、执行指令。
虚拟机创建一个出错日志开始进入程序执行阶段,它然后对虚拟机参数进行处理,接着进入第3阶段,即根据给出的参数建立一个可执行环境并初始化。第3 阶段完成的动作包括:初始化虚拟机的寄存器、构造一个人工地址空间、把字节码可执行文件读入这个人工地址空间等。然后虚拟机将开始对字节码进行验证,这时进入程序执行的第4阶段,首先,系统将把字节码可执行文件中以降序格式存储着的数值加载到内存中,并转换为宿主机的字节顺序,接着,虚拟机将检查第一条字节码指令中的各个元素是否合法有效。验证器会检查指令的操作码以确认它对应于一条真实的指令,再检查指令的操作数是否合乎规定。当字节码指令全都通过验证 器的检查之后,执行阶段就开始了。源文件根据虚拟机生命周期各阶段划分情况可分为几部分,如图3所示。

图3 虚拟机生命周期的各个阶段
Fig.3 Stages of the virtual machine's life cycle
鉴于篇幅,本文不再给出汇编语言的设计以及调试器、汇编器的实现过程。
3 试验结果
为了验证此虚拟机系统的运行情况,本文分别针对两种硬件和软件平台对虚拟机进行移植(如表2所示),并使主控机能够与运行虚拟机的安全设备进行交互,完成通过虚拟机来统一控制各安全设备的目的。
平台微处理器嵌入式操作系统FLASHRAM主要外设
平台一摩托罗拉MPC852TLinux2.4.42M16M一个RS232接口,两个以太网接口
平台二三星S3C4510μClinux2M16M一个RS232接口,两个以太网接口
表2 两种试验平台

由于系统是运行在嵌入式Linux操作系统平台上,它本身提供了多种功能,包括文件系统ROMFS、WEB服务器等多种服务,并且提供相应的接口函 数,极大的方便了虚拟机的扩展中断的实现。并且,由于操作系统将多种服务集成,比在单片机上逐个功能分别实现的方式更加稳定,执行更加有效率。虚拟机本身是用标准C来进行实现的,所以在嵌入式Linux下移植很方便,大部分的中断可能通过系统本身提供的函数来进行实现。故改动的主要部分是linux.c和 linuxint.c,这两个文件中分别规定了数据类型、转换函数,以及中断服务函数。对于linux.c要规定各种不同数据类型的定义,接着是一些数据 类型转换函数,这里需要特别注意的是字节在内存中的存放顺序,虚拟机是以降序的方式来排列数据的。在平台一中,Power PC微处理器在标准Linux下是以降序来排列的,这和虚拟机的排序方式一致,故而不需要转换。而在平台二中,ARM微处理器在μClinux下是以升序 来进行排列,所以要进行升降序的转换,还要做的工作是数据的输出格式的重排,以及一些内存、系统函数的定义等。而对于linuxint.c文件主要处理虚 拟机中断,它调用操作系统提供的系统函数来提供文件服务、进程管理、网络服务等操作。
移植完毕后,在主控台进行应用程序的编写,然后通过汇编器进行汇编生成虚拟机可执行序列文件,然后通过TFTP分别把其下载到两个平台上并加以执 行。通过此应用程序和主控台进行交互,主控台可以统一控制并管理两个平台上的安全设备的运行,如打开关闭某项安全功能,修改防火墙、http或email 网关的过滤规则,实施新的安全策略等等。下图是在平台一上的执行效果图。
4结论
通过本次试验,虚拟机在两个平台上都取得了良好的使用效果,并且通过主控机与虚拟机系统的实时交互,完成了跨平台的安全设备的统一管理。同时该虚拟机也可以在windows平台下运行,对于不习惯UNIX的管理员可以在windows下编写和汇编应用程序,再下载到不同的平台下运行,从而提高了管理 效率。此外,本文在安全管理领域的一个探索,而多种系统之间的兼容和互联也是发展的必然趋势,因此虚拟机系统在工业控制等其它领域也具有良好的研究价值和应用前景。
本文创新点:本文提出了一种跨平台、可重用、可进行远程管理、融合防火墙和入侵检测技术的嵌入式Linux安全网关解决 方案。在于消除了嵌入式软硬件平台的异构性,提高控制效率。
参考文献
[1] 李会,邬迪 <




