| < draft-ietf-dnsop-negative-trust-anchors-06.txt | draft-ietf-dnsop-negative-trust-anchors-07.txt > | |||
|---|---|---|---|---|
| Domain Name System Operations P. Ebersman | Domain Name System Operations P. Ebersman | |||
| Internet-Draft Comcast | Internet-Draft Comcast | |||
| Intended status: Informational C. Griffiths | Intended status: Informational C. Griffiths | |||
| Expires: November 9, 2015 | Expires: November 10, 2015 | |||
| W. Kumari | W. Kumari | |||
| J. Livingood | J. Livingood | |||
| Comcast | Comcast | |||
| R. Weber | R. Weber | |||
| Nominum | Nominum | |||
| May 8, 2015 | May 9, 2015 | |||
| Definition and Use of DNSSEC Negative Trust Anchors | Definition and Use of DNSSEC Negative Trust Anchors | |||
| draft-ietf-dnsop-negative-trust-anchors-06 | draft-ietf-dnsop-negative-trust-anchors-07 | |||
| Abstract | Abstract | |||
| DNS Security Extensions (DNSSEC) is now entering widespread | DNS Security Extensions (DNSSEC) is now entering widespread | |||
| deployment. However, domain signing tools and processes are not yet | deployment. However, domain signing tools and processes are not yet | |||
| as mature and reliable as those for non-DNSSEC-related domain | as mature and reliable as those for non-DNSSEC-related domain | |||
| administration tools and processes. Negative Trust Anchors | administration tools and processes. Negative Trust Anchors | |||
| (described in this document) can be used to mitigate DNSSEC | (described in this document) can be used to mitigate DNSSEC | |||
| validation failures. | validation failures. | |||
| skipping to change at page 1, line 48 ¶ | skipping to change at page 1, line 48 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on November 9, 2015. | This Internet-Draft will expire on November 10, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction and motivation . . . . . . . . . . . . . . . . . 2 | 1. Introduction and motivation . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Definition of a Negative Trust Anchor . . . . . . . . . . 3 | 1.1. Definition of a Negative Trust Anchor . . . . . . . . . . 3 | |||
| 1.2. Domain Validation Failures . . . . . . . . . . . . . . . 4 | 1.2. Domain Validation Failures . . . . . . . . . . . . . . . 4 | |||
| 1.3. End User Reaction . . . . . . . . . . . . . . . . . . . . 4 | 1.3. End User Reaction . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.4. Switching to a Non-Validating Resolver is Not Recommended 5 | 1.4. Switching to a Non-Validating Resolver is Not Recommended 5 | |||
| 2. Use of a Negative Trust Anchor . . . . . . . . . . . . . . . 5 | 2. Use of a Negative Trust Anchor . . . . . . . . . . . . . . . 5 | |||
| 3. Managing Negative Trust Anchors . . . . . . . . . . . . . . . 7 | 3. Managing Negative Trust Anchors . . . . . . . . . . . . . . . 7 | |||
| 3.1. Alerting Users to NTA Use . . . . . . . . . . . . . . . . 7 | ||||
| 4. Removal of a Negative Trust Anchor . . . . . . . . . . . . . 7 | 4. Removal of a Negative Trust Anchor . . . . . . . . . . . . . 7 | |||
| 5. Comparison to Other DNS Misconfigurations . . . . . . . . . . 8 | 5. Comparison to Other DNS Misconfigurations . . . . . . . . . . 8 | |||
| 6. Intentionally Broken Domains . . . . . . . . . . . . . . . . 8 | 6. Intentionally Broken Domains . . . . . . . . . . . . . . . . 8 | |||
| 7. Other Considerations . . . . . . . . . . . . . . . . . . . . 8 | 7. Discovering broken domains . . . . . . . . . . . . . . . . . 9 | |||
| 7.1. Security Considerations . . . . . . . . . . . . . . . . . 8 | 8. Other Considerations . . . . . . . . . . . . . . . . . . . . 11 | |||
| 7.2. Privacy Considerations . . . . . . . . . . . . . . . . . 9 | 8.1. Security Considerations . . . . . . . . . . . . . . . . . 11 | |||
| 7.3. IANA Considerations . . . . . . . . . . . . . . . . . . . 9 | 8.2. Privacy Considerations . . . . . . . . . . . . . . . . . 11 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 9 | 8.3. IANA Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 9 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 10 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Configuration Examples . . . . . . . . . . . . . . . 10 | 10.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| A.1. NLNet Labs Unbound . . . . . . . . . . . . . . . . . . . 10 | Appendix A. Configuration Examples . . . . . . . . . . . . . . . 13 | |||
| A.2. ISC BIND . . . . . . . . . . . . . . . . . . . . . . . . 11 | A.1. NLNet Labs Unbound . . . . . . . . . . . . . . . . . . . 13 | |||
| A.3. Nominum Vantio . . . . . . . . . . . . . . . . . . . . . 11 | A.2. ISC BIND . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| Appendix B. Discovering broken domains . . . . . . . . . . . . . 11 | A.3. Nominum Vantio . . . . . . . . . . . . . . . . . . . . . 13 | |||
| Appendix C. Document Change Log . . . . . . . . . . . . . . . . 13 | Appendix B. Document Change Log . . . . . . . . . . . . . . . . 14 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 1. Introduction and motivation | 1. Introduction and motivation | |||
| This document defines a Negative Trust Anchor, which can be used | This document defines a Negative Trust Anchor, which can be used | |||
| during the transition to ubiquitous DNSSEC deployment. Negative | during the transition to ubiquitous DNSSEC deployment. Negative | |||
| Trust Anchors (NTAs) are configured locally on a validating DNS | Trust Anchors (NTAs) are configured locally on a validating DNS | |||
| recursive resolver to shield end users from DNSSEC-related | recursive resolver to shield end users from DNSSEC-related | |||
| authoritative name server operational errors. Negative Trust Anchors | authoritative name server operational errors. Negative Trust Anchors | |||
| are intended to be temporary, and should not be distributed by IANA | are intended to be temporary, and should not be distributed by IANA | |||
| or any other organization outside of the administrative boundary of | or any other organization outside of the administrative boundary of | |||
| skipping to change at page 3, line 32 ¶ | skipping to change at page 3, line 38 ¶ | |||
| a failure on the part of the domain they wanted to reach. Without | a failure on the part of the domain they wanted to reach. Without | |||
| the techniques in this document, this pressure may cause the resolver | the techniques in this document, this pressure may cause the resolver | |||
| operator to disable (or simply not deploy) DNSSEC validation. Use of | operator to disable (or simply not deploy) DNSSEC validation. Use of | |||
| a Negative Trust Anchor to temporarily disable DNSSEC validation for | a Negative Trust Anchor to temporarily disable DNSSEC validation for | |||
| a specific misconfigured domain name immediately restores access for | a specific misconfigured domain name immediately restores access for | |||
| end users. This allows the domain's administrators to fix their | end users. This allows the domain's administrators to fix their | |||
| misconfiguration, while also allowing the organization using the | misconfiguration, while also allowing the organization using the | |||
| Negative Trust Anchor to keep DNSSEC validation enabled and still | Negative Trust Anchor to keep DNSSEC validation enabled and still | |||
| reach the misconfigured domain. | reach the misconfigured domain. | |||
| It is worth noting the following text from RFC4033 [RFC4033] - "In | It is worth noting the following text from [RFC4033] - "In the final | |||
| the final analysis, however, authenticating both DNS keys and data is | analysis, however, authenticating both DNS keys and data is a matter | |||
| a matter of local policy, which may extend or even override the | of local policy, which may extend or even override the protocol | |||
| protocol extensions defined in this document set." A responsibility | extensions defined in this document set." A responsibility (one of | |||
| (one of many) of a caching server operator is to "protect the | many) of a caching server operator is to "protect the integrity of | |||
| integrity of the cache." | the cache." | |||
| 1.1. Definition of a Negative Trust Anchor | 1.1. Definition of a Negative Trust Anchor | |||
| Trust Anchors are defined in [RFC5914]. A trust anchor should be | Trust Anchors are defined in [RFC5914]. A trust anchor should be | |||
| used by a validating caching resolver as a starting point for | used by a validating caching resolver as a starting point for | |||
| building the authentication chain for a signed DNS response. By way | building the authentication chain for a signed DNS response. By way | |||
| of analogy, negative trust anchors stop validation of the | of analogy, negative trust anchors stop validation of the | |||
| authentication chain. Instead, the validator treats any upstream | authentication chain. Instead, the validator treats any upstream | |||
| responses as if the zone is unsigned and does not set the AD bit in | responses as if the zone is unsigned and does not set the AD bit in | |||
| responses it sends to clients. Note that this is a behavior, and not | responses it sends to clients. Note that this is a behavior, and not | |||
| skipping to change at page 5, line 41 ¶ | skipping to change at page 5, line 47 ¶ | |||
| Technical personnel trained in the operation of DNS servers MUST | Technical personnel trained in the operation of DNS servers MUST | |||
| confirm that a failure is due to misconfiguration, as a similar | confirm that a failure is due to misconfiguration, as a similar | |||
| breakage could have occurred if an attacker gained access to a | breakage could have occurred if an attacker gained access to a | |||
| domain's authoritative servers and modified those records or had the | domain's authoritative servers and modified those records or had the | |||
| domain pointed to their own rogue authoritative servers. They should | domain pointed to their own rogue authoritative servers. They should | |||
| also confirm that the domain is not intentionally broken, such as for | also confirm that the domain is not intentionally broken, such as for | |||
| testing purposes as noted in Section 6. Finally, they should make a | testing purposes as noted in Section 6. Finally, they should make a | |||
| reasonable attempt to contact the domain owner of the misconfigured | reasonable attempt to contact the domain owner of the misconfigured | |||
| zone, preferably prior to implementing the Negative Trust Anchor. | zone, preferably prior to implementing the Negative Trust Anchor. | |||
| Involving trained technical personnel is costly, but operational | Involving trained technical personnel is costly, but operational | |||
| experience suggests that this is a very rare event such as around | experience suggests that this is a very rare event, usually on the | |||
| once per quarter (or even less). | order of once per quarter (or even less). | |||
| It is important to confirm that the comains is still under the | ||||
| ownership / control of the legitimate owner of the domain - this is | ||||
| to ensure that disabling validation for a specific domain does not | ||||
| direct users to an address under an attackers control. Contacting | ||||
| the domain owner allows the resolver operator to determine if the | ||||
| issue is a DNSSEC misconfiguration or an attack. | ||||
| In the case of a validation failure due to misconfiguration of a TLD | In the case of a validation failure due to misconfiguration of a TLD | |||
| or popular domain name (such as a top 100 website), content or | or popular domain name (such as a top 100 website), content or | |||
| services in the affected TLD or domain could be inaccessible for a | services in the affected TLD or domain could be inaccessible for a | |||
| large number of users. In such cases, it may be appropriate to use a | large number of users. In such cases, it may be appropriate to use a | |||
| Negative Trust Anchor as soon as the misconfiguration is confirmed. | Negative Trust Anchor as soon as the misconfiguration is confirmed. | |||
| An example of a list of "top N" websites is the "Alexa Top 500 Sites | ||||
| on the Web" [Alexa], another example would be to look through | ||||
| historical query logs. | ||||
| Once a domain has been confirmed to fail DNSSEC validation due to a | Once a domain has been confirmed to fail DNSSEC validation due to a | |||
| DNSSEC-related misconfiguration, an ISP or other DNS recursive | DNSSEC-related misconfiguration, an ISP or other DNS recursive | |||
| resolver operator may elect to use a Negative Trust Anchor for that | resolver operator may elect to use a Negative Trust Anchor for that | |||
| domain or sub-domain. This instructs their DNS recursive resolver to | domain or sub-domain. This instructs their DNS recursive resolver to | |||
| temporarily NOT perform DNSSEC validation at or in the misconfigured | temporarily NOT perform DNSSEC validation at or in the misconfigured | |||
| domain. This immediately restores access to the domain for end users | domain. This immediately restores access to the domain for end users | |||
| while the domain's administrator corrects the misconfiguration(s). | while the domain's administrator corrects the misconfiguration(s). | |||
| It does not and should not involve turning off validation more | It does not and should not involve turning off validation more | |||
| broadly. | broadly. | |||
| skipping to change at page 6, line 34 ¶ | skipping to change at page 7, line 5 ¶ | |||
| zone1.example.com, and validation would still be performed on | zone1.example.com, and validation would still be performed on | |||
| example.com, .com, and the root ("."). This Negative Trust Anchor | example.com, .com, and the root ("."). This Negative Trust Anchor | |||
| also SHOULD NOT affect names in another branch of the tree (such as | also SHOULD NOT affect names in another branch of the tree (such as | |||
| example.net). In another example, a Negative Trust Anchor for | example.net). In another example, a Negative Trust Anchor for | |||
| example.com would affect only names within example.com, and | example.com would affect only names within example.com, and | |||
| validation would still be performed on .com, and the root ("."). In | validation would still be performed on .com, and the root ("."). In | |||
| this scenario, if there is a (probably manually configured) trust | this scenario, if there is a (probably manually configured) trust | |||
| anchor for zone1.example.com, validation would be performed for | anchor for zone1.example.com, validation would be performed for | |||
| zone1.example.com and subdomains of zone1.example.com. | zone1.example.com and subdomains of zone1.example.com. | |||
| Root (.) <====== | ||||
| | || | ||||
| | ||<======>+----+----+ DNSSEC | ||||
| | || |Recursive| Validation | ||||
| TLD (com) <=====|| |Resolver |<============> | ||||
| | +<------>+---------+ | ||||
| | | DNS NTA | ||||
| | | (example.com) | ||||
| SUB TLD (example.com) <------| <--------------> | ||||
| | | | ||||
| | | | ||||
| | | | ||||
| (zone1.example.com <-----| | ||||
| Figure 1: Negative Trust Anchor Diagram | ||||
| 3. Managing Negative Trust Anchors | 3. Managing Negative Trust Anchors | |||
| While Negative Trust Anchors have proven useful during the early | While Negative Trust Anchors have proven useful during the early | |||
| stages of DNSSEC adoption, domain owners are ultimately responsible | stages of DNSSEC adoption, domain owners are ultimately responsible | |||
| for managing and ensuring their DNS records are configured correctly. | for managing and ensuring their DNS records are configured correctly. | |||
| Most current implementations of DNS validating resolvers currently | Most current implementations of DNS validating resolvers currently | |||
| follow [RFC4033] on configuring a Trust Anchor using either a public | follow [RFC4033] on configuring a Trust Anchor using either a public | |||
| key as in a DNSKEY RR or a hash of a public key as in a DS RR. A | key as in a DNSKEY RR or a hash of a public key as in a DS RR. | |||
| Negative Trust Anchor should use domain name formatting that | ||||
| signifies where in a delegation a validation process should be | ||||
| stopped. | ||||
| Different DNS validators may have different configuration names for a | Different DNS validators may have different configuration names for a | |||
| Negative Trust Anchor. For examples see Appendix A. | Negative Trust Anchor. For examples see Appendix A. | |||
| It is RECOMMENDED that implmentations warn operators (or treat as an | ||||
| error) if they attempt to add an NTA for a domain that has a | ||||
| configured positive trust anchor. | ||||
| 3.1. Alerting Users to NTA Use | ||||
| End users of a DNS recursive resolver or other people may wonder why | ||||
| a domain that fails DNSSEC validation resolves with a supposedly | ||||
| validating resolver. As a result, implementors should consider | ||||
| transparently disclosing those Negative Trust Anchors which are | ||||
| currently in place or were in place in the past, such as on a website | ||||
| [Disclosure-Example]. | ||||
| This is particularly important since there is currently no special | ||||
| DNS query response code that could indicate to end users or | ||||
| applications that a Negative Trust Anchor is in place. Such | ||||
| disclosures should optimally include both the data and time that the | ||||
| Negative Trust Anchor was put in place and when it was removed. | ||||
| 4. Removal of a Negative Trust Anchor | 4. Removal of a Negative Trust Anchor | |||
| As explored in Section 7.1, using an NTA once the zone correctly | As explored in Section 8.1, using an NTA once the zone correctly | |||
| validates can have security considerations. It is therefore | validates can have security considerations. It is therefore | |||
| RECOMMENDED that NTA implementors SHOULD periodically attempt to | RECOMMENDED that NTA implementors SHOULD periodically attempt to | |||
| validate the domain in question, for the period of time that the | validate the domain in question, for the period of time that the | |||
| Negative Trust Anchor is in place, until such validation is again | Negative Trust Anchor is in place, until such validation is again | |||
| successful. NTAs MUST expire automatically when their configured | successful. NTAs MUST expire automatically when their configured | |||
| lifetime ends. The lifetime MUST NOT exceed a week. Before removing | lifetime ends. The lifetime MUST NOT exceed a week. Before removing | |||
| the Negative Trust Anchor, all authoritative resolvers listed in the | the Negative Trust Anchor, all authoritative resolvers listed in the | |||
| zone should be checked (due to anycast and load balancers it may not | zone should be checked (due to anycast and load balancers it may not | |||
| be possible to check all instances). | be possible to check all instances). | |||
| skipping to change at page 7, line 48 ¶ | skipping to change at page 8, line 15 ¶ | |||
| that it can validate (whether the response was an actual SOA answer | that it can validate (whether the response was an actual SOA answer | |||
| or a NOERROR/NODATA with appropriate NSEC/NSEC3 records), the NTA is | or a NOERROR/NODATA with appropriate NSEC/NSEC3 records), the NTA is | |||
| presumed no longer to be necessary and is removed. Implementations | presumed no longer to be necessary and is removed. Implementations | |||
| SHOULD, by default, perform this operation. Note that under some | SHOULD, by default, perform this operation. Note that under some | |||
| circumstances this is undesirable behavior (for example, if | circumstances this is undesirable behavior (for example, if | |||
| www.example.com has a bad signature, but example.com/SOA is fine) and | www.example.com has a bad signature, but example.com/SOA is fine) and | |||
| so implementations may wish to allow the operator to override this | so implementations may wish to allow the operator to override this | |||
| spot-check / behavior. | spot-check / behavior. | |||
| When removing the NTA, the implementation SHOULD remove all cached | When removing the NTA, the implementation SHOULD remove all cached | |||
| entries below the NTA node. | entries at and below the NTA node. | |||
| 5. Comparison to Other DNS Misconfigurations | 5. Comparison to Other DNS Misconfigurations | |||
| Domain administrators are ultimately responsible for managing and | Domain administrators are ultimately responsible for managing and | |||
| ensuring their DNS records are configured correctly. ISPs or other | ensuring their DNS records are configured correctly. ISPs or other | |||
| DNS recursive resolver operators cannot and should not correct | DNS recursive resolver operators cannot and should not correct | |||
| misconfigured A, CNAME, MX, or other resource records of domains for | misconfigured A, CNAME, MX, or other resource records of domains for | |||
| which they are not authoritative. Expecting non-authoritative | which they are not authoritative. Expecting non-authoritative | |||
| entities to protect domain administrators from any misconfiguration | entities to protect domain administrators from any misconfiguration | |||
| of resource records is therefore unrealistic and unreasonable, and in | of resource records is therefore unrealistic and unreasonable, and in | |||
| the long-term is harmful to the delegated design of the DNS and could | the long-term is harmful to the delegated design of the DNS and could | |||
| lead to extensive operational instability and/or variation. | lead to extensive operational instability and/or variation. | |||
| With DNSSEC breakage, it is often possible to tell that there is a | ||||
| misconfiguration by looking at the data and not needing to guess what | ||||
| it should have been. | ||||
| 6. Intentionally Broken Domains | 6. Intentionally Broken Domains | |||
| Some domains, such as dnssec-failed.org, have been intentionally | Some domains, such as dnssec-failed.org, have been intentionally | |||
| broken for testing purposes | broken for testing purposes | |||
| [Measuring-DNSSEC-Validation-of-Website-Visitors] [Netalyzr]. For | [Measuring-DNSSEC-Validation-of-Website-Visitors] [Netalyzr]. For | |||
| example, dnssec-failed.org is a DNSSEC-signed domain that is broken. | example, dnssec-failed.org is a DNSSEC-signed domain that is broken. | |||
| If an end user is querying a validating DNS recursive resolver, then | If an end user is querying a validating DNS recursive resolver, then | |||
| this or other similarly intentionally broken domains should fail to | this or other similarly intentionally broken domains should fail to | |||
| resolve and should result in a "Server Failure" error (RCODE 2, also | resolve and should result in a "Server Failure" error (RCODE 2, also | |||
| known as 'SERVFAIL'). If such a domain resolved successfully, then | known as 'SERVFAIL'). If such a domain resolved successfully, then | |||
| it is a sign that the DNS recursive resolver is not fully validating. | it is a sign that the DNS recursive resolver is not fully validating. | |||
| Organizations that utilize Negative Trust Anchors should not add a | Organizations that utilize Negative Trust Anchors should not add a | |||
| Negative Trust Anchor for any intentionally broken domain. | Negative Trust Anchor for any intentionally broken domain. Such | |||
| additions are prevented by the requirement that the operator attempt | ||||
| to contact the administrators for the zone that has broken DNSSEC. | ||||
| Organizations operating an intentionally broken domain may wish to | Organizations operating an intentionally broken domain may wish to | |||
| consider adding a TXT record for the domain to the effect of "This | consider adding a TXT record for the domain to the effect of "This | |||
| domain is purposely DNSSEC broken for testing purposes". | domain is purposely DNSSEC broken for testing purposes". | |||
| 7. Other Considerations | 7. Discovering broken domains | |||
| 7.1. Security Considerations | Discovering that a domain is DNSSEC broken as result of an operator | |||
| error instead of an attack is not trivial, and the examples here | ||||
| should be vetted by an experienced professional before taking the | ||||
| decision on implementing an negative trust anchor. | ||||
| One of the key thing to look for when looking at a DNSSEC broken | ||||
| domain is consistency and history. It therefore is good if you have | ||||
| the ability to look at the server's DNS traffic over a long period of | ||||
| time or have a database that stores DNS names associated answers | ||||
| (this is often referred to as a "passive DNS database"). Another | ||||
| invaluable tool is dnsviz (http://www.dnsivz.net) which also stores | ||||
| DNSSEC related data historically. The drawback here is that you need | ||||
| to have it test the domain before the incident occurs. | ||||
| The first and easiest thing to check is if the failure of the domain | ||||
| is consistent across different software implementations. If not, you | ||||
| want to inform the vendor where it fails so that the vendor can look | ||||
| more deeply into the issue. | ||||
| The next thing is to figure out what the actual failure mode is. | ||||
| There are several tools to do this, an incomplete list includes: | ||||
| o DNSViz (http://dnsviz.net) | ||||
| o Verisign DNSSEC debugger (http://dnssec-debugger.verisignlabs.com) | ||||
| o iis.se DNS check (http://dnscheck.iis.se) | ||||
| most of these tools are open source and can be installed locally. | ||||
| However, using the tools over the Internet has the advantage of | ||||
| providing visibility from a different point. | ||||
| Once you figure out what the error is, you need to check if it shows | ||||
| consistently around the world and from all authoritative servers. | ||||
| Use DNS Tools (dig) or DNS looking glasses to verify this. An error | ||||
| that is consistently the same is more likely to be operator caused | ||||
| than an attack. Also if the output from the authoritative server is | ||||
| consistently different from the resolvers output this hints to an | ||||
| attack rather then an error, unless there is EDNS0 client subnet | ||||
| (draft-ietf-dnsop-edns-client-subnet) applied to the domain. | ||||
| A last check is to look at the actual DNS data. Is the result of the | ||||
| query still the same or has it changed? While a lot of DNSSEC errors | ||||
| occur on events that change DNSSEC data, the actual record someone | ||||
| wants to go to often stays the same. If the data is the same, this | ||||
| is an indication (not a guarantee) that the error is operator caused. | ||||
| Keep in mind that with DNS being used to globally balance traffic the | ||||
| data associated to a name might be different in different parts of | ||||
| the Internet. | ||||
| Here are some examples of common DNSSEC failures that have been seen | ||||
| as operator signing errors on the Internet: | ||||
| o RRSIG timing issue. Each signature has an inception time and | ||||
| expiry time, between which it is valid. Letting this time expire | ||||
| without creating a new signature is one of the most common DNSSEC | ||||
| errors. To a lesser extent, this also occurs if signatures were | ||||
| made active before the inception time. For all of these errors | ||||
| your primary check is to check on the data. Signature expiration | ||||
| is also about the only error we see on actual data (like | ||||
| www.example.com). All other errors are more or less related to | ||||
| dealing with the chain of trust established by DS records in the | ||||
| parent zone and DNSKEYs in the child zones. These mostly occur | ||||
| during key rollovers, but are not limited to that. | ||||
| o DNSKEYs in child zone don't match the DS record in the parent | ||||
| zone. There is a big variation of this that can happen at any | ||||
| point in the key lifecycle. DNSViz is the best tools to show | ||||
| problems in the chain. If you debug yourself use dig +multiline | ||||
| so that you can see the key id of a DNSKEY. Common Variations of | ||||
| this can be: | ||||
| * DS pointing to a non existent key in the child zone. Questions | ||||
| for consideration here include: Has there ever been a key (and, | ||||
| if so, was it used)? Has there been a recent change in the | ||||
| DNSKEY RRSet (indicating a key rollover)? Has the actual data | ||||
| in the zone changed? Is the zone DNSSEC signed at all and has | ||||
| it been in the past? | ||||
| * DS pointing to an existent key, but no signatures are made with | ||||
| the key. The checks above should be done, with the addition of | ||||
| checking if another key in the DNSKEY RRSet is now used to sign | ||||
| the records. | ||||
| * Data in DS or DNSKEY doesn't match the other. This is more | ||||
| common in initial setup when there was a copy and paste error. | ||||
| Again checking history on data is the best you can do there. | ||||
| All of the above is just a starting point for consideration when | ||||
| deciding whether or not to deploy a trust anchor. It is not possible | ||||
| to provide a simple checklist to run through to determine if a domain | ||||
| is broken because of an attack or an operator error. | ||||
| 8. Other Considerations | ||||
| 8.1. Security Considerations | ||||
| End to end DNSSEC validation will be disabled during the time that a | End to end DNSSEC validation will be disabled during the time that a | |||
| Negative Trust Anchor is used. In addition, the Negative Trust | Negative Trust Anchor is used. In addition, the Negative Trust | |||
| Anchor may be in place after the point in time when the DNS | Anchor may be in place after the point in time when the DNS | |||
| misconfiguration that caused validation to break has been fixed. | misconfiguration that caused validation to break has been fixed. | |||
| Thus, there may be a gap between when a domain has been re-secured | Thus, there may be a gap between when a domain has been re-secured | |||
| and when a Negative Trust Anchor is removed. In addition, a Negative | and when a Negative Trust Anchor is removed. In addition, a Negative | |||
| Trust Anchor may be put in place by DNS recursive resolver operators | Trust Anchor may be put in place by DNS recursive resolver operators | |||
| without the knowledge of the authoritative domain administrator for a | without the knowledge of the authoritative domain administrator for a | |||
| given domain name. However, attempts SHOULD be made to contact and | given domain name. However, attempts SHOULD be made to contact and | |||
| inform the domain administrator prior to putting the NTA in place. | inform the domain administrator prior to putting the NTA in place. | |||
| End users of a DNS recursive resolver or other people may wonder why | One side effect of implementing an NTA is that it may break client | |||
| a domain that fails DNSSEC validation resolves with a supposedly | applications that assume that a domain is signed and expect an AD bit | |||
| validating resolver. As a result, implementors should consider | in the response. It is expected that many application that require | |||
| transparently disclosing those Negative Trust Anchors which are | DNSSEC for a domain will perform their own validation, and so this | |||
| currently in place or were in place in the past, such as on a website | should not be a major issue. | |||
| [Disclosure-Example]. This is particularly important since there is | ||||
| currently no special DNS query response code that could indicate to | ||||
| end users or applications that a Negative Trust Anchor is in place. | ||||
| Such disclosures should optimally include both the data and time that | ||||
| the Negative Trust Anchor was put in place and when it was removed. | ||||
| 7.2. Privacy Considerations | 8.2. Privacy Considerations | |||
| There are no privacy considerations in this document. | There are no privacy considerations in this document. | |||
| 7.3. IANA Considerations | 8.3. IANA Considerations | |||
| There are no IANA considerations in this document. | There are no IANA considerations in this document. | |||
| 8. Acknowledgements | 9. Acknowledgements | |||
| Several people made contributions of text to this document and/or | Several people made contributions of text to this document and/or | |||
| played an important role in the development and evolution of this | played an important role in the development and evolution of this | |||
| document. This in some cases included performing a detailed review | document. This in some cases included performing a detailed review | |||
| of this document and then providing feedback and constructive | of this document and then providing feedback and constructive | |||
| criticism for future revisions, or engaging in a healthy debate over | criticism for future revisions, or engaging in a healthy debate over | |||
| the subject of the document. All of this was helpful and therefore | the subject of the document. All of this was helpful and therefore | |||
| the following individuals merit acknowledgement: Joe Abley,John | the following individuals merit acknowledgement: Joe Abley,John | |||
| Barnitz, Tom Creighton, Marco Davids, Brian Dickson, Patrik Falstrom, | Barnitz, Tom Creighton, Marco Davids, Brian Dickson, Patrik Falstrom, | |||
| Tony Finch, Chris Ganster, Olafur Gudmundsson, Peter Hagopian, Wes | Tony Finch, Chris Ganster, Olafur Gudmundsson, Peter Hagopian, Wes | |||
| Hardaker, Paul Hoffman, Shane Kerr, Murray Kucherawy, Rick Lamb, Marc | Hardaker, Paul Hoffman, Shane Kerr, Murray Kucherawy, Rick Lamb, Marc | |||
| Lampo, Ted Lemon, Antoin Verschuren, Paul Vixie, Patrik Wallstrom, | Lampo, Scott Rose, Ted Lemon, Antoin Verschuren, Paul Vixie, Patrik | |||
| Nick Weaver | Wallstrom, Nick Weaver | |||
| Edward Lewis, Evan Hunt, Andew Sullivan and Tatuya Jinmei provided | Edward Lewis, Evan Hunt, Andew Sullivan and Tatuya Jinmei provided | |||
| especially large amounts of text and / or detailed review. | especially large amounts of text and / or detailed review. | |||
| 9. References | 10. References | |||
| 9.1. Normative References | 10.1. Normative References | |||
| [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "DNS Security Introduction and Requirements", RFC | Rose, "DNS Security Introduction and Requirements", RFC | |||
| 4033, March 2005. | 4033, March 2005. | |||
| [RFC5914] Housley, R., Ashmore, S., and C. Wallace, "Trust Anchor | [RFC5914] Housley, R., Ashmore, S., and C. Wallace, "Trust Anchor | |||
| Format", RFC 5914, June 2010. | Format", RFC 5914, June 2010. | |||
| [RFC6781] Kolkman, O., Mekking, W., and R. Gieben, "DNSSEC | [RFC6781] Kolkman, O., Mekking, W., and R. Gieben, "DNSSEC | |||
| Operational Practices, Version 2", RFC 6781, December | Operational Practices, Version 2", RFC 6781, December | |||
| 2012. | 2012. | |||
| 9.2. Informative References | 10.2. Informative References | |||
| [Alexa] Alexa, an Amazon.com Company, "Alexa "The top 500 sites on | ||||
| the web. "", , May 2015, <http://www.alexa.com/topsites>. | ||||
| [Disclosure-Example] | [Disclosure-Example] | |||
| Comcast, "faa.gov Failing DNSSEC Validation (Fixed)", | Comcast, "faa.gov Failing DNSSEC Validation (Fixed)", | |||
| Comcast , February 2013, | Comcast , February 2013, | |||
| <http://dns.comcast.net/index.php/entry/ | <http://dns.comcast.net/index.php/entry/ | |||
| faa-gov-failing-dnssec-validation-fixed>. | faa-gov-failing-dnssec-validation-fixed>. | |||
| [Measuring-DNSSEC-Validation-of-Website-Visitors] | [Measuring-DNSSEC-Validation-of-Website-Visitors] | |||
| Mens, J., "Is my Web site being used via a DNSSEC- | Mens, J., "Is my Web site being used via a DNSSEC- | |||
| validator?", July 2012, <http://jpmens.net/2012/07/30/ | validator?", July 2012, <http://jpmens.net/2012/07/30/ | |||
| is-my-web-site-being-used-via-dnssec-validator/>. | is-my-web-site-being-used-via-dnssec-validator/>. | |||
| [Netalyzr] | [Netalyzr] | |||
| Weaver, N., Kreibich, C., Nechaev, B., and V. Paxson, | Weaver, N., Kreibich, C., Nechaev, B., and V. Paxson, | |||
| "Implications of Netalyzr's DNS Measurements", Securing | "Implications of Netalyzr's DNS Measurements", Securing | |||
| and Trusting Internet Names, SATIN 2011 SATIN 2011, April | and Trusting Internet Names, SATIN 2011 SATIN 2011, April | |||
| 2011, <http://conferences.npl.co.uk/satin/presentations/ | 2011, <http://conferences.npl.co.uk/satin/presentations/ | |||
| satin2011slides-Weaver.pdf>. | satin2011slides-Weaver.pdf>. | |||
| [Unbound-Configuration] | [Unound-Configuration] | |||
| Wijngaards, W., "Unbound: How to Turn Off DNSSEC", June | Wijngaards, W., "Unbound: How to Turn Off DNSSEC", June | |||
| 2010, <http://unbound.net/documentation/ | 2010, <http://unbound.net/documentation/ | |||
| howto_turnoff_dnssec.html>. | howto_turnoff_dnssec.html>. | |||
| Appendix A. Configuration Examples | Appendix A. Configuration Examples | |||
| The section contains example configurations to achieve Negative Trust | The section contains example configurations to achieve Negative Trust | |||
| Anchor functionality for the zone foo.example.com. | Anchor functionality for the zone foo.example.com. | |||
| Note: These are simply examples - nameserver operators are expected | Note: These are simply examples - nameserver operators are expected | |||
| to test and understand the implications of these operations. Note | to test and understand the implications of these operations. Note | |||
| also that some of available implementations may not implement all | also that some of available implementations may not implement all | |||
| recommended functionality in this document. In that case it is | recommended functionality in this document. In that case it is | |||
| advisable to request the developer or vendor of the implementation to | advisable to request the developer or vendor of the implementation to | |||
| support the missing feature, rather than start using the incomplete | support the missing feature, rather than start using the incomplete | |||
| implementation. | implementation. | |||
| A.1. NLNet Labs Unbound | A.1. NLNet Labs Unbound | |||
| Unbound lets us simply disable validation checking for a specific | Unbound lets us simply disable validation checking for a specific | |||
| zone. See: <http://unbound.net/documentation/ | zone. | |||
| howto_turnoff_dnssec.html> | ||||
| For additional information see [Unound-Configuration] | ||||
| server: | server: | |||
| domain-insecure: "foo.example.com" | domain-insecure: "foo.example.com" | |||
| A.2. ISC BIND | A.2. ISC BIND | |||
| Use the "rndc" command: | Use the "rndc" command: | |||
| nta -dump | nta -dump | |||
| List all negative trust anchors. | List all negative trust anchors. | |||
| nta [-lifetime duration] [-force] domain [view] | nta [-lifetime duration] [-force] domain [view] | |||
| Set a negative trust anchor, disabling DNSSEC validation | Set a negative trust anchor, disabling DNSSEC validation | |||
| for the given domain. | for the given domain. | |||
| Using -lifetime specifies the duration of the NTA, up | Using -lifetime specifies the duration of the NTA, up | |||
| to one week. The default is one hour. | to one week. The default is one hour. | |||
| Using -force prevents the NTA from expiring before its | Using -force prevents the NTA from expiring before its | |||
| full lifetime, even if the domain can validate sooner. | full lifetime, even if the domain can validate sooner. | |||
| nta -remove domain [view] | nta -remove domain [view] | |||
| Remove a negative trust anchor, re-enabling validation | Remove a negative trust anchor, re-enabling validation | |||
| for the given domain. | for the given domain. | |||
| A.3. Nominum Vantio | A.3. Nominum Vantio | |||
| ** | ** | |||
| *negative-trust-anchors* | *negative-trust-anchors* | |||
| _Format_: name | _Format_: name | |||
| _Command Channel_: view.update name=world negative-trust- | _Command Channel_: view.update name=world negative-trust- | |||
| anchors=(foo.example.com) | anchors=(foo.example.com) | |||
| _Command Channel_: resolver.update name=res1 negative-trust- | _Command Channel_: resolver.update name=res1 negative-trust- | |||
| anchors=(foo.example.com) | anchors=(foo.example.com) | |||
| *Description*: Disables DNSSEC validation for a domain, even if the | *Description*: Disables DNSSEC validation for a domain, even if the | |||
| domain is under an existing security root. | domain is under an existing security root. | |||
| Appendix B. Discovering broken domains | Appendix B. Document Change Log | |||
| Discovering that a domain is DNSSEC broken as result of an operator | ||||
| error instead of an attack is not trivial, and the examples here | ||||
| should be vetted by an experienced professional before taking the | ||||
| decision on implementing an negative trust anchor. | ||||
| One of the key thing to look for when looking at a DNSSEC broken | ||||
| domain is consistency and history. It therefore is good if you have | ||||
| the ability to look at the server's DNS traffic over a long period of | ||||
| time or have a database that stores DNS names associated answers | ||||
| (this is often referred to as a "passive DNS database"). Another | ||||
| invaluable tool is dnsviz (http://www.dnsivz.net) which also stores | ||||
| DNSSEC related data historically. The drawback here is that you need | ||||
| to have it test the domain before the incident occurs. | ||||
| The first and easiest thing to check is if the failure of the domain | ||||
| is consistent across different software implementations. If not, you | ||||
| want to inform the vendor where it fails so that the vendor can look | ||||
| more deeply into the issue. | ||||
| The next thing is to figure out what the actual failure mode is. | ||||
| There are several tools do this, an incomplete list includes: | ||||
| o DNSViz (http://dnsviz.net) | ||||
| o Verisign DNSSEC debugger (http://dnssec-debugger.verisignlabs.com) | ||||
| o iis.se DNS check (http://dnscheck.iis.se) | ||||
| most of these tools are open source and can be installed locally. | ||||
| However, using the tools over the Internet has the advantage of | ||||
| providing visibility from a different point. | ||||
| Once you figure out what the error is, you need to check if it shows | ||||
| consistently around the world and from all authoritative servers. | ||||
| Use DNS Tools (dig) or DNS looking glasses to verify this. An error | ||||
| that is consistently the same is more likely to be operator caused | ||||
| than an attack. Also if the output from the authoritative server is | ||||
| consistently different from the resolvers output this hints to an | ||||
| attack rather then an error, unless there is EDNS0 client subnet | ||||
| (draft-ietf-dnsop-edns-client-subnet) applied to the domain. | ||||
| A last check is to look at the actual DNS data. Is the result of the | ||||
| query still the same or has it changed? While a lot of DNSSEC errors | ||||
| occur on events that change DNSSEC data, the actual record someone | ||||
| wants to go to often stays the same. If the data is the same, this | ||||
| is an indication (not a guarantee) that the error is operator caused. | ||||
| Keep in mind that with DNS being used to globally balance traffic the | ||||
| data associated to a name might be different in different parts of | ||||
| the Internet. | ||||
| Here are some examples of common DNSSEC failures that have been seen | ||||
| as operator signing errors on the Internet: | ||||
| o RRSIG timing issue. Each signature has an inception time and | ||||
| expiry time, between which it is valid. Letting this time expire | ||||
| without creating a new signature is one of the most common DNSSEC | ||||
| errors. To a lesser extent, this also occurs if signatures were | ||||
| made active before the inception time. For all of these errors | ||||
| your primary check is to check on the data. Signature expiration | ||||
| is also about the only error we see on actual data (like | ||||
| www.example.com). All other errors are more or less related to | ||||
| dealing with the chain of trust established by DS records in the | ||||
| parent zone and DNSKEYs in the child zones. These mostly occur | ||||
| during key rollovers, but are not limited to that. | ||||
| o DNSKEYs in child zone don't match the DS record in the parent | ||||
| zone. There is a big variation of this that can happen at any | ||||
| point in the key lifecycle. DNSViz is the best tools to show | ||||
| problems in the chain. If you debug yourself use dig +multiline | ||||
| so that you can see the key id of a DNSKEY. Common Variations of | ||||
| this can be: | ||||
| o DS pointing to a non existent key in the child zone. Questions | ||||
| for consideration here include: Has there ever been a key (and, if | ||||
| so, was it used)? Has there been a recent change in the DNSKEY | ||||
| RRSet (indicating a key rollover)? Has the actual data in the | ||||
| zone changed? Is the zone DNSSEC signed at all and has it been in | ||||
| the past? | ||||
| o DS pointing to an existent key, but no signatures are made with | [RFC Editor: This section is to be removed before publication] | |||
| the key. The checks above should be done, with the addition of | ||||
| checking if another key in the DNSKEY RRSet is now used to sign | ||||
| the records. | ||||
| o Data in DS or DNSKEY doesn't match the other. This is more common | -06 to 07 | |||
| in initial setup when there was a copy and paste error. Again | ||||
| checking history on data is the best you can do there. | ||||
| All of the above is just a starting point for consideration when | Addressed a large number of comments from Paul Hoffman, Scott Rose | |||
| deciding whether or not to deploy a trust anchor. It is not possible | and some more from Jinmei. | |||
| to provide a simple checklist to run through to determine if a domain | ||||
| is broken because of an attack or an operator error. | ||||
| Appendix C. Document Change Log | -05 to -06 | |||
| [RFC Editor: This section is to be removed before publication] | o A bunch of comments from Tony Finch. | |||
| -04 to -05 | -04 to -05 | |||
| o A large bunch of cleanups from Jinmei. Thanks! | o A large bunch of cleanups from Jinmei. Thanks! | |||
| o Also clarified that if there is an NTA at foo.bar.baz.example, and | o Also clarified that if there is an NTA at foo.bar.baz.example, and | |||
| a positive *trust anchor* at bar.baz.example, the most specific | a positive *trust anchor* at bar.baz.example, the most specific | |||
| wins. I'm not very happy with this text, any additional text | wins. I'm not very happy with this text, any additional text | |||
| gratefully accepted... | gratefully accepted... | |||
| End of changes. 37 change blocks. | ||||
| 181 lines changed or deleted | 205 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||