1. DNS 解析(工作流程、參與方與緩存)
DNS 的目標:把人類可讀的域名(如 www.example.com
)映射為 IP 地址(如 93.184.216.34
)。
典型解析流程(遞歸解析器 + 迭代查詢):
-
客戶端(stub resolver):瀏覽器/操作系統發起 DNS 查詢,通常詢問配置的遞歸解析器(resolver,如 ISP 提供或 8.8.8.8)。
-
遞歸解析器:如果緩存命中就直接返回;否則它會代替客戶端向上級 DNS 進行查詢(Root → TLD → 權威):
- 詢問 根服務器(
.
)得到對應頂級域(TLD,如.com
)的 NS 列表。 - 詢問 TLD 服務器 得到目標域名的權威服務器(Authoritative Name Server)。
- 詢問 權威服務器 獲取真實記錄(A/AAAA/CNAME 等)。
- 詢問 根服務器(
-
遞歸解析器 返回結果給客戶端,并把結果緩存(受 TTL 限制)。
關鍵名詞:
- 權威(Authoritative)服務器:負責某個域名的真實 DNS 記錄(由域名持有者或 DNS 提供商托管)。
- 遞歸解析器(Resolver):為客戶端完成上面整個查詢流程的服務器(通常由 ISP、企業或公共 DNS 提供)。
- Stub resolver:客戶端一側的輕量解析組件(操作系統/瀏覽器)。
- TTL:記錄在解析器緩存中的存活時間。
2. DNS 污染 / 中毒:概念與類型
DNS 污染/中毒(DNS poisoning) 是指 DNS 響應被篡改或劫持,導致客戶端獲得錯誤的 IP,常見后果是訪問錯誤或被引導到惡意站點。
常見類型與成因:
-
DNS 緩存中毒(Cache poisoning)
- 攻擊者向遞歸解析器注入偽造的響應(例如偽造 A 記錄或 NS 記錄),導致解析器緩存錯誤數據,從而把多個用戶引導到惡意 IP。
- 經典手段:偽造事務 ID、源端口等,使得偽造響應被接受。現代 DNS/操作系統通過隨機端口等減小風險,但并非萬無一失。
-
劫持/篡改(Hijacking)
- ISP 或中間網絡設備基于策略或商業目的修改解析結果(例如將無法解析的查詢指向運營商廣告頁或攔截)。
- 國家級審查(DNS 污染/污染返回錯誤 IP 或 NXDOMAIN/截斷)也屬于這一類。
-
中間人攻擊(Man-in-the-Middle)
- 攻擊者在通信鏈路中攔截并修改 DNS 請求或響應(在未加密的情況下可行),常見于局域網或被劫持的 DNS 服務器。
-
域名劫持 / 域名解析權更改
- 域名注冊信息被篡改,修改了域名的權威服務器或 A 記錄,這屬于對域名注冊/托管的直接攻擊或濫用。
3. DNS 污染會帶來哪些風險/危害?
- 釣魚/流量劫持:把合法域名解析到惡意服務器,竊取憑證或注入惡意內容。
- 隱私泄露:用戶被重定向到被監控的節點。
- 可用性損失:合法服務不可達(被解析到虛假 IP 或 NXDOMAIN)。
- 流量攔截/廣告注入:ISP 或中間人通過修改解析插入廣告或提示頁。
- 信任破壞:如果 DNSSEC 被繞過或未啟用,客戶端無法驗證響應真實性。
4. 如何檢測 / 鑒別是否被污染
快速診斷步驟(用戶側)
-
對比多個解析器的結果:
dig +short example.com @8.8.8.8 dig +short example.com @1.1.1.1 dig +short example.com @本地遞歸解析器
如果不同解析器返回不同 IP(且權威服務器并非變化),說明可能被污染或本地 resolver 緩存有問題。
-
追蹤權威來源:
dig +trace example.com
+trace
會顯示從根、TLD 到權威服務器的逐步結果,便于定位哪個層級返回了錯誤結果。 -
查詢權威服務器:直接向域的權威服務器查詢:
dig @ns1.example-authoritative.com example.com A
若權威服務器給出正確值,但遞歸解析器給出錯誤值,很可能是遞歸解析器被中毒。
-
查看本機緩存:
- Windows:
ipconfig /displaydns
,清空緩存ipconfig /flushdns
。 - macOS:
sudo killall -HUP mDNSResponder
(不同系統命令略有差異)。
- Windows:
-
檢查 DNSSEC:如果域名啟用了 DNSSEC,使用
+dnssec
或dig
輸出檢查 RRSIG/AD 標志,或使用delv
等工具驗證簽名是否有效。DNSSEC 能檢測劫持(若驗證失敗即可發現篡改)。 -
判斷是 ISP 層面還是本地問題:在同一網絡下,用手機切換到蜂窩網絡或使用 VPN,再次查詢;若換網絡未重現問題,則可能是本地或本 ISP 的污染。
5. 如何緩解與防護(用戶 & 運維/服務方)
用戶端(普通用戶/客戶端)
-
使用可信公共解析器:如 Google (8.8.8.8 / 8.8.4.4)、Cloudflare (1.1.1.1)、Quad9(9.9.9.9)。注意某些 ISP 會攔截/劫持 DNS,即使設置了 DNS 也可能被重寫。
-
啟用加密 DNS:DNS over HTTPS (DoH) 或 DNS over TLS (DoT),可防止中間人篡改:
- 瀏覽器層:Firefox/Chrome 支持 DoH。
- 系統/路由器:使用支持 DoT/DoH 的解析器或本地代理(例如 Cloudflared、stubby)。
-
使用 VPN:將 DNS 解析通過 VPN 隧道走,可以繞過本地 ISP 的污染(但要信任 VPN 提供商)。
-
DNSSEC 驗證客戶端:部分系統/解析器可以啟用本地 DNSSEC 驗證(比如
unbound
可以啟用嚴格驗證),能檢測到被篡改的響應。 -
定期清緩存:遇到解析問題時清空本機 DNS 緩存。
遞歸解析器 / ISP(運維側)
- 啟用 DNSSEC 驗證:在遞歸解析器(如
unbound
、bind
、knot-resolver
)上啟用 DNSSEC 驗證,拒絕或標記不合法簽名的響應。 - 使用隨機源端口與事務 ID:現代解析器默認啟用,提高偽造響應難度。
- 限制遞歸對外開放(防止被濫用):禁用開放遞歸或限制訪問白名單。
- 實現速率限制 / 反放大 / 抗緩存中毒策略:防止針對大規模偽造響應的攻擊。
- 監控與告警:監控異常解析結果、TTL 突變、權威 NS 變化等,及時告警。
- 限制區域傳送(AXFR)和使用 TSIG:保護權威服務器數據。
- 定期打補丁:修補已知的 DNS 軟件漏洞(比如某些 DNS 服務器歷史漏洞可被利用做緩存中毒)。
權威域名持有者
- 啟用 DNSSEC 并正確簽名區域:讓下游解析器/用戶進行驗證。
- 控制 NS/Registrar 安全:使用 registrar 的安全功能(鎖定轉移、強認證)。
- 限制對 AXFR 的訪問并保護管理接口。
6. 區分“DNS 污染”與“DNS 污染 / 劫持”的實際示例
- ISP “污染/重定向”:當查詢無法解析或為某些敏感域名時,ISP 返回錯誤 IP(運營商提示頁或黑洞 IP)。這是有意為之,目的可能是審查或廣告。
- 真實的緩存中毒攻擊:攻擊者利用解析器漏洞或網絡中間節點注入錯誤響應,使大量用戶解析到惡意網站。
- DNSSEC 可檢測場景:若權威域啟用了 DNSSEC,遞歸解析器在收到偽造響應時會驗證失敗(如果解析器開啟 DNSSEC 驗證),從而拒絕返回給客戶端—這能顯著降低緩存中毒成功率。
7. 常用工具(命令行)用于排查與診斷
-
dig
(Linux/macOS):dig +trace example.com
(追蹤解析鏈路)dig @8.8.8.8 example.com A
(向指定解析器查詢)dig example.com +dnssec
(檢查 DNSSEC)
-
nslookup
(Windows/跨平臺) -
delv
(用于 DNSSEC 驗證) -
Get-Command
/ipconfig /displaydns
/ipconfig /flushdns
(Windows) -
tcpdump
/wireshark
:抓包分析 DNS 流量,觀察是否有偽造響應或中間人篡改。 -
unbound-control
(若用 unbound),rndc
(BIND)等解析器管理工具。
8. 總結
- 解析流程:客戶端 → 遞歸解析器 → 根 → TLD → 權威 → 緩存 → 返回。
- 緩存中毒:攻擊者注入偽造響應到遞歸解析器緩存,從而影響大量用戶。
- 污染后果:釣魚、隱私泄露、可用性下降。
- 檢測方法:對比多個解析器、
dig +trace
、查詢權威服務器、檢查 DNSSEC。 - 防護:DNSSEC、DoH/DoT、使用可信解析器、遞歸解析器加固、權限與速率限制、監控告警。