| < draft-ietf-dnsop-kskroll-sentinel-15.txt | draft-ietf-dnsop-kskroll-sentinel-16.txt > | |||
|---|---|---|---|---|
| DNSOP G. Huston | DNSOP G. Huston | |||
| Internet-Draft J. Damas | Internet-Draft J. Damas | |||
| Intended status: Standards Track APNIC | Intended status: Standards Track APNIC | |||
| Expires: January 3, 2019 W. Kumari | Expires: April 23, 2019 W. Kumari | |||
| July 02, 2018 | October 20, 2018 | |||
| A Root Key Trust Anchor Sentinel for DNSSEC | A Root Key Trust Anchor Sentinel for DNSSEC | |||
| draft-ietf-dnsop-kskroll-sentinel-15 | draft-ietf-dnsop-kskroll-sentinel-16 | |||
| Abstract | Abstract | |||
| The DNS Security Extensions (DNSSEC) were developed to provide origin | The DNS Security Extensions (DNSSEC) were developed to provide origin | |||
| authentication and integrity protection for DNS data by using digital | authentication and integrity protection for DNS data by using digital | |||
| signatures. These digital signatures can be verified by building a | signatures. These digital signatures can be verified by building a | |||
| chain of trust starting from a trust anchor and proceeding down to a | chain of trust starting from a trust anchor and proceeding down to a | |||
| particular node in the DNS. This document specifies a mechanism that | particular node in the DNS. This document specifies a mechanism that | |||
| will allow an end user and third parties to determine the trusted key | will allow an end user and third parties to determine the trusted key | |||
| state for the root key of the resolvers that handle that user's DNS | state for the root key of the resolvers that handle that user's DNS | |||
| skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
| 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 https://datatracker.ietf.org/drafts/current/. | Drafts is at https://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 January 3, 2019. | This Internet-Draft will expire on April 23, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://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 | |||
| skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Sentinel Mechanism in Resolvers . . . . . . . . . . . . . . . 4 | 2. Sentinel Mechanism in Resolvers . . . . . . . . . . . . . . . 4 | |||
| 2.1. Preconditions . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Preconditions . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. Special Processing . . . . . . . . . . . . . . . . . . . 5 | 2.2. Special Processing . . . . . . . . . . . . . . . . . . . 5 | |||
| 3. Sentinel Tests for a Single DNS Resolver . . . . . . . . . . 6 | 3. Sentinel Tests for a Single DNS Resolver . . . . . . . . . . 6 | |||
| 3.1. Forwarders . . . . . . . . . . . . . . . . . . . . . . . 8 | 3.1. Forwarders . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4. Sentinel Tests from Hosts with More than One Configured | 4. Sentinel Tests for Multiple Resolvers . . . . . . . . . . . . 10 | |||
| Resolve . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.1. Test Scenario and Objective . . . . . . . . . . . . . . . 10 | |||
| 4.1. Test Scenario and Objective . . . . . . . . . . . . . . . 9 | ||||
| 4.2. Test Assumptions . . . . . . . . . . . . . . . . . . . . 10 | 4.2. Test Assumptions . . . . . . . . . . . . . . . . . . . . 10 | |||
| 4.3. Test Procedure . . . . . . . . . . . . . . . . . . . . . 10 | 4.3. Test Procedure . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | |||
| 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 12 | 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 13 | |||
| 7. Implementation Experience . . . . . . . . . . . . . . . . . . 12 | 7. Implementation Experience . . . . . . . . . . . . . . . . . . 13 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 13 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 10. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 10. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 18 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 19 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 18 | 11.2. Informative References . . . . . . . . . . . . . . . . . 19 | |||
| Appendix A. Protocol Walkthrough Example . . . . . . . . . . . . 18 | Appendix A. Protocol Walkthrough Example . . . . . . . . . . . . 19 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 1. Introduction | 1. Introduction | |||
| The DNS Security Extensions (DNSSEC) [RFC4033], [RFC4034] and | The DNS Security Extensions (DNSSEC) [RFC4033], [RFC4034] and | |||
| [RFC4035] were developed to provide origin authentication and | [RFC4035] were developed to provide origin authentication and | |||
| integrity protection for DNS data by using digital signatures. | integrity protection for DNS data by using digital signatures. | |||
| DNSSEC uses Key Tags to efficiently match signatures to the keys from | DNSSEC uses Key Tags to efficiently match signatures to the keys from | |||
| which they are generated. The Key Tag is a 16-bit value computed | which they are generated. The Key Tag is a 16-bit value computed | |||
| from the RDATA of a DNSKEY RR as described in Appendix B of | from the RDATA of a DNSKEY RR as described in Appendix B of | |||
| [RFC4034]. RRSIG RRs contain a Key Tag field whose value is equal to | [RFC4034]. RRSIG RRs contain a Key Tag field whose value is equal to | |||
| the Key Tag of the DNSKEY RR that was used to generate the | the Key Tag of the DNSKEY RR that was used to generate the | |||
| corresponding signature. | corresponding signature. | |||
| This document specifies how security-aware DNS resolvers that perform | This document specifies how security-aware DNS resolvers that perform | |||
| validation of their responses can respond to certain queries in a | validation of their responses can respond to certain queries in a | |||
| manner that allows an agent performing the queries to deduce whether | manner that allows an agent performing the queries to deduce whether | |||
| a particular key for the root has been loaded into that resolver's | a particular key for the root has been loaded into that resolver's | |||
| trusted key store. This document also describes a procedure where a | trusted key store. This document also describes a procedure where a | |||
| collection of resolvers can be tested to determine if at least one of | collection of resolvers can be tested to determine if at least one of | |||
| these resolvers has loaded a given key into its trusted key store. | these resolvers has loaded a given key into its trusted key store. | |||
| These tests can be used to determine whether a certain root zone Key | These tests can be used to determine whether a certain root zone Key | |||
| Signing Key (KSK) is ready to be used as a trusted key, within the | Signing Key (KSK) is ready to be used as a trusted key, within the | |||
| context of a planned root zone KSK key roll. | context of a planned root zone KSK key roll. | |||
| There are two primary use cases for this mechanism: | There are two primary use cases for this mechanism: | |||
| o Users may wish to ascertain whether their DNS resolution | o Users may wish to ascertain whether their DNS resolution | |||
| environment resolvers is ready for an upcoming root KSK rollover. | environment's resolver is ready for an upcoming root KSK rollover. | |||
| o Researchers want to perform Internet-wide studies about the | o Researchers want to perform Internet-wide studies about the | |||
| proportion of users who will be negatively impacted an upcoming | proportion of users who will be negatively impacted by an upcoming | |||
| root KSK rollover. | root KSK rollover. | |||
| The mechanism described in this document satisfy the requirements of | The mechanism described in this document satisfy the requirements of | |||
| both these use-cases. This mechanism is OPTIONAL to implement and | both these use-cases. This mechanism is OPTIONAL to implement and | |||
| use. If implemented, this mechanism SHOULD be enabled by default to | use. If implemented, this mechanism SHOULD be enabled by default to | |||
| facilitate Internet-wide measurement. Configuration options MAY be | facilitate Internet-wide measurement. Configuration options MAY be | |||
| provided to disable the mechanism for reasons of local policy. | provided to disable the mechanism for reasons of local policy. | |||
| The KSK sentinel tests described in this document use a test | The KSK sentinel tests described in this document use a test | |||
| comprising of a set of DNS queries to domain names that have special | comprising of a set of DNS queries to domain names that have special | |||
| values for the left-most label. The test relies on recursive | values for the left-most label. The test relies on recursive | |||
| resolvers supporting a mechanism that recognises this special name | resolvers supporting a mechanism that recognises this special name | |||
| pattern in queries, and under certain defined circumstances will | pattern in queries, and under certain defined circumstances will | |||
| return a DNS SERVFAIL response code (RCODE 2), mimicking the response | return a DNS SERVFAIL response code (RCODE 2), mimicking the response | |||
| code that is returned by security-aware resolvers when DNSSEC | code that is returned by security-aware resolvers when DNSSEC | |||
| validation fails. | validation fails. | |||
| If a browser or operating system is configured with multiple | If a browser or operating system is configured with multiple | |||
| resolvers, and those resolvers have different properties (for | resolvers, and those resolvers have different properties (for | |||
| example, one performs DNSSEC validation and one does not), the | example, one performs DNSSEC validation and one does not), the | |||
| sentinel test described in this document can still be used, but it | sentinel test described in this document can still be used. The | |||
| makes a number of assumptions about DNS resolution behaviour that may | sentinel test makes a number of assumptions about DNS resolution | |||
| not necessarily hold in all environments. If these assumptions do | behaviour that may not necessarily hold in all environments; if these | |||
| not hold (such as, for example, requiring the stub resolver to query | assumptions do not hold (such as, for example, requiring the stub | |||
| the next recursive resolver in the locally configured set upon | resolver to query the next recursive resolver in the locally | |||
| receipt of a SERVFAIL response code) then this test may produce | configured set upon receipt of a SERVFAIL response code) then this | |||
| indeterminate or inconsistent results. In some cases where these | test may produce indeterminate or inconsistent results. In some | |||
| assumptions do not hold, repeating the same test query set may | cases where these assumptions do not hold, repeating the same test | |||
| generate different results. | query set may generate different results. | |||
| Note that the measurements facilitated by the mechanism described in | Note that the measurements facilitated by the mechanism described in | |||
| this document are different from those of [RFC8145]. RFC 8145 relies | this document are different from those of [RFC8145]. RFC 8145 relies | |||
| on resolvers reporting towards the root servers a list of locally | on resolvers reporting towards the root servers a list of locally | |||
| cached trust anchors for the root zone. Those reports can be used to | cached trust anchors for the root zone. Those reports can be used to | |||
| infer how many resolvers may be impacted by a KSK roll, but not what | infer how many resolvers may be impacted by a KSK roll, but not what | |||
| the user impact of the KSK roll will be. | the user impact of the KSK roll will be. | |||
| 1.1. Terminology | 1.1. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| document are to be interpreted as described in RFC 2119. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
| capitals, as shown here. | ||||
| This document contains a number of terms related to the DNS. The | ||||
| current definitions of these terms can be found in [RFC7719]. | ||||
| 2. Sentinel Mechanism in Resolvers | 2. Sentinel Mechanism in Resolvers | |||
| DNSSEC-Validating resolvers that implement this mechanism MUST | DNSSEC-Validating resolvers that implement this mechanism MUST | |||
| perform validation of responses in accordance with the DNSSEC | perform validation of responses in accordance with the DNSSEC | |||
| response validation specification [RFC4035]. | response validation specification [RFC4035]. | |||
| This sentinel mechanism makes use of two special labels: | This sentinel mechanism makes use of two special labels: | |||
| o root-key-sentinel-is-ta-<key-tag> | o root-key-sentinel-is-ta-<key-tag> | |||
| skipping to change at page 4, line 42 ¶ | skipping to change at page 4, line 46 ¶ | |||
| o root-key-sentinel-not-ta-<key-tag> | o root-key-sentinel-not-ta-<key-tag> | |||
| These labels trigger special processing in the validating DNS | These labels trigger special processing in the validating DNS | |||
| resolver when responses from authoritative servers are received. | resolver when responses from authoritative servers are received. | |||
| Labels containing "root-key-sentinel-is-ta-<key-tag>" is used to | Labels containing "root-key-sentinel-is-ta-<key-tag>" is used to | |||
| answer the question "Is this the Key Tag of a key which the | answer the question "Is this the Key Tag of a key which the | |||
| validating DNS resolver is currently trusting as a trust anchor?" | validating DNS resolver is currently trusting as a trust anchor?" | |||
| Labels containing "root-key-sentinel-not-ta-<key-tag>" is used to | Labels containing "root-key-sentinel-not-ta-<key-tag>" is used to | |||
| answer the question "Is this the Key Tag of a key which the | answer the question "Is this the Key Tag of a key which the | |||
| validating DNS resolver is *not* currently trusting as a trust | validating DNS resolver is *not* currently trusting as a trust | |||
| anchor?" | anchor?". | |||
| The special labels defined here came after extensive IETF evaluation | ||||
| of alternative patterns and approaches in light of the desired | ||||
| behaviour (sections 2.1, 2.2) within the resolver and the applied | ||||
| testing methodology (section 4.3). As one example, underscore | ||||
| prefixed names were rejected because a number of browsers / operating | ||||
| systems would not fetch them, as they were not viewed as valid | ||||
| "hostnames".Attention was paid to the consideration of local | ||||
| collisions and the reservation of Left Hand Side (LHS) labels of a | ||||
| domain name, and the impact upon zone operators who might desire to | ||||
| use a similarly constructed hostname for a purpose other than as | ||||
| documented here. Therefore, it is important to note that the | ||||
| reservation of the labels in this manner is definitely not considered | ||||
| "best practice". | ||||
| 2.1. Preconditions | 2.1. Preconditions | |||
| All of the following conditions must be met to trigger special | All of the following conditions must be met to trigger special | |||
| processing inside resolver code: | processing inside resolver code: | |||
| o The DNS response is DNSSEC validated. | o The DNS response is DNSSEC validated. | |||
| o The result of validation is "Secure". | o The result of validation is "Secure". | |||
| o The Checking Disabled (CD) bit in the query is not set. | o The EDNS(0) Checking Disabled (CD) bit in the query is not set. | |||
| o The QTYPE is either A or AAAA (Query Type value 1 or 28). | o The QTYPE is either A or AAAA (Query Type value 1 or 28). | |||
| o The OPCODE is QUERY. | o The OPCODE is QUERY. | |||
| o The leftmost label of the original QNAME (the name sent in the | o The leftmost label of the original QNAME (the name sent in the | |||
| Question Section in the original query) is either "root-key- | Question Section in the original query) is either "root-key- | |||
| sentinel-is-ta-<key-tag>" or "root-key-sentinel-not-ta-<key-tag>". | sentinel-is-ta-<key-tag>" or "root-key-sentinel-not-ta-<key-tag>". | |||
| If any one of the preconditions is not met, the resolver MUST NOT | If any one of the preconditions is not met, the resolver MUST NOT | |||
| skipping to change at page 6, line 10 ¶ | skipping to change at page 6, line 31 ¶ | |||
| not-ta | return SERVFAIL | return original answer | not-ta | return SERVFAIL | return original answer | |||
| Instruction "return SERVFAIL" means that the resolver MUST set | Instruction "return SERVFAIL" means that the resolver MUST set | |||
| RCODE=SERVFAIL (value 2) and the ANSWER section of the DNS response | RCODE=SERVFAIL (value 2) and the ANSWER section of the DNS response | |||
| MUST be empty, ignoring all other documents which specify content of | MUST be empty, ignoring all other documents which specify content of | |||
| the ANSWER section. | the ANSWER section. | |||
| Instruction "return original answer" means that the resolver MUST | Instruction "return original answer" means that the resolver MUST | |||
| process the query without any further special processing; that is, | process the query without any further special processing; that is, | |||
| exactly as if the mechanism described in this document was not | exactly as if the mechanism described in this document was not | |||
| implemented or disabled. | implemented or was disabled. The answer for the A or AAAA query is | |||
| sent on to the client. | ||||
| 3. Sentinel Tests for a Single DNS Resolver | 3. Sentinel Tests for a Single DNS Resolver | |||
| This section describes the use of the sentinel detection mechanism | This section describes the use of the sentinel detection mechanism | |||
| against a single DNS recursive resolver in order to determine whether | against a single DNS recursive resolver in order to determine whether | |||
| this resolver is using a particular trust anchor to validate DNSSEC- | this resolver is using a particular trust anchor to validate DNSSEC- | |||
| signed responses. | signed responses. | |||
| Note that the test in this section applies to a single DNS resolver. | Note that the test in this section applies to a single DNS resolver. | |||
| The test described in Section 4 applies instead to a collection of | The test described in Section 4 applies instead to a collection of | |||
| skipping to change at page 6, line 32 ¶ | skipping to change at page 7, line 6 ¶ | |||
| user environment. | user environment. | |||
| The critical aspect of the DNS names used in this mechanism is that | The critical aspect of the DNS names used in this mechanism is that | |||
| they contain the specified label for either the positive and negative | they contain the specified label for either the positive and negative | |||
| test as the left-most label in the query name. | test as the left-most label in the query name. | |||
| The sentinel detection procedure can test a DNS resolver using three | The sentinel detection procedure can test a DNS resolver using three | |||
| queries: | queries: | |||
| o A query name containing the left-most label "root-key-sentinel-is- | o A query name containing the left-most label "root-key-sentinel-is- | |||
| ta-<key-tag>". This corresponds to a a validly-signed RRset in | ta-<key-tag>". This corresponds to a a validly-signed label in | |||
| the zone, so that responses associated with queried names in this | the parent zone, so that responses associated with this query name | |||
| zone can be authenticated by a DNSSEC-validating resolver. Any | can be authenticated by a DNSSEC-validating resolver. Any | |||
| validly-signed DNS zone can be used for this test. | validly-signed DNS zone can be used as the parent zone for this | |||
| test. | ||||
| o A query name containing the left-most label "root-key-sentinel- | o A query name containing the left-most label "root-key-sentinel- | |||
| not-ta-<key-tag>". This is also a validly-signed name. Any | not-ta-<key-tag>". This is also a validly-signed label. Any | |||
| validly-signed DNS zone can be used for this test. | validly-signed DNS zone can be used as the parent zone for this | |||
| test. | ||||
| o A query name that is signed with a DNSSEC signature that cannot be | o A query name that is signed with a DNSSEC signature that cannot be | |||
| validated (described as a "bogus" RRset in Section 5 of [RFC4033], | validated (described as a "bogus" RRset in Section 5 of [RFC4033], | |||
| when, for example, an RRset is not signed with a valid RRSIG | when, for example, an RRset associated with a label in a zoneis | |||
| record). | not signed with a valid RRSIG record). | |||
| The responses received from queries to resolve each of these names | The responses received from queries to resolve each of these query | |||
| can be evaluated to infer a trust key state of the DNS resolver. | names can be evaluated to infer a trust key state of the DNS | |||
| resolver. | ||||
| An essential assumption here is that this technique relies on | An essential assumption here is that this technique relies on | |||
| security-aware (DNSSEC validating) resolvers responding with a | security-aware (DNSSEC validating) resolvers responding with a | |||
| SERVFAIL response code to queries where DNSSEC checking is requested | SERVFAIL response code to queries where DNSSEC checking is requested | |||
| and the response cannot be validated. Note that a slew of other | and the response cannot be validated. Note that other issues can | |||
| issues can also cause SERVFAIL responses, and so the sentinel | also cause a resolver to return SERVFAIL responses, and so the | |||
| processing may sometimes result in incorrect or indeterminate | sentinel processing may sometimes result in incorrect or | |||
| conclusions. | indeterminate conclusions. | |||
| To describe this process of classification, DNS resolvers are | To describe this process of classification, DNS resolvers are | |||
| classified by five distinct behavior types using the labels: "Vnew", | classified by five distinct behavior types using the labels: "Vnew", | |||
| "Vold", "Vind", "nonV", and "other". These labels correspond to | "Vold", "Vind", "nonV", and "other". These labels correspond to | |||
| resolver system behaviour types as follows: | resolver system behaviour types as follows: | |||
| Vnew: A DNS resolver that is configured to implement this mechanism | Vnew: A DNS resolver that is configured to implement this mechanism | |||
| and has loaded the nominated key into their local trusted key | and has loaded the nominated key into their local trusted key | |||
| stores will respond with an A or AAAA RRset response for the | stores will respond with an A or AAAA RRset response for the | |||
| associated "root-key-sentinel-is-ta" queries, SERVFAIL for "root- | associated "root-key-sentinel-is-ta" queries, SERVFAIL for "root- | |||
| skipping to change at page 7, line 36 ¶ | skipping to change at page 8, line 13 ¶ | |||
| queries that return "bogus" validation status. | queries that return "bogus" validation status. | |||
| Vind: A DNS resolver that has is not configured to implement this | Vind: A DNS resolver that has is not configured to implement this | |||
| mechanism will respond with an A or AAAA RRset response for "root- | mechanism will respond with an A or AAAA RRset response for "root- | |||
| key-sentinel-is-ta", an A or AAAA RRset response for "root-key- | key-sentinel-is-ta", an A or AAAA RRset response for "root-key- | |||
| sentinel-not-ta" and SERVFAIL for the name that returns "bogus" | sentinel-not-ta" and SERVFAIL for the name that returns "bogus" | |||
| validation status. This set of responses does not give any | validation status. This set of responses does not give any | |||
| information about the trust anchors used by this resolver. | information about the trust anchors used by this resolver. | |||
| nonV: A non-security-aware DNS resolver will respond with an A or | nonV: A non-security-aware DNS resolver will respond with an A or | |||
| AAAA record response for "root-key-sentinel-is-ta", an A record | AAAA RRset response for "root-key-sentinel-is-ta", an A or AAAA | |||
| response for "root-key-sentinel-not-ta" and an A or AAAA RRset | RRset response for "root-key-sentinel-not-ta" and an A or AAAA | |||
| response for the name that returns "bogus" validation status. | RRset response for the name that returns "bogus" validation | |||
| status. | ||||
| other: There is the potential to admit other combinations of | other: There is the potential to admit other combinations of | |||
| responses to these three queries. While this may appear self- | responses to these three queries. While this may appear self- | |||
| contradictory, there are cases where such an outcome is possible. | contradictory, there are cases where such an outcome is possible. | |||
| For example, in DNS resolver farms what appears to be a single DNS | For example, in DNS resolver farms what appears to be a single DNS | |||
| resolver that responds to queries passed to a single IP address is | resolver that responds to queries passed to a single IP address is | |||
| in fact constructed as a a collection of slave resolvers, and the | in fact constructed as a a collection of slave resolvers, and the | |||
| query is passed to one of these internal resolver engines. If | query is passed to one of these internal resolver engines. If | |||
| these individual slave resolvers in the farm do not behave | these individual slave resolvers in the farm do not behave | |||
| identically, then other sets of results can be expected from these | identically, then other sets of results can be expected from these | |||
| skipping to change at page 8, line 19 ¶ | skipping to change at page 8, line 44 ¶ | |||
| If a client directs these three queries to a single resolver, the | If a client directs these three queries to a single resolver, the | |||
| responses should allow the client to determine the capability of the | responses should allow the client to determine the capability of the | |||
| resolver, and if it supports this sentinel mechanism, whether or not | resolver, and if it supports this sentinel mechanism, whether or not | |||
| it has a particular key in its trust anchor store, as in the | it has a particular key in its trust anchor store, as in the | |||
| following table: | following table: | |||
| Query | Query | |||
| +----------+-----------+------------+ | +----------+-----------+------------+ | |||
| | is-ta | not-ta | bogus | | | is-ta | not-ta | bogus | | |||
| +-------+----------+-----------+------------+ | +-------+----------+-----------+------------+ | |||
| | Vnew | A | SERVFAIL | SERVFAIL | | | Vnew | Y | SERVFAIL | SERVFAIL | | |||
| | Vold | SERVFAIL | A | SERVFAIL | | | Vold | SERVFAIL | Y | SERVFAIL | | |||
| Type | Vind | A | A | SERVFAIL | | Type | Vind | Y | Y | SERVFAIL | | |||
| | nonV | A | A | A | | | nonV | Y | Y | Y | | |||
| | other | * | * | * | | | other | * | * | * | | |||
| +-------+----------+-----------+------------+ | +-------+----------+-----------+------------+ | |||
| In this table the 'Y' response denotes an A or AAAA RRset response | ||||
| (depending on the Query Type of A or AAAA records), 'SERVFAIL' | ||||
| denotes a DNS SERVFAIL response code (RCODE 2), and '*' denotes | ||||
| either response. | ||||
| Vnew: The nominated key is trusted by the resolver. | Vnew: The nominated key is trusted by the resolver. | |||
| Vold: The nominated key is not yet trusted by the resolver. | Vold: The nominated key is not yet trusted by the resolver. | |||
| Vind: There is no information about the trust anchors of the | Vind: There is no information about the trust anchors of the | |||
| resolver. | resolver. | |||
| nonV: The resolver does not perform DNSSEC validation. | nonV: The resolver does not perform DNSSEC validation. | |||
| other: The properties of the resolver cannot be analyzed by this | other: The properties of the resolver cannot be analyzed by this | |||
| skipping to change at page 8, line 48 ¶ | skipping to change at page 9, line 29 ¶ | |||
| 3.1. Forwarders | 3.1. Forwarders | |||
| Some resolvers are configured not to answer queries using the | Some resolvers are configured not to answer queries using the | |||
| recursive algorithm first described in [RFC1034] section 4.3.2, but | recursive algorithm first described in [RFC1034] section 4.3.2, but | |||
| instead relay queries to one or more other resolvers. Resolvers | instead relay queries to one or more other resolvers. Resolvers | |||
| configured in this manner are referred to in this document as | configured in this manner are referred to in this document as | |||
| "forwarders". | "forwarders". | |||
| If the resolver is non-validating, and it has a single forwarder, | If the resolver is non-validating, and it has a single forwarder, | |||
| then the resolver will presumably mirror the capabilities of the | then the resolver will presumably mirror the capabilities of the | |||
| forwarder target resolver. | forwarder's target resolver. | |||
| If the validating resolver has a forwarding configuration, and uses | If the validating resolver has a forwarding configuration, and it | |||
| the CD bit on all forwarded queries, then this resolver is acting in | sets the EDNS(0) Checking Disabled (CD) bit as described in | |||
| a manner that is identical to a standalone resolver. | Section 3.2.2 of [RFC4035] on all forwarded queries, then this | |||
| resolver is acting in a manner that is identical to a standalone | ||||
| resolver. | ||||
| A more complex case is where all of the following conditions hold: | A more complex case is where all of the following conditions hold: | |||
| o Both the validating resolver and the forwarder target resolver | o Both the validating resolver and the forwarder target resolver | |||
| support this trusted key sentinel mechanism | support this trusted key sentinel mechanism | |||
| o The local resolver's queries do not have the CD bit set | o The local resolver's queries do not have the EDNS(0) CD bit set | |||
| o The trusted key state differs between the forwarding resolver and | o The trusted key state differs between the forwarding resolver and | |||
| the forwarder target resolver | the forwarder's target resolver | |||
| In such a case, either the outcome is indeterminate validating | In such a case, either the outcome is indeterminate validating | |||
| ("Vind"), or a case of mixed signals such as SERVFAIL in all three | ("Vind"), or a case of mixed signals such as SERVFAIL in all three | |||
| responses, ("other") which is similarly an indeterminate response | responses, ("other") which is similarly an indeterminate response | |||
| with respect to the trusted key state. | with respect to the trusted key state. | |||
| 4. Sentinel Tests from Hosts with More than One Configured Resolve | 4. Sentinel Tests for Multiple Resolvers | |||
| The description in Section 3 describes a trust anchor test that can | The description in Section 3 describes a trust anchor test that can | |||
| be used in the simple situation where the test queries were being | be used in the simple situation where the test queries were being | |||
| passed to a single recursive resolver that directly queries | passed to a single recursive resolver that directly queried | |||
| authoritative name servers. | authoritative name servers. | |||
| However, the common end-user scenario is where a user's local DNS | However, the common end-user scenario is where a user's local DNS | |||
| resolution environment is configured to use more than one recursive | resolution environment is configured to use more than one recursive | |||
| resolver. The single resolver test technique will not function | resolver. The single resolver test technique will not function | |||
| reliably in such cases, as a a SERVFAIL response from one resolver | reliably in such cases, as a a SERVFAIL response from one resolver | |||
| may cause the local stub resolver to repeat the query against one of | may cause the local stub resolver to repeat the query against one of | |||
| the other configured resolvers and the results may be inconclusive. | the other configured resolvers and the results may be inconclusive. | |||
| In describing a test procedure that can be used in this environment | In describing a test procedure that can be used in this environment | |||
| skipping to change at page 10, line 46 ¶ | skipping to change at page 11, line 29 ¶ | |||
| trust anchor cache. | trust anchor cache. | |||
| There is no current published measurement data that indicates to what | There is no current published measurement data that indicates to what | |||
| extent the first two assumptions listed here are valid, and how many | extent the first two assumptions listed here are valid, and how many | |||
| end users may be impacted by these assumptions. In particular, the | end users may be impacted by these assumptions. In particular, the | |||
| first assumption, that a consistent SERFAIL response will cause the | first assumption, that a consistent SERFAIL response will cause the | |||
| local stub DNS resolution environment to query all of its configured | local stub DNS resolution environment to query all of its configured | |||
| recursive resolvers before concluding that the name cannot be | recursive resolvers before concluding that the name cannot be | |||
| resolved, is a very critical assumption for this test. | resolved, is a very critical assumption for this test. | |||
| Note that additional precision / determinism may be achievable by | ||||
| bypassing the normal OS behavior and explicitly testing using each | ||||
| configured recursive resolver (e.g using 'dig'). | ||||
| 4.3. Test Procedure | 4.3. Test Procedure | |||
| The sentinel detection process tests a DNS resolution environment | The sentinel detection process tests a DNS resolution environment | |||
| with three query names: | with three query names. Note that these same general categories of | |||
| query as in Section 3 but the key tag used is different for some | ||||
| queries: | ||||
| o A query name that is signed with a DNSSEC signature that cannot be | o A query name that is signed with a DNSSEC signature that cannot be | |||
| validated (described as a "bogus" RRset in Section 5 of [RFC4033], | validated (described as a "bogus" RRset in Section 5 of [RFC4033], | |||
| when, for example, an RRset is not signed with a valid RRSIG | when, for example, an RRset is not signed with a valid RRSIG | |||
| record). | record). | |||
| o A query name containing the left-most label "root-key-sentinel- | o A query name containing the left-most label "root-key-sentinel- | |||
| not-ta-<key-tag-of-KSK-current>". This name MUST be a validly- | not-ta-<key-tag-of-KSK-current>". This name MUST be a validly- | |||
| signed. Any validly-signed DNS zone can be used for this test. | signed name. Any validly-signed DNS zone can be used for this | |||
| test. | ||||
| o A query name containing the left-most label "root-key-sentinel-is- | o A query name containing the left-most label "root-key-sentinel-is- | |||
| ta-<key-tag-of-KSK-new>". This name MUST be a validly-signed. | ta-<key-tag-of-KSK-new>". This name MUST be a validly-signed | |||
| Any validly-signed DNS zone can be used for this test. | name. Any validly-signed DNS zone can be used for this test. | |||
| The responses received from queries to resolve each of these names | The responses received from queries to resolve each of these names | |||
| can be evaluated to infer a trust key state of the user's DNS | can be evaluated to infer a trust key state of the user's DNS | |||
| resolution environment. | resolution environment. | |||
| The responses to these queries are described using a simplified | The responses to these queries are described using a simplified | |||
| notation. Each query will either result in a SERFVAIL response | notation. Each query will either result in a SERFVAIL response | |||
| (denoted as "S"), indicating that all of the resolvers in the | (denoted as "S"), indicating that all of the resolvers in the | |||
| recursive resolver set returned the SERVFAIL response code, or result | recursive resolver set returned the SERVFAIL response code, or result | |||
| in a response with the desire RRset value (denoted as "A"). The | in a response with the desire RRset value (denoted as "A"). The | |||
| queries are ordered by the "invalid" name, the "not-ta" label, then | queries are ordered by the "invalid" name, the "root-key-sentinel- | |||
| the "is-ta" label, and a triplet notation denotes a particular | not-ta" label, then the "root-key-sentinel-is-ta" label, and a | |||
| response. For example, the triplet "(S S A)" denotes a SERVFAIL | triplet notation denotes a particular response. For example, the | |||
| response to the invalid query, a SERVFAIL response to the "not-ta" | triplet "(S S A)" denotes a SERVFAIL response to the invalid query, a | |||
| query and a RRset response to the "is-ta" query. | SERVFAIL response to the "root-key-sentinel-not-ta" query and a RRset | |||
| response to the "root-key-sentinel-is-ta" query. | ||||
| The set of all possible responses to these three queries are: | The set of all possible responses to these three queries are: | |||
| (A * *): If any resolver returns an "A" response for the query for | (A * *): If any resolver returns an "A" response for the query for | |||
| the invalid name, then the resolver set contains at least one non- | the invalid name, then the resolver set contains at least one non- | |||
| validating DNS resolver, and the user will not be impacted by the | validating DNS resolver, and the user will not be impacted by the | |||
| KSK roll. | KSK roll. | |||
| (S A *): If any of the resolvers returns an "A" response the the | (S A *): If any of the resolvers returns an "A" response the the | |||
| "not-ta" query, then at least one of the resolvers does not | "root-key-sentinel-not-ta" query, then at least one of the | |||
| recognise the sentinel mechanism, and the behaviour of the | resolvers does not recognise the sentinel mechanism, and the | |||
| collection of resolvers during the KSK roll cannot be reliably | behaviour of the collection of resolvers during the KSK roll | |||
| determined. | cannot be reliably determined. | |||
| (S S A): This case implies that all of the resolvers in the set | (S S A): This case implies that all of the resolvers in the set | |||
| perform DNSSEC-validation, all of the resolvers are aware of the | perform DNSSEC-validation, all of the resolvers are aware of the | |||
| sentinel mechanism, and at least one resolver has loaded KSK-new | sentinel mechanism, and at least one resolver has loaded KSK-new | |||
| as a local trust anchor. The user will not be impacted by the KSK | as a local trust anchor. The user will not be impacted by the KSK | |||
| roll. | roll. | |||
| (S S S): This case implies that all of the resolvers in the set | (S S S): This case implies that all of the resolvers in the set | |||
| perform DNSSEC-validation, all of the resolvers are aware of the | perform DNSSEC-validation, all of the resolvers are aware of the | |||
| sentinel mechanism, and none of the resolvers has loaded KSK-new | sentinel mechanism, and none of the resolvers has loaded KSK-new | |||
| skipping to change at page 14, line 18 ¶ | skipping to change at page 15, line 9 ¶ | |||
| Hardaker, Paul Hoffman, Matt Larson, Jinmei Tatuya, Edward Lewis, | Hardaker, Paul Hoffman, Matt Larson, Jinmei Tatuya, Edward Lewis, | |||
| George Michaelson, Benno Overeinder, Matthew Pounsett, Hugo Salgado- | George Michaelson, Benno Overeinder, Matthew Pounsett, Hugo Salgado- | |||
| Hernandez, Andreas Schulze, Mukund Sivaraman, Petr Spacek, Job | Hernandez, Andreas Schulze, Mukund Sivaraman, Petr Spacek, Job | |||
| Snijders, Andrew Sullivan, Ondrej Sury, Paul Vixie, Duane Wessels and | Snijders, Andrew Sullivan, Ondrej Sury, Paul Vixie, Duane Wessels and | |||
| Paul Wouters for their helpful feedback. | Paul Wouters for their helpful feedback. | |||
| The authors would like to especially call out Paul Hoffman and Duane | The authors would like to especially call out Paul Hoffman and Duane | |||
| Wessels for providing comments in the form of pull requests. Joe | Wessels for providing comments in the form of pull requests. Joe | |||
| Abley also helpfully provided extensive review and OLD / NEW text. | Abley also helpfully provided extensive review and OLD / NEW text. | |||
| Petr Spacek wrote some very early implmentations, and provided | Petr Spacek wrote some very early implementations, and provided | |||
| significant feedback (including pointing out when the test bed didn't | significant feedback (including pointing out when the test bed didn't | |||
| match the document!) | match the document!) | |||
| 10. Change Log | 10. Change Log | |||
| RFC Editor: Please remove this section! | RFC Editor: Please remove this section! | |||
| Note that this document is being worked on in GitHub - see Abstract. | Note that this document is being worked on in GitHub - see Abstract. | |||
| The below is mainly large changes, and is not authoritative. | The below is mainly large changes, and is not authoritative. | |||
| From -15 to -16: | ||||
| o Addressed IESG comments | ||||
| o Benjamin Kaduk's Discuss on draft-ietf-dnsop-kskroll-sentinel | ||||
| o Also added Terry's "This a bad design pattern, but we decided the | ||||
| benefits outweigh the costs this time." text. | ||||
| o Suggestion from Adam to clarify that bypassing e.g gethostbyname() | ||||
| can provide better testing. | ||||
| o Nit: Forgot 'name' in 'This name MUST be a validly-signed name.' | ||||
| o Clarified that 'bogus.example.com' is intentionally DNSSEC bogus / | ||||
| invalid. | ||||
| From -14 to -15: | From -14 to -15: | |||
| o Addressed Joe Abley's thorough review, at: | o Addressed Joe Abley's thorough review, at: | |||
| https://mailarchive.ietf.org/arch/msg/dnsop/8ZnN1xj55Yimet2cg- | https://mailarchive.ietf.org/arch/msg/dnsop/8ZnN1xj55Yimet2cg- | |||
| LrdoJafEA | LrdoJafEA | |||
| From -13 to -14: | From -13 to -14: | |||
| o Addressed nits from Bob Harold - | o Addressed nits from Bob Harold - | |||
| https://mailarchive.ietf.org/arch/msg/dnsop/ | https://mailarchive.ietf.org/arch/msg/dnsop/ | |||
| skipping to change at page 18, line 35 ¶ | skipping to change at page 19, line 38 ¶ | |||
| Rose, "Protocol Modifications for the DNS Security | Rose, "Protocol Modifications for the DNS Security | |||
| Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005, | Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005, | |||
| <https://www.rfc-editor.org/info/rfc4035>. | <https://www.rfc-editor.org/info/rfc4035>. | |||
| [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | |||
| Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, | Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, | |||
| September 2007, <https://www.rfc-editor.org/info/rfc5011>. | September 2007, <https://www.rfc-editor.org/info/rfc5011>. | |||
| 11.2. Informative References | 11.2. Informative References | |||
| [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | ||||
| Terminology", RFC 7719, DOI 10.17487/RFC7719, December | ||||
| 2015, <https://www.rfc-editor.org/info/rfc7719>. | ||||
| [RFC8145] Wessels, D., Kumari, W., and P. Hoffman, "Signaling Trust | [RFC8145] Wessels, D., Kumari, W., and P. Hoffman, "Signaling Trust | |||
| Anchor Knowledge in DNS Security Extensions (DNSSEC)", | Anchor Knowledge in DNS Security Extensions (DNSSEC)", | |||
| RFC 8145, DOI 10.17487/RFC8145, April 2017, | RFC 8145, DOI 10.17487/RFC8145, April 2017, | |||
| <https://www.rfc-editor.org/info/rfc8145>. | <https://www.rfc-editor.org/info/rfc8145>. | |||
| Appendix A. Protocol Walkthrough Example | Appendix A. Protocol Walkthrough Example | |||
| This Appendix provides a non-normative example of how the sentinel | This Appendix provides a non-normative example of how the sentinel | |||
| mechanism could be used, and what each participant does. It is | mechanism could be used, and what each participant does. It is | |||
| provided in a conversational tone to be easier to follow. The | provided in a conversational tone to be easier to follow. The | |||
| skipping to change at page 19, line 34 ¶ | skipping to change at page 20, line 41 ¶ | |||
| webserver (www.example.com). He adds three address records to | webserver (www.example.com). He adds three address records to | |||
| example.com: | example.com: | |||
| bogus.example.com. IN AAAA 2001:db8::1 | bogus.example.com. IN AAAA 2001:db8::1 | |||
| root-key-sentinel-is-ta-02323.example.com. IN AAAA 2001:db8::1 | root-key-sentinel-is-ta-02323.example.com. IN AAAA 2001:db8::1 | |||
| root-key-sentinel-not-ta-11112.example.com. IN AAAA 2001:db8::1 | root-key-sentinel-not-ta-11112.example.com. IN AAAA 2001:db8::1 | |||
| Note that the use of "example.com" names and the addresses here are | Note that the use of "example.com" names and the addresses here are | |||
| examples. In a real deployment, the domain names need to be under | examples, and 'bogus' intentionally has invalid DNSSEC signatures. | |||
| control of the researcher, and the addresses must be real, reachable | In a real deployment, the domain names need to be under control of | |||
| addresses. | the researcher, and the addresses must be real, reachable addresses. | |||
| Geoff then DNSSEC signs the example.com zone, and intentionally makes | Geoff then DNSSEC signs the example.com zone, and intentionally makes | |||
| the bogus.example.com record have bogus validation status (for | the bogus.example.com record have bogus validation status (for | |||
| example, by editing the signed zone and entering garbage for the | example, by editing the signed zone and entering garbage for the | |||
| signature). Geoff also configures his webserver to listen on | signature). Geoff also configures his webserver to listen on | |||
| 2001:db8::1 and serve a resource (for example, a 1x1 GIF, 1x1.gif) | 2001:db8::1 and serve a resource (for example, a 1x1 GIF, 1x1.gif) | |||
| for all of these names. The webserver also serves a webpage | for all of these names. The webserver also serves a webpage | |||
| (www.example.com) which contains links to these 3 resources | (www.example.com) which contains links to these 3 resources | |||
| (http://bogus.example.com/1x1.gif, http://root-key-sentinel-is-ta- | (http://bogus.example.com/1x1.gif, http://root-key-sentinel-is-ta- | |||
| 02323.example.com/1x1.gif, http://root-key-sentinel-not-ta- | 02323.example.com/1x1.gif, http://root-key-sentinel-not-ta- | |||
| End of changes. 40 change blocks. | ||||
| 82 lines changed or deleted | 142 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/ | ||||