zoukankan      html  css  js  c++  java
  • 【DDOS】tcp攻击 转

    前言

    TCP协议,相信对于每一个开发工程师都不陌生。由于该协议是一个面向连接,可靠的特性,广泛应用于现在互联网的应用中。如常见的web,ssh,ftp等都是基于TCP协议。目前TCP协议占全网的流量达到80%,因此这也成为黑客主要攻击的类别。

    TCP报文结构

     

    一个TCP报头的标识(code bits)字段包含6个标志位:

    SYN:标志位用来建立连接,让连接双方同步序列号。如果SYN=1而ACK=0,则表示该数据包为连接请求,如果SYN=1而ACK=1则表示接受连接

    FIN:表示发送端已经没有数据要求传输了,希望释放连接

    RST:用来复位一个连接。RST标志置位的数据包称为复位包。一般情况下,如果TCP收到的一个分段明显不是属于该主机上的任何一个连接,则向远端发送一个复位包

    URG:为紧急数据标志。如果它为1,表示本数据包中包含紧急数据。此时紧急数据指针有效

    ACK:为确认标志位。如果为1,表示包中的确认号时有效的。否则,包中的确认号无效

    PSH:如果置位,接收端应尽快把数据传送给应用层, 不必等缓冲区满再发送

    TCP 三次握手与四次挥手

      

    TCP 建立连接:三次握手

    1. client: syn
    2. server: syn+ack
    3. client: ack

    TCP 断开连接:四次挥手

    1. client: fin
    2. server: ack
    3. server: fin
    4. client: ack

    TCP报文的交互过程

    下面是本机浏览器访问www.163.com,使用wireshark抓包的结果:

    这里我们忽略中间的数据传输过程,重点先关注一下头尾处的连接建立我断开连接的部分。  

    TCP连接的建立:主要的目的是为了互相通知对方自己的初始化的sequence Number,这个序号用于IP数据包在网络上乱序到达的时,便于TCP对IP数据包的重排序。 

    客户端的第一个报文如下图: 

    TCP中的syn标志位置为1,序号为 612417286(记为i)

    服务端接收到报文后,对该报文进行确认,并发送自己的sequence number给客户端,故为SYN_ACK包,如下图

    可以看到tcp中syn,ack标志位同时被置为1,服务端确认客户端的报文,Acknowledgement number(确认号)为612417287(i+1),并带上自己的sequence number 为 522111292(记为j)。

    客户端收到后会对发送确认报文,对服务端报文进行确认。如图: 

     

    TCP的ack标志位被置为1,确认号为522111293(j+1)。 

    TCP连接断开: TCP是一个全双工的数量传输协议,所以TCP连接的断开实际上是2个方向上的传输关闭过程。 

    接下来看看报文的交互过程,本例为服务端发起的关闭: 

    首先服务端发送一个FIN报文。通知客户端,服务端不在有数据发送给客户端:

    这里我们可以忽略ack和Acknowledgement number,这个为对前一次客户端报文的确认。我们可以看到TCP中的FIN标志位置为1,sequence number 为522230043(记为k)。 

    客户端收到fin报文后,回复一个ack包确认。 

    这样从服务端到客户端这个方向上的数据传输通道就被关闭,即服务端应用不可以在通过这条连接发送数据给客户端。 

    接下来就是关闭客户端到服务端的传输通道,客户端首先发送fin包,如下图 :

     

    服务端收到后发送确认报文给客户端。 

    这样一来从客户端到服务端的传输通道也关闭了,那么此时两个方向上的传输通道都关闭了,TCP的通信双方就都断开了连接。

    简略的交互示意图如下:

     

    从上述的连接建立和断开方式我们会发现TCP连接的建立和断开涉及多个报文,多个状态之间的转换。那么从攻击者角度看上述过程,我们该怎么利用交互过程进行DDOS攻击呢? 

    TCP攻击分类

    TCP攻击可以简单的分为以下三类:

     1.FLOOD类攻击,例如发送海量的syn,syn_ack,ack,fin等报文,占用服务器资源,使之无法提供服务。

     2.连接耗尽类攻击,如与被攻击方,完成三次握手后不再发送报文一直维持连接,或者立刻发送FIN或RST报文,断开连接后再次快速发起新的连接等,消耗TCP连接资源。  还有一类则比较巧妙,是在我们上述没有做分析的数据传输过程中的利用TCP本身的流控,可靠性保证等机制来达到攻击的目的。

     3. 利用协议特性攻击:例如攻击这建好连接之后,基于TCP的流控特性,立马就把TCP窗口值设为0,然后断开连接,则服务器就要等待Windows开放,造成资源不可用。或者发送异常报文,可能造成被攻击目标奔溃

    ————————————————

    版权声明:本文为CSDN博主「一只IT小小鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/qq_34777600/article/details/81945594

  • 相关阅读:
    进程管理
    磁盘管理
    用户组管理
    Idea 导入(import)项目和打开(open)项目的区别
    SqlServer--转换varchr值‘2993296307’时溢出了整数列 和 修改 字段类型
    C#--Winform--图标控件Chart详解
    SqlServer--存储过程--自定义存储过程
    SqlServer--存储过程--系统和扩展存储过程(不常用)
    SqlServer--视图
    C#--SqlServer--sql语句拼接和带参数的SQL语句
  • 原文地址:https://www.cnblogs.com/oscarli/p/12800480.html
Copyright © 2011-2022 走看看