在昨天,我們探討了無線網路環境下的偽造基地台(Evil Twin)與 WPA2/WPA3 協定風險。當使用者連接到網路後,存取任何網站的第一步都是透過域名系統DNS將人類可讀的網址解析為機器使用的 IP 位址。
DNS 被譽為網際網路的「地圖指南」。如果這份地圖被暗中竄改,使用者即使在瀏覽器輸入正確的網址,也會被引導至攻擊者控制的惡意伺服器。今天我們將探討DNS污染的運作原理,以及DNS如何成為放大攻擊(Amplification Attack)的工具。
DNS 污染/DNS 放大攻擊
DNS 污染(DNS Cache Poisoning)與 DNS 放大攻擊(DNS Amplification Attack)是兩種針對網際網路發動的攻擊手法。
-
DNS 污染:
為了提升效率,DNS 解析器會將查詢過的域名與 IP 對照表暫存在記憶體中。攻擊者利用 DNS 採用 UDP 無連線傳輸的漏洞,在伺服器回應前搶先發送偽造的DNS回應。一旦快取被注入錯誤IP,該DNS伺服器服務的所有使用者都會被集體劫持。 想像你想去「台灣銀行」,於是翻開公用電話簿查地址。但駭客趁人不注意,把台灣銀行的地址改成「駭客開的假銀行地址」。接下來所有查電話簿的人,都會走錯路去到假銀行
-
DNS 放大攻擊:
利用 UDP 協定允許 IP 偽造(IP Spoofing) 的特性,結合 DNS 查詢「小請求(~60 Bytes)、大回應(可達數千 Bytes)」的特性,發動高達數十倍放大倍率的 DDoS 攻擊。 攻擊者會對 DNS 伺服器喊:「請把 example.com 的所有詳細資料通通念給我聽,但我留的聯絡地址是被害者的地址。」DNS 伺服器隨即將龐大的資料量傾倒給被害者。
攻擊手法與 Kaminsky 漏洞
傳統 DNS 快取污染的難點在於:如果某域名的快取尚未過期(TTL 未到),DNS 解析器不會對外發出查詢,攻擊者就無法注入假回應
-
DNS 快取污染與 Kaminsky 攻擊 :
2008 年資安專家 Dan Kaminsky 提出了突破性的攻擊手法:
- 攻擊者向目標 DNS 解析器查詢不存在的子域名,例如 rand1.company.com、rand2.company.com。
- 因為快取中沒有紀錄,目標 DNS 解析器會立即向 company.com 的DNS 伺服器發送 UDP 查詢。
- 攻擊者發送大量偽造的回應封包,預測連線使用的 Transaction ID 與 UDP 來源 Port。
- 偽造回應中不僅包含假子域名的 IP,還包含 NS 記錄(Name Server) 的篡改指令:「順便通知你,company.com全域的DNS伺服器已經換成攻擊者的attacker.com(IP: 6.6.6.6)了!」
-
一旦猜中 Transaction ID,目標 DNS 解析器就會徹底相信這個假記錄,導致後續整個域名的解析權全面失守。
DNS放大攻擊 :
- 攻擊者尋找網路上開放的 DNS 解析器。 偽造 Source IP = 被害者 IP,向開放解析器發送 type=ANY 或 TXT 記錄的 DNS 請求。
- 伺服器回傳包含完整 DNSSEC 簽章或詳細紀錄的巨大封包(> 4000 Bytes),產生 28 ~ 54 倍 的流量放大效果,灌爆被害者頻寬。
實務情境
缺乏 DNSSEC 驗證與開放式遞迴查詢
[ 系統設計 ]
1. 企業權威 DNS 伺服器未啟用 DNSSEC(DNS Security Extensions)。
2. 公司內部的 DNS 解析器開啟了公網 Open Recursion(開放式遞迴),允許任何人來查詢。
3. DNS 解析器未啟用 UDP 來源 Port 隨機化(Source Port Randomization)。
[ 攻擊後果 ]
- 攻擊者利用 Kaminsky 攻擊技術成功污染內部 DNS 快取,員工存取 company-bank.com 時被導引至釣魚網站,金流憑證遭竊。
- 企業開放的 DNS 伺服器被駭客當成反射點發動 DDoS,導致企業 IP 遭電信商黑名單列入(Null-routed)。
導入 DNSSEC、DoH/DoT 與 DNS Hardening
[ 系統設計 ]
1. 全面啟用 DNSSEC:為權威 DNS 記錄加上數位簽章,解析器會驗證資料完整性與來源真實性。
2. DNS 解析器強制啟用 UDP 來源 Port 隨機化,並採用 0x20 兩極化字元隨機技術(如 cOmPaNy.CoM)。
3. 關閉開放式遞迴(Disable Open Recursion),啟用 Response Rate Limiting (RRL) 防止反射放大。
4. 客戶端導出流量採用 DoH (DNS over HTTPS) 或 DoT (DNS over TLS) 加密傳輸。
[ 防禦效果 ]
- 即使攻擊者搶先發送偽造回應,因缺乏正確的 DNSSEC 數位簽章,DNS 解析器會直接判定回應無效並丟棄,無法污染快取。
- RRL 機制限制單一 IP 的查詢回應速率,阻斷反射放大攻擊。
如何防禦 DNS 劫持與污染
整理剛才實務情境裡的訊息可以得到以下行為可以有效防禦 DNS 劫持與污染:
-
導入 DNSSEC(DNS 安全擴充功能)
DNSSEC 透過公私鑰加密體系,為 DNS 記錄提供資料完整性(Integrity)與來源驗證。即使攻擊者成功偽造 UDP 回應,解析器因無法通過 PKI 數位簽章驗證,會直接拒絕更新快取。
-
強化 DNS 伺服器設定(DNS Hardening)
-
開啟 Source Port Randomization: 將 UDP 發起查詢的 Port 從固定次數改為隨機的 1024~65535,大幅提升攻擊者暴力猜測(Transaction ID + Port)的難度。
-
關閉 Open Recursion: 權威 DNS 伺服器應關閉遞迴查詢功能;內部 Recursive Resolver 僅限授權內網 IP 使用。
-
設定 Response Rate Limiting (RRL): 限制對同一來源 IP 回應的次數,防止DDoS的風險。
-
加密 DNS 傳輸(DoH / DoT)
-
DNS over TLS (DoT - Port 853): 將 DNS 流量封裝在 TLS 加密通道中。
-
DNS over HTTPS (DoH - Port 443): 將 DNS 請求隱藏在標準 HTTPS 流量中,防止中間人竊聽與篡改 DNS 查詢內容。
補充:
DNSSEC(Domain Name System Security Extensions,DNS 安全擴充功能)是為了解決傳統 DNS 無法驗證資料真偽而開發的安全機制。
傳統 DNS 採用未加密且無驗證的 UDP 協定,攻擊者只要搶先發送偽造的回應封包,就能進行 DNS 污染(DNS Cache Poisoning) 將使用者導向惡意網站。DNSSEC 透過 PKI 非對稱加密與數位簽章技術,為每一筆 DNS 記錄蓋上「數位印章」,確保資料在傳輸過程中未被竄改且來源真實。
DNSSEC 簽章
DNSSEC 並不會加密 DNS 內容(查詢內容仍是明文),而是為 DNS 記錄提供資料完整性和來源驗證。
- 資源記錄組(RRSET)
在 DNSSEC 中,相同類型與名稱的記錄會被歸類為一個集合,稱為 RRSET (Resource Record Set)。例如,example.com 的所有 A 記錄會組成一個 A RRSET。DNSSEC 簽章時是對「整個 RRSET」進行簽章,而不是單一紀錄。
- 金鑰雙軌制:ZSK 與 KSK
DNSSEC 使用兩對非對稱金鑰來兼顧安全性與管理維護效率:
- ZSK(Zone Signing Key,區域簽章金鑰):
用於簽署網域內的實際 DNS 記錄(如 A、AAAA、MX 記錄等)。金鑰較短,方便定期自動更換(Rollover),降低私鑰洩漏風險。
- KSK(Key Signing Key,金鑰簽章金鑰):
專門用來簽署 ZSK 的公鑰,建立對上層網域的信任鏈。金鑰較長,安全性更高,更換頻率低(通常數年一次)。