分布式拒绝服务攻击(Distributed Denial of Service),是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击。
DDoS 是一种基于 DoS 的特殊形式的拒绝服务攻击。单一的 DoS 攻击一般是采用一对一方式,利用网络协议和操作系统的缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。与 DoS 相比,DDos 借助数百上千台攻击机形成集群,发起的规模更大,更难防御的一种进攻行为。
ICMP 用于在 IP 主机,路由器之间传递控制消息(网络是否连通,主机是否可达,路由是否可用等)。ICMP 虽然不传递用户数据,但是对于用户数据的传递起着重要的作用。ICMP Flood 通过对目标系统发送海量的数据报,就可以令目标主机瘫痪,形成洪泛攻击。
UDP 协议是一种无连接的协议,在 UDP Flood 中,攻击者通常发送大量伪造 IP 地址的 UDP 报去冲击 DNS 服务器,Radius 认证服务器,流媒体视频服务器等,造成服务不可用。
上述的两种是比较传统的流量型攻击,技术含量较低,以占满网络带宽使得正常用户无法得到服务为攻击方式,攻击效果通常依赖于攻击者本身的网络性能,而且容易被查找攻击源头。
NTP 是标准的基于 UDP 协议的网络时间同步协议。由于 UDP 无连接的特性,NTP 服务器并不能保证收到报文的源 IP 的正确性。所以,攻击者通过将 IP 报文的源 IP 地址换为靶机的 IP 地址,并向 NTP 服务器发送大量的时间同步报文,这样,NTP 服务器的响应报文就会达到靶机上,沾满靶机网络段的带宽资源,同时也很难去追溯攻击源头。
SYN Flood 是一种利用 TCP 协议缺陷,发送大量伪造的 TCP 连接请求,从而使目标服务器资源耗尽的攻击方式。如果客户端只发起第一次握手,而不响应服务端的第二次握手,那么这条连接就处于半连接状态,服务端会维持这条连接一段时间(SYN Timeout)并不断地重试。但攻击者大量的模拟这种情况,就会沾满整个服务端的连接符号表,并消耗大量的 CPU 资源进行重试操作。而对于 SNY Flood 的防御目前有两种常见的方式,一种是算短 SYN Timeout,另一种是设置 SYN Cookie,并开辟一个数组存放 Cookie,单连接没有真正建立时,不去占用连接符号表。
DNS Query Flood 通过操纵大量的傀儡机,向本网段的域名服务器发送大量域名解析请求,通常这些请求解析的域名是随机生成或网络上根本不存在的域名,由于本地域名服务器无法找到对应的结果,就会通过层层上次给更高级的域名服务器,引起连锁反应,导致本网段内的域名解析服务瘫痪,但一般最多只会瘫痪一小段网络。
HashDos 是一种新型的,基于 Hash 碰撞形成的攻击。随着现在 RESTful 风格的不断普及,json 格式作为数据传输的格式愈发成为主流。但是 json 反序列化为对象时,底层是通过 hash 算法来将字段与属性,属性值进行一一匹配。所以,一旦攻击者知道了我们序列化方式,构造出一段具有严重哈希碰撞的 json 数据,就会使我们服务端序列化的复杂度从 O(1) 暴增到 O(n)。
DDos 的防御主要有两种,一种是针对流量带宽,一种是针对服务端资源。流量带宽一般需要通过运营商采用 ISP 黑洞,近源清洗等策略,在源头(即攻击者所在的网段)进行拦截,而不是等到所有的细流汇聚成猛水时才进行拦截。
而对于服务端的资源,则是当下 DDos 的重灾区,本文以攻防对抗的方式讲述 DDos 的发展历程。
参考文献: