什麼是 DNS 快取記憶體中毒? | DNS 詐騙

攻擊者可透過誘使 DNS 解析程式快取錯誤資訊來使 DNS 快取記憶體中毒,其結果是解析程式將錯誤 IP 位址傳送給用戶端,而嘗試導覽到網站的使用者將被定向到錯誤位置。

學習目標

閱讀本文後,您將能夠:

  • 定義 DNS 快取記憶體中毒
  • 瞭解 DNS 快取的工作方式
  • 說明攻擊者如何能夠使 DNS 快取記憶體中毒
  • 瞭解 DNSSEC 如何協助防止 DNS 中毒攻擊

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

所有 Cloudflare 方案中均包含免費 DNS

什麼是 DNS 快取記憶體中毒?

DNS 快取記憶體中毒是向 DNS 快取記憶體中輸入錯誤資訊的行為,以便使 DNS 查詢返回錯誤回應並將使用者導向到錯誤網站。DNS 快取記憶體中毒也稱為「DNS 詐騙」。IP 位址是網際網路的「電話編號」,其能夠使網路流量到達正確位置。DNS 解析程式快取記憶體是列出這些電話號碼的目錄,當它們儲存錯誤資訊時,流量將轉向錯誤位置,直到快取的資訊被更正為止。(注意,這實際上並未斷開真實網站與其真實 IP 位址的連接。)

因為 DNS 解析程式通常無法驗證其快取記憶體中的資料,因此錯誤 DNS 資訊會保留在快取記憶體中,直到存留時間 (TTL) 到期或手動將其移除為止。許多漏洞可能使 DNS 中毒,但主要問題是 DNS 是為遠遠更小的網際網路建構的,並且基於信任原則 (非常類似於 BGP)。稱為 DNSSEC 的更安全 DNS 通訊協定旨在解決其中的一些問題,但其尚未得到廣泛採用。

DNS 解析服務能做些什麼?

DNS 解析程式為用戶端提供與網域名稱關聯的 IP 位址。換句話說,它們將例如「cloudflare.com」等人類可讀的網站地址轉換為機器可讀的 IP 位址。當使用者嘗試導覽到某個網站時,其作業系統將向 DNS 解析程式傳送請求。DNS 解析程式使用 IP 位址進行回應,然後 Web 瀏覽器使用該地址開始載入此網站。

DNS 快取如何運作?

DNS 解析程式會將對 IP 位址查詢的回應儲存一定的時間。這樣,解析程式便可更快地回應未來查詢,並且無需與典型 DNS 解析過程中涉及的許多伺服器進行通訊。只要與該 IP 位址關聯的指定存留時間 (TTL) 允許,DNS 解析程式就會將回應儲存在其快取記憶體中。

DNS 未快取回應:

DNS 未快取回應

DNS 已快取回應:

DNS 已快取回應

攻擊者如何使 DNS 快取記憶體中毒?

攻擊者可透過模擬 DNS 名稱伺服器,向 DNS 解析程式發出請求,然後在 DNS 解析程式查詢名稱伺服器時偽造答覆,使 DNS 快取記憶體中毒。這之所以可能是因為 DNS 伺服器使用 UDP,而不是 TCP,並且目前沒有對 DNS 資訊的驗證。

DNS 快取記憶體中毒過程:

DNS 快取記憶體中毒過程

中毒的 DNS 快取:

中毒的 DNS 快取

DNS 請求和回應使用 UDP(使用者資料包通訊協定),而不是使用 TCP,TCP 會要求通訊雙方都進行「交握」來啟動通訊。在使用 UDP 時,無法保證連線已開啟,或者接收者已準備好接收。因此 UDP 很容易偽造——攻擊者可透過 UDP 傳送訊息,並透過偽造標頭資料來假裝這是來自合法伺服器的回應。

若 DNS 解析程式接收偽造回應,會輕易接受並快取資料,因為若資訊精確並且來自合法來源,就沒有驗證方式。DNS 建立於網際網路的早期階段,當時唯一連線至網際網路者是大學和研究中心。沒有任何原因要預期任何人會嘗試散佈假的 DNS 資訊。

雖然有 DNS 快取過程中的這些主要弱點,但 DNS 中毒攻擊仍然不容易。由於 DNS 解析程式實際上確實查詢權威名稱伺服器,因此在權威名稱伺服器作出真實答覆前,攻擊者只有幾毫秒的時間來傳送虛假答覆。

攻擊者還必須知道或猜測許多因素才能進行 DNS 詐騙攻擊:

  • 目標 DNS 解析程式不快取哪些 DNS 查詢,以便使解析程式查詢權威名稱伺服器
  • DNS 解析程式正在使用哪個連接埠* – 過去它們對每個查詢都使用相同的連接埠,但是現在它們每次都使用不同的隨機連接埠
  • 請求識別碼
  • 查詢將切換到哪個權威名稱伺服器

攻擊者也可以透過其他方式取得 DNS 解析程式的存取權限。若惡意的一方操作、駭入或取得 DNS 解析程式的實際存取權限,就能更容易地改變快取資料。

*在網路連線中,連接埠是通訊接收的虛擬點。電腦具有多個連接埠,每個連接埠都有自己的編號,並且為使電腦彼此通訊,還必須為某些類型的通訊指定某些連接埠。例如,HTTP 通訊永遠前往連接埠 80,而 HTTPS 通訊永遠使用連接埠 443

DNS 詐騙和審查

多個政府已故意在其國家/地區中使 DNS 快取記憶體中毒,以便拒絕存取某些網站或網路資源。

DNSSEC 將如何協助防止 DNS 中毒?

DNSSEC 是 Domain Name System Security Extensions (網域名稱系統安全性擴充) 的縮寫,是驗證 DNS 資料完整性和來源的方式。DNS 原本的設計不具這類驗證,因此可能發生 DNS 中毒。

TLS/SSL 非常類似,DNSSEC 使用公開金鑰加密 (一種對資訊進行數位簽章的方式) 來對資料進行驗證和身份驗證。DNSSEC 擴展是在 2005 年發佈的,但 DNSSEC 尚未成為主流,因此 DNS 仍然容易受到攻擊。