Smurf攻击和DNS反射放大攻击

2014-12-10 • 技术文章评论

最近几天在新闻中频繁提到DNS反射攻击,之前在微博上也经常说起,本文来简单记叙其原理并顺便介绍比较老的Smurf攻击。

Smurf攻击

Smurf攻击是一种比较老的放大攻击方式了。其原理是向网络广播地址发送ICMP请求(如ping),路由将请求转发给该网段下的所有机器。这个ICMP请求的源地址伪造为攻击目标,如果收到请求的机器都响应这个请求,大量的数据就会流向伪造的目标地址,此之谓“放大”。

一台机器发出这样的请求作为DDoS攻击显然压力不足,所以假如有大量的“肉鸡”或者说是僵尸网络服务器可以一起上,每个机器打满网卡速率放出请求,然后再进行一次放大,效果就完全不一样了。不过,现在一般都把路由配置为不转发这种ICMP给网段内的机器,所以这种攻击目前比较少了。

DNS反射放大攻击

DNS反射放大攻击的原理也是类似的。网络上有大量的开放DNS解析服务器,它们会响应来自任何地址的解析请求。我们发出的解析请求长度是很小的,但是收到的结果却是非常大的,尤其是查询某一域名所有类型的DNS记录时,返回的数据量就更大,于是可以利用这些解析服务器来攻击某个目标地址的服务器,而且是利用被控制的机器发起伪造的解析请求,然后解析结果返回给被攻击目标。由于DNS解析一般是UDP请求,不需要握手,源地址属性易于伪造,而且部分“肉鸡”在平时本来就是合法的IP地址,我们很难验证请求的真实性和合法性。DNSSEC是一种可以防止缓存投毒的机制,另外,如果DNS本身抗压能力不行,而且对方请求量过大的话,也会影响到DNS本身的服务。目前此类攻击的规模在数百Gbps级别。

其它形式的放大攻击

NTP:使用MONLIST命令可以获取与目标NTP Server进行过同步的最后600个客户机IP。这意味着,一个很小的请求包,就能获取到大量的活动IP地址组成的连续UDP包。

SNMP:发送GetBulk请求来枚举MIB。

CHARGEN:用于调试和测量的工具协议。无视输入,返回任意字符。UDP协议下收到一个封包就会回一个封包回去;TCP下不断发包给客户端。

总之,放大攻击一般都有以下特点:可以轻易地伪造源地址,响应的数据量大于请求数据量好多倍。

参考资料与扩展阅读

http://blog.cloudflare.com/deep-inside-a-dns-amplification-ddos-attack/

http://blog.cloudflare.com/technical-details-behind-a-400gbps-ntp-amplification-ddos-attack/

https://www.us-cert.gov/ncas/alerts/TA13-088A

http://blog.sina.com.cn/s/blog_459861630101b4wf.html

http://drops.wooyun.org/tips/2106

PDF: An Analysis of DrDoS SNMP/NTP/CHARGEN Reflection Attacks