DNSSEC
DNSSEC(網域名稱系統安全擴展)是網際網路工程任務組(IETF)制定的一套擴展規範,用於保護網域名稱系統中交換資料的安全。DNSSEC 旨在透過基於公鑰加密的數位簽名,保護應用程式免受偽造或篡改的 DNS 資料的影響,例如由 DNS 快取中毒和中間人攻擊建立的資料。
How it works
DNSSEC 使用基於公鑰加密的數位簽名來加強 DNS 身份驗證。與傳統 DNS 不同(傳統 DNS 的回應可能被偽造),DNSSEC 確保 DNS 資料來自合法來源,並且在傳輸過程中未被篡改。需要注意的是,DNSSEC 不會加密 DNS 查詢或回應——它只提供身份驗證和完整性驗證。
在 DNSSEC 中,進行加密簽名的不是 DNS 查詢和回應本身,而是 DNS 資料本身由資料所有者簽名。以下是該過程的工作原理:
**簽名過程:**
1. 每個 DNS 區域都有一對公鑰/私鑰
2. 區域所有者使用區域的私鑰對區域中的 DNS 資料進行簽名
3. 這會為每個 DNS 資源記錄集建立數位簽名(存儲為 RRSIG 記錄)
4. 公鑰發布在 DNS 區域的 DNSKEY 記錄中
**驗證過程:**
1. 當對啟用 DNSSEC 的區域進行 DNS 查詢時,回應包括請求的 DNS 資料及其 RRSIG 簽名
2. 解析器檢索包含公鑰的 DNSKEY 記錄
3. 解析器使用公鑰驗證數位簽名
4. 如果簽名有效,則資料被確認為真實且未被修改
5. 如果簽名無效,解析器會假定存在攻擊,丟棄資料並傳回錯誤
這建立了一條從根 DNS 伺服器到各個網域的信任鏈,確保 DNS 層次結構每個級別的真實性。
Key Points
- DNSSEC 提供資料來源身份驗證和資料完整性保護,但不提供保密性或加密
- 使用帶有 DNSKEY(公鑰)和 RRSIG(數位簽名)記錄的公鑰加密
- 從根 DNS 伺服器向下透過 DNS 層次結構建立信任鏈
- 防止 DNS 快取中毒、中間人攻擊和 DNS 欺騙
- DNSSEC 驗證失敗會導致解析器完全拒絕回應
Common Use Cases
- 防止 DNS 快取中毒: 防止攻擊者向解析器快取中注入虛假的 DNS 資料,從而將使用者重新導向到惡意網站
- 中間人攻擊保護: 確保 DNS 回應在權威伺服器和客戶端之間未被攻擊者攔截和修改
- 高安全性網域名稱: 金融機構、政府網站和其他安全關鍵網域名稱使用 DNSSEC 來確保使用者訪問到合法網站
- DANE 和 TLSA 記錄: DANE(基於 DNS 的命名實體身份驗證)需要 DNSSEC,它允許使用 TLSA 記錄將憑證綁定到 DNS 名稱
code DNSSEC 記錄示例
| Type | Host / Name | Value / Points to | TTL |
|---|---|---|---|
| DNSKEY | @ | 257 3 8 AwEAAb...c8= | 3600 |
| DNSKEY | @ | 256 3 8 AwEAAa...m0= | 3600 |
| RRSIG | @ | A 8 2 3600 20250115000000 20241216000000... | 3600 |
| DS | @ | 12345 8 2 49FD...AB12 | 3600 |
* DNSSEC 向 DNS 區域新增了幾種新的記錄類型。主要記錄是 DNSKEY(公鑰)和 RRSIG(數位簽名)。
Frequently Asked Questions
DNSSEC 會加密 DNS 查詢嗎?expand_more
不會,DNSSEC 不提供加密或保密性。它只提供身份驗證(驗證來源)和完整性(確認資料未被修改)。DNS 查詢和回應仍以明文傳送。如需加密,您需要使用 DNS over HTTPS (DoH) 或 DNS over TLS (DoT) 來補充或替代 DNSSEC。
為什麼 DNSSEC 沒有被廣泛採用?expand_more
DNSSEC 的採用一直很緩慢,原因有幾個:DNS 區域管理的複雜性增加、需要謹慎的金鑰管理和輪換、與某些 DNS 軟體和服務的相容性問題、更大的 DNS 回應大小可能導致 UDP 資料包限制問題,以及最終使用者缺乏立即可見的好處。然而,採用率正在逐步提高,尤其是在注重安全的組織中。
如果 DNSSEC 驗證失敗會發生什麼?expand_more
當 DNSSEC 驗證失敗時,意味著無法驗證數位簽名,表明可能存在篡改或設定錯誤。驗證解析器將完全拒絕回應,並向客戶端傳回 SERVFAIL 錯誤。這意味著網站或服務將無法存取,而不是可能提供惡意內容。這種「故障關閉」方法優先考慮安全性而非可用性。
我需要在客戶端做些什麼才能使用 DNSSEC 嗎?expand_more
最終使用者不需要專門為 DNSSEC 設定任何東西——驗證由 DNS 解析器執行(通常是您的 ISP 的 DNS 或公共 DNS 服務,如 Google DNS 或 Cloudflare)。但是,解析器必須支援 DNSSEC 驗證,您才能從中受益。大多數現代 DNS 解析器都支援 DNSSEC,但並非所有解析器都預設啟用驗證。
DNSSEC 中的信任鏈是什麼?expand_more
信任鏈從 DNS 根區域開始,由可信金鑰簽名。DNS 層次結構的每個級別都使用 DS(委派簽署者)記錄為其下一級簽署記錄。例如:根區域簽署 .com 區域的 DS 記錄,.com 區域簽署 example.com 的 DS 記錄,example.com 簽署其自己的區域資料。解析器從根向下驗證此鏈中的每個連結直到請求的記錄,確保每個級別的真實性。