淺談與DNS相關(guān)的攻擊
一 什么是DNS
DNS 是域名系統(tǒng) (Domain Name System) 的縮寫,是因特網(wǎng)的一項(xiàng)核心服務(wù),它作為可以將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使人更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。
DNS 域名結(jié)構(gòu)
通常 Internet 主機(jī)域名的一般結(jié)構(gòu)為:主機(jī)名.三級(jí)域名.二級(jí)域名.頂級(jí)域名。 Internet 的頂級(jí)域名由 Internet網(wǎng)絡(luò)協(xié)會(huì)域名注冊(cè)查詢負(fù)責(zé)網(wǎng)絡(luò)地址分配的委員會(huì)進(jìn)行登記和管理,它還為 Internet的每一臺(tái)主機(jī)分配唯一的 IP 地址。全世界現(xiàn)有三個(gè)大的網(wǎng)絡(luò)信息中心: 位于美國(guó)的 Inter-NIC,負(fù)責(zé)美國(guó)及其他地區(qū); 位于荷蘭的RIPE-NIC,負(fù)責(zé)歐洲地區(qū);位于日本的APNIC ,負(fù)責(zé)亞太地區(qū)。

DNS查詢報(bào)文

DNS應(yīng)答報(bào)文

DNS 的解析流程
全世界有很多的域名需要解析,這些不可能都在一臺(tái)服務(wù)器上解析,那就太慢了。dns解析采用了樹形結(jié)構(gòu)的解析流程。

在上面的解析流程的前面其實(shí)還有一步的,系統(tǒng)在發(fā)出dns解析之前會(huì)先看看本地是否保存了相關(guān)域名的解析,如果有的話會(huì)節(jié)省會(huì)多的時(shí)間。該文件保存在C:\Windows\System32\drivers\etc\hosts,文件保存了本地dns解析的相關(guān)內(nèi)容,如下:
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost
二 DNS相關(guān)的攻擊類型
1 針對(duì)DNS服務(wù)器的DDOS攻擊
第一類 基于主機(jī)耗盡型的dns查詢拒絕服務(wù)攻擊
這類攻擊就是想受害者DNS服務(wù)器發(fā)送大量的dns解析請(qǐng)求包,由于DNs服務(wù)器美妙查詢的次數(shù)有限,使得它忙不過來造成拒絕服務(wù)攻擊。

第二類 基于寬帶耗盡型的DNS反彈式拒絕服務(wù)攻擊(DNS reflector attacks,又稱DNS amplification attacks)
原理:大量主機(jī)偽造受害者ip向胡亮王上的大量開放式遞歸DNS服務(wù)器發(fā)送NDS查詢請(qǐng)求包。由于開放遞歸DNS服務(wù)器并不對(duì)請(qǐng)求包進(jìn)行地質(zhì)真實(shí)性驗(yàn)證,因此都會(huì)進(jìn)行應(yīng)答,這樣受害著將同時(shí)接收到大量的DNS請(qǐng)求應(yīng)答包,堵塞受害DNS服務(wù)器的網(wǎng)絡(luò),最終形成拒絕服務(wù)攻擊。
什么是開放遞歸DNS服務(wù)器?
開放遞歸服務(wù)器是指支持遞歸查詢,同時(shí)對(duì)發(fā)起遞歸查詢請(qǐng)求的客戶端不進(jìn)行身份驗(yàn)證的DNS服務(wù)器。
如下圖:

2 針對(duì)用戶的DNS劫持
簡(jiǎn)單的說什么是dns劫持呢?
就是本來你想訪問攜程的網(wǎng)站www.ctrip.com,結(jié)果輸入域名后返回給你的是百度的服務(wù)器ip,那么自然顯示在瀏覽器中的也就是百度的頁面。
那么我可以根據(jù)上面介紹的dns解析流程來看看哪些地方會(huì)導(dǎo)致返回給你的ip是錯(cuò)誤的。
a 首先是dns服務(wù)器地址被劫持
比如你的路由器中的dns服務(wù)器地址被修改為惡意的dns服務(wù)器。那就一切都完蛋了,你訪問的任何域名都被解析成其他的地址。
但是這種情況一般是不會(huì)發(fā)生的, 因?yàn)閻阂馊藛T登錄不了的路由器修改不了dns服務(wù)器地址,就更修改不了你本機(jī)的dns設(shè)置。不過當(dāng)幾個(gè)小的漏洞結(jié)合在一起的時(shí)候就成為了大的漏洞。比如之前出現(xiàn)過的路由器劫持事件:
漏洞本身依賴3個(gè)部分:
tp-link路由器發(fā)現(xiàn)存在csrf漏洞。
有些用戶的路由器沒有更改用戶名和密碼,使用了默認(rèn)的用戶名和密碼;或者瀏覽器記錄了路由器的登錄狀態(tài)。
firefox和chrome等瀏覽器支持Http Authentication。
這些結(jié)合在一起就導(dǎo)致了這么一個(gè)攻擊流程:
惡意人員構(gòu)造了一個(gè)惡意的web頁面,如www.foo.com/text.html,頁面的功能是自動(dòng)登錄路由器并修改dns地址。
惡意人員構(gòu)造一個(gè)url發(fā)送給被害者,當(dāng)被害者點(diǎn)擊這個(gè)鏈接的時(shí)候就訪問了惡意頁面,就修改了路由器的dns地址。
接下來就簡(jiǎn)單了,惡意人員可以將你想要訪問的網(wǎng)站域名如www.ctrip.com解析到任意其他的地址如1.1.1.1等。(當(dāng)然他不會(huì)解析到這里,要有經(jīng)濟(jì)利益,或者廣告或者ctrip推廣聯(lián)盟url等。)
下面附上tplink的小demo:
- <script>
- function dns(){
- alert('I have changed your dns on my domain!')
- i = new Image;
- i.src='http://192.168.1.1/userRpm/LanDhcpServerRpm.htm?dhcpserver=1&ip1=192.168.1.100&ip2=192.168.1.199&Lease=120&gateway=0.0.0.0&domain=&dnsserver=8.8.8.8&dnsserver2=0.0.0.0&Save=%B1%A3+%B4%E6';
- }
- </script>//修改dns
- <img src="http://admin:admin@192.168.1.1/images/logo.jpg" height=1 width=1 onload=dns()>//登錄
b hosts文件被修改
根據(jù)解析流程來看,如果要解析www.ctrip.com的ip,系統(tǒng)會(huì)首先訪問hosts文件,看看有沒有相關(guān)的綁定:
如果有如下記錄:
1.1.1.1 www.ctrip.com
你們系統(tǒng)就不會(huì)將www.ctrip.com發(fā)送給dns服務(wù)器去解析,直接就將它解析為1.1.1.1。
c DNS服務(wù)器緩存中的映射關(guān)系被修改,又稱緩存投毒攻擊
系統(tǒng)檢測(cè)到hosts文件中沒有響應(yīng)的域名的解析的時(shí)候就會(huì)發(fā)送給本地dns服務(wù)器進(jìn)行解析,解析之前會(huì)先查看緩存中是否存在,如果沒有,再將解析請(qǐng)求發(fā)送給下一個(gè)dns服務(wù)器。結(jié)果返回后將該域名的解析結(jié)果保存到緩存中,方便下一次的解析。
針對(duì)緩存中的解析的攻擊有2種:
傳統(tǒng)的DNS緩存投毒攻擊:惡意人員向受害DNS服務(wù)器發(fā)送域名的解析請(qǐng)求,然后搶在權(quán)威服務(wù)器應(yīng)答前偽造應(yīng)答包發(fā)送給受害服務(wù)器。這樣錯(cuò)誤的解析記錄就保存到了緩存中,那么接下來緩存時(shí)間內(nèi)所有該域名的解析就都是錯(cuò)誤了。這種攻擊偽造的是回答資源記錄,攻擊時(shí)間很短,效率低。

kaminsky緩存投毒攻擊:惡意人員發(fā)送類似這種的查詢請(qǐng)求www24385.ctrip.com到dns服務(wù)器,搶在權(quán)威應(yīng)答前偽造應(yīng)答包發(fā)送給dns服務(wù)器。它修改的是授權(quán)資源記錄,可以大量的嘗試。

d 入侵dns服務(wù)器,修改其中的數(shù)據(jù)庫(kù)記錄。
這種就是比較直接暴力的方法了,當(dāng)然也是最困難的。