DNSSEC 分析-CloudFlare 與 Gandi LiveDNS DNSSEC 代管

什麼是 DNSSEC ? 透過 DNS 的延伸安全協議,用非對稱金鑰與數位簽章的方式將 DNS 紀錄全部進行電子簽章,可以防止偽造與 DNS 快取污染攻擊。

了解 DNSSEC 的兩大主要演算法,[非對稱金鑰]與[數位簽章]

非對稱金鑰

非對稱金鑰演算法用來確保 DNS 資料是從正確的主機發出給你的,而不是假的伺服器。例如使用非對稱金鑰就可以確認 blog.rsync.tw 的 CNAME 資料是來自 dns[0-6].gandi.net 的主機,不論這中間經過多少個快取伺服器 ( DNS Cache Server ),下面是本網址的 DNSSEC 資料:

{15:27}:@~]$ dig +dnssec blog.rsync.tw A
;; ANSWER SECTION:
blog.rsync.tw.		2654	IN	CNAME	gpaas15.dc2.gandi.net.
blog.rsync.tw.		2654	IN	RRSIG	CNAME 13 3 3600 20180830000000 20180809000000 2674 rsync.tw. 8/ukenred3MWaUlaxPyUFePeJup9sC6CFmlGIj3IetmBoBqBACbUuLG/ Ty3VvTcGGrkdEaXdVBFueZ5oAYzFIA==
gpaas15.dc2.gandi.net.	14	IN	A	217.70.186.115

數位簽章

將 DNS 資料進行電子簽章,這樣資料就無法被偽造 (篡改),例如資料 A 的數位簽章是 Sign(A)=1234,若資料改為 A1 則會與簽章 1234 不符合 ( Sign(A1)=5678 )。而因為偽造者無法取得私有金鑰,所以也不可能重新簽署電子簽章。上面的範例中,有一個新的 DNS 紀錄叫做 RRSIG,就是 blog.rsync.tw 的數位簽章。

並非加密

注意!DNSSEC 啟用後,並不會把 DNS 紀錄進行加密,所有 DNS 資料依舊是明碼傳輸

DNS 有什麼問題?為什麼要用 DNSSEC

  • DNS 協議制定時未考慮安全性問題: DNS 查詢時,可以偽造查詢認證 ID,常見的攻擊手法是 DNS Cache Poisoning。
  • 假的 DNS Server:中間人攻擊手法。
  • DNS Hijacking:DNS 伺服器被入侵,資料被修改。

DNSSEC 分析,CloudFlare 與 Gandi LiveDNS

因為筆者目前只有用這個兩個服務,那因為剛好這兩家代表整不同的服務方式,一個是域名註冊商本身提供的 DNSSEC 代管 – Gandi LiveDNS,另一個是目前最大的 CDN 代管服務 – Cloudflare。兩者之間一個代表直接使用註冊商的 DNSSEC,另一個則是透過第三方提供,剛好角色不同,可以比較一下。

 CloudFlareGandi LiveDNS
域名hdns.com.twrsync.tw
啟動日期約 2018/06 月約 2018/07/10
啟動步驟一鍵啟動一鍵啟動
啟用時間約數分鐘後顯示 DNSKEY,不確定紀錄簽署完成時間數分鐘到數小時(包含 DNS 紀錄簽署完成)
KSK 與演算法有, ECDSA Curve P-256 with SHA-256(13)
ZSK 與演算法有, ECDSA Curve P-256 with SHA-256(13)有, ECDSA Curve P-256 with SHA-256(13)
ZSK 有效時間約 2 天
20180716075054
20180718095054
約 20 天
20180705000000
20180726000000
自行上傳 DNSKEY不用
優點有 CDN 可以用不需自己上傳 DNSKEY(不需要自行管理 DNSKEY)。
缺點要自己上傳 DNSKEY無法使用其他 CDN
DNSSEC 檢測正確正確
關閉 DNSSEC(1) 先在註冊商刪除 DNSKEY
(2) 關閉 CloudFlarre 的 DNSSEC
一鍵關閉
  • Cloudflare 很神奇的每兩天就會重新簽署一次你的 DNS 紀錄。
  • 目前超過 30 天,兩家都沒有更換 DNSKEY。
  • gandi.net 本身未簽署 DNSSEC,cloudflare.com 有,不影響解析跟你的域名安全性。

結論

金鑰替換 (Key rollover)

使用 DNSSEC 最重要的在於 DNSKEY 的管理,因為根據國際 (RFC) 規定,因為 DNSKEY 還是有被破解的可能,所以最久是一年要更換一次。正確的更換動作是先產生新的 DNSKEY,然後簽署區域檔,再將新的 KEY 更新到域名管理局並同時把舊的 KEY 徹下,在等待 TTL 時間過去之後再把區域檔用新的 KEY 重新簽過。其實步驟很麻煩的,這個步驟稱為 Key Rollover,到時後要看看各家的作法是什麼。

更新 DNS 區域檔會不會影響 DNSSEC

不會。如果是動態更新的方式,需要重簽單筆紀錄就可以。但整個區域檔去重新簽署,會變動的只有紀錄的數位簽章 (RRSIG),不會影響 DNS 的運作。

DNSSEC 怪怪的,或是壞掉了,該怎麼辦?

若你懷疑是 DNSSEC 造成你的解析問題,第一個要做的事情就是透過域名註冊商把 DNSKEY 刪掉,不是自己的伺服器喔!你首要目的是先解除上層的 DNSKEY,只要上面的解除掉,整個解析就會回歸 DNS,你自己的伺服器不需要關閉 DNSSEC。

這裡有一個 DNSSEC 的檢查工具:https://dnssec-debugger.verisignlabs.com/

優點與缺點

  • 使用域名註冊商本身提供的 DNSSEC 代管,可以省去一些步驟與金鑰上載的問題,但無法享有其他供應商帶來的服務,譬如 CDN。
  • Gandi LiveDNS 使用了 ZSK 當作 KSK,整體上來說可以減少一些管理上的麻煩,但以 RFC 的說明文件有建議使用 KSK 與 ZSK 來進行簽署,若金鑰有常替換的話,應該是沒有什麼資安的問題。
  • 因為 DNSSEC 是綁在名稱伺服器上面所以若您的 DNS 代管廠商沒有提供些功能,即使你的域名支援 DNSSEC,也是無法使用。
  • 在您啟用 DNSSEC 之後,記得不要再去變更名稱伺服器,因為金鑰去在名稱伺服器上面,只有擁有金鑰的主機可以簽署 DNS 紀錄,所以您在更新或建立 DNS 紀錄時,系統都會重新簽署。

誰比較好?

目前看起來兩家都很好。找到一個簡易又適合你的代管是很重要的,DNSSEC 不能解決網路上所有的攻擊,也不會把你的 DNS 資料加密,他唯一的作用就是確保資料的來源正確性與解析正確性,若你的域名註冊商有提供這個功能,不彷開起來試試看吧!



發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *