SAD DNS--新型DNS緩存中毒攻擊


一、DNS基礎知識:


1.DNS簡介:


DNS 域名服務,用於建立 域名與 ip地址的 一對一 映射。DNS 將域名轉換為 IP地址,以便瀏覽器能夠加載 Internet 資源。

類似於一個翻譯系統,將xxx.com 翻譯為 ip地址(如:192.0.2.254),這種轉換發生在幕后,因此用戶只需記住域名,而不需要記住難記的IP


2.DNS數據包:


DNS數據包使用UDP進行封裝,至於為什么使用UDP進行封裝,可參考 為什么DNS使用UDP協議?

下面是DNS報文格式:

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解析過程:

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 NS www.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這篇論文,若想詳細了解,可去閱讀!同時,若有不太理解的問題,歡迎在下面評論進行討論!




參考文檔:


SADDNS官網

SADDNS explained

DNS服務器類型

一次出人意料而名留青史的 DNS 投毒攻擊

IP報文分片


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM