DNS查詢是如何進行的?
對於絕大多數桌面系統來說,DNS的查詢並不是由自己的機器完成的,DNS查詢會提交給另一台DNS伺服器(這台伺服器通常是由 ISP或者公司提供),然後這台伺服器再去進行真正的查詢操作。這樣做的好處是DNS的查詢結果可以由這台機器給快取下來,從而提高查詢效率並降低由 DNS帶來的流量開銷。一台快取DNS伺服器(與權威DNS相對,這類系統提供的)下面的桌面系統可能有幾百、幾千、幾萬甚至幾十萬台桌面系統。
DNS快取中毒攻擊指的是更改了DNS伺服器的DNS快取中某項,這樣快取中與主機名相關的IP位址就不再指向正確的位置。例如,如果
www.example.com映射到IP位址192.168.0.1且DNS伺服器的快取中存在這個映射,則成功向這個伺服器的DNS快取投毒的攻擊者就可以將www.example.com映射到10.0.0.1。在這種情況下,試圖訪問www.example.com的用戶就可能與錯誤的Web伺服器聯絡。
當攻擊者試圖請求查詢某站點的域名時,DNS伺服器首先會檢查自己的DNS快取中是否存在該域名,如果存在則將該域名所對應的IP位址返回給請求者,如果不存在則向上一級DNS或者權威DNS查詢。這就會給攻擊者帶來一定的困難,如果是大一點的站點的話,攻擊者發起DNS查詢時,DNS伺服器直接從快取應答了,根本不會去請求權威域名伺服器。
怎么才能解決這個問題呢?
比如我們要攻擊www.google.com.首先向目的DNS伺服器查詢根本不存在的二級域名,比如:aaa.google.com.DNS伺服器在快取中查找aaa.google.com,沒有找到,則會向上級DNS或者權威DNS查詢 。這時我們可以生成偽造的DNS Response數據包並傳送這些的偽造DNS Response數據包給目的伺服器。讓目的DNS在上級DNS或者權威DNS伺服器回響到達之前,接受到惡意的應答。
從表面上看這樣只是截持了一個不存在的二級域名,只能用來釣釣魚罷了。
其實DNS Response數據包可以不僅僅包含aaa.google.com的IP位址,還可以在DNS 數據包的Additional resource record中包含www.google.com的IP位址(當然該IP位址可以是偽造的)。當目的DNS收到該數據報時會將偽造的IP位址與 www.google.com關聯起來並刷新到快取上。這樣就完成了主域名的截持。