随着僵尸网络的兴起,同时由于攻击方法简单、影响较大、难以追查等特点,分布式拒绝服务攻击(DDoS,Distributed Denial of Service)得到快速壮大和日益泛滥。
成千上万主机组成的僵尸网络为 DDoS 攻击提供了所需的带宽和主机,形成了规模巨大的攻击和网络流量,对被攻击网络造成了极大的危害。更加可怕的是 DDoS 并没有彻底的解决办法,只能依靠各种手段和各个层次的防护进行缓解。
1.背景
2015 年 12 月,国内一家云厂商声称部署在其云平台上的一家知名游戏公司遭遇了峰值流量达到每秒 453.8Gbps 的 DDoS 攻击。
2016 年 9 月,为全世界范围内提供网站托管服务的法国公司 OVH 的创始人兼 CTO 在 Twitter 上发出了一张截图,图中显示了 OVH 的多个服务器同时遭到了峰值接近 1Tbps 的 DDoS 攻击。如下图所示,可以发现这次 DDoS 攻击中单一攻击的吞吐量最高就可达每秒 9300 万个包,即 799Gbps。
2016 年 10 月,黑客通过互联网控制了美国大量的网络摄像头和相关的 DVR 录像机,然后操纵这些肉鸡攻击了美国多个知名网站,包括 Twitter、Paypal、Spotify 在内的网站被迫中断服务,此次攻击影响了大半个美国互联网。
由此可见,DDoS 攻击正变得越来越严重,动辄上百 Gbps 的攻击都十分常见,并且,这样的攻击只会越来越大型。而且,随着网络安全界和黑帽子掌握越来越多的互联网资源,攻击复杂性也一直在增加,相应的,业务和应用所面临的网络 DDoS 挑战也不断增多。
因此,我们必须在 DDoS 威胁、影响关键业务和应用之前,对流量进行检测并加以清洗,确保网络正常稳定的运行以及业务的正常开展。
2.反射攻击
一般而言,我们会根据针对的协议类型和攻击方式的不同,把 DDoS 分成 SYN Flood、ACK Flood、UDP Flood、NTP Flood、SSDP Flood、DNS Flood、HTTP Flood、ICMP Flood、CC 等各类攻击类型。
每一种攻击类型都有其特点,而反射型的 DDoS 攻击是一种新的变种。攻击者并不直接攻击目标服务 IP,而是利用互联网的某些特殊服务开放的服务器,通过伪造被攻击者的 IP 地址、向有开放服务的服务器发送构造的请求报文,该服务器会将数倍于请求报文的回复数据发送到被攻击 IP,从而对后者间接形成 DDoS 攻击。
如下图所示,这里的攻击者(Attacker,实际情况中更多的会利用傀儡机进行攻击)不直接把攻击包发给受害者,而是冒充受害者给放大器(Amplifiers)发包,然后通过放大器再反射给受害者。
在反射型攻击中,攻击者利用了网络协议的缺陷或者漏洞进行 IP 欺骗,主要是因为很多协议(例如 ICMP,UDP 等)对源 IP 不进行认证。同时,要达到更好的攻击效果,黑客一般会选择具有放大效果的协议服务进行攻击。总结一下就是利用 IP 欺骗进行反射和放大,从而达到四两拨千斤的效果。
3.Smurf 攻击
Smurf 攻击是经典的 DDoS 攻击,Smurf 攻击是以最初发动这种攻击的程序名 Smurf 来命名。这种攻击方法结合使用了 IP 欺骗和 ICMP 回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。
攻击的过程大致是这样的:Attacker 向一个具有大量主机和因特网连接的网络广播地址发送一个欺骗性 Ping 包,而欺骗性 Ping 分组的源地址就是 Victim(9.9.9.9)希望攻击的目标。路由器接收到这个发送给 IP 广播地址(1.1.1.255)的分组后,由于 ICMP 并不会进行握手而验证源 IP 地址,路由器认为这就是广播分组,进而会对本地网段中的所有主机(1.1.1.2,1.1.1.3,1.1.1.4,1.1.1.5,1.1.1.6) 进行广播。网段中的所有主机都会向欺骗性分组的 IP 地址发送 echo 响应信息。如果这是一个很大的以太网段,可能会有上百台主机对收到的 echo 请求进行回复,这些目标系统很快就会被大量的 echo 信息吞没,这样就能轻而易举地阻止该系统处理其它任何网络传输,从而达到拒绝为正常系统服务的结果。
这种攻击不仅影响目标系统,还影响目标公司的因特网连接。那么如何防止这种类型的攻击?
a. 阻塞 Smurf 攻击的源头。Smurf 攻击依靠攻击者的力量使用欺骗性源地址发送 echo 请求,用户可以使用路由器的访问控制来保证内部网络中发出的所有传输信息都具有合法的源地址,以防止这种攻击。
b. 阻塞 Smurf 的反弹站点。用户可以有两种选择以阻塞 Smurf 攻击的反弹站点。第一种方法可以通过 ACL 阻止所有入站 echo 请求,这样可以防止这些分组到达自己的网络。如果不能阻塞所有入站 echo 请求,用户就需要让自己的路由器把网络广播地址映射成为 LAN 广播地址
4.DNS 反射攻击
DNS 服务是整个互联网的基础服务,在我们链接互联网的时候,需要通过 DNS 解析将域名转化成对应的 IP 地址。理论上来说 ISP 的 DNS 服务器只响应来自它自己客户 IP 的 DNS Query 响应,但事实上互联网上大量 DNS 服务的默认配置缺失,导致了会响应所有 IP 的 DNS Query 请求。
同时,DNS 大部分使用 UDP 协议,UDP 协议没有握手过程让其去验证请求的源 IP。如下图所示,攻击者(实际上是攻击者控制的傀儡机)发送大量伪造了 Victim IP 的请求给 DNS 服务器,DNS 服务器成为放大器将 DNS 响应回复给受害者。
下面再来看一下 DNS 如何将请求数据包进行放大,输入(x.x.x.x为 DNS 服务器 IP):
dig ANY isc.org @x.x.x.x
返回结果,这里为了节约篇幅,我们省略了大部分的响应内容。我们可以看到,响应的内容远远大于请求的数据包内容,这里就产生了放大的效果。
; <<>> DiG 9.7.3 <<>> ANY isc.org @x.x.x.x
;; global options: +cmd
;; Got answer:
………………………………….此处省略具体请求内容…………………………………………
isc.org. 484 IN RRSIG A 5 2 7200 20121125230752 20121026230752 4442 isc.org. ViS+qg95DibkkZ5kbL8vCBpRUqI2/M9UwthPVCXl8ciglLftiMC9WUzq Ul3FBbri5CKD/YNXqyvjxyvmZfkQLDUmffjDB+ZGqBxSpG8j1fDwK6n1 hWbKf7QSe4LuJZyEgXFEkP16CmVyZCTITUh2TNDmRgsoxrvrOqOePWhp 8+E=
不幸的是,目前互联网上存在大量的 DNS 服务器可以被利用,黑客使用网络扫描器工具可以很容易的发现这些 DNS 服务器并加以利用。这需要:
a. 如果您是 DNS 的管理员,需要加固 DNS 服务器,可以按照下面的配置关闭递归功能和限制可查询的 IP 地址。
options { recursion no;};
options { allow-query {192.168.1.0/24;};};
b. 如果是受害者,首先可以通过网络层的 ACL 规则来防御, 或者使用抗 DDoS 系统进行流量清洗,目前大部分的云服务商都有这类功能。
5.NTP 反射攻击
NTP 是网络时间协议(Network Time Protocol)的简称,是用来使计算机时间同步化的网络协议。NTP 包含一个 monlist 功能,也被称为 MON_GETLIST,主要用于监控 NTP 服务器,NTP 服务器响应 monlist 后就会返回与 NTP 服务器进行过时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多有 100 个响应包。我们可以通过 ntpdc 命令向一个 NTP 服务器发送 monlist 以及结合抓包来看下实际的效果。
ntpdc -n -c monlist x.x.x.x | wc -l
602
在上面的命令行中我们可以看到一次含有 monlist 的请求收到了 602 行数据,除去头两行是无效数据外,正好是 600 个客户端 IP 列表,并且从上图中的 wireshark 中我们也可看到显示有 101 个 NTP 协议的包,除去一个请求包,正好是 100 个响应包。
a. 如果作为 NTP 管理员,需要加固 NTP 服务,NTP 服务器升级到 4.2.7p26 或者更高的版本。关闭现在 NTP 服务的 monlist 功能,在ntp.conf 配置文件中增加选项
disable monitor
b. 如果是受害者,如何防御 NTP 反射和放大攻击?首先可以通过网络层的 ACL 规则来防御, 或者使用抗 DDoS 系统进行流量清洗,目前大部分的云服务商都有这类功能。
6.SSDP 反射攻击
互联网上家用路由器、网络摄像头、打印机、智能家电等智能设备普遍采用 UPnP(即插即用)协议作为网络通讯协议, 而 UPnP 设备的发现是通过源端口为 1900 的 SSDP(简单服务发现协议)进行相互感知。
利用 SSDP 协议进行反射攻击的原理与利用 DNS 服务、NTP 服务类似,都是伪造成被攻击者的 IP 地址向互联网上大量的智能设备发起 SSDP 请求,接收到请求的智能设备根据源 IP 地址将响应数据包返回给受害者。随着物联网和智能设备的快速发展和普及,利用智能设备展开 DDoS 攻击会越来越普遍。SSDP 的请求报文示例如下:
M-SEARCH * HTTP/1.1
HOST: 1.2.2.3:1900
MAN: “ssdp:discover”
MX: 1
ST: urn:dial-multiscreen-org:service:dial:1
返回的报文如下:
HTTP/1.1 200 OK
CACHE-CONTROL: max-age = 60
EXT:
LOCATION: http://1.2.3.4:5200/Printer.xml
SERVER: Network Printer Server UPnP/1.0 OS 1.29.00.44 06-17-2009
ST: upnp:rootdevice
USN: uuid:Samsung-Printer-1_0-mrgutenberg::upnp:rootdevice
那么该如何防护 SSDP 攻击呢?
a. 对于不需要即插即用服务的设备,关闭即插即用服务。
b. 在被 SSDP DDoS 攻击的时候,通过网络设备的 ACL 规则过滤 SSDP 指纹过滤。或者引入 DDoS 防护系统。
7.小结
这里我们引入一个学术名词,带宽放大因子(BAF, Bandwidth Amplification Factor),它表示的是请求报文与响应报文的比例。对于各种协议的反射放大攻击,由于其不同版本的实现机制各不相同,加上对请求数据支持的多样性,同一服务的 BAF 值也会存有一定的差异,我们通过实验对比了各种协议的实验 BAF,可以让大家直观感受各种反射攻击的威力,了解攻击放大的倍数。
反射 DDoS 攻击由于难以追踪、且不需要大量的肉鸡等特点,越来越流行,势必会对业务造成很大的威胁。除了需要各方通力合作对互联网上的设备和服务进行安全管理和安全配置消除反射站点之外,还需要在服务端做好防御准备,比如增加 ACL 过滤规则和 DDoS 清洗服务。目前大量的云厂商都提供 DDoS 流量的清洗服务,可以直接使用。
参考文档:
http://www.freebuf.com/articles/network/76021.html
http://www.aqniu.com/industry/11331.html
http://techchannel.att.com/play-video.cfm/2014/8/6/
https://blog.cloudflare.com/the-ddos-that-almost-broke-the-internet/
https://blog.cloudflare.com/deep-inside-a-dns-amplification-ddos-attack/
相关阅读: