著录项信息
专利名称 | 一种网关级流式病毒扫描方法及其系统 |
申请号 | CN200710121322.1 | 申请日期 | 2007-09-04 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2008-02-06 | 公开/公告号 | CN101119373 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/06 | IPC分类号 | H;0;4;L;2;9;/;0;6;;;H;0;4;L;1;2;/;5;6查看分类表>
|
申请人 | 北京大学 | 申请人地址 | 北京市海淀区颐和园路5号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京大学 | 当前权利人 | 北京大学 |
发明人 | 龚晓锐;韦韬;朴爱花 |
代理机构 | 北京君尚知识产权代理事务所(普通合伙) | 代理人 | 余长江 |
摘要
本发明公开了一种网关级流式病毒扫描方法及其系统,其方法为首先对会话数据包组织成数据单元队列,然后分析数据单元内的数据类型是否支持流式扫描,根据数据类型对数据进行文件式扫描或流式扫描;其系统包括数据流获取装置、预处理装置、病毒扫描装置、存储上下文信息的表装置;本发明所提出的网关级流式病毒扫描方法和系统,在保证了对数据进行有效准确的病毒检测的同时,提高网关对于客户端的响应速度,并节省了网关的存储资源。
1.一种网关级流式病毒扫描方法,其步骤为:
1)将会话数据包组织成数据单元队列;
2)判断数据单元内的数据类型是否支持流式扫描;
若不支持流式扫描,则进行文件式扫描;
若支持流式扫描,则进行下列步骤:
a)将数据单元分组进行病毒扫描;
b)判断扫描的数据单元是否安全,如果不安全则停止扫描并关闭与客户端的连接,退出实例进程;如果安全则发送该组数据;
c)判断会话是否结束,如果没有结束则保留该组数据的边界信息,利用上下文信息的表装置进行边界处理;其方法为:A)对支持流式扫描的会话数据分组复制到上下文信息的表装置的buffer缓冲区中,复制的起始地址为:buffer+offset+cur_buff_len;如果缓冲区中存有上一次扫描的边界数据,则新读入的数据紧跟在边界数据的后面,下一步的扫描操作可以将这两部分数据作为一个整体进行计算;B)将该组数据同时复制到上下文信息的表装置维护的数据单元队列bb中;C)将上下文信息的表装置的buffer中的数据通过病毒扫描装置的流式扫描接口传递给病毒扫描装置;
其中,所述上下文信息的表装置的数据结构关键域包括:buffer:其功能为基于流式扫描模式下,存储待扫描的数据,以及处理边界效应时需要存储的数据,数据类型为字符型数组;cur_buff_len:其功能为存储当前buffer中存储数据长度的值,数据类型为整型;offset:其功能为存储当前buffer中存储数据的起始位置距buffer首地址的偏移,数据类型为整型;tmpFile:其功能为基于文件扫描模式中,存储队列数据的临时文件,数据类型为文件指针;partcnt:其功能为流式扫描时,记录病毒扫描过程中,针对多模式病毒特征码已经匹配的子模式信息,以及它们的位置关系,数据类型为结构体链表;
d)重复步骤1)和2),如果结束则退出实例进程。
2.如权利要求1所述的方法,其特征在于所述边界信息为该组数据单元内,包含的病毒库最大病毒特征码长度的末尾数据。
3.如权利要求1所述的方法,其特征在于所述边界信息为记录该组数据中针对多模式病毒特征码已检测到的子模式的序号,以及各个子模式之间的位置关系。
4.如权利要求1所述的方法,其特征在于流式扫描中利用上下文信息的表装置进行多模式病毒特征码匹配时处理边界问题的方法为:
在partcnt中记录多模式病毒特征码序号,以及已经匹配的子模式信息,以供后续数据到来时继续进行匹配;如果扫描数据匹配了该多模式类型的病毒特征码中定义的全部子模式,且满足规定的位置关系,则认为当前数据被感染。
5.如权利要求1所述的方法,其特征在于所述会话数据由多个数据单元队列构成,最后一个队列的最后一个数据单元中存有结束标志EOS。
6.如权利要求1所述的方法,其特征在于所述不支持流式扫描的数据包载荷数据类型包括但不限于下列类型的一种或几种:gzip、zip、bz、rar、base64。
7.一种网关级流式病毒扫描系统,其包括:
数据流获取装置,用于获取流入的数据单元,针对会话组织成数据单元队列;
预处理装置,分析数据类型是否支持流式扫描;
病毒扫描装置,分别针对流式病毒扫描和文件式病毒扫描两种接口的数据进行病毒扫描处理;
数据流发送装置,用于转发处理结束后的数据;
存储上下文信息的表装置,用于处理流式扫描时因分割数据流而引起的病毒分割问题;其数据结构关键域包括:
buffer:其功能为基于流式扫描模式下,存储待扫描的数据,以及处理边界效应时需要存储的数据,数据类型为字符型数组;
cur_buff_len:其功能为存储当前buffer中存储数据长度的值,数据类型为整型;
offset:其功能为存储当前buffer中存储数据的起始位置距buffer首地址的偏移,数据类型为整型;
tmpFile:其功能为基于文件扫描模式中,存储队列数据的临时文件,数据类型为文件指针;
partcnt:其功能为流式扫描时,记录多模式病毒扫描过程中,已经匹配的子模式信息,以及它们的位置关系,数据类型为结构体链表。
技术领域\n本发明涉及一种基于网关级流式病毒扫描方法及其系统,属于计算机网络和数据通信技术领域。\n背景技术\n随着病毒传播日益网络化,使得网关级病毒过滤越来越得到关注。网关级病毒过滤工具,使病毒能够在局域网入口处即得到查杀,尽早地限制了病毒的传播。然而,由于受到传统病毒检测方法的限制,大多数网关级病毒过滤工具都使用了文件式查杀方式,即先在外存或内存中将多个网络数据包重新整合成一个完整的文件,再进行病毒扫描。这种方法需要先在网关处缓存多个数据包,整合成文件扫描病毒后再次转发,因此会造成数据包的延时,降低网络性能。尤其对于实时性要求较高的应用,如Web服务,影响较大。\n在网关处通过文件方式查杀病毒,除了影响实时性能,还会占用大量内存。在网络流量大的局域网中,若对所有的会话均进行缓存,并在查杀病毒后进行释放,将增加网关大量的内存开销,严重时甚至会影响网关运行的稳定性。另外,有些病毒出现在会话的开始,但文件式查杀方式却需要缓存会话的全部内容后才进行病毒扫描,不仅浪费了系统资源,也影响了查杀病毒的及时性。\n另外,在网关处以文件方式查杀病毒,支持的协议也相对有限。由于全部数据都在网关处缓存,因此网关必须模拟实际的客户端与服务器通信,并在查杀病毒结束后,再次模拟服务器与实际的客户端建立连接并完成通信。对于一些复杂的应用协议,网关很难模拟整个通信过程,因此也很难得到完整的通信数据形成文件。\n发明内容\n本发明的目的在于提供一种新型网关级流式病毒扫描方法及其系统。\n流式病毒扫描即不必等待网络的会话数据全部到来后还原成文件进行病毒扫描,而可以随着会话数据的传输,将数据流切分成数据单元进行连续的扫描,数据单元的接收、扫描、发送过程并行进行。\n本发明采用如下技术方案实现本发明的目的:\n一种新型网关级流式病毒扫描方法,其步骤为:\n1)将会话数据包组织成数据单元队列;\n2)判断数据单元内的数据类型是否支持流式扫描;\n若不支持流式扫描,则进行文件式扫描;\n若支持流式扫描,则进行下列步骤:\na)将数据单元分组进行病毒扫描;\nb)判断扫描的数据单元是否安全,如果不安全则停止扫描并关闭与客户端的连接,退出实例进程;如果安全则发送该组数据;\nc)判断会话是否结束,如果没有结束则保留该组数据的边界信息,利用上下文信息的表装置进行边界处理;其方法为:A)对支持流式扫描的会话数据分组复制到上下文信息的表装置的buffer缓冲区中,复制的起始地址为:buffer+offset+cur_buff_len;如果缓冲区中存有上一次扫描的边界数据,则新读入的数据紧跟在边界数据的后面,下一步的扫描操作可以将这两部分数据作为一个整体进行计算;B)将该组数据同时复制到上下文信息的表装置维护的数据单元队列bb中;C)将上下文信息的表装置的buffer中的数据通过病毒扫描装置的流式扫描接口传递给病毒扫描装置;\n其中,所述上下文信息的表装置的数据结构关键域包括:buffer:其功能为基于流式扫描模式下,存储待扫描的数据,以及处理边界效应时需要存储的数据,数据类型为字符型数组;cur_buff_len:其功能为存储当前buffer中存储数据长度的值,数据类型为整型;offset:其功能为存储当前buffer中存储数据的起始位置距buffer首地址的偏移,数据类型为整型;tmpFile:其功能为基于文件扫描模式中,存储队列数据的临时文件,数据类型为文件指针;partcnt:其功能为流式扫描时,记录病毒扫描过程中,针对多模式病毒特征码已经匹配的子模式信息,以及它们的位置关系,数据类型为结构体链表;\nd)重复步骤1)和2),如果结束则退出实例进程。\n所述边界信息为该组数据单元内,包含的病毒库最大病毒特征码长度的末尾数据。\n所述边界信息包括记录该组数据中针对多模式病毒特征码已检测到的子模式的序号,以及各个子模式之间的位置关系。\n所述流式扫描方法中利用上下文信息的表装置进行多模式病毒特征码匹配时处理边界问题的方法为:在partcnt中记录多模式病毒特征码序号,以及已经匹配的子模式信息,以供后续数据到来时继续进行匹配;如果扫描数据匹配了该多模式类型的病毒特征码中定义的全部子模式,且满足规定的位置关系,则认为当前数据被感染。\n所述会话数据由多个数据单元队列构成,最后一个队列的最后一个数据单元中存有结束标志EOS。\n所述不支持流式扫描的数据包载荷数据类型包括但不限于下列类型的一种或几种:gzip、zip、bz、rar、base64。\n一种网关级流式病毒扫描系统,其包括:\n数据流获取装置,用于获取流入的数据单元,针对会话组织成数据单元队列;\n预处理装置,分析数据类型是否支持流式扫描;\n病毒扫描装置,分别针对流式病毒扫描和文件式病毒扫描两种接口的数据进行病毒扫描处理;\n数据流发送装置,用于转发处理结束后的数据;\n存储上下文信息的表装置,用于处理流式扫描时因分割数据流而引起的病毒分割问题;其数据结构关键域包括:\nbuffer:其功能为基于流式扫描模式下,存储待扫描的数据,以及处理边界效应时需要存储的数据,数据类型为字符型数组;\ncur_buff_len:其功能为存储当前buffer中存储数据长度的值,数据类型为整型;\noffset:其功能为存储当前buffer中存储数据的起始位置距buffer首地址的偏移,数据类型为整型;\ntmpFile:其功能为基于文件扫描模式中,存储队列数据的临时文件,数据类型为文件指针;\npartcnt:其功能为流式扫描时,记录多模式病毒扫描过程中,已经匹配的子模式信息,以及它们的位置关系,数据类型为结构体链表。\n本发明的积极效果及优势\n本发明所提出的这种流式病毒检测系统和方法,本发明的方法是对流经的网络数据流依照流经的顺序进行病毒扫描,数据单元的接收、扫描、发送过程并行进行,而不用将所有数据包缓存、整合成文件后再进行扫描,从而减少了数据传输的延迟,提高了扫描效率;在保证了对数据进行有效准确的病毒检测的同时,提高网关对于客户端的响应速度,并节省了网关的存储资源。\n附图说明\n图1为本发明方法的流程图;\n图2为本发明实施例的网络拓扑图;\n图3为本发明的系统结构图。\n具体实施方式\n以下参照附图对本发明的网关级流式病毒扫描系统进行详细说明。\n本发明方法的流程如图1所示,其工作过程如下:\n(1)系统初始化。该步骤包括两方面的工作,一是初始化用于存储上下文信息的表装置的数据结构,以辅助完成流式病毒扫描,二是初始化病毒扫描装置。初始化病毒扫描装置包括导入病毒库,导入过程中根据每条病毒特征码的长度计算出当前病毒库中最大病毒码的长度maxpatlen:单模式病毒特征码的长度即为特征码字符串的长度,多模式病毒特征码的长度则根据包含子模式的长度及其偏移关系进行计算。病毒扫描装置的运行周期是从协议层会话的第一个数据包到来开始,到最后一个数据包结束。因此,病毒扫描装置应该在一个完整的协议层会话范围内进行上下文保护。当网关每收到一个数据包的数据时,数据获取装置便会创建一个专属于这个请求的病毒扫描装置实例用于处理当前队列。当同属于本次会话的下一个数据到来时,数据流获取装置会自动调用属于同一请求的过滤实例。当本次会话的所有数据处理结束之后,该病毒扫描实例将会退出,结束运行。存储上下文信息的表装置贯穿整个会话的处理过程。\n(2)数据流获取,将会话数据包组织成数据单元队列。属于同一会话的数据包具有相同的源地址、目的地址、源端口、目的端口、协议号等基本信息,且所属高层协议具有相应的状态信息、时间戳等标识。数据获取模块能够根据以上信息区分数据包所属会话。\n当网关每收到一个数据包时,数据获取模块便判断数据包所属的会话,并依照流入顺序将一定数目的数据包存入数据单元中,再将该数据单元插入到所属会话的数据单元队列。若当前不存在该会话的数据单元队列,则新建专属的数据单元队列。若数据包中包含会话的结束标志,数据流获取装置则在所属队列末尾的数据单元中插入“EOS”标志。一次完整的会话,将由多个数据单元队列构成。数据流获取装置将组织好的数据单元队列传递给病毒扫描装置。\n(3)数据流预处理,判断数据单元的数据类型是否支持流式扫描。这一步的目的是为了下一步的扫描过程做准备,机制分为两种情况:基于流式扫描的预处理;基于文件式扫描的预处理。\n系统中预声明了一些不支持流式扫描的数据类型,例如:gzip、zip、bz、rar、base64等。同时为了协助病毒扫描装置处理流式查杀病毒时引起的病毒分割问题建立了存储上下文信息的表装置,因为数据单元队列传输数据时,数据单元与数据单元之间、队列与队列之间会形成边界效应。存储上下文信息的表装置如表1所示。\n表1.streamav_ctx表\n数据信息 数据类型 含义 buffer 字符型数组 用于流式扫描模式,存储待扫描的数据,以及处理边界效应时需要存储的数据 cur_buff_len 整型 用于流式扫描模式,当前buffer中存储的数据长度 offset 整型 用于流式扫描模式,当前buffer中存储的数据的起始位置距buffer首地址的偏移 tmpFile 文件指针 用于文件式扫描模式,存储队列数据的临时文件 bb 字符型数组链表 用于流式扫描模式,病毒扫描装置实例自已维护的数据单元队列 partcnt 结构体链表 用于流式扫描模式,记录多模式病毒扫描过程中,已经匹配的子模式信息,以及它们的位置关系\n数据流预处理时,如果数据类型解析结果为特殊类型,则需要使用基于文件式扫描的模式对数据进行预处理,即直接将数据流获取装置得到的数据单元数据缓存入临时文件(临时文件指针存入streamav_ctx表结构的tmpFile域)。当次会话结束后,将对临时文件中的数据内容进行适当处理(如将文件解压缩),再调用病毒扫描装置的文件式扫描接口。\n如果数据类型为非特殊类型,病毒扫描装置使用基于流式扫描模式的数据预处理机制,调用病毒扫描装置的流式扫描接口,进行流式病毒扫描,在流式病毒扫描的过程中,病毒扫描装置将队列中的每三个数据单元分为一组,每次对当前的三个数据单元进行完整的处理之后,包括预处理、扫描、发送,才对剩余的数据单元进行处理。以下是某一次预处理的详细过程。\nA)将数据单元队列中的前三个数据单元的数据复制到表streamav_ctx的buffer缓冲区中,复制的起始地址为:buffer+offset+cur_buff_len。如果缓冲区中存有上一次扫描的边界数据,则新读入的数据紧跟在边界数据的后面,下一步的扫描操作可以将这两部分数据作为一个整体进行计算。\nB)将这三个数据单元中的数据同时复制到streamav_ctx维护的数据单元队列bb中。\nC)将表streamav_ctx的buffer中的数据传递给病毒扫描装置。\n(4)病毒扫描。病毒扫描装置提供文件式扫描接口与流式扫描接口。在初始化以及预处理的过程中,已经为病毒扫描准备好了相应接口的扫描数据,此步骤只需要直接调用病毒扫描装置的相应接口即可。若为文件式扫描,则病毒扫描装置扫描streamav_ctx的tmpFile所指向的临时文件;若为流式扫描,则病毒扫描装置扫描streamav_ctx表bb队列中的数据单元数据。如果扫描结果显示数据为安全的,而且本次会话中还有数据需要处理,即没有会话结束标志EOS出现,则病毒扫描装置进行边界数据的保护处理。病毒扫描装置带有病毒库,病毒库中包含病毒特征码集合。如果被扫描内容包含与病毒库中的病毒特征码相匹配的字符串序列,则可判断该扫描内容被此种病毒所感染。病毒扫描装置在初始化过程中记录病毒库中病毒特征码的最大长度,以供病毒扫描系统在病毒扫描过程中处理数据分割引起的边界效应。病毒扫描装置在进行边界处理时,将buffer所存储数据单元末尾maxpatlen长度的数据保存下来。如果扫描数据匹配了某个单模式类型的病毒特征码,则认为当前数据被感染。如果扫描数据匹配了某个多模式类型的病毒特征码中定义的全部子模式,且满足规定的位置关系,则认为当前数据被感染。如果扫描数据匹配了某个多模式类型的病毒特征码中定义的部分子模式,则在streamav_ctx表的partcnt中记录该多模式病毒特征码序号,以及已经匹配的子模式信息,以供后续数据到来时继续进行匹配。检测出的被感染数据将被直接丢弃,不继续处理后续数据。病毒扫描装置将扫描结果提交给数据流发送装置。\n(5)数据流输出。如果已检测数据为安全的,数据流发送装置立刻将这部分数据发送给客户端。对于流式扫描模式,如果当前处理的数据单元队列中还有数据单元等待处理,或当前处理的数据单元队列已没有数据,但没有出现表示会话结束的EOS数据单元,则病毒扫描装置实例继续保留在内存中,处理或等待处理剩余的数据单元数据。\n如果被测数据含有病毒,数据流发送装置向客户端发送提示信息,关闭与客户端的连接,退出实例进程。如果病毒扫描装置已经处理了本次会话的所有数据,它也将退出实例进程。退出实例进程之前会释放扫描过程中申请的内存空间。\n一种网关级流式病毒扫描系统,如图3所示。附图2为本发明系统运行于网关处,位于局域网与外网之间。本发明提出的系统包括:数据流获取装置,用于获取流入的数据包,针对会话组织成数据流队列;预处理装置,用于分析数据流队列,判断数据类型;病毒扫描装置,支持流式病毒扫描和文件式病毒扫描两种接口,分别针对不同类型的数据进行病毒扫描处理;数据流发送装置,用于转发处理结束后的数据,并释放扫描过程中占用的内存空间;存储上下文信息的表装置,用于处理流式扫描时因分割数据流而引起的病毒分割问题。其中,流式病毒扫描是指对流经的网络数据流依照流经的顺序进行病毒扫描,数据单元的接收、扫描、发送过程并行进行,而不用将所有数据单元缓存、整合成文件后再进行扫描,从而减少了数据传输的延迟,提高了扫描效率。\n其中,数据流获取装置能够根据会话区分流入的网络数据包,并依照流入顺序将一定数目的数据包存储在一起形成利于病毒扫描的“数据单元”,再将属于同一会话的“数据单元”排列成“数据单元队列”。其中,“数据单元”、“数据单元队列”均对应数据获取模块定义的特定数据结构,用于高效的内存操作和管理。数据单元对应的数据结构中,各个域主要包括包含的网络数据包的内容、大小、基本操作的函数指针、以及所在的数据单元队列指针等。数据单元队列对应的数据结构为包含一系列相关数据单元的环状链表,用来提供灵活高效的内存操作,如数据单元的分配、回收等,供其他模块使用。一次完整的会话,将由多个数据单元队列构成。数据流获取装置能够判断会话是否结束,并在队列末尾的数据单元中插入一个“EOS”标志,以标识会话的结束。数据流获取装置将组织好的数据单元队列传递给病毒扫描装置。\n预处理装置对数据单元队列中的数据类型进行分析,若数据为不支持流式扫描的数据类型(如gzip、rar等压缩类型,或base64等编码类型),则需要将当次会话的所有数据缓存成完整的文件,经过适当处理(如将文件解压缩)后,再调用病毒扫描装置的文件式扫描接口。若数据单元队列中的数据类型不是特殊类型,则调用病毒扫描装置的流式扫描接口,进行流式病毒扫描。\n病毒扫描装置以进程方式独立运行,在接收到预处理装置的扫描请求后扫描指定数据。病毒扫描装置带有病毒库,病毒库中包含病毒特征码集合,病毒特征码分为单模式与多模式两种形式。如果被扫描内容包含与单模式的病毒特征码相匹配的字符串序列,则可判断该扫描内容被此种病毒所感染。如果被扫描内容包含的字符串序列能够匹配某多模式病毒特征码中定义的多个模式,并符合规定的某种条件,则可判断该扫描内容被此种病毒所感染。\n存储上下文信息的表装置,如表1所示,用于协助病毒扫描装置处理流式查杀病毒时引起的病毒分割问题。
法律信息
- 2014-10-22
未缴年费专利权终止
IPC(主分类): H04L 29/06
专利号: ZL 200710121322.1
申请日: 2007.09.04
授权公告日: 2010.09.08
- 2010-09-08
- 2008-04-02
- 2008-02-06
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |