文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.08.036
中文引用格式: 王文奇,刘安战,郭基凤. CFMMQ:一种共享内存多队列协同取证方法[J].电子技术应用,2016,42(8):144-147,153.
英文引用格式: Wang Wenqi,Liu Anzhan,Guo Jifeng. CFMMQ:A coordinated-forensic method based on shared memory multi queue[J].Application of Electronic Technique,2016,42(8):144-147,153.
0 引言
网络取证通过抓取、记录和分析网络事件,以发现安全攻击或其他的问题事件的来源。为获取可以证明网络犯罪的有效证据,需要对网络犯罪在各种安全防御系统中遗留的各种信息进行收集和分析,而这些信息是多源的,有多种形式。因而需要一种能够有效协同多种防御系统之间通信以及协同控制的方法,从而能够更准确收集网络犯罪的有效证据,追踪犯罪分子。当前,关于网络取证已有很多研究成果,如BHONDELE A提出了一种用于取证分析恶意的网络数据包网络取证框架[1]。JOY D等提出了面向用户的取证分析方案,目的是设计一个健壮灵活协议格式以收集底层网络数据[2]。张电等对网络取证多源取证协同关联技术进行研究[3]。张有东等重点研究了证据的关联分析技术[4]。相关文献对网络取证中如何保持网络会话的完整性进行了研究[5]。纵观以往的研究成果,相关研究对协同关联分析技术研究相对较多,而网络系统间如何实现高效协同取证研究甚少,如近年来STONEY 等提出一种可以收集特定证据协同控制方法,并指出了协同中心在协同取证中的重要性[6]。
在实际网络取证过程中,由于各网络防御系统侧重点不同,网络系统采用的通信方式和通信协议也是不同的,一方面数据量较大时由于通信方式不同可能会引起阻塞;另一方面由于没有统一的协议格式,各系统间通信语义理解也是困难的。基于以上分析,为了使网络取证系统能够协同多个安全取证系统有效取证,本文设计和实现了一种基于代理的协同取证方法。
1 框架设计
共享内存多队列协同取证方法(Coordinated-Forensic Method based on shared Memory multi Queue,CFMMQ)的基本结构如图1所示,主要包括一个取证协同控制中心(Forensic Center,FC)、运行于各个主机的唯一代理(Agent)及在该框架下运行的各种安全取证系统(如:IDS Sensor、Disaster Recovery、IDS Center、Forensic Network、Firewall、Security Audit等)。其中:Agent在各主机中有且只有一个,各个Agent之间可以相互通信;FC通过本地代理,实时监控各安全取证系统状态,为安全取证系统协同时提供必要信息,同时具有维持各个主机之间报文交换协议定义文件的一致性等功能。
图1 网络协同控制系统
Agent主要发挥监控和通信的职能,监控功能主要是针对本地安全取证系统的,通信功能主要指针对其他代理的。代理之间采用点对点通信,以互为客户/服务器模式构建通信网络,数据交换采用统一的协议,从而有助于采用统一的协同控制安全策略。
各个安全取证系统只能通过本机的代理与其他系统通信协同取证。也就是说,当安全取证系统与主机内其他安全取证系统协同通信时,必须借助Agent交换数据,同时安全取证系统和其他主机的协同取证安全取证系统通信也通过Agent。因此,本地安全取证系统和Agent采用主机内进程间通信策略,Agent之间采用主机间网络通信策略。由于安全取证系统的复杂性,取证系统的数据交换可能瞬时出现大量数据造成瓶颈,为此CFMMQ框架在算法设计上进行了特别考虑。
2 数据通信设计
2.1 数据结构
由框架设计可知,Agent与本地安全取证系统之间的通信是主机内进程间的通信,一个Agent可以与多个本地安全取证系统进行数据交换。在技术上,主机内部进程间通信可以选择匿名管道、有名管道、消息队列、套接字通信、共享内存等,这里选择共享内存通信方式,该方式通信效率最高,这一点对大数据量通信特别重要。另外,共享内存方式和其他通信方式相比更不容易被攻击者发现和利用[7]。在共享内存通信的基础上,设计基于多队列缓存的取证方法。
综合考虑,共享内存设计上共申请空间1 002 KB[8],该空间被分为成数据区和管理区两部分,数据区部分的大小1 000 KB用于系统之间数据通信,管理区部分的大小为2 KB用于保存相关的管理信息。共享内存中共包含4种信息结构,分别是基本信息块、空闲信息块、Agent信息块和安全取证系统信息块。
数据区部分:数据区部分包含若干基本信息块,每个基本信息块为1 KB,结构如图2(a)所示,基本信息块设计为1 KB可以避免在操作系统中跨页而降低效率。基本信息块包括五部分,分别是前驱指针、后继指针、消息头、数据和冗余字节,基本信息块可以置于不同的双向队列之中,包括空闲块队列、Agent数据块队列和安全取证系统数据块队列。
管理区部分:该部分主要用于存放管理队列的信息。其中,用于管理空闲块队列的空闲块信息包括队首指针、队尾指针和互斥锁,如图2(b)。用于管理Agent数据块队列的Agent信息包括队列长度、队首指针、队尾指针、互斥锁和通知信号,如图2(c)。用于管理安全取证系统数据块队列的安全取证系统信息包括系统类型、队列长度、队首指针、队尾指针、互斥锁和通知信号,如图2(d)。3个队列都是双向队列,队列中的基本元素都是基本信息块。互斥锁可以保证队列信息的一致性,通知信号用于当队列有数据块时通知读取数据。
图2 信息结构
在基本信息块中,包括16 B的消息头和912 B的内容信息。表1给出了消息头的格式,其中系统类型8位中,前4位为安全取证系统类型,后4位表示子系统,如IDS的控制中心可以表示为00100001,前四位0010表示为入侵检测系统(IDS),后四位0001表示为IDS的控制中心子系统。
消息类型主要包括以下6种类型:
(1)心跳消息(HEART)
适用于安全取证系统向本地Agent发送,并由Agent综合本机安全取证系统状态定时向协同取证中心发送,目的是维持当前不同主机安全取证系统活动状态。
(2)查询消息(INQUERY)
用于Agent查询安全取证系统的各种信息,内容格式见表2,查询消息格式设计还可采用掩码方式支持不同类型的查询。如:当需要查询主机上所有安全取证系统时,系统类型设置为0xFF,查询主机上所有的IDS子系统时系统类型为0x1F,这里假定IDS的编号为1。查询位于不同主机的系统时,可以设置查询系统的IP地址,查询多个目标IP地址时,可以设置成网络掩码的方式,实现广播查询。
(3)应答消息(REPONSE)
适用于查询消息的应答,应答查询消息包含了应答数据,如查询的安全取证系统运行状态信息等。
(4)传输消息(TRANFER)
用于安全取证系统之间或者安全取证系统与取证协同控制中心之间传输数据,具体的格式见表2。在数据块长度足以承载传输信息时,则一个数据块即可,此时置数据序列号为0xFF。当传送的信息超出数据块长度时,需要对信息分成多个数据块进行传输,数据序列号从0开始依次标记,当达到0xFE时,循环标记,直到结束,标记数据序列号为0xFF。
(5)协同控制命令消息(COMMAND)
为安全取证系统之间提供协同控制功能,根据安全策略,实现对其他安全取证系统进行启动、停止等控制,包括其子系统。如:IDS的控制中心可以通过协同框架启动、停止探测器,取证中心可以通过协同框架协同控制不同的安全取证系统等。
(6)错误消息(ERROR)
适用于当消息传输错误时,返回提示信息。错误消息主要用于系统控制与安全取证系统之间协同通信的错误诊断。同时,也可通过错误消息了解不同安全取证系统状况。
2.2 数据通信
数据通信包括两方面,一是Agent与安全取证系统之间的数据交换,二是Agent与网络其他主机之间的数据交换。
在Agent启动时,进行初始化工作,对于数据区,初始化工作就是将数据区的空间建立空闲块并加入空闲块队列。对于管理区,就是建立管理区信息结构。Agent的工作过程如下:
(1)Agent从网络读取到数据
根据数据包格式检查数据的正确性是Agent接收到其他Agent发来网络数据的首要任务,之后进行数据包解析,取出空闲块加载数据,并把数据块加入对应的安全取证系统数据块队列中,见图3中④说明a。待安全取证系统从队列读取走数据后,该数据块重新加入到空闲块队列,见图3中①。
(2)Agent数据块队列接收到数据块通知信息
当Agent数据块队列接收到数据块通知信息时,从队列中取出数据块,解析数据块目的地址,如果数据块的目地本机的安全取证系统,则把数据块转入相应的安全取证系统数据块队列,并向该安全取证系统发送通知信号;如果数据块目的地址是其他主机,则把数据块信息发往目的主机的Agent,发送成功后,数据块被转入空闲块队列;当数据块队列没有数据,则进入等待状态,待通知信号激活。
安全取证系统运行时首先检查本地Agent运行状态,并在共享内存的管理区内生成安全取证系统信息结构,图2(d),用于维护安全取证系统数据块队列。
(1)安全取证系统端发送数据
当安全取证系统需要发送数据时,利用共享内存中的空闲块加承载数据,并将该快从空闲块队列转移到Agent的数据块队列中,见图3中③。Agent获取信号后,读取队列中数据,并解析数据包信息,然后根据目的地址进行发送。如果目的地址是其他主机的安全取证系统,则进一步判断目的主机对应的Agent状态,如果正常则发往目的Agent,否则丢弃并返回相应的错误信息,见图3中②说明a。如果目的地址是本地主机,则把数据块加入对应的安全取证系统数据块队列中,见图3中②说明b和④说明 b。
图3 Agent与安全取证系统之间的数据通信
(2)安全取证系统读取数据
当安全取证系统数据块队接收到通知信号时,从数据块队列取出数据块,读取数据,把数据块加入空闲块队列。在数据块队列没有数据时,锁定等待信号发生。
2.3 相关问题
死锁问题:算法中存在多个互斥锁,而每个互斥锁的目的是保持本数据块队列的一致性,当需要加入数据时由通知信号解锁(如果队列为空),否则表示队列正在操作而等待;数据读取时如果为空等待,否则锁定而读取,由上述算法描述可知数据的流动不存在循环流动,因此不会产生死锁。
并行性:框架中个队列操作为并行运行。Agent端需要启动两个线程同时监听网络数据和数据块队列。安全取证系统端则需要启动线程读取数据块队列,读取数据块队列和发送数据也是通过多线程并行执行的,这样可以有效提高协同框架传送数据报文的效率。
算法复杂度:空间复杂度方面,就是申请的共享内存大小,实际占用内存则由缓存数据块的大小和数量决定,假设每个数据块的大小为m和总块数为n,则算法的空间复杂度为O(m×n);时间复杂度方面,在发送数据包时操作是按照顺序执行的,与传输的数据量有关,假设传输的数据量是q,则算法的时间复杂度为O(q)。
2.4 协议分析
协议采用面向连接的TCP协议保证消息的可达性。通信数据在确保安全的情况下协同控制安全防御系统,从而保证证据的法律有效性。
协议安全性上需要考虑两个方面,其一是主机内安全系统采用共享内存的方式与Agent之间的通信,其二是主机间采用网络通信的方式借助Agent的通信。
安全系统与Agent之间采用共享内存命名的方式实现获取进程间共享内存地址。如果攻击者获取了共享内存的名称,则可以获取对共享内存的控制,但前提条件是攻击者必须控制主机并且取得获取共享内存的权限,因此可以通过提高主机的安全性进而提升共享内存的权限方式确保共享内存的安全。实际上攻击者如果完全控制主机,那么取证系统获取的数据也就不再可信。
对于主机间网络通信,采用以下策略:
(1)当通信流量小于一定的阈值(根据网络带宽、主机性能综合判断)时,采用SSL协议通信,从而保证传输数据的完整性和真实性。
(2)当通信流量超过阈值时,则按照前述通信协议直接发送,这样可以避免数据通信带来的额外开销,攻击者在高速数据流情况下,不大可能采用TCP劫持会话技术伪造传输数据,进而可以保证数据传输的安全性。数据完整性方面则采用验证码的方式进行保障,详见表1。这里并未采用MD5、SHA等散列算法进行校验,主要目的是避免资源消耗和提高效率。
3 网络报文格式
取证中心协同安全取证系统取证时,需要通过框架建立有效的网络通信,为使安全取证系统间无歧义地协同控制和通信,须定义统一的网络报文交换格式。这里采用非常有效描述语言是XML[9]格式,IDWG曾利用XML定义了入侵检测组件的交换协议IDMEF[10],这里结合IDMEF对入侵检测信息描述的思想,定义了网络报文格式,使之可应用于多个安全取证系统之间进行网络报文交换。报文采用UTF-8编码,各Agent采用统一的DTD保证消息一致性,通过版本号来保持DTD文件的一致性。
下面是一个入侵检测系统检测到关键文件被删除时的报文描述实例:
<?xml version="1.0" encoding="UTF-8"?>
<CFMMQ-Message version="1.0">
<CreateTime>2015-02-09 11:06:12</CreateTime>
<Source ID="0x32">
<Address>172.10.1.10</Address>
<System>intrusion-detection</System>
<Alert id="0x0501" type="delete">
<File>/etc/passwd</File>
</Alert>
</Source>
<Target>
<System>Forensic_Center</System>
</Target>
</CFMMQ-Message>
其中,消息的源系统编号ID为0x32,表示入侵检测系统的类型。该报文表示入侵检测系统检测到passwd文件删除,需要取证通知取证中心并由取证中心协同相关安全取证系统取证该事件。
4 实现
基于以上设计,实现了一个协同多个网络安全取证系统的网络协同控制系统。采用设计的统一报文以及协议算法,该系统协同网络入侵检测系统Snort,实现了对网络入侵事件的取证,协同防火墙软件实现了对主机防火墙信息的取证,如图4。
图4 网络协同取证系统实现
取证协同控制中心FC主机的IP地址为192.168.0.4,两个运行代理的主机地址分别是192.168.0.10和192.168.0.8。FC上有取证中心、IDE center和FireWall天网防火墙,两个代理主机上都有主机取证代理和FireWall天网防火墙,并分别有IDS Snort Sensor或IDE Sensor,在显示区列出了一些事件列表。
取证中心也可以根据获得的网络安全信息,协同多个网络安全取证系统同时进行网络行为取证,当入侵检测系统分析到入侵行为时,协同网络入侵检测系统和防火墙双重记录,有利于形成完整的证据链,所设计的底层通信算法能够实现各个网络防御系统的有效通信和控制。同时在千兆网络的环境中协同框架的瞬时流量可以承载600 Mb/s,达到了网络协同控制的网络通信的需求。
5 结束语
本文提出了一种共享内存多队列协同取证方法,设计了整个框架,在该框架中每台主机拥有唯一的代理,代理负责安全取证系统之间及与协同取证中心之间的协同和通信,该方法通过取证中心协同安全取证系统取证。采用共享内存的通信方式,设计了基于多队列及通知信号机制的高速数据通信算法,提高通信效率。定义了基于XML的网络报文格式,实现了一个网络系统取证系统。协同控制框架为安全取证系统提供消息封装、解析、传递等API,使安全取证系统能够透明地接入该系统,而不必了解协同控制的实现细节。
参考文献
[1] BHONDELE A,RAWAT S,RENUKUNTLA S S B.Network management framework for Network forensic analysis[C].Emerging ICT for Bridging the Future-Proceedings of the 49th Annual Convention of the Computer Society of India CSI Volume 2.Springer International Publishing,2015:397-404.
[2] JOY D,LI F,FURNELL S M.A user-oriented network forensic analyser:The design of a high-level protocol analyser[C].The 12th Australian Digital Forensics Conference,Western Australia,2014:84-93.
[3] 张电,高平,潘峰.网络协同取证系统的设计与实现[J].信息安全与通信保密,2011(11):89-91.
[4] 张有东,曾庆凯,王建东.网络协同取证计算研究[J].计算机学报,2010,33(3):504-513.
[5] 王文奇,苗凤君,潘磊,等.网络取证完整性技术研究[J].电子学报,2010,38(11):2529-2534.
[6] STONEY D A,STONEY P L.Illustration and analysis of a coordinated approach to an effective forensic trace evidence capability[J].Forensic Science International,2015,253(8):14-27.
[7] AVIRAM A,WENG S C,HU S,et al.Efficient systemenforced deterministic parallelism[J].Communications of the ACM,2012,55(5):111-119.
[8] Jeffrey Richter.Windows核心编程[M].王建华,译.北京:机械工业出版社,2005.
[9] FEIERTAN R,KAHN C,PORRAS P,et al.A common intrusion specification language(CISL)[EB/OL].[2015-6-20].http://gost.isi.edu/cidf/drafts/language.txt.
[10] DEBAR H,TELECOM F.The intrusion detection message exchange format(IDMEF)[EB/OL].[2015-6-20].http://datatracker.ietf.org/doc/rfc4765/.