觀測與維運 — dig / 記錄檔 / 常見誤判
先看實際的回應,優先排除 negative caching / split-horizon / browser cache 等誤判。
前章回顧: 第 5 章中,我們整理了 DNSSEC 的守備範圍、last hop 問題,以及多層防禦的組合。本章將把該防禦延伸到「在運作中的 resolver 上,觀測什麼才能察覺崩潰」。dig 的基本操作 (DNS101 中所涵蓋的範圍) 終究只是基礎,本章會進一步深入到從記錄檔中捕捉 poisoning 徵兆的模式。
在管理畫面之前,先看實際的回應
名稱解析問題發生時,比起先看記錄管理畫面的截圖,更快的作法是比較「affected resolver 現在回傳什麼」以及「在 authoritative path 上看起來如何」。
$ dig @192.0.2.53 www.example.com A
$ dig +trace www.example.com A
$ dig +dnssec www.example.com A
此處的 192.0.2.53 是範例用的 TEST-NET 位址。實際確認時,只使用自己管理的 resolver 或正當的觀測對象。
練習 6-1 — 最初的切分
比起管理畫面的印象,先比較實際的回應。
Q1. 當使用者回報「只有某個名稱會連到奇怪的 IP」時,作為最初的安全確認,下列何者較適切?
較適切的最初確認是比較受影響的 recursive resolver 回應與 authoritative path / +trace 看到的情況。不要只憑管理畫面的印象判斷,要看實際的回應。
Q2. dig +trace 最適合的用途,下列何者最接近?
dig +trace 適合從 root 開始依序檢視 delegation path、確認在哪裡分岔。對於觀察委派邊界與 NS 的分岔方式很有幫助。
Q3. 下列何種狀況,比起個別 browser 的快取,更應懷疑 shared recursive cache 的問題?
如果使用同一 resolver 的多位使用者都看到相同的錯誤答案且殘餘 TTL 相近,與其說是個別 browser 的問題,更應懷疑 shared recursive cache 端的問題。
常見現象的切分
| 現象 | 首先懷疑的對象 | 最初的確認 |
|---|---|---|
| 使用同一 resolver 的多位使用者看到相同錯誤答案 | shared recursive cache | 比較受影響的 resolver 與 authoritative path |
| 只有內部看到不同的 IP | split-horizon / 內部導向設計 | 設計意圖與內部 zone 是否存在 |
| 剛建立的名稱仍回傳 NXDOMAIN | negative caching | 否定回應的 TTL |
| 與 RRSIG / AD 有關的異常 | DNSSEC validation / last hop | dig +dnssec 與 trust chain |
negative caching 與誤判
「剛建立的名稱還看不到」、「internal 與 external 不一致」等現象,是與 poisoning 容易混淆的典型案例。先排除 negative caching 與 split-horizon,就能減少不必要的誤報。
提示: negative caching 的 TTL 由 SOA 的 minimum field 與 RFC 2308 所描述的行為決定。請記住,即使是「不存在」的結果也有壽命。
練習 6-2 — negative caching 與誤判
先排除與 poisoning 容易混淆的典型案例。
Q4. 13:00:00 時 NXDOMAIN 被 negative cache 300 秒。13:01:00 建立了該名稱的記錄,但到 13:02:00 時仍然顯示 NXDOMAIN。最接近的說明是?
因為 negative caching 的 TTL 還在。即使建立了記錄,在 resolver 端的 NXDOMAIN 壽命到期前,看到的結果可能不會立刻改變。
Q5. 下列何者作為懷疑 split-horizon / 內部導向設計而非 cache poisoning 的線索最接近?
如果只有公司內部的 resolver 回傳內部 IP,而 public authoritative 端依設計回傳不同的答案,首先懷疑 split-horizon / 內部導向設計。在斷定為異常之前,先確認設計意圖。
從記錄檔捕捉異常的模式
除了用 dig 個別確認之外,定期觀察 resolver / 查詢記錄檔,有助於更早察覺「現在有事正在發生」「過去曾發生過什麼」。作為中級課程的觀測,記住下列 3 種模式在現場會很有幫助。
練習 6-3 — 從記錄檔捕捉異常的模式
作為中級課程更進一步,確認從 resolver / 查詢記錄檔中捕捉 poisoning 徵兆的觀點。
Q6. 對某個 zone,在短時間內集中了大量對沒見過的子網域的 query,且每一筆都回傳 NXDOMAIN。從 cache poisoning 的觀點看,最妥當的假設是哪一個?
對隨機風格的不存在標籤的 query 集中,符合刻意製造 fresh miss 以累積 attempts 的行為。同時觀察同一 zone 的 NXDOMAIN 比率急升、querier IP 的偏向、時段的集中,有助於判斷。
Q7. 在 validating resolver 的記錄檔中,「對同一 zone 的 RRSIG 驗證 failure」在短時間內連續發生。最先應該切分的假設組合中,最適切的是哪一個?
RRSIG 驗證 failure 可能來自 (1) zone 維運端的問題 (金鑰輪替、簽章逾期)、(2) 路徑上的回應竄改 / 誤接受、(3) 驗證端的時鐘偏差,任一情況皆可能發生。先以這 3 軸切分,確認自身的時鐘與 zone 的維運狀況後,再追查其餘部分是否為 poisoning 或中間人嫌疑。
本章重點整理
- 先比較 affected resolver 與 authoritative path
+trace適合觀察 delegation path- 先排除 negative caching、split-horizon、browser cache 等誤判因素
- 記錄檔中持續觀測「random label 集中」「RRSIG 驗證 failure 連續」「port 分佈縮減」