一、DNS基礎知識:
1.DNS簡介:
DNS 域名服務,用於建立 域名與 ip地址的 一對一 映射。DNS 將域名轉換為 IP地址,以便瀏覽器能夠加載 Internet 資源。
類似於一個翻譯系統,將xxx.com 翻譯為 ip地址(如:192.0.2.254),這種轉換發生在幕后,因此用戶只需記住域名,而不需要記住難記的IP
2.DNS數據包:
DNS數據包使用UDP進行封裝,至於為什么使用UDP進行封裝,可參考 為什么DNS使用UDP協議?
下面是DNS報文格式:
-
Transaction ID(16bit):事務ID,區分DNS應答報文對應哪個請求報文,DNS查詢報文與DNS響應報文的會話ID相同,表示是對這個查詢作出的響應。
-
Queries:其中包括查詢的域名,查詢的類型,查詢的類。
查詢的類型,通常是A類型,表示要查的是域名對應的IP地址。第3節會進行詳細介紹。
查詢類:地址類型,通常為互聯網地址,值為1
-
Answers:一般在響應包,在請求包為空,主要包括name,type,address等,name表示要查的域名,type表示類型,同queries區域的類型,address 即返回的IP地址。
若想知道詳細報文格式,可參考DNS報文格式解析(非常詳細)
3.DNS記錄類型:
DNS記錄是用於解析的數據,最常見的3種記錄為:NS記錄、A記錄、CNAME記錄。
NS記錄
如果DNS給你回應一條NS記錄,就是告訴你,這個家伙是這個域的權威DNS,有事你去問它。
比如在com的DNS里,記錄着baidu.com這個域的DNS,長的大概是這個樣子:
baidu.com. NS ns1.baidu.com.
baidu.com. NS ns2.baidu.com.
baidu.com. NS ns3.baidu.com.
這三條記錄,就是說ns1.baidu.com、ns2.baidu.com、ns3.baidu.com(以下簡稱ns1、ns2、ns3)都是baidu.com域的權威DNS,問任意其中一個都可以(一般都是順序問的,如果連不上第一個,就去找第二個)。
注意,域名后面會比我們平時見到的多一個“.”,這就代表了根,嚴格地說,所有域名后面都應該有這一個“.”的,比如完整的www.baidu.com域名應該是www.baidu.com.,也可以把所有域名都看作有一個.root的后綴,比如www.baidu.com.root,但由於每個域名都有這個后綴,所以干脆就都省略了。
當然在com的權威域名服務器,也記錄ns1,ns2,ns3這幾個的ip地址,會一並返回讓解析器去找這幾個服務器解析。
A記錄
A記錄就是最經典的域名和IP的對應,在ns1.baidu.com里面,記錄着百度公司各產品的域名和IP的對應關系,每一個這樣的記錄,就是一個A記錄,比如下面的3個A記錄(隨意舉的例子,IP都是隨意寫的)。
image.baidu.com A 1.2.3.4
wenku.baidu.com A 5.6.7.8
tieba.baidu.com A 9.10.11.12
如果有人問ns1.baidu.com:“wenku.baidu.com的IP是多少?”,ns1就會找到對應的A記錄或者CNAME記錄並返回。
CNAME記錄
這種記錄比較有趣,你問DNS一個域名,它回CNAME記錄,意思是說,你要解析的這個域名,還有另一個別名,你去解析那個好了。
比如,在ns1中,其實並沒有www.baidu.com
的A記錄,而是一個CNAME記錄:
www.baidu.com CNAME www.a.shifen.com
這就是在告訴遞歸解析器,www.baidu.com
的別名是www.a.shifen.com
,去解析www.a.shifen.com
吧
其他記錄類型
類型 | 描述 |
---|---|
A記錄 | 保存域名的IPv4地址的記錄 |
AAAA記錄 | 保存域名的IPv6地址的記錄 |
NS 記錄 | 存儲 DNS 條目的權威域名服務器 |
CNAME 記錄 | 將一個域或子域轉發到另一個域,不提供 IP 地址 |
MX 記錄 | 將郵件定向到電子郵件服務器 |
TXT 記錄 | 可使管理員在記錄中存儲文本注釋 |
SOA 記錄 | 存儲域的管理信息 |
SRV 記錄 | 指定用於特定服務的端口 |
PTR 記錄 | 把ip地址轉化為域名 |
4.DNS服務器類型:
DNS遞歸解析器
也可以當作local DNS,也稱為DNS解析器。是DNS查詢中的第一站,作為客戶端與 DNS 域名服務器的中間人。從 Web 客戶端收到 DNS 查詢后,遞歸解析器將使用緩存的數據進行響應,或者將向根域名服務器發送請求,接着向 TLD 域名服務器發送另一個請求,然后向權威性域名服務器發送最后一個請求。收到來自包含已請求 IP 地址的權威性域名服務器的響應后,遞歸解析器將向客戶端發送響應。
大多數 Internet 用戶使用他們 ISP 提供的遞歸解析器,但還有其他可用選擇;例如 Google的8.8.8.8。
根域名服務器
一共有13個根域名服務器(並不表示只有13台計算機,13種類型),解析器查詢的第一站,根域名接收到查詢后,告知相應的頂級域名服務器(TLD DNS)所在域地址,如.com域。
頂級域名服務器
例如,.com TLD 域名服務器包含以“.com”結尾的每個網站的信息。如果用戶正在搜索 baidu.com,則在收到來自根域名服務器的響應后,遞歸解析器將向 .com TLD 域名服務器發送查詢,然后將通過針對該域的權威性域名服務器進行響應。
權威域名服務器
遞歸解析的最后一站,查找IP地址的最后一步。此時根據要查詢的域名,返回相應的IP地址或其他類型記錄。
5.DNS解析過程:
客戶端在瀏覽器輸入example.com,去進行訪問,需要找到該域名的IP地址。
1.向DNS 遞歸解析器(DNS Resolver)發送查詢,優先查看緩沖區是否存在記錄,若沒有 ,繼續 2。
2.向根域名服務器發出查詢。
3.根域名服務器給出.com (TLD)頂級域名服務器的地址。
4.然后,DNS解析器向 .com TLD Server 發出請求。
5.TLD 服務器隨后使用該域的域名服務器 example.com 的 IP 地址進行響應。
6.最后,遞歸解析器將查詢發送到example.com的權威域名服務器。
7.權威域名服務器將example.com 的 IP 地址響應給解析器。
8.然后 DNS 解析器將最初請求的域的 IP 地址響應 Web 瀏覽器,並在自己的高速緩存,記錄下來,以備下次使用,不用再次查詢。
DNS 查找的這 8 個步驟返回 example.com 的 IP 地址后,瀏覽器便能發出對該網頁的請求:
9.瀏覽器向該 IP 地址發出 HTTP 請求。
10.位於該 IP 的服務器將網頁返回。
二、攻擊原理:
這里引用,清華大學團隊的原理圖,進行解釋。
trudy是一個偏離信道的攻擊者(off-path),即不可以進行監聽和篡改 遞歸解析器 到權威域名服務器 信道上的內容,trudy擁有一定的IP spoof 能力。
- Trudy 通過web瀏覽器訪問
www.bank.com
,假如此時 resolver 緩存中並無此記錄。 - 解析器進行遞歸查詢,向根域名服務器,頂級域名服務器,以及權威域名服務器發出查詢。
- 攻擊者Trudy此時使用 bank.com的權威域名服務器IP地址,偽造 回應報文向 解析器發送。 該回應報文解析的IP地址,指向攻擊者自己的服務器。
- 解析器收到Trudy假冒的DNS響應報文之后,將
www.bank.com
對應的假冒 IP =6.6.6.6 寫入緩存。 - 待真正的響應報文到達解析器時,為時已晚,此時解析器發現已經有了相應的記錄,會進行丟棄
- 這時 用戶 Alice 想要訪問
www.bank.com
,通過解析器查看自己的錯誤緩存表,會訪問到一個錯誤的IP,得到一個攻擊者偽造一模一樣的錯誤頁面。(此時如果用戶輸入各種賬號密碼,會被竊取。)
但真正的攻擊卻不是如此簡單,根據上文介紹的DNS協議數據包,IP頭|UDP頭|DNS
攻擊者偽造的響應數據包,如下:
注意:
這里的目的端口與事務ID都是未知的,攻擊者如果想要同時爆破這兩個字段,目的端口兩個字節,事務ID兩個字節,一共 \(2^{32}\)種可能,目前不太可能實現。
DNS權威域名服務器 響應的源端口 一般是確定的53端口, DNS 解析器客戶端以前也默認用源端口53去查詢,這樣隨機性只靠TxID,很容易進行攻擊 ,\(2 ^{16}\),65536種可能。 2008年7月,Dan Kaminsky就利用了這個。因此,為了有效的防御,DNS解析器采取了源端口隨機化。
為了解決上述問題,在這篇論文中,清華大學安全團隊,提出了一種分治的思想,即先通過ICMP側信道探測開放的端口,后猜測相應事務ID,一共 \(2^{17}\) 種可能。
另外,相應的擴大攻擊窗口的時間,可更容易的實現這種進攻。
推測源端口
這里只介紹其中的一個 Private Source Port Scan Method。首先了解一下以下知識:
IP速率限制: 比如IP 速率限制 為 1/s ,即在1秒這段時間內只限1個IP訪問DNS解析器上的端口。
ICMP速率限制:表示在這段時間內,DNS解析器最多能發出的ICMP響應報文個數。比如:ICMP 速率限制為 50 /20ms ,這里表示 在20ms內只能返回50個ICMP響應。比如攻擊者以 1000/20ms 的速度進行探測端口,這里只能返回50個ICMP不可達報文。
側信道攻擊:大體意思是,攻擊者借助服務器進行響應的一些信息,發動攻擊。
端口探測:意思是通過向DNS解析器發送UDP報文,遍歷目的端口,如果端口未開放,則會返回ICMP不可達報文,如果開放,不會收到響應報文
臨時端口:只對權威域名服務器開放,攻擊者並不知曉,所以要用到IP欺騙,偽造權威域名服務器的IP發送UDP探測報文。
在上圖中,假設解析器的ICMP速率限制為 50/20ms, 攻擊者通過偽造權威域名服務器的IP,向解析器發送50個探測UDP報文,那么攻擊者以自己的IP再向解析器發送一個UDP報文,如果沒收到任何ICMP回復,說明已達到ICMP速率限制,可進行下一個20ms的探測,不斷循環。如果此時收到回復,說明至少有一個端口是開放的。可通過二分查找,查找開放的端口。
但是 存在IP速率限制怎么辦?
假如IP速率限制為1個/秒,即在這一秒內只允許一個IP訪問解析器。在這篇論文中提到,清華大學安全團隊通過觀察源碼發現,ICMP速率限制 是在IP速率限制之前 進行驗證的。所以,即使最后一個IP只返回一個ICMP響應包,但是ICMP 速率限制的計數器是變化的。 所以與上圖同理,只在這一方面有些許變化。
論文原圖如下:
大約可以每秒1000的速度去探測解析器開放的端口。但是仍需很長時間,所以這就需要去相應擴大攻擊窗口。
擴大攻擊窗口
攻擊窗口,指DNS解析器向服務器發送查詢,到權威域名服務器響應報文到達解析器的這段時間。
所以擴大攻擊窗口的主要思路,應該集中在阻止響應報文的到達,或延遲響應報文的到達。
通過發送大量的DNS查詢來淹沒權威域名服務器,類似於攻擊者偽造解析器,發送大量DNS query,高於配置限制的速率(服務器上配置的RRL),會權威域名服務器不發送響應,創建足夠高的丟失率。
TTL時間
對於解析器緩沖區而言,可能已經擁有某條記錄,但攻擊者不得不等待這條記錄消失之后,再發動攻擊。TTL即表示這條記錄的生存時間,時間可能為1天或者更久。
這就很頭疼,有沒有解決辦法?
有。
攻擊者可以去問類似1.xxx.com、2.xxx.com、3.xxx.com等等這些大概率就完全不存在的域名,由於DNS解析器並沒有這些域名的緩存,就會發起查詢,假設ns1.xxx.com是xxx.com的權威DNS,DNS解析器就會去ns1.xxx.com詢問。
Q:要投毒的是www.xxx.com
,搞定83.xxx.com有什么意義啊。
A:沒錯,我們的目標並不是83.xxx.com,這個攻擊比較精彩的地方是,可以並不是在應答區做手腳,而是在權威區和附加區行騙!
偽造的響應包,大約是這個樣子:
問題區:83.xxx.com A
應答區:(空)
權威區:xxx.com NSwww.xxx.com
附加區:www.xxx.com
A 6.6.6.6
這個響應的意思是:“我不知道83.xxx.com的A記錄,你去問問www.xxx.com
吧,它負責xxx.com這個域,對了,他的IP是6.6.6.6”。
而這里的6.6.6.6,就是攻擊者意欲讓DNS解析器相信的IP地址。
本文參考DNS Cache Poisoning Attack Reloaded: Revolutions with Side Channels這篇論文,若想詳細了解,可去閱讀!同時,若有不太理解的問題,歡迎在下面評論進行討論!