http://blog.chinaunix.net/uid-20556054-id-3164909.htmlhtml
SYN- Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,经过向网络服务所在端口发送大量 的伪造源地址的攻击报文,就可能形成目标服务器中的半开链接队列被占满,从而阻止其余合法用户进行访问。这种攻击早在1996年就被发现,但至今仍然显示 出强大的生命力。不少操做系统,甚至防火墙、路由器都没法有效地防护这种攻击,并且因为它能够方便地伪造源地址,追查起来很是困难。它的数据包特征一般 是,源发送了大量的SYN包,而且缺乏三次握手的最后一步握手ACK回复。 例如,攻击者首先伪造地址对 服务器发起SYN请求(我能够创建链接吗?),服务器就会回应一个ACK+SYN(能够+请确认)。而真实的IP会认为,我没有发送请求,不做回应。服务 器没有收到回应,会重试3-5次而且等待一个SYN Time(通常30秒-2分钟)后,丢弃这个链接。
若是攻击者大量发送这种伪造源地址的 SYN请求,服务器端将会消耗很是多的资源来处理这种半链接,保存遍历会消耗很是多的CPU时间和内存,况且还要不断对这个列表中的IP进行 SYN+ACK的重试。最后的结果是服务器无暇理睬正常的链接请求—拒绝服务 商业产品的防御算法 1,syn cookie/syn proxy类防御算法:这种算法对全部的syn包均主动回应,探测发起syn包的源IP地址是否真实存在;若是该IP地址真实存在,则该IP会回应防御设备的探测包,从而创建TCP链接;大多数的国内外抗拒绝服务产品采用此类算法 2,safereset算法:此算法对全部的syn包均主动回应,探测包特地构造错误的字段,真实存在的IP地址会发送rst包给防御设备,而后发起第2次链接,从而创建TCP链接;部分国外产品采用了这样的防御算法。 syn重传算法:该算法利用了TCP/IP协议的重传特性,来自某个源IP的第一个syn包到达时被直接丢弃并记录状态,在该源IP的第2个syn包到达时进行验证,而后放行。 3,综 合防御算法:结合了以上算法的优势,并引入了IP信誉机制。当来自某个源IP的第一个syn包到达时,若是该IP的信誉值较高,则采用syncookie 算法;而对于信誉值较低的源IP,则基于协议栈行为模式,若是syn包获得验证,则对该链接进入syncookie校验,一旦该IP的链接获得验证则提升 其信誉值。有些设备还采用了表结构来存放协议栈行为模式特征值,大大减小了存储量算法
这里,服务器要作两个动做:查表、回应ACK/RST。这种攻击方式显然没有SYN Flood给服务器带来的冲击大,所以攻击者必定要用大流量ACK小包冲击才会对服务器形成影响。按照咱们对TCP协议的理解,随机源IP的ACK小包应该会被Server很快丢弃,由于在服务器的TCP堆栈中没有这些ACK包的状态信息。可是实际上经过测试,发现有一些TCP服务会对ACK Flood比较敏感,好比说JSP Server,在数量并很少的ACK小包的打击下,JSP Server就很难处理正常的链接请求。对于Apache或者IIS来讲,10kpps的ACK Flood不构成危胁,可是更高数量的ACK Flood会形成服务器网卡中断频率太高,负载太重而中止响应。能够确定的是,ACK Flood不但能够危害路由器等网络设备,并且对服务器上的应用有不小的影响。 两点:
1,查找耗时,影响因子为包的个数 2,报文中断耗时, 防御: 利用对称性判断来分析出是否有攻击存在。所谓对称型判断,就是收包异常大于发包,由于攻击者一般会采用大量ACK包,而且为了提升攻击速度,通常采用内容基本一致的小包发送。这能够做为判断是否发生ACK Flood的依据,可是目前已知状况来看,不多有单纯使用ACK Flood攻击,都会和其余攻击方法混合使用,所以,很容易产生误判。服务器
一些防火墙应对的方法是:创建一个hash表,用来存放TCP链接“状态”,相对于主机的TCP stack实现来讲,状态检查的过程相对简化。例如,不做sequence number的检查,不做包乱序的处理,只是统计必定时间内是否有ACK包在该“链接”(即四元组)上经过,从而“大体”肯定该“链接”是不是“活动的”。