一种基于TCP流状态的网络扫描检测方法及检测系统与流程

文档序号:16815437发布日期:2019-02-10 14:24阅读:235来源:国知局
一种基于TCP流状态的网络扫描检测方法及检测系统与流程

本发明属于网络安全技术领域,具体涉及一种基于tcp流状态的网络扫描检测方法及检测系统。



背景技术:

黑客在发起网络攻击前一般会利用网络扫描工具对目标网段进行端口扫描,检测目标网络主机和服务器开放监听端口以及对外提供网络服务的情况。并根据端口扫描结果,进而使用相应的工具和手段进行渗透攻击。目前,被广泛使用的网络扫描工具包括nmap,masscan等,这些工具可以分别利用基于tcp协议和udp协议的检测技术对主机的端口开放进行检测,其中,基于tcp协议的检测技术主要利用tcp三次握手协议在不同阶段的返回结果对目标ip的tcp端口开放情况进行检测,基于udp协议的检测技术主要根据是否有icmp不可达包来判断udp端口的开放情况。相较而言,基于tcp协议的网络扫描技术的适用范围更广,检测结果更加准确,在网络攻击中应用的也更为广泛。

因此,如果在网络流量监测中能对基于tcp协议的网络扫描行为进行精确检测,及时采取有针对性的阻拦措施,就可以有效减少网络安全事件发生的概率,提升网络安全防护水平。然而当前,大部分网络入侵检测系统采用的端口扫描技术通常以一个时间窗口内单个主机发起主动连接的次数是否超过设定的阀值作为分析依据,没有充分考虑扫描行为建立的tcp连接的特征,易于被进行低频扫描的攻击者躲避。



技术实现要素:

本发明的目的是提供一种基于tcp流状态的网络扫描检测方法及检测系统,其考虑正常的tcp流会经历tcp的三次握手阶段,数据交互阶段和连接断开阶段,而非正常的tcp流一般只经历tcp三次握手的全部或部分阶段以及异常阶段,因而通过分析每个主机主动建立的tcp流在不同状态的比率同样可以检测网络扫描行为。所以本方案在高频扫描检测的基础上增设了低频扫描检测,解决扫描主机发起的主动连接的请求频率较低,无法直接通过建立的tcp连接数量进行判断的问题,实现低频扫描,更全面地实现扫描检测,提高网络扫描检测结果的可靠性。

一方面,本发明提供的一种基于tcp流状态的网络扫描检测方法,包括如下步骤:

s1:实时采集网络出口镜像流量数据包,并基于所述流量数据包创建tcp流的状态存储结构或者更新相匹配的tcp流的状态存储结构;

所述状态存储结构包括tcp流标识、tcp流主动发起连接请求一方的ip地址、tcp流的当前状态阶段以及tcp流更新时间戳;

tcp流的状态阶段类型分为:第一次握手阶段,第二次握手阶段,第三次握手阶段,数据交互阶段,连接断开阶段和异常阶段;

其中,若流量数据包所在tcp流的状态存储结构不存在,则创建tcp流的状态存储结构;若流量数据包所在tcp流的状态存储结构已存在,则更新状态存储结构中tcp流的当前状态阶段;

s2:周期性对每个发起主动连接的ip地址src进行高频扫描检测,若ip地址src对应存在高频扫描行为,将所述ip地址src加入扫描告警名单;若不存在,再对所述ip地址src执行步骤s3;

s3:对s2中不存在高频扫描行为的ip地址src进行低频扫描检测,若所述ip地址src对应存在低频扫描行为,将所述ip地址src加入扫描告警名单,否则认定所述ip地址src不存在扫描行为;

其中,若所述ip地址src满足下述不等式,则存在对应低频扫描行为;若不满足,则不存在低频扫描行为;

式中,dt_threash为预设的低频扫描触发阈值,表示基于各个tcp流的状态存储结构统计的当前周期内属于所述ip地址src发起的连接请求并处于第一次握手阶段,第二次握手阶段,第三次握手阶段以及异常阶段的tcp流总数量;

表示基于各个tcp流的状态存储结构统计的当前周期内属于所述ip地址src发起的连接请求并处于各个状态阶段的tcp流总数量。

本发明通过研究发现正常的tcp流会首先通过tcp三次握手协议建立连接,然后进行数据交互,最后断开连接。而网络扫描tcp流一般仅完成tcp三次握手协议的全部或部分过程,还有少量的tcp流通过tcp标志位的错误置位来扫描网络。因此,为了更加精确的检测网络扫描,本发明提出了高频和低频网络扫描,尤其是针对低频网络扫描,本发明将tcp流的状态划分为第一次握手,第二次握手,第三次握手,数据交互,连接断开和异常等6个阶段,并基于网络扫描的建立的tcp连接大部分处于本方法提出的六个阶段中的前三个阶段(st=1,2,3)和异常阶段(st=6),从而统计每个主机主动建立的tcp流在不同阶段所占的比例进行检测网络低频扫描行为。本发明同时考虑了高频扫描和低频扫描的情况,可以更加精准地检测出基于tcp的网络扫描行为。

进一步优选,步骤s2中对发起主动连接的ip地址src进行高频扫描检测的过程,均按照如下规律判断:若所述ip地址src满足下述不等式,则存在对应的高频扫描行为;若不满足,则不存在对应的高频扫描行为;

式中,tr_threash为预设的高频扫描触发阀值。

其中,高频扫描是针对统计单个周期内主机发起的建立的tcp连接数量是否超过过高频扫描触发阈值来进行检测的。本发明实现高频扫描检测时,首先,基于各个tcp流的状态存储结构统计当前周期内属于该ip地址src发起的连接请求并处于各个状态阶段的tcp流总数量;然后,判断统计的属于该ip地址src发起的连接请求并处于各个状态阶段的tcp流总数量是否大于或等于预设的高频扫描触发阀值,若是,存在对应的高频扫描行为;否则,不存在。

进一步优选,步骤s1中tcp流的状态存储结构的更新是表示基于流量数据包中的标志位并按照预设更新规律更新tcp流的当前状态阶段,所述更新规律如下:

a:当存储了流量数据包相匹配的tcp流的状态存储结构中是第一次握手阶段时,若流量数据包的syn标志位和ack标志位均为1,则将相匹配的tcp流的状态存储结构中tcp流的状态阶段更新为第二次握手阶段;

b:当存储了流量数据包相匹配的tcp流的状态存储结构中是第二次握手阶段时,若流量数据包的ack标志位为1,则将相匹配的tcp流的状态存储结构中tcp流的状态阶段更新为第三次握手阶段;

c:当存储了流量数据包相匹配的tcp流的状态存储结构中是第三次握手阶段时,若流量数据包的ack标志位和psh标志位均为1,则将相匹配的tcp流的状态存储结构中tcp流的状态阶段更新为数据交互阶段;

d:当存储了流量数据包相匹配的tcp流的状态存储结构中是数据交互阶段时,若流量数据包的fin标志位均为1,则将相匹配的tcp流的状态存储结构中tcp流的状态阶段更新为连接断开阶段;

e:当存储了流量数据包相匹配的tcp流的状态存储结构中不论是第一次握手阶段、第二次握手阶段、第三次握手阶段或数据交互阶段时,若流量数据包的syn标志位和fin标志位均为1或者rst标志位为1时,均是将相匹配的tcp流的状态存储结构中tcp流的状态阶段更新为异常阶段;若出现其他标志位的情况,相匹配的tcp流的状态存储结构均保持不变。

每条tcp流都可以根据当前的状态阶段和捕获到的流量数据包对tcp流状态进行设置。需要说明是,文中会指明为1的标志位,没有说明的标志位则为0。

进一步优选,步骤s1中创建tcp流的状态存储结构时,设定tcp流的当前状态阶段为第一次握手阶段。

进一步优选,步骤s1中基于所述流量数据包创建tcp流创建状态存储结构或者更新相匹配的tcp流的状态存储结构的执行过程如下:

s11:判断流量数据包所在tcp流的状态存储结构是否已构建,若没有构建,执行s12;若已构建,执行s13;

其中,tcp流为tcp双向流,且主动发起tcp连接请求一方不同时的流量数据包属于不同tcp流;

s12:判断流量数据包是否是tcp请求连接包,若是,创建tcp流的状态存储结构并设置tcp流的状态阶段为第一次握手阶段;否则,停止对所述流量数据包的分析;

其中,若流量数据包中syn标志位为1,ack标志位、psh标志位、fin标志位均为0时,所述流量数据包为tcp请求连接包;

s13:基于流量数据包中的标志位并按照预设更新规律更新tcp流的当前状态阶段。

其中,tcp双向流理解如下:

若定义fi=(host1,hp1,host2,hp2)表示tcp流fi,host1和hp1表示tcp流一端的主机ip地址和端口,host2和hp2表示tcp流另一端的主机ip地址和端口;那么fi=(host1,hp1,host2,hp2)和fj=(host2,hp2,host1,hp1)是表示同一条tcp流,即两端主机相同时,一个是tcp连接请求包与一个tcp回复包时,两个数据包同属于同一tcp流,如a向b发送tcp连接请求,b向a回复请求,此时该两个过程的数据包属于同一tcp流。

“主动发送tcp连接请求一方不同时的数据包属于不同tcp流”,如下理解:

如a向b发送tcp连接请求,以及b向a发送tcp连接请求时,两个过程的数据包不属于同一tcp流。

进一步优选,周期性对每个发起主动连接的ip地址进行扫描检测之前或者之后对各个tcp流的状态存储结构进行老化鉴定,并对鉴定出老化的tcp流的状态存储结构进行回收;

其中,tcp流的状态存储结构中tcp流更新时间戳与当前时间戳的差值大于预设的时间戳阀值时,对应tcp流的状态存储结构已老化。

由于每个tcp流的状态存储结构中设有tcp流更新时间戳,因此根据tcp流更新时间戳与当前时间戳的差值来鉴别是否老化。并对鉴定出老化的tcp流的状态存储结构进行回收可以使得前述步骤s2和步骤s3的高频扫描与低频扫描检测中主要统计的tcp流为未老化的tcp流。本发明未限定老化处理过程是扫描检测之后或之前。

进一步优选,tcp流的状态存储结构的格式如下:

ti=(fi,src,st,tm)

式中,ti表示tcp流fi的状态存储结构,fi表示tcp流的标识,src表示流fi主动发起连接请求一方的ip地址;st表示tcp流的当前状态阶段,tm表示流更新的时间戳。

进一步优选,步骤s1采集流量数据包后,还包括:提取流量数据包中的十元组信息,其中,所述十元组信息包括源ip地址、源端口、目的ip、目的端口,协议,syn标志位,ack标志位,psh标志位,fin标志位,时间戳。

其中,十元组信息的格式如下:

<src,sp,dst,dp,pro,syn,ack,psh,fin,tm>

其中,src表示源ip地址,sp表示源端口,dst表示目的ip,dp表示目的端口,pro表示协议,syn表示syn标志位,ack表示ack标志位,psh表示psh标志位,fin表示fin标志位,tm表示时间戳。

进一步优选,包括通信连接的流量采集探针和扫描检测分析平台;

所述流量采集探针部署于网络出口位置,用于采集网络出口镜像流量数据包;

所述扫描检测分析平台用于采用s1-s3中的方式进行网络扫描检测。

本发明中扫描检测分析平台用于利用流量采集探针采集的数据包中的信息实现网络扫描检测。其中,流量采集探针由snort+pfring组成。其中,snort用于捕获网络数据包,并提取数据包关键字段;pfring用于减少操作系统软硬中断次数以及从内核空间到用户空间的内存拷贝次数,以提升捕包性能。

进一步优选,所述扫描检测分析平台包括flume模块、kafka模块以及storm模块;

其中,所述flume模块用于传输各个流量采集探针采集的数据包信息至kafka模块;

所述kafka模块用于进行消息队列管理并将消息分配给storm模块上的集群结点;

所述storm模块上部署网络扫描实时检测算法,用于周期性对每个发起主动连接的ip地址进行高频扫描检测、低频扫描检测。

有益效果

1、本发明充分考虑扫描行为建立的tcp连接的特征,进而在高频扫描检测的基础上增设低频扫描检测,可以更加精准地检测出基于tcp的网络扫描行为。这是基于本发明研究发现正常的tcp流会首先通过tcp三次握手协议建立连接,然后进行数据交互,最后断开连接。而网络扫描tcp流一般仅完成tcp三次握手协议的全部或部分过程,还有少量的tcp流通过tcp标志位的错误置位来扫描网络,即基于网络扫描的建立的tcp连接大部分处于本方法提出的六个阶段中的前三个阶段(st=1,2,3)和异常阶段(st=6),本发明通过统计每个主机主动建立的tcp流在前三个阶段(st=1,2,3)和异常阶段(st=6)所占的比例进行检测网络低频扫描行为,有效解决扫描主机发起的主动连接的请求频率较低,无法直接通过建立的tcp连接数量进行判断的问题。

2、本发明还针对据tcp流更新时间戳与当前时间戳的差值来鉴别是否老化,并对鉴定出老化的tcp流的状态存储结构进行回收可以使得前述步骤s2和步骤s3的高频扫描与低频扫描检测中主要统计的tcp流为未老化的tcp流,由于已老化的tcp流其实对网络扫描的威胁已可以忽略或者过时,因此,本发明通过老化回收手段可以进一步提高了网络扫描检测结果的可靠性,避免统计大量已老化的tcp流。

附图说明

图1是本发明提供的tcp流的状态阶段创建更新流程示意图;

图2是本发明提供的tcp流的状态阶段转化示意图;

图3是本发明提供的周期性网络扫描检测流程的示意图;

图4是本发明提供的检测系统的部署示意图。

具体实施方式

下面将结合实施例对本发明做进一步的说明。

本发明提出了一种基于tcp流状态的网络扫描检测方法及检测系统,该方法将tcp流的状态阶段分为6个阶段,在网络扫描检测过程中不仅考虑了主机在单个时间窗口(检测周期)内发起主动tcp连接请求的次数,还考虑了主机所创建的tcp流在不同状态阶段的比例,从而可以更加准确地发现网络端口扫描行为。为了实现本发明所述网络扫描检测方法,本发明主要分为两部分:一:流量数据包采集以及tcp流的状态阶更新;二:基于各个tcp流周期性对每个发起主动连接的ip地址进行网络扫描检测。应当理解,该两部分为并行进行的。

第一部分中流量数据包采集以及tcp流的状态阶更新:s1实时采集网络出口镜像流量数据包,并基于所述流量数据包创建tcp流的状态存储结构或者更新相匹配的tcp流的状态存储结构。

本发明首先实时采集网络出口镜像流量数据包。本发明提取流量数据包中的十元组信息,本实施例中用<src,sp,dst,dp,pro,syn,ack,psh,fin,tm>表示数据包的十元组信息,其中src表示源ip地址,sp表示源端口,dst表示目的ip,dp表示目的端口,pro表示协议,syn表示syn标志位值,ack表示ack标志位值。需要说明的是,本发明是针对基于tcp协议的端口扫描行为,因此,本方法只对基于tcp协议的数据包进行分析,并提取数据包的十元组信息。

其次,利用扫描检测模块对采集的数据包十元组进行分析。

本发明涉及的tcp流为tcp双向流,且tcp流fi的状态存储结构采用如下格式表示:

ti=(fi,src,st,tm)

其中,fi表示流的标识;src表示流fi主动发起连接请求一方的ip地址;st表示tcp流的当前状态,本方法将tcp流的状态分为6个阶段,即第一次握手阶段,第二次握手阶段,第三次握手阶段,数据交互阶段,连接断开阶段和异常阶段,并分别用数值1~6来依次表示;tm表示流更新的时间戳。如图1所示,本发明利用流量数据包的十元组信息对相匹配的tcp流进行分析,其过程如下:

s11:判断流量数据包所在tcp流的状态存储结构是否已构建,若没有构建,执行s12;若已构建,执行s13;

从tcp流fi的状态存储结构以及数据包的十元组信息可知,本发明利用数据包的十元组信息可以查询出流量数据包相匹配的tcp流及其对应的状态存储结构。

s12:判断流量数据包是否是tcp请求连接包,若是,创建tcp流的状态存储结构并设置tcp流的状态阶段为第一次握手阶段,即将st设置为1;否则,停止对所述流量数据包的分析;

其中,若流量数据包中标志位的取值为syn=1,ack=0,psh=0,fin=0时,所述流量数据包为tcp请求连接包;

s13:基于流量数据包中的标志位并按照预设更新规律更新tcp流的当前状态阶段。

如图2所述,当tcp流fi的存储结构初始创建时,即首次接收到syn=1的数据包时,其当前状态将设置为第一次握手阶段,即st=1。

当存储了流量数据包相匹配的tcp流的状态存储结构中是第一次握手阶段时,若接收到syn=1,ack=1的流量数据包时,其当前状态将设置为第二次握手阶段,即st=2。若接收到rst=1或fin=1,syn=1的数据包时,其状态将会设置为异常阶段,即st=6,这是因为正常的tcp流不会出现syn和fin同时置位为1的情况,同时,不会在第一次握手阶段就发出重置连接的请求,出现这两种情况时,很有可能发起连接的主机正在利用扫描工具进行端口扫描。若出现其它标志位置位的情况,则tcp流fi的当前状态阶段保持不变。其中,rst是从流量数据包的ip包头和tcp包头获取。

当存储了流量数据包相匹配的tcp流的状态存储结构中是第二次握手阶段时即st=2,若ack=1的流量数据包时,其当前状态将设置为第三次握手阶段,即st=3。若接收到rst=1或fin=1,syn=1的数据包时,其状态将会设置为异常阶段,即st=6。若出现其它标志位置位的情况,则tcp流fi的当前状态阶段保持不变。

当存储了流量数据包相匹配的tcp流的状态存储结构中是第三次握手阶段时即st=3,若接收到ack=1和psh=1的流量数据包,其状态将会设置为数据交互阶段,即st=4。若接收到rst=1或fin=1,syn=1的数据包时,其状态将会设置为异常阶段,即st=6。若出现其它标志位置位的情况,则tcp流fi的当前状态阶段保持不变。

当存储了流量数据包相匹配的tcp流的状态存储结构中是数据交互阶段时即st=4,若接收到fin=1的流量数据包,其状态将会设置为连接断开阶段,即st=5。若接收到rst=1或fin=1,syn=1的数据包时,其状态将会设置为异常阶段,即st=6。若出现其它标志位置位的情况,则tcp流fi的当前状态阶段保持不变。

由此可知,每条tcp流都可以根据流当前的状态和捕获到的数据包对流状态进行设置。

如图3所示,第二部分:基于各个tcp流周期性对每个发起主动连接的ip地址进行网络扫描检测。

s2:周期性对每个发起主动连接的ip地址进行高频扫描检测,若ip地址对应存在高频扫描行为,将所述ip地址加入扫描告警名单;若不存在,再对所述ip地址执行步骤s3;

针对高配扫描检测,由于扫描主机发起主动连接的请求的频率较高,因此直接通过单个周期内主机发起的建立的tcp连接数量是否超越阀值即可判断是否正在进行扫描攻击。若ip地址满足下述不等式,则存在对应的高频扫描行为;若不满足,则该ip地址不存在对应的高频扫描行为;

式中,tr_threash为预设的高频扫描触发阀值。本发明中该高频扫描触发阈值为通过实验以及经验累积设定的经验值。

s3:对s2中不存在高频扫描行为的ip地址进行低频扫描检测,若所述ip地址对应存在低频扫描行为,将所述ip地址加入扫描告警名单,否则认定所述ip地址不存在扫描行为。

其中,若所述ip地址满足下述不等式,则存在对应低频扫描行为;若不满足,则不存在低频扫描行为;

式中,dt_threash为预设的低频扫描触发阈值,其为经验值。表示基于各个tcp流的状态存储结构统计的当前周期内属于所述ip地址src发起的连接请求并处于第一次握手阶段,第二次握手阶段,第三次握手阶段以及异常阶段的tcp流总数量;

表示基于各个tcp流的状态存储结构统计的当前周期内属于所述ip地址src发起的连接请求并处于各个状态阶段的tcp流总数量。

本实施例中,在周期性对每个发起主动连接的ip地址进行扫描检测之后对各个tcp流的状态存储结构进行老化鉴定,并对鉴定出老化的tcp流的状态存储结构进行回收;其中,tcp流的状态存储结构中tcp流更新时间戳与当前时间戳的差值大于预设的时间戳阀值时,对应tcp流的状态存储结构已老化。

其他可行的实施例中,可以在周期性对每个发起主动连接的ip地址进行扫描检测之前对各个tcp流的状态存储结构进行老化鉴定。

另一方面,如图4所示,基于上述基于tcp流状态的网络扫描检测方法,还提供了一种检测系统,包括:通信连接的流量采集探针和扫描检测分析平台;

流量采集探针主要由snort+pfring组成。其中,snort用于捕获网络出口处的流量数据包,并提取流量数据包关键字段;pfring用于减少操作系统软硬中断次数以及从内核空间到用户空间的内存拷贝次数,以提升捕包性能。流量采集探针部署在网络出口位置,采用旁路式地的接入方式对网络镜像流量进行采集,并提取出数据包的十元组信息,传输给扫描检测分析中心,由扫描检测分析平台进行进一步分析。

所述扫描检测分析平台由flume+kafka+storm组成。其中flume模块用于传输各个探针采集的数据包十元组信息,并将信息传输给kafka模块进行消息队列管理,kafka模块将产生的消息分配给storm模块上集群结点。模块上部署扫描检测算法定期对每个主机ip地址进行扫描检测,并对长时间没有更新的tcp流进行老化。在算法实施过程中,会设置一个时间窗口,高频扫描触发阀值,低频扫描触发阀值以及分析周期。每个分析周期会对所有发起连接请求的ip地址在前一个时间窗口内建立的tcp流进行统计分析,检测出正在进行高频扫描和低频扫描的网络行为。

扫描检测分析平台会将检测结果存储到mysql数据库中,同时会将十元组信息保存到es数据库中。

综上所述,对于传统的高频扫描,扫描主机会在短时间主动发起大量tcp连接请求,因此分析单个周期内ip地址主动发起tcp连接的请求次数即可检测出。而对于低频扫描,由于正常的tcp流会经历tcp的三次握手阶段,数据交互阶段和连接断开阶段,而非正常的tcp流一般只经历tcp三次握手的全部或部分阶段以及异常阶段,所以通过分析每个主机主动建立的tcp流在不同状态的比率同样可以检测网络扫描行为。本方法同时考虑了高频扫描和低频扫描的情况,因此,可以更加精准地检测出基于tcp的网络扫描行为。

需要强调的是,本发明所述的实例是说明性的,而不是限定性的,因此本发明不限于具体实施方式中所述的实例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,不脱离本发明宗旨和范围的,不论是修改还是替换,同样属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1