[0031] 为了使本申请所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0032] 本发明利用网桥模式下路由器嵌入式Linux系统转发特性,提出一种防止SYN包攻击方案。
[0033] 实施例一:
[0034] 图1是本发明提供的防止同步包攻击的方法的流程示意图。如图1所示,本发明的方法包括:
[0035] 步骤101,预先在内核注册钩子(HOOK)函数,创建跟踪监测链表和黑名单链表,以及设置SYN包阀值参数和重检间隔时间参数。
[0036] 在本发明基于netfilter架构进行。netfilter是Linux内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(NAT,Network Address Translation),以及基于用户及媒体访问控制(MAC,Media Access Control)地址的过滤和基于状态的过滤、包速率限制等。
[0037] 具体地,netfilter是在Linux内核整个网络流程的若干位置放置了一些检测点,而在每个检测点上注册了HOOK函数进行处理,例如包过滤等,或者用户自定义的功能。
[0038] IP层的HOOK函数包括下面几种:
[0039] NF_IP_PRE_ROUTING,刚刚进入网络层的数据包通过此点,目的地址转换在此检查点进行;
[0040] NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此检查点进行;
[0041] NF_IP_FORWARD:转发包通过此检测点,转发包过滤在此检查点进行;
[0042] NF_IP_POST_ROUTING:所有要通过网络设备出去的包通过此检测点,内置的源地址转换功能在此检查点进行;
[0043] NF_IP_LOCAL_OUT:本机进程的发出包通过此检测点,发出包过滤在此检查点进行。
[0044] 在本发明的具体实施例中,跟踪监测链表包括IP地址字段和TCP连接数据包字段,跟踪监测链表的长度为要跟踪检测的IP地址的数目。通常根据服务器硬件性能,性能较优的服务器可以设置较长的链表长度。
[0045] 黑名单链表包括IP地址字段和黑名单标识位字段,黑名单标识位可以采用数值表示,例如0表示此IP地址永久加入黑名单,不能移除;1表示此IP地址发出的数据包在一段时间内被禁止转发到服务器。
[0046] 在本发明的具体实施例中,SYN包阀值表示每秒允许来自同一IP地址的同步数据包的最大数量。重检间隔时间表示第一次将IP地址加入黑名单链表后,第二次检测到同步数据包达到同步包阀值的时间。
[0047] 步骤102,利用HOOK函数解析客户端向服务器发送的TCP连接数据包,其中客户端和服务器第一次握手发的TCP连接数据包为SYN数据包。
[0048] 在本发明的具体实施例中,TCP三次握手中第一次握手发的TCP连接数据包为带有SYN标识位的SYN数据包,路由器截获客户端向服务器发送的TCP连接数据包,并利用HOOK函数对TCP连接数据包进行解析。
[0049] 步骤103,当来自同一IP地址的SYN数据包的数量达到SYN包阀值时,将该IP地址对应的客户端后续发送的TCP连接数据包添加到跟踪监测链表中。
[0050] 在本发明的具体实施例中,内核拦截通过路由器转发的TCP连接数据包,并且针对该IP地址的TCP连接数据包进行计数统计,统计来自同一IP地址的带有标识位SYN的SYN数据包的数量,统计后对数据包直接放行。
[0051] 通过Jiffes变量差值统计每秒SYN数据包的数量。该Jiffies变量是用来记录自系统启动以来产生的节拍的总数,启动时,内核将该Jiffies变量初始化为0,此后每次时钟中断处理程序都会增加该Jiffies变量的值。
[0052] 如果来自同一IP地址的SYN数据包的数量超过SYN包阀值,则暂时视为该IP地址的客户端发送的TCP连接数据包为非法数据包,因此,当来自同一IP地址的SYN数据包数量达到SYN包阀值时,将该IP地址对应的客户端后续发送的TCP连接数据包添加到跟踪监测链表中进行跟踪。
[0053] 步骤104,对跟踪监测链表中的TCP连接数据包进行解析,如果确定该TCP连接数据包是攻击数据包,则将该TCP连接数据包对应的IP地址添加到黑名单链表中。
[0054] 在本发明的具体实施例中,TCP连接数据包包括序列(SEQ)字段和确认(ACK)字段,根据跟踪监测链表中TCP连接数据包的SEQ和ACK对该TCP连接数据包进行解析。
[0055] 具体地,在客户端和服务器的第一次握手时,路由器截获第一TCP连接数据包,获取SEQ值,假设为X;将第一TCP连接数据包放行发送到服务器;在客户端和服务器的第二次握手时,服务器向客户端返回作为应答的第二TCP连接数据包,路由器截获第二TCP连接数据包,获取ACK值并判断ACK值是否为X+1;获取应答的TCP连接数据包中的SEQ值,假设为Y;如果客户端不是攻击客户端,则会向服务器发送第三TCP连接数据包进行第三次握手,第三TCP连接数据包中的SEQ值应该为Y+1;如果在设定的时间内没有收到客户端发送的TCP连接数据包,即客户端不会发送第三次握手的数据包,让服务器始终处于半连接状态消耗资源,反而不断发送第一次握手的数据包,则确定该TCP连接数据包是攻击数据包,则将该TCP连接数据包对应的IP地址添加到黑名单链表中,将IP地址对应的黑名单标识位设置为1,此后该IP的数据包直接丢弃。
[0056] 步骤105,经过间隔重检间隔时间后,再次统计该IP地址对应的SYN数据包数量,如果SYN数据包数量达到SYN包阈值,则将该IP地址永久保存在黑名单链表中;如果SYN数据包数量没有达到SYN包阈值,则将该IP地址从黑名单链表中删除。
[0057] 在本发明的具体实施例中,在第一次将IP地址加入黑名单链表后的间隔重检间隔时间期限,客户端的TCP连接数据包进入HOOK函数时,查询黑名单链表,如果存在该客户端的IP地址,则直接丢弃此TCP连接数据包。
[0058] 经过间隔重检间隔时间后,客户端的TCP连接数据包进入HOOK函数时,不再查询黑名单链表,再次统计该IP地址对应的SYN数据包数量,并从0开始重新计数此IP地址的TCP连接SYN包数目,如此,给用户一次纠正的机会,可以防止客户端的用户误操作(例如死机,断电导致不发送第三次握手数据包)导致攻击而被永久加入黑名单链表影响正常业务数据。如果网客户端的SYN数据包再次达到阀值,则说明是真正的SYN数据包攻击,将此IP地址的标记为改为0,表示永久丢弃来自该客户端的任何数据包。
[0059] 实施例二:
[0060] 本发明还提供了一种防止同步包攻击的装置,如图2所示,包括:设置模块201、第一处理模块202、第二处理模块203和第三处理模块204,其中,
[0061] 设置模块201,用于预先在内核注册钩子函数、创建跟踪监测链表和黑名单链表,并设置同步包阀值和重检间隔时间;
[0062] 具体地,跟踪监测链表包括IP地址字段和TCP连接数据包字段;跟踪监测链表的长度为要跟踪检测的IP地址的数目。
[0063] 黑名单链表包括IP地址字段和黑名单标识位字段;黑名单标识位为第一值时,表示所述IP地址永久加入黑名单链表,所述IP地址对应的客户端发出的TCP连接数据包直接丢弃;黑名单标识位为第二值时,表示所述IP地址重检间隔时间内在加入黑名单链表,所述IP地址对应的客户端发出的TCP连接数据包在重检间隔时间内无法发送到服务器。
[0064] 同步包阀值表示每秒允许来自同一IP地址的同步数据包的最大数量;重检间隔时间表示第一次将IP地址加入黑名单链表后,第二次检测到同步数据包达到同步包阀值的时间。
[0065] 第一处理模块202,用于利用钩子函数解析客户端向服务器发送的TCP连接数据包,其中客户端和服务器第一次握手发的TCP连接数据包为同步数据包;
[0066] 第二处理模块203,用于当来自同一IP地址的同步数据包的数量达到同步包阀值时,将所述IP地址添加到跟踪监测链表中,对所述IP地址对应的客户端后续发送的TCP连接数据包进行跟踪;
[0067] 具体地,TCP连接数据包包括序列字段和确认字段;第二处理模块在客户端和服务器的第一次握手时,截获客户端向服务器发送的第一TCP连接数据包,获取第一TCP连接数据包的序列值,设为X,其中X为整数;将第一TCP连接数据包放行发送到服务器;在客户端和服务器的第二次握手时,截获服务器向客户端返回作为应答的第二TCP连接数据包,获取第二TCP连接数据包的确认值,所述第二TCP连接数据包的确认值为X+1;获取第二TCP连接数据包的序列值,设为Y,其中Y为整数;判断在预设时间内客户端和服务器是否进行第三次握手;如果截获到客户端向服务器发送的第三TCP连接数据包,获取第三TCP连接数据包序列值,所述第三TCP连接数据包的序列值为Y+1,则确定客户端不是攻击客户端;如果没有截获到客户端向服务器发送的第三TCP连接数据包,而截获到进行第一次握手的第一TCP连接数据包,则确定客户端是攻击客户端,所述攻击客户端发出的TCP连接数据包是攻击数据包。
[0068] 第三处理模块204,用于对跟踪的TCP连接数据包进行解析,如果确定所述TCP连接数据包是攻击数据包,则将所述TCP连接数据包对应的IP地址添加到黑名单链表中。
[0069] 具体地,第三处理模块将所述IP地址对应的黑名单标识位设置为第二值;在所述间隔重检间隔时间内,如果截获到客户端向服务器发送的TCP连接数据包,判断所述客户端的IP地址是否在黑名单链表中;如果所述IP地址在黑名单链表中,则将所述TCP连接数据包进行丢弃。
[0070] 第三处理模块经过所述间隔重检间隔时间后,再次统计所述IP地址对应的每秒同步数据包的数量;如果同步数据包的数量达到同步包阈值,则将所述IP地址对应的黑名单标识位设置为第一值;如果同步数据包的数量没有达到同步包阈值,则将所述IP地址从黑名单链表中删除。
[0071] 所属技术领域的技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,并被通讯设备内部的处理器执行,前述的程序在被执行时处理器可以执行包括上述方法实施例的全部或者部分步骤。其中,所述处理器可以作为一个或多个处理器芯片实施,或者可以为一个或多个专用集成电路(Application Specific Integrated Circuit,ASIC)的一部分;而前述的存储介质可以包括但不限于以下类型的存储介质:闪存(Flash Memory)、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0072] 最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。