一个网络要保护起来分3个阶段:事前、事中和事后。事前就是发现网络已经潜在的安全问题或者是潜在的弱点、隐患并弥补,常用的产品是扫描系统;事中是对正在运行的系统防止黑客攻击,包括用得最多、最普遍、最成熟的是防火墙和入侵检测技术;而事后的取证,就必须用到审计系统。网络内容审计能够帮助我们对网络进行动态实时监控,可通过寻找入侵和违规行为,记录网络上发生的一切,为用户提供取证手段。
目前,公司内部员工对机密文件、敏感信息的窃取和泄漏,以及在工作时间,利用公司网络资源进行与工作无关的活动,严重损害了公司的利益。随着我国电子政务系统的实施和建设,政府、企事业单位对安全提出了更高的要求,本文对基于协议还原的内容审计做了较深入的探讨。
2 网络内容审计
内容审计记录用户使用计算机网络资源访问的所有资源和所有访问过程。完整地记录审计追踪数据是事故后调查取证的基础。通过对一些重要的事件进行记录,从而在系统发现错误或受到攻击时能定位错误和找到攻击成功的原因。审计记录应具有防止攻击删除和修改的措施。在CC准则(信息技术安全评估通用准则2.0版)中,对信息系统安全审计的功能有一个完整的定义:信息系统安全审计主要指对与安全有关的活动的相关信息进行识别、记录、存储和分析;审计记录的结果用于检查网络上发生了哪些与安全有关的活动,谁(哪个用户)对这个活动负责,主要功能包括:安全审计自动响应、安全审计数据生成、安全审计分析、安全审计浏览、安全审计事件选择、安全审计事件存储等。基于网络内容审计的系统,其原始审计数据来自于网络上的数据包。
2.1 网络内容审计的系统模型
根据内容审计的功能要求,设计了一个相应的网络内容审计模型所示,主要是分析审计网络用户的活动。
(1)原始审计数据是指用户在网络中进行活动的所有数据,通常是网络数据包。获得这些数据是进行网络审计的基础。
(2)会话重建
网络行为一般都不是孤立的,通常是由多个动作形成的一个有序的活动。会话重建是在原始审计数据的基础上,对某一个网络活动进行重建,恢复其本来面目,并重现。如常见FTP网络文件访问行为,一般都包含了口令认证、上传或下载文件等动作所构成的一个完整网络文件访问活动。不能仅从单个数据包或单个操作动作中审计用户的行为,因为这样会忽视各种事件之间的关联性。
(3)根据事先定义的违规行为集,可以有效地审计会话中的违规行为。
(4)一旦发现违规行为,记录违规行为,作为今后事故追踪、犯罪取证的重要证据。
2.3 会话重建及协议还原设计
基于上述模型,给出了审计系统的主要部分——会话重建及协议还原的设计方案,其逻辑结构所示。
截包引擎用专门的网络探针技术来替代传统的网络嗅探器。采集到的数据包在网络探针上只做简单的IP重组,并通过SOCket技术传递到协议还原器。这样的网络探针功能相对专一,具有截包性能高、丢包率低的特点。在完整的审计记录和高性能的基础上,多协议的分析还原成为可能。
3关键技术分析
3.1 高效截包技术
Libcalp是网络截包最通用的函数库,适合于多种操作系统平台。目前有许多著名的截包分析程序都建立在Libpcap的基础上,如tcpdump,ethereal,snort等。但在高速的网络中,特别是当应用程序需要截取大量完整的网络数据时,以Libcap为架构的截包技术往往是不可行的。这是因为截包和包分析,特别是包分析消耗大量的CPU周期,可能导致数据包丢失。CPU周期也称为机器周期。通常用内存中读取一个指令字的最短时间来规定CPU周期。一个CPU周期时间又包含有若干个时钟周期。
这种基于网络数据包的审计系统,如果丢包率太高,后面的会话重建、协议分析将无法进行,系统将失去意义。所以,是否能高效截取所有数据包是整个审计的基石。采用Linux作为截包的操作系统,其内核是可以定制、修改的。
在Linux一2.4.x以后的版本中,Libpcap是通过内核中pf-packet模块实现其截包和包过滤功能的。数据包直接从内核接收队列获取,并传递到用户空间。为了提高截包性能,包过滤采用BPF'(Berkeley Packet Filter,伯克利包过滤器),他是一种用于Unix内核的包过滤机制,具有非常高的性能。为了减少数据从内核到用户空间的拷贝花销,必须在内核中过滤掉不进行审计的数据包,减少数据拷贝,节省的CPU周期可以留给数据包分析使用。完成一次系统调用或从内核拷贝数据到用户空间(通常是应用程序的缓存)的系统花销是很大的。使用Libpcap-mmap替代Libpcap作为截包库。Libpcap-mmap是Libpcap的特殊版本,采用mmap系统调用,将数据从内核传递给用户空间。文献[1]指出采用Libpcap-mmap比标准的Libpcap在截包性能上有所提高。
另一个可能造成丢包的原因是,应用层对数据包分析的周期过长。这个周期指的是,数据包从内核空间拷贝到用户空间后,应用层对其进行分析、操作等一系列动作所用的CPI.『周期。因此,应该尽量缩短数据包在应用层的处理周期。在网络流量突然增大的情况下,由于在内核中,例如Linux一2.4.20缓存数据包的空间最大是6 5 5 3 5*2 B,数据包分析周期过长,应用程序不能快速读取内核的数据包队列,致使内核缓存不够,内核只能丢弃新到的数据包。鉴于网络流量的阵发性,所以增大Linux内核pf-packet模块的接收缓存,可以避免这种丢包现象。这也是解决丢包的一种方法。
3.2会话重建技术
会话重建是审计系统中的重要环节。分析数据包的特征,并基于会话对数据包进行重组,去除协商、应答、重传、包头等网络信息,以获取一条基于完整会话的记录。基于Libpcap的截包应用程序都是截获原始的网络数据包。因此,基于Libcap的网络审计系统,必须进行IP碎片重组、TCP数据流的重组。对此,模拟了TCP/IP,协议栈,实现会话重建。会话重建可以有多种并行处理办法:
(1)对LAN的主机进行分段处理
这种方法均衡性很差,因为各主机的流量很难预测,这会导致有些线程忙碌,有些很空闲,多线程的效果一般。
(2)真正负载均衡
数据包均衡分发到各个TCP重组线程,但这种方法涉及到共享数据的同步访问,需要互斥机制,这样就增加了许多系统花销,还会带来共享资源的等待问题,这些都'影响了系统的性能,实现起来也很复杂。
(3)会话处理均衡
同一会话的数据交给同一线程处理,这样多个线程无需同步,而且负载均衡的效果比方法(1)有明显的改善,结合了上述两种方案的优点。
在系统实现中,采用会话处理均衡的方法。经过IP重组的数据包,传给数据分流器,同一会话的数据包分流到不同的TCP重组引擎进行处理,提高了会话重建的能力。每个TCP重组引擎都有一个自己的数据包缓冲区,存放IP包。缓冲区采用静态环形队列,避免了数据同步,且减少了内存的分配和释放的系统开销,从而提高了整体性能,这是提高并发处理性能的关键技术之一。
此外,在模拟TCP/IP协议栈的过程中,使用高效的查找算法--哈希算法也是高效实现会话重建的关键之一。
在TCP流的重组中,定义了一个四元组<源地址,源端口,目的地址,目的端口>。以这个四元组来构造会话文件,文件名为:目的地址.目的端口一源地址.源端口,例如文件名:
1 91.1 92.1 93.1 94.025 6 6一01 5.01 6.01 7.01 8.011 80
存储从主机1 91.1 92.1 93.1 94端口2566传送到主机1 5.1 6.1 7.1 8端口11 80的会话内容。 .
把数据流存为会话文件有许多好处:恢复到真实的数据流,可以作为原始数据保留,用于违规审计及事后取证等;在需要会话重现的时候,再进行读取分析;从文件名可以很直观得到通信双方的标识(主机地址)及采用的协议(端口号);非常便于运用多线程技术进行分析。
3.3 多线程协议还原技术
在应用程序的开发过程中,使用多线程技术有很多优点,多个任务并发执行,可以改善这个系统的性能。
(1)线程的系统开销比较小。
(2)同一进程下的线程之间共享数据空间。
(3)在多处理器计算机上实现多线程时,线程可以并行工作,提高程序执行效率。例如,使用多线程技术的网络蚂蚁(Netants)是目前最常用的下载工具之一,使用多线程技术的grep比单线程的grep要快上几倍。
在应用层的网络协议中,不同的协议通常绑定特定的端口号。根据端口号,可以得到对应的应用层协议,依据协议的RFC文档,就可以对多个会话文件并发处理,进行协议还原。系统中采用负载均衡算法。每个协议还原引擎都有一个BUSY/IDLE状态位,初始状态为IDLE,由还原程序主模块进行任务分发,把会话文件池中的文件分给IDI。E线程,并将该线程状态置为BUSY。当该线程完成还原任务后,将状态置为ID[。E。这样,多个线程可以同时进行协议还原,生成协议文件。这种算法简单而且有效。利用这种算法,结合多线程技术,实现了}ITTP,FTP,'I'EI.,NE2',SMTP,POP3等协议的分析还原。
4 结 语
当前,基于网络内容的协议分析还原主要的技术难点在于高效截包的技术上,必须保证零丢包率,或者极低的丢包率,否则会话就无法完整重建,协议还原便无法实现。在百兆的局域网内,采用Libpcap及BPF过滤技术,高效的模拟的'I'CP/IP重组技术,实现了零丢包率,系统取得了预期的效果。但在1 Gb的高速网络,必须寻找新的方法,如数据包零拷贝技术或其它办法。在Linux下实现截包,网卡中断调度消耗比较多的CPU周期,对内核进行补丁(RTIRQ),提高调度性能也是一种方法。本文提出的截包技术、会话重建技术及分析还原技术,对基于网络的IDS也具有一定的参考价值。