DDoS攻防战 (一) : 概述

 

  岁寒 而后知松柏以后凋也html

——论语·子罕前端

 

  (此图摘自《Web脚本攻击与防护技术核心剖析》一书,做者:郝永清先生)git

  

  DDoS,即 Distributed Denial of Service ,可译为分散式阻断服务攻击。github

  上图与DDoS的字面已经清楚的表述出了此类攻击的原理,勿需多言。这类攻击泛滥存在的主要缘由之一是网络服务的开放性,这一特色致使了DDoS攻击没法根本杜绝,目前主要应对策略是积极防护与消极防护。算法

 

  典型DDoS的攻击方式:安全

    ·死亡之Ping服务器

  icmp封装于IP报文之中,而IP对于很大的数据载荷采用分片传输的策略,而接收方须要对这些IP分片进行重组,若是接收方的重组算法不能很好地处理意外状况,后果会很严重,典型的意外状况包括:网络

    1.连续分片的偏移量之间不符合它们应该的逻辑关系,攻击者伪造出这样的一系列分包是很容易的;并发

    2.重组完成后的IP头与数据载荷,总长度竟超过了IP报文总长2^16字节(64kB)的限制,一个实现的例子是,前面各分片一概正常,惟有最后一个IP分片的数据载荷尽可能填充到最大,如达到以太网最大传输单元MTU 1500字节上限,这样重组后的报文总长度就达到了约(64kB+1500B-20B-8B=65.44kB)的大小。tcp

    这种攻击方式附加了对目标系统协议栈算法的漏洞利用。

    ·泪滴TearDrop

  泪滴攻击指的是向目标机器发送损坏的IP包,诸如重叠的包或过大的包载荷。借由这些手段,该攻击能够经过TCP/IP协议栈中分片重组代码中的bug来瘫痪各类不一样的操做系统。(此段摘自维基百科中文,实现方式可参考上死亡之Ping)

    ·UDP洪水

      UDP是一种无链接协议,当数据包经过 UDP 发送时,全部的数据包在发送和接收时不须要进行握手验证。当大量 UDP 数据包发送给受害系统时,可能会致使带宽饱和从而使得合法服务没法请求访问受害系统。遭受 DDoS UDP 洪泛攻击时,UDP 数据包的目的端口多是随机或指定的端口,受害系统将尝试处理接收到的数据包以肯定本地运行的服务。若是没有应用程序在目标端口运行,受害系统将对源IP发出 ICMP 数据包,代表“目标端口不可达”。某些状况下,攻击者会伪造源IP地址以隐藏本身,这样从受害系统返回的数据包不会直接回到僵尸主机,而是被发送到被伪造地址的主机。有时 UDP 洪泛攻击也可能影响受害系统周围的网络链接,这可能致使受害系统附近的正常系统遇到问题。然而,这取决于网络体系结构和线速。(此段摘自维基百科中文) 

    ·TCP RST 攻击

  TCP协议存在安全漏洞,正常的TCP链接能够被非法的第三方复位,这是由于TCP链接通信不包含认证的功能。如,在已知链接的五元组的状况下,攻击者能够伪造带有RST/SYN标志的TCP报文或普通数据报文,当其sequence number落在TCP链接的滑动窗口范围内,可能致使会话终止或者虚假数据插入。(这里仅仅提一下,详细可参考文章《从TCP协议的原理来谈谈rst复位攻击》、《忆龙2009:TCP非法复位漏洞及解决方法》)

    ·TCP 全链接攻击

  庞大的攻击群同时地、不断地与目标服务器创建正常的TCP链接,从而严重影响正经常使用户的链接服务。

    ·Syn Flood

  攻击者向目标服务器发送大量(伪造源IP地址、伪造源端口、正确目标IP地址、正确目标端口)tcp syn数据包,目标服务器为了维持这么大量的虚假链接,大量的tcp状态机维持在了SYN_RCVD状态,严重地影响了处理速度与消耗了系统资源,而反观攻击者,伪造并发送这些小数据包,各项资源消耗都极低,对于网络传输速度为3Mb/s的一个攻击者来讲,攻击包的速率大约可达每秒(3Mb/8/40=9830)个,若是网络传输速度达到30Mb/s,单个攻击者的攻击包速率可为98300/s,若是再考虑到分布式攻击,状况将变得极为恶劣。    

 

    ·CC攻击

  CC,即 Chanllenge Collapsar ,可直译为 黑洞挑战,CC攻击是 DDoS 攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求,巧妙之处在于,网络上有许多免费代理服务器,甚至不少都支持匿名代理,因此其优势为:

  1.攻击者事先不须要抓取攻击傀儡,但仍需获得可用的、符合要求的代理 ip:port 列表;

  2.匿名代理,使得追踪变得很是困难,但并不是不可能!

 

  四层及如下的DDoS防护:

  新型攻击方式的产生、流行,必然致使对应防护策略的出现。

  而针对四层及四层如下的DDoS攻击,如今的硬件防火墙大多都能对死亡之Ping、icmp洪水、泪滴等作到很好的防护效果,因此,这里重点介绍SynFlood的若干防护策略:

    SynCookie:等到系统资源到达某一临界点,内核协议栈启用SynCookie机制,进行Syn包源IP:PORT验证,它自己是一种很是巧妙的实现,具体可参考文章《SYN Cookie的原理和实现》;  

    SynProxy:即Syn代理,通常可在前端防火墙上实现(LVS在内核层实现了这一功能,原理为SynCookie+Proxy);

    SynCheck:对Syn包依据必定的规则进行检验,以过滤掉一部分不规则的包;

    SynFirstDrop:Syn首包丢弃策略,但若是攻击者将伪造的Syn报文发送两次,这种方法就失去了效果(国内部分防火墙产品就是采起的这种方法)。

    以上的这些常见防护方法均可以分别经过硬件和软件来实现,通常来说,硬件防火墙处理能力要比软件方法强,但价格也更加昂贵,尽管软件实现性能会有降低,但也没有太差,例如,ipvs工做于内核层,淘宝在大部分网站使用其做为Director,下面是一些官方数据:

  若是在上面这些数据的基础之上,前端Director实现集群以分担系统负载,性能将会更佳,可见软件防火墙在使用的得当的状况之下,能极大下降系统成本,并且性能理想,这是通过淘宝的系统实际验证了的。

  笔者将会在接下来的文章里讲述针对应用层的DDoS攻击的实现、防范,以及一个防火墙内核模块的实现。若有问题或者建议,欢迎留言讨论 :)      

 

 附录:

  参考资料:《Web脚本攻击与防护技术核心剖析》、《TCP-IP详解卷1:协议》、《LVS在淘宝环境中的应用》《LVS在大规模网络环境下的应用

  2004左右,Fr.Qaker先生公开了CC攻击的原理、实现代码、防范方法,结果却被恶意破坏者利用以进行大范围的互联网攻击,接着, Fr.Qaker便开源了本身开发的CC防火墙  :)

  这是Fr.Qaker当时一篇帖子《抗CC防火墙AntiAttackFireWall(AAFW)开源公告及源代码下载

相关文章
相关标签/搜索