攻擊者可透過誘使 DNS 解析程式快取錯誤資訊來使 DNS 快取記憶體中毒,其結果是 解析程式將錯誤 IP 位址傳送給用戶端,而嘗試導覽到網站的使用者將被定向到錯誤位置。
閱讀本文後,您將能夠:
複製文章連結
DNS 快取記憶體中毒是向 DNS 快取記憶體中輸入錯誤資訊的行為,以便使 DNS 查詢返回錯誤回應並將使用者導向到錯誤網站。DNS 快取記憶體中毒也稱為「DNS 詐騙」。IP 位址是網際網路的「電話編號」,其能夠使網路流量到達正確位置。DNS 解析程式快取記憶體是列出這些電話號碼的目錄,當它們儲存錯誤資訊時,流量將轉向錯誤位置,直到快取的資訊被更正為止。(注意,這實際上並未斷開真實網站與其真實 IP 位址的連接。)
因為 DNS 解析程式通常無法驗證其快取記憶體中的資料,因此錯誤 DNS 資訊會保留在快取記憶體中,直到存留時間 (TTL) 到期或手動將其移除為止。許多漏洞可能使 DNS 中毒,但主要問題是 DNS 是為遠遠更小的網際網路建構的,並且基於信任原則 (非常類似於 BGP)。稱為 DNSSEC 的更安全 DNS 通訊協定旨在解決其中的一些問題,但其尚未得到廣泛採用。
DNS 解析程式為用戶端提供與網域名稱關聯的 IP 位址。換句話說,它們將例如「proxy.igniterra.cc」等人類可讀的網站地址轉換為機器可讀的 IP 位址。當使用者嘗試導覽到某個網站時,其作業系統將向 DNS 解析程式傳送請求。DNS 解析程式使用 IP 位址進行回應,然後 Web 瀏覽器使用該地址開始載入此網站。
DNS 解析程式會將對 IP 位址查詢的回應儲存一定的時間。這樣,解析程式便可更快地回應未來查詢,並且無需與典型 DNS 解析過程中涉及的許多伺服器進行通訊。只要與該 IP 位址關聯的指定存留時間 (TTL) 允許,DNS 解析程式就會將回應儲存在其快取記憶體中。
DNS 未快取回應:
DNS 已快取回應:
攻擊者可透過模擬 DNS 名稱伺服器,向 DNS 解析程式發出請求,然後在 DNS 解析程式查詢名稱伺服器時偽造答覆,使 DNS 快取記憶體中毒。這之所以可能是因為 DNS 伺服器使用 UDP,而不是 TCP,並且目前沒有對 DNS 資訊的驗證。
DNS 快取記憶體中毒過程:
中毒的 DNS 快取:
DNS 請求和回應使用 UDP(使用者資料包通訊協定),而不是使用 TCP,TCP 會要求通訊雙方都進行「交握」來啟動通訊。在使用 UDP 時,無法保證連線已開啟,或者接收者已準備好接收。因此 UDP 很容易偽造——攻擊者可透過 UDP 傳送訊息,並透過偽造標頭資料來假裝這是來自合法伺服器的回應。
若 DNS 解析程式接收偽造回應,會輕易接受並快取資料,因為若資訊精確並且來自合法來源,就沒有驗證方式。DNS 建立於網際網路的早期階段,當時唯一連線至網際網路者是大學和研究中心。沒有任何原因要預期任何人會嘗試散佈假的 DNS 資訊。
雖然有 DNS 快取過程中的這些主要弱點,但 DNS 中毒攻擊仍然不容易。由於 DNS 解析程式實際上確實查詢權威名稱伺服器,因此在權威名稱伺服器作出真實答覆前,攻擊者只有幾毫秒的時間來傳送虛假答覆。
攻擊者還必須知道或猜測許多因素才能進行 DNS 詐騙攻擊:
攻擊者也可以透過其他方式取得 DNS 解析程式的存取權限。若惡意的一方操作、駭入或取得 DNS 解析程式的實際存取權限,就能更容易地改變快取資料。
*在網路連線中,連接埠是通訊接收的虛擬點。電腦具有多個連接埠,每個連接埠都有自己的編號,並且為使電腦彼此通訊,還必須為某些類型的通訊指定某些連接埠。例如,HTTP 通訊永遠前往連接埠 80,而 HTTPS 通訊永遠使用連接埠 443。
多個政府已故意在其國家/地區中使 DNS 快取記憶體中毒,以便拒絕存取某些網站或網路資源。
DNSSEC 是 Domain Name System Security Extensions (網域名稱系統安全性擴充) 的縮寫,是驗證 DNS 資料完整性和來源的方式。DNS 原本的設計不具這類驗證,因此可能發生 DNS 中毒。
與 TLS/SSL 非常類似,DNSSEC 使用公開金鑰加密 (一種對資訊進行數位簽章的方式) 來對資料進行驗證和身份驗證。DNSSEC 擴展是在 2005 年發佈的,但 DNSSEC 尚未成為主流,因此 DNS 仍然容易受到攻擊。