zoukankan      html  css  js  c++  java
  • TCP中SYN洪水攻击

    在查看TCP标识位SYN时,顺便关注了一下SYN Flood,从网上查阅一些资料加以整理,SYN洪水攻击利用TCP三次握手。

    1.SYN洪水介绍

      当一个系统(客户端C)尝试和一个提供了服务的系统(服务器S)建立TCP连接,客户端C和服务端S会交换一系列报文。 

      正常的3次握手连接:首先是C发送一个SYN报文给服务端S,然后这个服务端发送一个SYN-ACK包以回应C,接着,C就返回一个ACK包来实现一次完整的TCP连接。就这样,C到服务端的连接就建立了,这时C和服务端就可以互相交换数据了。

      SYN洪水:在S返回一个确认的SYN-ACK包的时候,S可能由于各种原因不会接到C回应的ACK包。这个也就是所谓的半开放连接,S需要 耗费一定的数量的系统内存来等待这个未决的连接,虽然这个数量是受限,但是恶意者可以通过创建很多的半开放式连接来发动SYN洪水攻击 。
      攻击者可以通过IP欺骗发送SYN包给受害者系统,这个看起来是合法的,但事实上所谓的C根本不会进行ACK回应服务端S的SYN-ACK报文,这意味着受害者将永远不会接到ACK报文。 而此时,半开放连接将最终耗用受害者所有的系统资源(即使等待ACK包有超时限制),受害者将不能再接收任何其他的请求。

    2.SYN cookie
      SYN cookie用一个cookie来响应TCP SYN请求的TCP实现,在正常的TCP实现中,当S接收到一个SYN数据包,他返回 一个SYN-ACK包来应答,然后进入TCP-SYN-RECV(半开放连接)状态来等待最后返回的ACK包。S用一个数据空间来描述所有未决的连接, 然而这个数据空间的大小是有限的,所以攻击者将塞满这个空间。 在TCP SYN COOKIE的执行过程中,当S接收到一个SYN包的时候,他返回一个SYN-ACK包,这个数据包的ACK序列号是经过加密的,也就是说,它由源地址,端口源次序,目标地址,目标端口和一个加密种子计算得出。然后S释放所有的状态。如果一个ACK包从C返回, S将重新计算它来判断它是不是上个SYN-ACK的返回包。如果这样,S就可以直接进入TCP连接状态并打开连接。这样,S就可以避免守侯半开放连接。(检验加密数据可能会带来一定的CPU运算)
    以上只是SYN COOKIE的基本思路,它在应用过程中仍然有许多技巧,本人也没有具体的实战经验。

    3.SYN COOKIE 防火墙 
      SYN COOKIE 防火墙是SYN cookie的一个扩展,SYN cookie是建立在TCP堆栈上的,他为linux操作系统提供保护。SYN cookie防火墙是linux的一大特色,可以使用一个防火墙来保护你的网络以避免遭受SYN洪水攻击。 


    SYN cookie防火墙的原理:

    client                 firewall server 
    ------ ------------------------------
    1. SYN----------- - - - - - - - - - -> 
    2. <------------SYN-ACK(cookie) 
    3. ACK----------- - - - - - - - - - -> 
    4. - - - - - - -SYN---------------> 
    5. <- - - - - - - - - ------------SYN-ACK 
    6. - - - - - - -ACK---------------> 


    7. -----------> relay the -------> 
    <----------- connection <------- 

    ####################C与防火墙建立连接开始####################
    1:SYN包从C发送到S(计划建立连接)
    2:防火墙在这里扮演S的角色来回应一个带SYN cookie的SYN-ACK包给C 
    3:如果C发送ACK包,接着防火墙和C的连接就建立了

    ####################C与防火墙建立连接结束###################

    ####################防火墙与S建立连接开始####################
    4:防火墙这个时候扮演C的角色发送一个SYN给S 
    5:S返回一个SYN给C 
    6:防火墙扮演C发送一个ACK确认包给S,这个时候防火墙和S的连接也就建立了 

    ###################防火墙与S建立连接结束####################
    7:防火墙转发C和S间的数据 
    如果系统遭受SYN Flood,那么第三步就不会有,S不会收到相应在第一步的SYN包,所以击退了这次SYN洪水攻击。

  • 相关阅读:
    解决iOS app集成共享QQ场地,微信的朋友,朋友等功能圈,不能采用苹果公司的审计问题
    沙朗新闻发布系统汇总
    Cocos2d-x示例:单点触摸事件
    【UVA272】TEX Quotes
    Android多线程的研究(8)——Java5于Futrue获取线程返回结果
    Spring Assert主张 (参议院检测工具的方法-主张)
    redmine使用汇总redmine软件工程过程
    IIS7构造Gzip压缩
    PHPthinking官方论坛
    javaweb学习总结(十一)——使用Cookie进行会话管理
  • 原文地址:https://www.cnblogs.com/auguse/p/11749518.html
Copyright © 2011-2022 走看看