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

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

Share facebook icon linkedin icon twitter icon email icon

DNS 詐騙

學習目標

閱讀本文後,您將能夠:

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

TCP 要求通訊雙方執行「握手」以發起通訊並驗證裝置身分,但 DNS 要求和回應不是使用 TCP,而是使用 UDP,或稱為使用者資料包通訊協定。使用 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 仍然容易受到攻擊。