什麼是 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)。有一種更安全的 DNS 通訊協定稱為 DNSSEC,其目標是解決這些問題,但目前尚未廣泛採用。

DNS 解析服務能做些什麼?

DNS 解析程式向用戶端提供與網域名稱有關的 IP 位址。換言之,這取用「cloudflare.com」等人類可讀取的網站位址,並轉譯為機器可讀取的 IP 位址。若使用者嘗試前往網站,作業系統會將請求傳送至 DNS 解析程式。DNS 解析程式會以 IP 位址回應,網頁瀏覽器就會取用此位址並開始載入網站。

DNS 快取如何運作?

DNS 解析程式將會儲存在特定時間當中對於 IP 位址查詢的回應。透過此方式,解析程式可以更快回應未來的查詢,不需要與許多涉及一般 DNS 解析流程的伺服器通訊。DNS 解析程式在快取中儲存回應的時間長度,是按照該 IP 位址允許的相關指定存留時間(TTL)

DNS 未快取回應:

DNS uncached response

DNS 已快取回應:

DNS cached response

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

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

DNS 快取記憶體中毒過程:

DNS Cache Poisoning Process

中毒的 DNS 快取:

Poisoned DNS Cache

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 仍然易受攻擊。