DNS安全性介紹和要求(RFC4033翻譯)

1 引言

本文件介紹了域名系統安全擴展(DNSSEC)。本文檔及其兩個配套文檔([RFC4034]和[RFC4035])更新、澄清和改進了[RFC2535]及其前身中定義的安全擴展。這些安全擴展包括一組新的資源記錄類型和對現有DNS協議的修改([RFC1035])。新記錄和協議修改在本文件中沒有完全描述,但在第10節概述的一系列文件中進行了描述。第3節和第4節更詳細地描述了安全擴展的功能和限制。第5節討論文檔集的範圍。第6、7、8和9節討論這些安全擴展對解析器、存根解析器、區域和名稱服務器的影響。

本文檔及其兩個同伴已經作廢[RFC2535]、[RFC3008]、[RFC3090]、[RFC3445]、[RFC3655]、[RFC3658]、[RFC3755]、[RFC3757]、[RFC3845]。這個文檔集也會更新但不會過時[RFC1034]、[RFC1035]、[RFC2136]、[RFC2181]、[RFC2308]、[RFC3225]、[RFC3007]、[RFC3597],以及[RFC3226]中與DNSSEC相關的部分。

DNS安全擴展爲DNS數據提供了原始身份驗證完整性保護,以及一種公鑰分發方式。這些擴展不提供機密性。

2 重要DNSSEC術語的定義

本節定義了一組在本文檔中使用的條款數量。因爲這是打算是有用的作爲參考在閱讀文檔的其餘部分,首次的讀者可能希望跳過本節快,閱讀本文檔的其餘部分,然後回到這一節。

  • 身份驗證鏈(Authentication Chain): DNS公鑰(DNSKEY) RRset和授權簽名者(DS,Delegation Signer) RRset的交替序列形成一個簽名數據鏈,鏈中的每個鏈接都保證下一個鏈接。DNSKEY RR用於驗證DS RR的簽名,並對DS RR進行身份驗證。DS RR包含另一個DNSKEY RR的hash,這個新的DNSKEY RR通過匹配DS RR中的hash進行身份驗證。這個新的DNSKEY RR依次對另一個DNSKEY RRset進行身份驗證,然後,這個集合中的一些DNSKEY RR可以用於對另一個DS RR進行身份驗證,以此類推,直到鏈最終以一個DNSKEY RR結束,該RR的對應私鑰對所需的DNS數據進行簽名。例如,根DNSKEY RRset可用於對“example.”中的DS RRset進行身份驗證。“example.” DS RRset包含一個匹配某些"example." DNSKEY的hash,這個DNSKEY對應的私鑰簽署 “example.” DNSKEY RRset。私鑰對應的"example." DNSKEY RRset爲“www.example.”等數據記錄和“subzone.example”等代表團簽署DS RRs。

    The “example.” DS RRset contains a hash that matches some “example.” DNSKEY, and this DNSKEY’s corresponding private key signs the “example.” DNSKEY RRset. Private key counterparts of the “example.” DNSKEY RRset sign data records such as “www.example.” and DS RRs for delegations such as “subzone.example.”

  • **身份驗證密鑰(Authentication Key)😗*安全解析器已驗證的公鑰,因此可以使用它來驗證數據。安全解析器可以通過三種方式獲得身份驗證密鑰:

    1. 解析器通常配置爲至少知道一個公鑰,通常是公鑰本身或在DS RR中找到的公鑰hash(請參閱“信任錨”)。

    2. 解析器可以使用經過身份驗證的公鑰來驗證DS RR和DS RR所指向的DNSKEY RR。

    3. 衝突解決程序可以確定一個新的公鑰已經由與衝突解決程序驗證的另一個公鑰對應的私鑰簽署。注意,在決定是否對新公鑰進行身份驗證時,解析器必須始終遵循本地策略,即使本地策略只是對解析器能夠驗證簽名的任何新公鑰進行身份驗證。

Third, the resolver may be able to determine that a new public key has been signed by the private key corresponding to another public key that the resolver has verified. Note that the resolver must always be guided by local policy when deciding whether to authenticate a new public key, even if the local policy is simply to authenticate any new public key for which the resolver is able verify the signature.

  • **權威RRset(Authoritative RRset)😗*在一個特定的上下文中,“權威”當且僅當一個RRset的所有者名稱RRset位於名稱空間的子集,或低於以上區域頂點和分離區從孩子的削減,如果任何。區域頂點的所有rrset都是權威的,但此域名的某些rrset(如果存在)屬於此區域的父域。這些RRset可以包括一個DS RRset,引用這個DS RRset的NSEC RRset(“parent NSEC”),以及與這些RRset相關的RRSIG RRs,所有這些RRs在父區域中都是權威的。類似地,如果此區域包含任何委託點,則只有父類NSEC RRset、DS RRset和與這些RRset關聯的任何RRSIG RRs對該區域具有權威性。

  • **委託點(Delegation Point)😗*用於描述區域切割的親本側名稱的術語。也就是說,“foo”的委託點。例如"是foo。“示例”區域中的示例節點(與“foo”的區域頂點相反)。示例”區)。參見區域頂點。

  • **安全島(Island of Security)😗*用於描述已簽名的委託區域,該區域沒有來自其委託的父級的身份驗證鏈。也就是說,在其委託的父區域中沒有包含島嶼的DNSKEY RR散列的DS RR(參見[RFC4034])。安全島由安全感知的名稱服務器提供,可以爲任何委託的子區域提供身份驗證鏈。來自安全島或其後代的響應只有在其身份驗證密鑰可以通過DNS協議的帶外可信手段進行身份驗證的情況下才能進行身份驗證。

  • **密鑰簽名密鑰(KSK,Key Signing Key)😗*與用於爲給定區域簽名一個或多個其他身份驗證密鑰的私有密鑰相對應的身份驗證密鑰。

    通常,與KSK對應的私鑰將對ZSK進行簽名,而ZSK又具有相應的私鑰,該私鑰將對其他區域數據進行簽名。本地策略可能要求頻繁更改區域簽名密鑰,而密鑰簽名密鑰的有效期可能更長,以便提供進入區域的更穩定的安全入口點。指定一個身份驗證密鑰作爲KSK純粹是一個操作問題: DNSSEC 驗證不區分KSK和其他DNSSEC身份驗證密鑰,並且可以使用單個密鑰同時作爲KSK和ZKS。KSK在[RFC3757]中有更詳細的討論。請參閱ZSK。

  • **非驗證安全感知的存根解析器(Non-Validating Security-Aware Stub Resolver)😗*一個安全感知的存根解析器,它信任一個或多個安全感知的遞歸名稱服務器來執行本文檔中討論的大部分任務。特別是,非驗證安全感知的存根解析器是一個實體,它發送DNS查詢、接收DNS響應,並能夠爲安全感知的遞歸名稱服務器建立適當的安全通道,該遞歸名稱服務器將代表安全感知的存根解析器提供這些服務。參見安全感知的存根解析器,驗證安全感知的存根解析器。

  • **非驗證性存根解析器(Non-Validating Stub Resolver)😗*對於非驗證性安全感知存根解析器而言,這是一個不那麼乏味的術語。

  • **安全性敏感的名字服務器(Security-Aware Name Server)😗*一個實體行爲的角色名稱服務器(在2.4節中定義[RFC1034]),本文檔中定義的理解DNS安全擴展集。特別是,一個有安全意識的名稱服務器接收DNS查詢的實體,將DNS響應,支持EDNS0 ([RFC2671])消息大小擴展和做一些([RFC3225]),並支持RR類型和消息頭部分在這個文件中定義。

  • **安全感知的遞歸名稱服務器(Security-Aware Recursive Name Server)😗*同時扮演安全感知的名稱服務器和安全感知的解析器角色的實體。一個更麻煩但等價的短語是“提供遞歸服務的安全名稱服務器”。

  • **意識到安全性問題解析器(Security-Aware Resolver)😗*實體行爲的角色解析器(2.4節中定義[RFC1034]),本文檔中定義的理解DNS安全擴展集。特別是,一個有安全意識的解析器是一個實體發送DNS查詢,收到DNS響應,支持EDNS0 ([RFC2671])消息大小擴展和做一些([RFC3225]),並能使用RR類型和消息頭部分中定義該文檔法案同樣提供域名系統安全擴展服務集。

  • **安全感知的存根解析器(Security-Aware Stub Resolver)😗*扮演存根解析器角色的實體(在[RFC1034]的5.3.1節中定義),該實體對在本文檔中定義的DNS安全擴展有足夠的理解,以提供從安全無關的存根解析器無法獲得的其他服務。安全感知的存根解析器可以是“驗證”的,也可以是“非驗證”的,這取決於存根解析器是試圖自己驗證DNSSEC簽名,還是信任一個友好的安全感知的名稱服務器來驗證。參見驗證存根解析器和非驗證存根解析器。

  • **Security-Oblivious 😗*一個不是“security-aware”的。

  • **已簽名區域(Signed Zone)😗*該區域的RRset已簽名,並且包含正確構造的DNSKEY、資源記錄簽名(RRSIG,Resource Record Signature)、Next Secure (NSEC)和(可選)DS記錄。

  • **信任錨(Trust Anchor)😗*已配置的DNSKEY RR或DNSKEY RR的DS RR hash。驗證安全感知解析器使用此公鑰或hash作爲起點,以構建簽名DNS響應的身份驗證鏈。通常,驗證解析器必須通過DNS協議之外的一些安全或可信的方法來獲取其信任錨的初始值。信任錨點的存在還意味着解析器應該期望對信任錨點所指向的區域進行簽名。

  • **未簽名區域(Unsigned Zone)😗*未簽名的區域。

  • **驗證安全感知的存根解析器(Validating Security-Aware Stub Resolver)😗*一個安全感知的解析器,它以遞歸模式發送查詢,但它自己執行簽名驗證,而不是盲目地信任上游安全感知的遞歸名稱服務器。參見安全感知的存根解析器、非驗證的安全感知的存根解析器。

  • **驗證存根解析器(Validating Stub Resolver)😗*對於驗證安全感知的存根解析器來說,這是一個不那麼乏味的術語。

  • **區域先端(Zone Apex)😗*用來描述位於區域邊緣的孩子的名字。參見委託點。

  • **區域簽名密鑰(ZSK,Zone Signing Key)😗*與用於簽名區域的私鑰相對應的身份驗證密鑰。通常,ZSK將是與KSK相同的DNSKEY RRset的一部分,其對應的私鑰簽署此DNSKEY RRset。但是ZSK用於一個稍微不同的目的,並且可能在其他方面與KSK不同,例如有效期。將認證密鑰指定爲ZSK純粹是一個操作問題;DNSSEC驗證不區分ZSK和其他DNSSEC身份驗證密鑰,可以同時使用單個密鑰作爲KSK和ZSK。參見KSK。

3 DNS安全提供的服務

域名系統(DNS)安全擴展爲DNS數據提供原始身份驗證完整性保證服務,包括通過身份驗證拒絕DNS數據存在的機制。這些機制如下所述。

這些機制需要更改DNS協議。DNSSEC增加了四種新的資源記錄類型:資源記錄簽名(RRSIG)、DNS公鑰(DNSKEY)、授權簽名者(DS)和Next Secure (NSEC)。它還添加了兩個新的消息頭位:檢查禁用數據(CD)和驗證數據(AD)。爲了支持添加DNSSEC RRs所導致的更大的DNS消息大小,DNSSEC還需要EDNS0支持([RFC2671])。最後,DNSSEC需要支持DNSSEC OK (DO) EDNS頭位([RFC3225]),以便安全感知解析器可以在其查詢中指出它希望在響應消息中接收DNSSEC RRs。

這些服務可以保護域名系統免受[RFC3833]中描述的大部分威脅。有關這些擴展的限制的討論,請參閱第12節。

3.1 數據源認證和數據完整性

DNSSEC通過將加密生成的數字簽名與DNS rrset關聯來提供身份驗證。這些數字簽名存儲在一個新的資源記錄``RRSIG記錄中。通常,用一個私有密匙對區數據簽名,但也可以用多個。例如,不同的數字簽名算法會有不同的密鑰。如果安全感知解析器可靠第獲取了區域的公鑰,則可以對該區域的簽名數據進行身份驗證。DNSSEC的一個重要概念是,對區域數據簽名的密鑰與區本身相關,而不是與區的權威名稱服務器相關。(DNS事務認證機制的公鑰也可能出現在區中,如[RFC2931]所述,但DNSSEC本身關心的是DNS數據安全`,而不是DNS事務的通道安全。與事務安全性相關的密鑰可以存儲在不同的RR類型中。詳見[RFC3755]。)

安全感知解析器可以通過在解析器中配置信任錨通過正常的DNS解析來了解區域的公鑰。爲了允許後者,公鑰存儲在一種新的資源記錄類型DNSKEY RR中。請注意,用於簽署區域數據的私鑰必須保持安全,並在實際操作時應脫機存儲。要通過DNS解析可靠地發現公鑰,目標密鑰本身必須由已配置的身份驗證密鑰或之前已驗證過的其他密鑰進行簽名。安全感知的衝突解決程序通過形成從新學習的公鑰返回到以前已知的身份驗證公鑰的身份驗證鏈來對區域信息進行身份驗證,而這些公鑰或者已經配置到衝突解決程序中,或者必須事先學習並驗證過。因此,解析器必須配置至少一個信任錨。

如果配置的信任錨是ZSK,則它將對相關區域進行身份驗證;如果配置的密鑰是KSK,則它將對區域簽名密鑰進行身份驗證。如果配置的信任錨是鍵的HASH,而不是鍵本身,則解析器可能必須通過DNS查詢獲取鍵。爲了幫助安全感知解析器建立此身份驗證鏈,安全感知名稱服務器嘗試發送DNS應答消息中驗證區域公鑰所需的簽名,以及公鑰本身,前提是消息中有可用空間。

授權簽名者(DS,Delegation Signer) RR類型簡化了跨組織邊界簽署代表團所涉及的一些管理任務。DS RRset駐留在父區域中的一個委託點上,並指示用於在被委託的子區域的頂點自簽名DNSKEY RRset的私鑰對應的公鑰。然後,子區域的管理員使用與此DNSKEY RRset中的一個或多個公鑰對應的私鑰對子區域的數據進行簽名。因此,典型的認證鏈是DNSKEY->[DS->DNSKEY] * ->RRset,其中“*”表示0個或多個DS->DNSKEY子鏈。DNSSEC允許更復雜的身份驗證鏈,比如在一個區域內爲其他DNSKEY RRs簽名的附加DNSKEY RRs層。

安全感知解析器通常根據配置的根公鑰知識,從DNS層次結構的根一直到葉區域,構造這個身份驗證鏈。當地政策,然而,也可能讓一個有安全意識的解析器使用一個或多個配置公共密鑰(公鑰或散列)除了根公鑰,可能無法提供配置根公鑰的知識,或可能防止解析器使用特定的公共密鑰由於任意原因,即使這些公鑰是正確與可驗證簽名簽署。DNSSEC提供了一種機制,通過這種機制,安全感知解析器可以確定RRset的簽名在DNSSEC的含義中是否“有效”。然而,歸根結底,對DNS鍵和數據進行身份驗證是一個本地策略的問題,它可能擴展甚至覆蓋本文檔集中定義的協議擴展。

3.2 驗證名稱和類型不存在

第3.1節中描述的安全機制只提供了對區域中現有的rrset進行簽名的方法。使用相同級別的身份驗證和完整性提供負面響應的問題需要使用另一種新的資源記錄類型,即NSEC記錄。NSEC記錄允許安全感知的解析器對名稱或類型不存在的否定應答進行身份驗證,使用與驗證其他DNS應答相同的機制。使用NSEC記錄需要對區域中的域名進行規範表示和排序。NSEC記錄鏈顯式地描述區域中的域名稱之間的空白(或“空白空間(empty space)”),並列出現有名稱中rrset的類型。使用3.1節中描述的機制對每個NSEC記錄進行簽名和身份驗證。

4 DNS安全不提供的服務

DNS最初的設計是基於這樣的假設:無論誰發出了查詢,DNS都將對任何給定的查詢返回相同的答案,因此DNS中的所有數據都是可見的。因此,DNSSEC的設計目的不是提供機密性、訪問控制列表或其他區分詢問者的方法。

DNSSEC不提供針對拒絕服務攻擊的保護。安全感知解析器和安全感知名稱服務器很容易受到基於密碼操作的另一類拒絕服務攻擊。詳情請參閱第12節。

DNS安全擴展爲DNS數據提供數據和原始身份驗證。上述機制並不是爲了保護諸如區域傳輸和動態更新等操作而設計的([RFC2136], [RFC3007])。在[RFC2845]和[RFC2931]中描述的消息身份驗證方案處理與這些事務相關的安全操作。

5 DNSSEC文檔集合概覽和最後一跳問題

本文檔集中的規範定義了區域簽名者和安全感知的名稱服務器和解析器的行爲,其方式是驗證實體可以明確地確定數據的狀態。

驗證解析器(validating resolver)可以確定以下4種狀態:

  • 安全(Secure):驗證解析器有一個信任錨,有一個信任鏈,並且能夠驗證響應中的所有簽名。
  • 不安全(Insecure):驗證解析器有一個信任錨,一個信任鏈,並且在某個委託點簽署了不存在DS記錄的證明。這表明樹中隨後的分支是可證明不安全的。驗證解析器可以使用本地策略將域空間的某些部分標記爲不安全。
  • 僞造(Bogus):驗證解析器有一個信任錨和一個安全委託,指示附屬數據已簽名,但是由於某些原因,響應無法驗證:丟失的簽名、過期的簽名、不支持算法的簽名、相關的NSEC RR認爲應該出現的數據丟失,等等。
  • 不確定(Indeterminate):沒有表示樹的特定部分是安全的信任錨。這是默認的操作模式。

該規範僅定義了安全感知的名稱服務器如何向非驗證存根解析器發出信號,表明發現的數據是僞造的(使用RCODE=2,“服務器故障”;參見[RFC4035])。

安全感知的名稱服務器有一種機制,可以向安全感知的存根解析器發出信號,表明發現的數據是安全的(使用AD位;參見[RFC4035])。

此規範未定義用於通信的格式,說明爲什麼發現響應是虛假的或標記爲不安全的。當前的信令機制沒有區分不確定狀態和不安全狀態。

在安全感知的存根解析器和安全感知的遞歸名稱解析器之間發送高級錯誤代碼和策略的方法是未來工作的主題,安全感知的解析器和使用它的應用程序之間的接口也是未來工作的主題。但是,請注意,此類通信規範的缺乏並不妨礙已簽名區域的部署,也不妨礙安全意識的遞歸名稱服務器的部署,這些服務器禁止將虛假數據傳播到應用程序。

6 解析器注意事項

安全感知解析器必須能夠執行驗證數字簽名所需的密碼功能,至少使用命令到實現的算法。安全感知解析器還必須能夠形成一個身份驗證鏈,從一個新學習的區域返回到一個身份驗證密鑰,如上所述。此過程可能需要對中間DNS區域進行額外查詢,以獲得必要的DNSKEY、DS和RRSIG記錄。一個安全感知的解析器應該配置至少一個信任錨,作爲嘗試建立身份驗證鏈的起點。

如果一個有安全意識的解析器分開相關權威域名服務器通過遞歸域名服務器或任何形式的中介充當DNS代理的設備,如果遞歸域名服務器或中介設備不是有安全意識,意識到安全性問題解析器可能不能夠操作在安全模式。例如,如果安全感知解析器的數據包通過網絡地址轉換(NAT)設備路由,該設備包含一個不安全的DNS代理,安全感知解析器可能會發現很難或不可能獲得或驗證簽名的DNS數據。在這種情況下,安全感知解析器可能很難獲得DS RRs,因爲DS RRs在區域切換時不遵循通常的DNS規則來擁有RRs。請注意,這個問題並不是特定於NATs的:任何類型的安全無關DNS軟件在安全感知解析器和權威名稱服務器之間都會干擾DNSSEC。

如果具有安全意識的解析器必須依賴於未簽名的區域或不具有安全意識的名稱服務器,則解析器可能無法驗證DNS響應,並需要本地策略來決定是否接受未經驗證的響應。

安全感知解析器在確定其緩存中數據的TTL時,應該考慮簽名的驗證期,以避免在簽名的有效期內緩存已簽名的數據。但是,它也應該考慮到安全意識解析器自身時鐘出錯的可能性。因此,作爲安全意識遞歸名稱服務器一部分的安全意識解析器必須仔細注意DNSSEC“檢查禁用”(CD)位([RFC4034])。這樣做是爲了避免阻塞有效簽名,使其無法訪問此遞歸名稱服務器的其他安全解析器。有關安全遞歸服務器如何使用CD位集處理查詢,請參見[RFC4035]。

7 存根解析器注意事項

儘管協議並不嚴格要求這樣做,但大多數DNS查詢都來自存根解析器。根據定義,存根解析器是最小的DNS解析器,它使用遞歸查詢模式將大部分DNS解析工作轉移到遞歸名稱服務器。考慮到存根解析器的廣泛使用,DNSSEC體系結構必須考慮存根解析器,但是存根解析器所需的安全特性在某些方面與具有安全意識的迭代式解析器所需的安全特性不同。

法案同樣甚至security-oblivious存根解析器可能受益於域名系統安全擴展如果遞歸域名服務器使用安全性敏感,但是對於存根解析器將任何真正的法案同樣依賴於域名系統安全擴展服務存根解析器必須信任問題的遞歸域名服務器和本身和名稱服務器之間的通信通道。第一個問題是本地策略問題:本質上,安全無關的存根解析器別無選擇,只能將自己置於所使用的遞歸名稱服務器的支配之下,因爲它自己不執行DNSSEC有效性檢查。第二個問題需要某種渠道安全機制;適當使用DNS事務身份驗證機制(如SIG(0) ([RFC2931])或TSIG ([RFC2845])就足夠了,適當使用IPsec也是如此。特定的實現可能有其他可用的選擇,比如操作系統特定的進程間通信機制。此通道不需要保密性,但需要數據完整性和消息身份驗證。

一個安全感知的存根解析器如果同時信任它的遞歸名稱服務器和它的通信通道,那麼它可以選擇檢查它接收到的響應消息的消息頭中的已驗證數據(AD)位的設置。存根解析器可以使用此標誌位作爲提示,以確定遞歸名稱服務器是否能夠驗證響應的應答和權威部分中的所有數據的簽名。

還有一個步驟,一個有安全意識的存根解析器可以如果,不管出於什麼原因,不能夠建立一個有用的信任關係的遞歸域名服務器用途:它可以執行自己的簽名驗證通過設置檢查禁用(CD)在查詢消息。因此,驗證存根解析器能夠將DNSSEC簽名視爲區域管理員與存根解析器本身之間的信任關係。

8 區文件注意事項

在已簽署和未簽署的區域之間有幾個不同之處。簽名區域將包含額外的安全相關記錄(RRSIG、DNSKEY、DS和NSEC記錄)。RRSIG和NSEC記錄可以在爲區域提供服務之前通過簽名過程生成。區域數據附帶的RRSIG記錄定義了起始和過期時間,這些時間爲簽名和簽名覆蓋的區域數據建立了有效期。

另一方面,RRSIG RR ([RFC4034])中的在先啓和過期字段指定簽名用於驗證所覆蓋的RRset的時間段。與已簽名區域數據關聯的簽名僅在RRSIG RRs中的這些字段指定的時間段內有效。TTL值不能延長有效期的簽署RRsets解析器的緩存,但解析器可以使用剩餘時間的簽名有效期期滿之前簽署RRset作爲上界的TTL簽署RRset及其相關RRSIG RR解析器的緩存。

8.1 TTL值與RRSIG有效期

必須注意RRset的TTL值與RRSIG RR指定的覆蓋該RRset的簽名有效期之間的區別。DNSSEC不改變TTL值的定義或函數,TTL值的目的是維護緩存中的數據庫一致性。緩存解析器從緩存中清除rrset的時間不晚於這些rrset的TTL字段指定的時間段的結束,而不管解析器是否安全。

8.2 區文件的新時間依賴性問題

已簽名區域中的信息具有在原始DNS協議中不存在的時間依賴性。簽名區域需要定期維護,以確保區域中的每個RRset都有當前有效的RRSIG RR。RRSIG RR的簽名有效期是一個間隔,在此期間,可以認爲一個特定簽名RRset的簽名是有效的,並且一個區域中不同RRset的簽名可能在不同的時間到期。在一個區域中重新簽名一個或多個RRset將更改一個或多個RRSIG RRs,這將依次要求增加該區域的SOA序列號以指示發生了區域更改,並重新簽名SOA RRset本身。因此,對區域中的任何RRset重新簽名也可能觸發DNS通知消息和區域傳輸操作。

9 命名服務器注意事項

安全感知的名稱服務器應該包括適當的DNSSEC記錄(RRSIG、DNSKEY、DS和NSEC),以響應解析器的查詢,解析器通過使用EDNS頭中的DO位表示願意接收這些記錄,但受消息大小限制。由於包含這些DNSSEC RRs很容易導致UDP消息截斷並退回到TCP,因此安全感知的名稱服務器還必須支持EDNS“發送方的UDP有效負載”機制。

如果可能,每個DNSSEC密鑰對的私有部分應該保持脫機狀態,但是對於已啓用DNS動態更新的區域,這是不可能的。在動態更新情況下,專區的主主服務器在更新專區時必須重新簽名,因此與專區簽名密鑰對應的私鑰必須保持在線。這的一個例子是一個情況下,能夠獨立的歐元區DNSKEY RRset成帶簽名的密鑰和密鑰簽名密鑰(s)可能是有用的,因爲密鑰簽名密鑰(s)在這種情況下仍能保持離線,可能不再有用的一生比帶簽名的密鑰(年代)。

僅DNSSEC本身不足以在區域轉移操作期間保護整個區域的完整性,因爲即使一個已簽名的區域也包含一些未簽名的、非權威的數據(如果該區域有任何子區域的話)。因此,區域維護操作將需要一些額外的機制(很可能是某種形式的通道安全,如TSIG、SIG(0)或IPsec)。

10 DNS安全文檔集

在DNS基本協議文檔的大傘下,DNSSEC文檔集可以劃分爲幾個主要組。

“DNSSEC協議文檔集”是指構成DNS安全擴展的核心的三個文檔:

  1. DNS安全介紹和要求(本文檔)
  2. DNS安全擴展的資源記錄[RFC4034]
  3. DNS安全擴展的協議修改[RFC4035]

此外,任何添加或更改核心DNS安全擴展的文檔都屬於這一類。這包括在安全感知的存根解析器和上游安全感知的遞歸名稱服務器之間進行通信的任何後續工作。

“數字簽名算法規範”文檔集是指描述如何實現特定數字簽名算法以符合DNSSEC資源記錄格式的一組文檔。這個集合中的每個文檔都處理特定的數字簽名算法。請參閱[RFC4034]中關於“DNSSEC算法和摘要類型”的附錄,其中列出了在編寫本核心規範時定義的算法。

“事務認證協議”文檔集是指處理DNS消息認證的一組文檔,包括密鑰的建立和驗證。雖然在這組文檔中並沒有嚴格定義DNSSEC規範的一部分,但由於它與DNSSEC的關係而被注意到。

最後的文檔集“新安全使用”指的是爲了其他安全相關目的而試圖使用建議的DNS安全擴展的文檔。DNSSEC不爲這些新用途提供任何直接安全性,但可以用於支持它們。屬於這一類的文檔包括描述在存儲和分發證書時使用DNS的文檔([RFC2538])。

12 安全注意事項

本文檔介紹了DNS安全擴展,並描述了包含新安全記錄和DNS協議修改的文檔集。這些擴展使用資源記錄集上的數字簽名來提供數據源身份驗證和數據完整性。本節討論這些擴展的侷限性。

爲了一個有安全意識的解析器來驗證一個DNS響應,所有區域沿着小路從值得信賴的起點到區包含響應區必須簽署,和所有名稱服務器和參與解決過程的解析器必須有安全意識,本文檔中定義的設置。一個有安全意識的解析器不能驗證響應來自一個無符號的區域,從區域不是由一個有安全意識的名稱服務器,或解析器只能通過不支持安全的遞歸名稱服務器獲取的任何DNS數據。如果身份驗證鏈出現中斷,導致安全感知解析器無法獲取和驗證所需的身份驗證密鑰,則安全感知解析器無法驗證受影響的DNS數據。

本文簡要討論了向DNS查詢添加安全性的其他方法,如使用由IPsec保護的通道或使用諸如TSIG ([RFC2845])或SIG(0) ([RFC2931])等DNS事務身份驗證機制,但事務安全性本身不是DNSSEC的一部分。

非驗證安全性敏感的存根解析器,根據定義,法案同樣不執行域名系統安全擴展簽名驗證的,因此都是脆弱的攻擊的安全性敏感的遞歸域名服務器(和)代表其執行這些檢查和攻擊其溝通與安全性敏感的遞歸域名服務器。非驗證安全感知的存根解析器應該使用某種形式的通道安全性來防禦後一種威脅。對於前一種威脅,惟一已知的防禦方法是讓安全感知的存根解析器執行自己的簽名驗證,此時,根據定義,它將不再是一個非驗證的安全感知的存根解析器。

DNSSEC不能防止拒絕服務攻擊。由於攻擊者可以嘗試使用DNSSEC機制來消耗受害者的資源,因此DNSSEC使DNS容易受到基於針對安全感知解析器和安全感知名稱服務器的密碼操作的新類型的拒絕服務攻擊。這類攻擊至少有兩種形式。攻擊者可以通過篡改響應消息中的RRSIG RRs或構造不必要的複雜簽名鏈來消耗安全意識解析器的簽名驗證代碼中的資源。攻擊者還可以通過發送更新消息流來消耗支持DNS動態更新的安全感知的名稱服務器中的資源,從而迫使安全感知的名稱服務器比在其他情況下更頻繁地對區域中的某些rrset重新簽名。

由於慎重的設計選擇,DNSSEC不提供機密性。DNSSEC引入了敵對方通過遵循NSEC鏈來枚舉區域中的所有名稱的能力。NSEC RRs通過按區域內所有名稱的規範順序從現有名稱鏈接到現有名稱,從而斷言哪些名稱在區域中不存在。因此,攻擊者可以依次查詢這些NSEC RRs,以獲得一個區域中的所有名稱。雖然這不是對DNS本身的攻擊,但它允許攻擊者通過枚舉區域的內容來映射網絡主機或其他資源。

DNSSEC爲DNS帶來了顯著的額外複雜性,從而爲實現錯誤和錯誤配置區域帶來了許多新的機會。特別是,在解析器中啓用DNSSEC簽名驗證可能會導致由於DNSSEC配置錯誤或bug而導致整個合法區域無法有效訪問。

DNSSEC不能防止對未簽名區域數據的篡改。在區域剪切處的非權威數據(在父區域中的glue和NS RRs)沒有簽名。這在驗證身份驗證鏈時不會造成問題,但它確實意味着在區域傳輸操作期間,非權威數據本身很容易受到篡改。因此,雖然DNSSEC可以爲rrset提供數據源身份驗證和數據完整性,但它不能爲區域提供這些功能,必須使用其他機制(如TSIG、SIG(0)或IPsec)來保護區域傳輸操作。

請參閱[RFC4034]和[RFC4035]以瞭解更多的安全注意事項。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章