关于无效SYN数据包的识别,大三实训课设
SYN洪泛攻击介绍
SYN洪泛攻击是一种典型的DOS攻击,其原理是,由于TCP是一种面向连接、可靠的网络协议,在使用TCP协议传输数据前首先需要通过3次握手建立连接。
SYN洪泛攻击则是针对TCP的特性,利用的就是TCP三次握手机制的缺陷,攻击者建立TCP连接时发送SYN包,SYN是TCP三次握手中的第一个数据包,而当这个服务器返回ACK以后,攻击者不再进行确认,那这个连接就处在挂起的状态,服务器收不到再确认的消息时,会重复发送ACK给攻击者。这样就会更加浪费服务器的资源。攻击者对服务器发送非法大量的这种TCP连接,由于每一个都没法完成握手的机制,所以它就会消耗服务器的内存最后可能导致服务器死机。
SYN洪泛攻击判定
针对SYN洪泛攻击的特点,主机受到SYN洪泛攻击时会收到大量没有响应的SYN包。所以本程序判定受到SYN洪泛攻击的原理即通过判定无效SYN包出现的频率是否达到事先设置的阈值,如果达到了则认为测点受到了SYN洪泛攻击。在系统运行时会设置一个无效SYN包检测量,测点在网络中有两种身份,既可以是请求的发起方也可以是请求的接收方。当测点为接收方时,收到SYN包只有一种情况,即请求方第一次握手时,这时先将检测量加1,之后,如果请求方在本测点响应后还会发送一个ACK包确认,对ACK包中的ack值判断是否为测点响应seq+1,如果是的话则说明连接成功,此前SYN包不是无效SYN包,对检测量减1。当测点为请求方时也会收到SYN包,是在三次握手的第二次,此时数据包中flags字段的SYN和ACK都为1,这种情况不需要对检测量操作。
本项目通过Java后端使用JNI调用C/C++,将结果在前端进行展示。在JNI调用时,每次从网卡中读取一定数量的包,对其无效SYN与阈值进行比较。这时需额外考虑每次抓包数的问题,如果抓包数过少,可能会导致抓包期间统计的TCP数据报无效SYN包检测值不达阈值导致错误判断没有受到SYN洪泛攻击,为了防止这种情况,在C/C++中只有判定受到攻击时才会对检测量进行清空重新计数,否则会累加,此时若用0和1分别代表正常和受到SYN洪泛攻击,返回的为连续1,说明受到攻击,且抓包数大于等于理想抓包数(本课题中定义的理想抓包数即满足抓包数最小且能识别出是否受到攻击)。返回值为有规律的01序列时,也应该判断为受到攻击,之所以会出现0是因为每次抓包数小于理想抓包数。