主页(http://www.kuwanit.com):CFMMQ:一种共享内存多队列协同取证方法(3)
当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 网络报文格式
(责任编辑:ioter)
发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。