本文主要是介绍TCP SYN FLOODS攻击j,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这次参加了安全竞赛,根据给出的流量包来分析恶意流量,正好最近学到了与TCP,所以此次分析一下基于TCP握手的攻击——TCP SYN floods攻击
1.TCP三次握手*
由于这个攻击时基于TCP的三次握手,所以我们首先来了解一下,TCP的三次握手过程:
TCP的三次握手的过程大致可以看作是是TCP客户端为了和服务器端建立连接而做出的一个相互认证的过程。
1)首先客户端发送SYN(同步序列编号)报文给服务器,进入SYN_SEND状态;
2)服务器端收到SYN报文,回应一个SYN,ACK报文 ,进入SYN_RECV状态;
3)客户端收到服务器端的SYN报文,回应一个ACK报文,进入Established(建立连接)状态。
三次握手完成后,TCP客户端和服务器端就成功的建立连接,可以开始传输数据啦!
2.停等协议
停等协议是TCP传输出错时其中的一个处理机制大致流程如下:
3.TCP SYN泛洪攻击*
攻击原理:TCP SYN攻击在前面已经讲过是基于TCP协议的三次握手,在此攻击中,攻击方在试图发送足够多的SYN包而耗尽backlog,当backlog中没有空间时,就不可能再响应新的连接请求,除非TCB能被回收或者从SYN-RECIEVE状态中移除,攻击者在SYN包中加入源IP地址,这样就不会导致主机将已分配的TCB从SYN-RECEVIED状态队列中移除(因为主机将响应SYN-ACK)。因为TCP是可靠的,目的主机在断开半开连接并在SYN-RECIEVED队列中移除TCB之前将等待相当长的时间。在此期间,服务器将不能响应其他应用程序合法的新TCP连接请求。
backlog 是如何耗尽的呢?在此你可能产生疑问,此时我们又将涉及到TCP中的一小部分TCB,TCP Control Block的简称,
在网络传输层,tcp模块中有一个tcb(传输控制模块,transmitcontrolblock),它用于记录tcp协议运行过程中的 变量。对于有多个连接的tcp,每个连接都有一个tcb。tcb结构的定义包括这个连接使用 的源端口、目的端口、目的ip、序号、应答序号、对方窗口大小、己方窗口大小、tcp状态、top输入/输出队列、应用层输出队列、tcp的重传有关变量。
而TCB分配空间的大小取决于接收的SYN包,在发起恶意攻击时,在连接被完全建立或者说连接发起人的返回可达性被证实之前,到达的SYN包将被分配过多的TCB而导致主机的内核内存被耗尽,为了避免这种内存耗尽,操作系统通常给监听接口关联了一个"backlog"队列参数,它同时维护连接的TCB上限数量和SYN-RECEIVED状态。尽管这种方案使主机的可用内存免遭攻击,但是backlog队列本身就带来了一个(小的)受攻击源。当backlog中没有空间时,就不可能再响应新的连接请求。
4.攻击方式
直接攻击
如果攻击者用他们自己的没有经过伪装的IP地址快速地发送SYN数据包,这就是所谓的直接攻击。这种攻击非常容易实现,因为它并不涉及攻击者操作系统用户层以下的欺骗或修改数据包。例如,他可以简单地发送很多的TCP连接请求来实现这种攻击。然而,这种攻击要想奏效攻击者还必须阻止他的系统响应SYN-ACK包,因为任何ACK、RST或ICMP(Internet
Control Message Protocol)包都将让服务器跳过SYN-RECEIVED状态(进入下一个状态)而移除TCB(因为连接已经建立成功或被回收了)。攻击者可以通过设置防火墙规则来实现,让防火墙阻止一切要到达服务器的数据包(SYN除外),或者让防火墙阻止一切进来的包来使SYN-ACK包在到达本地TCP处理程序之前就被丢弃了。
欺骗式攻击
IP地址欺骗。它比直接攻击方式更复杂一点,攻击者还必须能够用有效的IP和TCP报文头去替换和重新生成原始IP报文。对于欺骗式攻击,首先需要考虑的就是选择地址。要使攻击成功,位于伪装IP地址上的主机必须不能响应任何发送给它们的SYN-ACK包。攻击者可以用的一个非常简单的方法,就是仅需伪装一个源IP地址,而这个IP地址将不能响应SYN-ACK包,或许因为这个IP地址上根本就没有主机,或许因为对主机的地址或网络属性进行了某些配置。另一种选择是伪装许多源地址,攻击者会假想其中的一些伪装地址上的主机将不会响应SYN-ACK包。要实现这种方法就需要循环使用服务器希望连接的源IP地址列表上的地址,或者对一个子网内主机做相同的修改。
5.攻击检测
根据它的攻击特点可以知道,它的攻击主要是耗尽内存,让服务器不能响应其他应用程序合法的新TCP连接请求。主要是让连接一直处于SYN-RECIEVE状态,对于此种恶意攻击在许多的流量包中,我们可以通过分析软件例如wireshark来筛选出处于半连接状态的数据包,根据数据包后面的响应情况判断该数据包是正常的请求,还是恶意的攻击流量。
这篇关于TCP SYN FLOODS攻击j的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!