基于双网物理隔离的信息安全系统设计研究
2018-09-11朱琪
朱 琪
(阜阳幼儿师范高等专科学校 科学与健康系 ,安徽 阜阳 236015)
目前,许多企业和政府机构都建立了自己的内部网络作为整个部门的信息系统骨干。全球信息和网络安全问题日益突出,大多数网络安全机制,包括防火墙、入侵检测、漏洞扫描、CA、VPN、反病毒等都不能有效地解决网络安全问题[1]。由于缺乏有效的解决方案,大多数用户都采用将内部网络与外部公共网络断开以保护私有信息。然而,这种方法也为信息交换带来了不便,不利于发挥互联网信息共享的功能。物理隔离技术是为了确保私有网络的安全性,并实现私有网络和公共网络之间的信息交换[2]。内部网络和外部网络之间的物理隔离能够真正保证内部网络信息的安全。此外,物理隔离为内部网络划定了清晰安全的边界,增强了网络的可控性,便于内部管理。鉴于目前严峻的网络安全形势以及物理隔离技术的优势,国家保密部门发布《国家计算机信息系统网络保密规定》,明确表示:涉及国家秘密的计算机信息系统不应直接或间接地连接到互联网或其他公共信息网络[3]。根据这一规定,政府和一些企业必须在私有网络和公共网络之间实现物理隔离。目前,物理隔离技术已经成为电子政务、电子商务和国家重要网络中必须采用的一项技术。因此,设计高性能、高可靠性物理隔离技术的网络隔离器对于改善网络安全状况和保护网络信息安全具有重要意义。
1 系统框架
在物理隔离系统中,内部网络不应该直接或间接地连接到外部公共网络(一般是指互联网)。为了实现不同安全级别网络之间的数据交换,隔离系统需要中断内部网络与外部网络的连接,取消对TCP/IP协议的支持,不依赖于操作系统,并采取访问控制、认证、内容过滤等安全检查机制。基于双网物理隔离的需求,本文设计了物理网络隔离系统的框架,以确保内部网络信息的安全。双网物理隔离系统的框架如图1所示。
图1 双网物理隔离系统框架设计
隔离器需要实现物理隔离功能,因此要将网络通信协议的每一层断开。TCP/IP参考模型是目前广泛使用的网络通信协议族,由四个协议层组成:数据链路层、网络层、传输层和应用层。在实现协议层的断开之前,需要将物理链路断开。
实现物理链路的断开:当内部网络需要传输数据时,外部网络与双网物理隔离系统的物理链路就会断开,而内部网络则会保持与隔离系统的连接,内部网络将数据传输到隔离系统进行处理,然后内部网络与隔离系统的物理链路就会断开,而外部网络与隔离系统进行连接,此时隔离系统将内部网络的数据传输到外部网络。
实现TCP/IP协议栈的断开:TCP/IP协议栈的数据链路层、网络层、传输层以及应用层断开实质上就是数据包封装的逆过程。一个包含数据链路层、网络层、传输层和应用层头部的数据包格式如图2所示。
以太网头部IP头部TCP头部应用层头部原始数据以太网尾部
图2数据包格式
当数据包从内部(或外部)网络进入双网物理隔离系统时,隔离系统会先对数据包进行TCP/IP协议栈的断开,即将图2数据包中以太网头部尾部、IP头部、TCP头部以及应用层头部剥离。剩下的原始数据经过隔离器处理后,又会被重新封装并转发到外部(或内部)网络。这样的操作可以预防针对协议层的网络攻击,从而保护了信息的安全。
为了保证双网物理隔离系统的数据传输的速度,本系统使用PCIe(Peripheral Component Interconnect Express)总线[4]来连接系统的各个部分。PCIe是一种高速串行计算机扩展总线标准,是旧标准PCI总线的扩展版本。与旧标准相比,PCIe具有较高的最大系统总线吞吐量、较小的管脚数、更好的总线设备扩展性能、更详细的错误检测和报告机制(Advanced Error Reporting,AER[5]),并支持本地热插拔功能。本双网物理隔离系统采用Linux操作系统,其原因在于Linux系统具有以下的优势:Linux内核实现了完备且详细的网络协议栈;开源的特性为Linux提供了大量的软件资源;Linux的驱动程序易于编写和修改;Linux运行效率高,对计算机的要求低;支持多任务、多用户。
2 双网物理隔离系统的硬件设计
硬件架构为双网物理隔离系统提供了数据传输的条件,也是保证信息安全、高效的基础。硬件系统需要设置有较大的缓存来,而且需要支持高速的数据传输,以确保网络隔离系统的性能。基于隔离系统的需求,本系统选择以下的硬件构成主要的硬件系统:
● 逻辑控制芯片:采用FPGA芯片,型号为Intel Cyclone 10系列10CL016YU484C8G;
● 缓存芯片:采用由Integrated Device Technology公司生产的SRAM,型号是IDT71V416S/L;
● 桥接芯片:采用由PLX公司生产的PCIe芯片,型号是PEX 8696。
双网物理隔离系统的硬件架构如图3所示。
图3系统硬件架构
3 双网物理隔离系统的软件设计
3.1 驱动程序设计
在Linux环境下编写驱动程序的其中一种方法是:将驱动程序作为内核模块来实现。这种方法不需要重新编译内核来添加新的驱动程序。下面将给出动程序模块的主要实现过程。
3.1.1 加载/卸载驱动程序模块 加载模块的主要代码如下所示:
static int my_driver_init(void)
{ return 0;}
module_init(my_driver_init);
卸载模块的主要代码如下所示:
static void my_driver_exit(void)
{ return;}
module_exit(my_driver _exit);
3.1.2 注册设备 Linux的设备文件通常保存在/dev文件夹,可以通过将参数写入设备文件将参数传递给相应的模块。设备文件有两种:字符文件和块文件。字符文件是非缓冲的,而块文件是缓冲的。字符文件允许逐字读写数据,而块文件只允许写入整个数据块。Linux系统有一种方法可以通过主设备号来识别设备文件,主设备号用于识别服务于设备文件或一组设备的模块,以及用于识别主设备号指定的一组设备中的特定设备的次设备号。在驱动程序代码中,可以将这些数字定义为常量,也可以动态分配。实现注册字符设备的函数如下:
int register_chrdev (unsigned int major,
const char *name,
const struct fops);
file_operations *
3.1.3 指定设备名称 注册设备需要指定设备的名称和主要编号,然后将file_operations结构与设备关联。本系统所使用的Linux内核版本是2.6.32,其file_operations的结构定义如下:
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
...... };
3.2 数据包协议层剥离程序设计
3.2.1 抓包程序设计 本系统使用数据包捕获函数库libpcap进行抓包程序的设计,该函数库也可以用于数据包过滤、协议分析等场景。抓包程序的主要步骤如下所示:
● 绑定网络设备:抓包的第一步是指定相关的硬件设备,即绑定网卡,可以使用libpcap函数库中的函数pcap_lookupdev()实现;
● 打开网络设备:绑定设备后,需要打开网络设备,创建一个嗅探会话,使用函数pcap_open_live()实现;
由于缺少科学的激励考核机制,忽视人的核心利益和心理需要,严重影响员工的工作积极性,忽视人的潜能释放和长远发展[2]。在用人方面缺乏科学的绩效评价机制,提升往往取决于上司的个人好恶,使客观、公平、公正的选人原则难以体现,缺乏与绩效考核挂钩的收入分配机制。长此以往,员工工作情绪低落,满足感缺失,最终导致大量的人才流失。
● 设置过滤器:当嗅探会话建立后,先使用函数pcap_compile()编译过滤器,然后使用pcap_setfilter()设置过滤器;
● 捕获数据包:本系统选择函数pcap_loop()进行抓包。
3.2.2 数据包剥离和封装程序设计 捕获数据包后就可以对数据包进行协议层头部的剥离操作,首先需要先定义协议层头部的数据结构,然后才能对它们进行类型转换。数据链路层采用以太网协议,其头部结构包含了协议类型、源MAC地址和目的MAC地址;网络层采用IP协议,主要结构包括了版本号、源IP地址、目的IP地址等;传输层采用传输控制协议(TCP),主要的结构有源端口号、目的端口号、序列号、检验码等等。实现类型转换的主要代码如下所示:
const struct ethernet_header *ether_header;
const struct ip_header *ip_header;
const struct tcp_header *tcp_header;
const char *payload;
ether_header = (struct ethernet_header*)(packet);
ip_header = (struct ip_header *)(packet + 14);
ipsize = IP_HL(ip)*4;
printf(“error ”);
return;}
tcp_header = (struct tcp_header *)(packet + 14 + ipsize);
tcpsize = TH_OFF(tcp)*4;
if (tcpsize < 20) {
printf(“error ”);
return;}
payload = (u_char *)(packet + 14 + size_ip + tcpsize);
以数据包从外部网络进入内部网络为例,数据包协议层的剥离和重新封装过程如图4所示。
图4 数据包协议层剥离和封装过程
4 双网物理隔离系统性能评估
a.发送前测试文本 b. 接收到的文本
图6对比实验拓扑图7数据传输效率对比结果
安全性和高效性是双网物理隔离系统主要的两个性能需求。由于篇幅有限,本小节仅对高效性的评估结果进行阐述。首先,当数据包从外部网络(或内部网络)经过物理隔离系统到达内部网络(或外部网络)时,需要对数据包的协议层头部进行剥离和封装(如图4),这一操作可能会破坏数据包中原始数据的完整性。对此,我们在内部网络随机生成一个测试文本文件,并将该测试文件通过隔离系统发送到外部网络,评估结果如图5所示。图5a是发送前的文本,图5b则是接收到的文本,对比结果图可知,本文的隔离系统能够保证数据包的完整性。
接下来利用对比实验对隔离系统的数据传输效率进行评估,比较内、外网络直接相连接(如图6a所示)以及内、外网络通过本隔离系统进行连接(如图6b所示)的平均时延,实验进行50秒,时延的采样周期是1秒,评估结果如图7所示。从图7可以看出,在内外网之间引入本隔离系统会带来额外的平均时延。但是由于平均时延的单位是毫秒,而且引入的时延并不多,因此本隔离系统并不会对数据传输带来明显的影响。
5 总结
本文设计了基于信息安全的双网物理隔离系统,实现内部网络与外部网络的物理隔离,保护了内部网络的信息安全。但是,本文仅仅完成了物理隔离系统的框架设计,未来的研究工作主要对以下几个方面进行完善:增加常用协议的剥离和封装功能,加入病毒、恶意软件的检测和防御模块等等。