一种应用层数据的安全扫描方法及装置与流程

文档序号:31871891发布日期:2022-10-21 19:40阅读:26来源:国知局

1.本发明属于网络安全技术领域,尤其是涉及一种对应用层网络数据进行安全扫描的方法及装置。


背景技术:

2.通过对网络数据内容的有效管理在一定程度上能降低网络的安全风险。网络数据包的协议还原是实现网络内容管理的重要基础。协议还原技术就是捕获网络中的所有报文,根据标准的协议规定对报文进行重组和还原,在对底层协议进行解析的基础上,实现对应用层的协议进行分析。网络带宽的快速增长和网络信息的日益丰富,对网络数据包的协议还原在性能和功能方面都提出更高要求。
3.利用libnids的流重组的功能,可以方便地屏蔽掉三层和和四层的具体实现细节,可以直接拿到应用层的数据从而方便地进行应用层协议的还原,但是由于每个包都会经过libnids的三四层处理流程,因此在一定程度上影响了还原的性能。本发明在利用libnids库的基础上,当能够判断出该流当前传输的是文件数据流(例如smtp中的附件,ftp中的文件数据),则可以跳过libnids的处理流程,直接将包的数据部分写入内存,从而提高文件还原的效率。


技术实现要素:

4.有鉴于此,本发明旨在提供一种通过提高应用层数据流文件还原效率进且能有效阻断威胁的安全扫描方法及装置。
5.首先,提供一种应用层数据的安全扫描方法,包括将数据流还原为文件后进行扫描:获取发方的数据文件的第一个包并保存至缓存队列的第一位置后,向发方发送第一ack;当收到发方的第二个包后将其置于第二位置,并判断是否为“fin”;若不为“fin”,将所述第一个包发送给收方;拦截收方返回的第二ack,同时向发方发送该第二ack;将所述第一个包写入内存并从缓存队列删除,将所述第二个包移动到所述第一位置,如此进行循环接收与发送,直至收到发方的“fin”后,将内存中缓存的当前所有已接收数据还原为文件;对还原的文件进行扫描,若存在威胁则丢弃最后一个包以阻断该连接。
6.所述对数据流进行扫描之前,还包括捕获数据包并根据协议类型判断传输的是否为文件数据流,若是则对包的数据部分写入内存并还原为文件进行扫描,否则按照对应的协议进行ip重组、tcp流重组与数据解析。
7.所述将数据包写入内存,包括:根据数据包的源ip、目的ip、源端口与目的端口查找预设的哈希表中对应的tcp会话。
8.若在哈希表中未查找到,则判断该数据包是否为建立连接报文;若是则新建tcp会话并初始化,记录数据包的源ip、目的ip、源端口与目的端口,并
记录发送序号、确认序号、窗口大小与最大报文段的值;否则结束对该数据包的处理。
9.将数据包写入内存,还包括:根据数据包的序号将数据插入到内存中缓存的已接收数据。
10.若数据包的序号等于缓存中最后一个包的结束序号则直接将该数据包插入接收缓存的末尾,否则依次将该数据包序号与接收缓存中各个包进行比较以确定该数据包在接收缓存中的位置。
11.数据包缓存之前,还包括,根据预设的节点空间与最大连接数为各协议分配对应的内存空间。
12.同时,还提供一种应用层数据扫描装置,所述装置包括:抓包模块,捕获数据包并根据协议类型判断传输的是否为文件数据流,若是则发送至缓存模块;缓存模块,设置两个包的缓存队列,循环接收与发送数据包,将符合预设条件的数据包发送至写内存模块;写内存模块,根据数据包的源ip、目的ip、源端口与目的端口查找预设的哈希表中对应的tcp会话;若在哈希表中未查找到,则判断该数据包是否为建立连接报文:若是则新建tcp会话并初始化,记录数据包的源ip、目的ip、源端口与目的端口,并记录发送序号、确认序号、窗口大小与最大报文段的值;根据数据包的序号将数据插入到内存中缓存的已接收数据;文件还原模块,将内存中缓存的当前所有已接收数据还原为文件;扫描模块,对还原的文件进行扫描,若存在威胁则丢弃最后一个包以阻断该连接。
13.上述的应用层数据扫描装置,将数据流还原为文件后进行扫描:获取发方的数据文件的第一个包并保存至缓存队列的第一位置后,向发方发送第一ack;当收到发方的第二个包后将其置于第二位置,并判断是否为“fin”;若不为“fin”,将所述第一个包发送给收方;拦截收方返回的第二ack,同时向发方发送该第二ack;将所述第一个包写入内存并从缓存队列删除,将所述第二个包移动到所述第一位置,如此进行循环接收与发送,直至收到发方的“fin”后,将内存中缓存的当前所有已接收数据还原为文件;对还原的文件进行扫描。
14.采用上述技术方案的本发明,通过设置两个包的缓存队列,对应用层数据进行缓存并写入内存的同时减少对收发双方数据交互的延迟,并且当符合预设的条件时及时的对缓存的已接收数据进行病毒扫描,若发现威胁能够在数据转发完毕之前丢弃后续数据包以阻断数据流,保证接收方的安全。
具体实施方式
15.为使本发明实施例的目的、技术方案和优点更加清楚,下面将对本发明实施例中的技术方案进行清楚、完整地描述。
16.为了方便理解,下面对本发明实施例中涉及的名词进行解释:协议还原就是根据协议定义的规则,按照协议栈顺序从下向上依次对数据包进行捕获、逐层分析(mac,ip分片重组,tcp流重组,具体内容),最终还原出用户原始交互信息
(文字,图片,文件等),该过程也可以划分为应用层之下的探测部分和应用层协议还原两部分。
17.tcp是一种流协议,发送者以字节流的形式传递给接收者,这意味着,在还原应用层协议之前,我们需要首先将一个个的tcp数据包组装成一个字节流,即tcp流重组。初始化tcp session的hash表,针对每一次tcp连接都建立一个tcp session 。收到一个数据段,首先按照此数据段的(四元组)计算所属tcp会话是否已经在表中存在,若存在,则根据序列号将其插入到所属会话上下文的适当的位置。不存在的话,建立一个tcp session节点并存储到hash表中。在此过程中,如果收到的数据包与链表中某一个数据包的序列号和数据长度相同的话,说明是重发包,做丢弃处理,保证链表中每一个数据包的序列号连续,且第一个数据包为syn包,最后一个包为fin包(或rst包)。
18.在tcp/ip协议中,tcp协议提供可靠的连接服务,采用三次握手建立一个连接。
19.(1)第一次握手:建立连接时,客户端a发送syn包(syn=j)到服务器b,并进入syn_send状态,等待服务器b确认。
20.(2)第二次握手:服务器b收到syn包,必须确认客户a的syn(ack=j+1),同时自己也发送一个syn包(syn=k),即syn+ack包,此时服务器b进入syn_recv状态。
21.(3)第三次握手:客户端a收到服务器b的syn+ack包,向服务器b发送确认包ack(ack=k+1),此包发送完毕,客户端a和服务器b进入established状态,完成三次握手。
22.完成三次握手,客户端与服务器开始传送数据。
23.由于tcp连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个fin来终止这个方向的连接。收到一个 fin只意味着这一方向上没有数据流动,一个tcp连接在收到一个fin后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
24.(1)客户端a发送一个fin,用来关闭客户a到服务器b的数据传送。
25.(2)服务器b收到这个fin,它发回一个ack,确认序号为收到的序号加1。和syn一样,一个fin将占用一个序号。
26.(3)服务器b关闭与客户端a的连接,发送一个fin给客户端a。
27.(4)客户端a发回ack报文确认,并将确认序号设置为收到序号加1。
28.在病毒扫描中,必须将数据流转换成文件之后,才能进行有效的扫描。因此要同时实现文件的扫描和阻断,必须有效地判断数据流并缓存,同时在得出扫描结果判断缓存的包是否进行丢弃,才能进行有效的阻断。比较传统的做法是利用代理在中间对数据文件进行缓存,在扫描完成之后再决定时候传给另一方。但是因为要缓存整个文件,所以延迟比较大。如果不使用代理,既要缓存文件,又不能影响双方的交互,就只能在数据文件的最后一个包进行阻断,但是在某些协议中(例如ftp的数据通道)文件的最后一个包很难分辨。
29.故此,本发明提出了一种应用层数据的安全扫描方法实施例,包括将数据流还原为文件后进行扫描,具体步骤如下所述:根据预设的节点空间与最大连接数为各协议分配对应的内存空间。
30.捕获数据包并根据协议类型判断传输的是否为文件数据流,若是则对包的数据部分写入内存并还原为文件进行扫描,否则按照对应的协议进行ip重组、tcp流重组与数据解析。
31.获取发方的数据文件的第一个包并保存至缓存队列的第一位置后,向发方发送第一ack;当收到发方的第二个包后将其置于第二位置,并判断是否为“fin”;若不为“fin”,将所述第一个包发送给收方;拦截收方返回的第二ack,同时向发方发送该第二ack;将所述第一个包写入内存并从缓存队列删除,将所述第二个包移动到所述第一位置,如此进行循环接收与发送,直至收到发方的“fin”后,将内存中缓存的当前所有已接收数据还原为文件;对还原的文件进行扫描,若存在威胁则丢弃最后一个包以阻断该连接。
32.所述将数据包写入内存,包括:根据数据包的源ip、目的ip、源端口与目的端口查找预设的哈希表中对应的tcp会话。若在哈希表中未查找到,则判断该数据包是否为建立连接报文;若是则新建tcp会话并初始化,记录数据包的源ip、目的ip、源端口与目的端口,并记录发送序号、确认序号、窗口大小与最大报文段的值;否则结束对该数据包的处理。
33.将数据包写入内存,还包括:根据数据包的序号将数据插入到内存中缓存的已接收数据。
34.若数据包的序号等于缓存中最后一个包的结束序号则直接将该数据包插入接收缓存的末尾,否则依次将该数据包序号与接收缓存中各个包进行比较以确定该数据包在接收缓存中的位置。
35.还提供一种应用层数据扫描装置实施例,所述装置包括:抓包模块,捕获数据包并根据协议类型判断传输的是否为文件数据流,若是则发送至缓存模块;缓存模块,设置两个包的缓存队列,循环接收与发送数据包,将符合预设条件的数据包发送至写内存模块;写内存模块,根据数据包的源ip、目的ip、源端口与目的端口查找预设的哈希表中对应的tcp会话;若在哈希表中未查找到,则判断该数据包是否为建立连接报文:若是则新建tcp会话并初始化,记录数据包的源ip、目的ip、源端口与目的端口,并记录发送序号、确认序号、窗口大小与最大报文段的值;根据数据包的序号将数据插入到内存中缓存的已接收数据;文件还原模块,将内存中缓存的当前所有已接收数据还原为文件;扫描模块,对还原的文件进行扫描,若存在威胁则丢弃最后一个包以阻断该连接。
36.上述的应用层数据扫描装置,将数据流还原为文件后进行扫描:获取发方的数据文件的第一个包并保存至缓存队列的第一位置后,向发方发送第一ack;当收到发方的第二个包后将其置于第二位置,并判断是否为“fin”;若不为“fin”,将所述第一个包发送给收方;拦截收方返回的第二ack,同时向发方发送该第二ack;将所述第一个包写入内存并从缓存队列删除,将所述第二个包移动到所述第一位置,如此进行循环接收与发送,直至收到发方的“fin”后,将内存中缓存的当前所有已接收数据还原为文件;对还原的文件进行扫描。
37.可见,本发明的实施例,通过设置两个包的缓存队列,对应用层数据进行缓存并写入内存的同时减少对收发双方数据交互的延迟,并且当符合预设的条件时及时的对缓存的已接收数据进行病毒扫描,若发现威胁能够在数据转发完毕之前丢弃后续数据包以阻断数据流,保证接收方的安全。
38.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如:rom/ram、磁碟、光盘等。
39.对上述公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1