什麼是 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 位址是 Internet 的「教室號」,其能夠使網路流量到達正確位置。DNS 解析程式快取記憶體是「校園目錄」,當它們儲存錯誤資訊時,流量將轉向錯誤位置,直到快取的資訊被更正為止。(注意,這實際上並未斷開真實網站與其真實 IP 位址的連接。)

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

DNS 解析程式的作用是什麼?

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

DNS 快取如何工作?

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

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

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

如果 DNS 解析程式收到偽造的回應,它會不加鑒別地接受並快取這些資料,因為無法驗證這些資訊是否正確且來自合法來源。DNS 是在 Internet 早期建立的,當時與之相連的唯一參與者是大學和研究中心。那時沒有理由預計有人會傳播虛假 DNS 資訊。

儘管 DNS 快取過程中存在這些主要漏洞,但 DNS 中毒攻擊並非易事。由於 DNS 解析程式實際上確實查詢權威名稱伺服器,因此在權威名稱伺服器作出真實答覆前,攻擊者只有幾毫秒的時間來傳送虛假答覆。

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

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

攻擊者還可透過其他某種方式存取 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 仍然容易受到攻擊。