| < draft-ietf-dnsop-nsec-aggressiveuse-04.txt | draft-ietf-dnsop-nsec-aggressiveuse-05.txt > | |||
|---|---|---|---|---|
| Network Working Group K. Fujiwara | Network Working Group K. Fujiwara | |||
| Internet-Draft JPRS | Internet-Draft JPRS | |||
| Updates: 4035 (if approved) A. Kato | Updates: 4035 (if approved) A. Kato | |||
| Intended status: Standards Track Keio/WIDE | Intended status: Standards Track Keio/WIDE | |||
| Expires: April 10, 2017 W. Kumari | Expires: April 23, 2017 W. Kumari | |||
| October 7, 2016 | October 20, 2016 | |||
| Aggressive use of NSEC/NSEC3 | Aggressive use of NSEC/NSEC3 | |||
| draft-ietf-dnsop-nsec-aggressiveuse-04 | draft-ietf-dnsop-nsec-aggressiveuse-05 | |||
| Abstract | Abstract | |||
| The DNS relies upon caching to scale; however, the cache lookup | The DNS relies upon caching to scale; however, the cache lookup | |||
| generally requires an exact match. This document specifies the use | generally requires an exact match. This document specifies the use | |||
| of NSEC/NSEC3 resource records to allow DNSSEC validating resolvers | of NSEC/NSEC3 resource records to allow DNSSEC validating resolvers | |||
| to generate negative answers within a range, and positive answers | to generate negative answers within a range, and positive answers | |||
| from wildcards. This increases performance / decreases latency, | from wildcards. This increases performance / decreases latency, | |||
| decreases resource utilization on both authoritative and recursive | decreases resource utilization on both authoritative and recursive | |||
| servers, and also increases privacy. It may also help increase | servers, and also increases privacy. It may also help increase | |||
| skipping to change at page 2, line 7 ¶ | skipping to change at page 2, line 7 ¶ | |||
| 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 April 10, 2017. | This Internet-Draft will expire on April 23, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 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 | |||
| skipping to change at page 2, line 30 ¶ | skipping to change at page 2, line 30 ¶ | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. Aggressive Caching . . . . . . . . . . . . . . . . . . . . . 5 | 5. Aggressive Negative Caching . . . . . . . . . . . . . . . . . 5 | |||
| 5.1. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.1. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.2. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.2. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.3. Wildcards . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.3. Wildcards . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.4. Consideration on TTL . . . . . . . . . . . . . . . . . . 7 | 5.4. Consideration on TTL . . . . . . . . . . . . . . . . . . 7 | |||
| 6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 8 | 7. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
| 10. Implementation Status . . . . . . . . . . . . . . . . . . . . 9 | 10. Implementation Status . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11.1. Change History . . . . . . . . . . . . . . . . . . . . . 10 | 11.1. Change History . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 11.1.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . 12 | 11.1.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . 12 | |||
| 11.1.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . 12 | 11.1.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . 13 | |||
| 11.1.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . 13 | 11.1.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . 13 | |||
| 11.2. new section . . . . . . . . . . . . . . . . . . . . . . 13 | 11.2. new section . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 13 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 14 | 12.2. Informative References . . . . . . . . . . . . . . . . . 14 | |||
| Appendix A. Detailed implementation notes . . . . . . . . . . . 14 | Appendix A. Detailed implementation notes . . . . . . . . . . . 14 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | Appendix B. Procedure for determining ENT vs NXDOMAN . . . . . . 15 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | ||||
| 1. Introduction | 1. Introduction | |||
| A DNS negative cache exists, and is used to cache the fact that a | A DNS negative cache exists, and is used to cache the fact that a | |||
| name does not exist. This method of negative caching requires exact | name does not exist. This method of negative caching requires exact | |||
| matching; this leads to unnecessary additional lookups, increases | matching; this leads to unnecessary additional lookups, increases | |||
| latency, leads to extra resource utilization on both authoritative | latency, leads to extra resource utilization on both authoritative | |||
| and recursive servers, and decreases privacy by leaking queries. | and recursive servers, and decreases privacy by leaking queries. | |||
| This document updates RFC 4035 to allow recursive resolvers to use | This document updates RFC 4035 to allow recursive resolvers to use | |||
| skipping to change at page 4, line 5 ¶ | skipping to change at page 4, line 5 ¶ | |||
| "Closest Encloser" is also defined in NSEC3 [RFC5155], as is "Next | "Closest Encloser" is also defined in NSEC3 [RFC5155], as is "Next | |||
| closer name". | closer name". | |||
| 3. Problem Statement | 3. Problem Statement | |||
| The DNS negative cache caches negative (non-existent) information, | The DNS negative cache caches negative (non-existent) information, | |||
| and requires an exact match in most instances [RFC2308]. | and requires an exact match in most instances [RFC2308]. | |||
| Assume that the (DNSSEC signed) "example.com" zone contains: | Assume that the (DNSSEC signed) "example.com" zone contains: | |||
| apple.example.com IN A 192.0.2.1 | albatross.example.com IN A 192.0.2.1 | |||
| elephant.example.com IN A 192.0.2.2 | elephant.example.com IN A 192.0.2.2 | |||
| *.example.com IN A 192.0.2.3 | zebra.example.com IN A 192.0.2.3 | |||
| zebra.example.com IN A 192.0.2.4 | ||||
| If a validating resolver receives a query for cat.example.com, it | If a validating resolver receives a query for cat.example.com, it | |||
| contacts its resolver (which may be itself) to query the example.com | contacts its resolver (which may be itself) to query the example.com | |||
| servers and will get back an NSEC record starting that there are no | servers and will get back an NSEC record starting that there are no | |||
| records (alphabetically) between apple and elephant, or an NSEC3 | records (alphabetically) between albatross and elephant, or an NSEC3 | |||
| record stating there is nothing between two hashed names. The | record stating there is nothing between two hashed names. The | |||
| resolver then knows that cat.example.com does not exist; however, it | resolver then knows that cat.example.com does not exist; however, it | |||
| does not use the fact that the proof covers a range (apple to | does not use the fact that the proof covers a range (albatross to | |||
| elephant) to suppress queries for other labels that fall within this | elephant) to suppress queries for other labels that fall within this | |||
| range. This means that if the validating resolver gets a query for | range. This means that if the validating resolver gets a query for | |||
| ball.example.com (or dog.example.com) it will once again go off and | ball.example.com (or dog.example.com) it will once again go off and | |||
| query the example.com servers for these names. | query the example.com servers for these names. | |||
| Further, if a query is received for lion.example.com, it contacts its | Now, assume that the (DNSSEC signed) "example.org" zone contains: | |||
| resolver (which may be itself) to query the example.com servers and | ||||
| will get back an NSEC record stating that there are no records | avocado.example.org IN A 192.0.2.1 | |||
| (alphabetically) between elephant and zebra (or an NSEC3 record | *.example.org IN A 192.0.2.2 | |||
| zucchini.example.org IN A 192.0.2.3 | ||||
| If a query is received for leek.example.org, it contacts its resolver | ||||
| (which may be itself) to query the example.org servers and will get | ||||
| back an NSEC record stating that there are no records | ||||
| (alphabetically) between avocado and zucchini (or an NSEC3 record | ||||
| stating there is nothing between two hashed names), as well as an | stating there is nothing between two hashed names), as well as an | |||
| answer for lion.example.com, with the label count of the signature | answer for leek.example.org, with the label count of the signature | |||
| set to two (see [RFC7129], section 5.3 for more details). | set to two (see [RFC7129], section 5.3 for more details). | |||
| Apart from wasting bandwidth, this also wastes resources on the | Apart from wasting bandwidth, this also wastes resources on the | |||
| recursive server (it needs to keep state for outstanding queries), | recursive server (it needs to keep state for outstanding queries), | |||
| wastes resources on the authoritative server (it has to answer | wastes resources on the authoritative server (it has to answer | |||
| additional questions), increases latency (the end user has to wait | additional questions), increases latency (the end user has to wait | |||
| longer than necessary to get back an NXDOMAIN answer), can be used by | longer than necessary to get back an NXDOMAIN answer), can be used by | |||
| attackers to cause a DoS (see additional resources), and also has | attackers to cause a DoS (see additional resources), and also has | |||
| privacy implications (e.g: typos leak out further than necessary). | privacy implications (e.g: typos leak out further than necessary). | |||
| 4. Background | 4. Background | |||
| DNSSEC [RFC4035] and [RFC5155] both provide "authenticated denial of | DNSSEC [RFC4035] and [RFC5155] both provide "authenticated denial of | |||
| existence"; this is a cryptographic proof that the queried for name | existence"; this is a cryptographic proof that the queried for name | |||
| does not exist, accomplished by providing a (DNSSEC secured) record | does not exist, accomplished by providing a (DNSSEC secured) record | |||
| containing the names which appear alphabetically before and after the | containing the names which appear alphabetically before and after the | |||
| queried for name. In the example above, if the (DNSSEC validating) | queried for name. In the first example above, if the (DNSSEC | |||
| recursive server were to query for dog.example.com it would receive a | validating) recursive server were to query for dog.example.com it | |||
| (signed) NSEC record stating that there are no labels between "apple" | would receive a (signed) NSEC record stating that there are no labels | |||
| and "elephant" (or, for NSEC3, a similar pair of hashed names). This | between "albatross" and "elephant" (or, for NSEC3, a similar pair of | |||
| is a signed, cryptographic proof that these names are the ones before | hashed names). This is a signed, cryptographic proof that these | |||
| and after the queried for label. As dog.example.com falls within | names are the ones before and after the queried for label. As | |||
| this range, the recursive server knows that dog.example.com really | dog.example.com falls within this range, the recursive server knows | |||
| does not exist. | that dog.example.com really does not exist. | |||
| This document specifies that this NSEC/NSEC3 record should be used to | This document specifies that this NSEC/NSEC3 record should be used to | |||
| generate negative answers for any queries that the validating server | generate negative answers for any queries that the validating server | |||
| receives that fall within the range covered by the record (for the | receives that fall within the range covered by the record (for the | |||
| TTL for the record). This document also specifies that a positive | TTL for the record). This document also specifies that a positive | |||
| answer should be generated for any queries that the validating server | answer should be generated for any queries that the validating server | |||
| receives that are proven to be covered by a wildcard record. | receives that are proven to be covered by a wildcard record. | |||
| Section 4.5 of [RFC4035] says: | Section 4.5 of [RFC4035] says: | |||
| skipping to change at page 5, line 39 ¶ | skipping to change at page 5, line 43 ¶ | |||
| We believe this recommendation can be relaxed because, in the absense | We believe this recommendation can be relaxed because, in the absense | |||
| of this technique, a lookup for the exact name could have come in | of this technique, a lookup for the exact name could have come in | |||
| during this interval, and so a negative answer could already be | during this interval, and so a negative answer could already be | |||
| cached (see [RFC2308] for more background). This means that zone | cached (see [RFC2308] for more background). This means that zone | |||
| operators should have no expectation that an added name would work | operators should have no expectation that an added name would work | |||
| immediately. With DNSSEC and Aggressive NSEC, the TTL of the NSEC | immediately. With DNSSEC and Aggressive NSEC, the TTL of the NSEC | |||
| record is the authoritative statement of how quickly a name can start | record is the authoritative statement of how quickly a name can start | |||
| working within a zone. | working within a zone. | |||
| 5. Aggressive Caching | 5. Aggressive Negative Caching | |||
| Section 4.5 of [RFC4035] says that "In theory, a resolver could use | Section 4.5 of [RFC4035] says that "In theory, a resolver could use | |||
| wildcards or NSEC RRs to generate positive and negative responses | wildcards or NSEC RRs to generate positive and negative responses | |||
| (respectively) until the TTL or signatures on the records in question | (respectively) until the TTL or signatures on the records in question | |||
| expire. However, it seems prudent for resolvers to avoid blocking | expire. However, it seems prudent for resolvers to avoid blocking | |||
| new authoritative data or synthesizing new data on their own. | new authoritative data or synthesizing new data on their own. | |||
| Resolvers that follow this recommendation will have a more consistent | Resolvers that follow this recommendation will have a more consistent | |||
| view of the namespace". | view of the namespace". | |||
| This document relaxes this this restriction, as follows: | This document relaxes this this restriction, as follows: | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| | Once the records are validated, DNSSEC enabled validating | | | Once the records are validated, DNSSEC enabled validating | | |||
| | resolvers MAY use wildcards and NSEC/NSEC3 resource records | | | resolvers MAY use wildcards and NSEC/NSEC3 resource records | | |||
| | to generate positive and negative responses until the | | | to generate positive and negative responses until the | | |||
| | effective TTLs or signatures for those records expire. | | | effective TTLs or signatures for those records expire. | | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| If the validating resolver's cache has sufficient information to | If the negative cache of the validating resolver has sufficient | |||
| validate the query, the resolver SHOULD use NSEC/NSEC3/wildcard | information to validate the query, the resolver SHOULD use NSEC, | |||
| records aggressively. Otherwise, it MUST fall back to send the query | NSEC3 and wildcard records aggressively. Otherwise, it MUST fall | |||
| to the authoritative DNS servers. | back to send the query to the authoritative DNS servers. | |||
| 5.1. NSEC | It is recommended that resolvers that implement Aggressive Negative | |||
| Caching provide a configuration switch to disable the feature. | ||||
| Separate configuration switches may be implemented for the aggressive | ||||
| use of NSEC, NSEC3 and wildcard records, and it is recommended to | ||||
| enable aggressive negative caching by default. | ||||
| Implementations which support aggressive use of NSEC SHOULD enable | 5.1. NSEC | |||
| this by default. Implementations MAY provide a configuration switch | ||||
| to disable aggressive use of NSEC and allow it to be enabled or | ||||
| disabled per domain. | ||||
| The validating resolver needs to check the existence of an NSEC RR | The validating resolver needs to check the existence of an NSEC RR | |||
| matching/covering the source of synthesis and an NSEC RR covering the | matching/covering the source of synthesis and an NSEC RR covering the | |||
| query name. | query name. | |||
| If denial of existence can be determined according to the rules set | If denial of existence can be determined according to the rules set | |||
| out in Section 5.4 of [RFC4035], using NSEC records in the cache, | out in Section 5.4 of [RFC4035], using NSEC records in the cache, | |||
| then the resolver can immediately return an NXDOMAIN or NODATA (as | then the resolver can immediately return an NXDOMAIN or NODATA (as | |||
| appropriate) response. | appropriate) response. | |||
| 5.2. NSEC3 | 5.2. NSEC3 | |||
| NSEC3 aggressive negative caching is more difficult than NSEC | NSEC3 aggressive negative caching is more difficult than NSEC | |||
| aggressive caching. If the zone is signed with NSEC3, the validating | aggressive caching. If the zone is signed with NSEC3, the validating | |||
| resolver needs to check the existence of non-terminals and wildcards | resolver needs to check the existence of non-terminals and wildcards | |||
| which derive from query names. | which derive from query names. | |||
| A validating resolver implementation MAY support aggressive use of | ||||
| NSEC3. If it does support aggressive use of NSEC3, it SHOULD enable | ||||
| this by default. It MAY provide a configuration switch to disable | ||||
| aggressive use of NSEC3 and allow it to be enabled or disabled for | ||||
| specific zones. | ||||
| If denial of existence can be determined according to the rules set | If denial of existence can be determined according to the rules set | |||
| out in [RFC5155] sections 8.4, 8.5, 8.6, 8.7,using NSEC3 records in | out in [RFC5155] Sections 8.4, 8.5, 8.6, 8.7, using NSEC3 records in | |||
| the cache, then the resolver can immediately return an NXDOMAIN or | the cache, then the resolver can immediately return an NXDOMAIN or | |||
| NODATA response (as appropriate). | NODATA response (as appropriate). | |||
| If a covering NSEC3 RR has Opt-Out flag, the covering NSEC3 RR does | If a covering NSEC3 RR has Opt-Out flag, the covering NSEC3 RR does | |||
| not prove the non-existence of the domain name and the aggressive | not prove the non-existence of the domain name and the aggressive | |||
| negative caching is not possible for the domain name. | negative caching is not possible for the domain name. | |||
| 5.3. Wildcards | 5.3. Wildcards | |||
| The last paragraph of [RFC4035] Section 4.5 also discusses the use of | The last paragraph of [RFC4035] Section 4.5 also discusses the use of | |||
| wildcards and NSEC RRs to generate positive responses and recommends | wildcards and NSEC RRs to generate positive responses and recommends | |||
| that it not be relied upon. Just like the case for the aggressive | that it not be relied upon. Just like the case for the aggressive | |||
| use of NSEC/NSEC3 for negative answers, we revise this | use of NSEC/NSEC3 for negative answers, we revise this | |||
| recommendation. | recommendation. | |||
| As long as the validating resolver can determine that a name would | As long as the validating resolver can determine that a name would | |||
| not exist without the wildcard match, it MAY synthesize an answer for | not exist without the wildcard match, determined according to the | |||
| that name using the cached deduced wildcard. If the corresponding | rules set out in Section 5.3.4 of [RFC4035] (NSEC), or in Section 8.8 | |||
| wildcard record is not in the cache, it MUST fall back to send the | of [RFC5155], it SHOULD synthesize an answer for that name using the | |||
| query to the authoritative DNS servers. | cached deduced wildcard. If the corresponding wildcard record is not | |||
| in the cache, it MUST fall back to send the query to the | ||||
| An implementation MAY support aggressive use of wildcards. It SHOULD | authoritative DNS servers. | |||
| provide a configuration switch to disable aggressive use of | ||||
| wildcards. | ||||
| 5.4. Consideration on TTL | 5.4. Consideration on TTL | |||
| The TTL value of negative information is especially important, | The TTL value of negative information is especially important, | |||
| because newly added domain names cannot be used while the negative | because newly added domain names cannot be used while the negative | |||
| information is effective. | information is effective. | |||
| Section 5 of [RFC2308] states that the maximum number of negative | Section 5 of [RFC2308] states that the maximum number of negative | |||
| cache TTL value is 3 hours (10800). It is RECOMMENDED that | cache TTL value is 3 hours (10800). It is RECOMMENDED that | |||
| validating resolvers limit the maximum effective TTL value of | validating resolvers limit the maximum effective TTL value of | |||
| skipping to change at page 8, line 29 ¶ | skipping to change at page 8, line 20 ¶ | |||
| Decreased authorative server load: Because recursive servers can | Decreased authorative server load: Because recursive servers can | |||
| answer (negative) queries without asking the authoritative server, | answer (negative) queries without asking the authoritative server, | |||
| the authoritative servers receive fewer queries. This decreases | the authoritative servers receive fewer queries. This decreases | |||
| the authoritative server bandwidth, queries per second and CPU | the authoritative server bandwidth, queries per second and CPU | |||
| utilization. | utilization. | |||
| The scale of the benefit depends upon multiple factors, including the | The scale of the benefit depends upon multiple factors, including the | |||
| query distribution. For example, at the time of this writing, around | query distribution. For example, at the time of this writing, around | |||
| 65% of queries to Root Name servers result in NXDOMAIN responses (see | 65% of queries to Root Name servers result in NXDOMAIN responses (see | |||
| statis [root-servers.org]); this technique will eliminate a sizable | statistics from [root-servers.org]); this technique will eliminate a | |||
| quantity of these. | sizable quantity of these. | |||
| The technique described in this document may also mitigate so-called | The technique described in this document may also mitigate so-called | |||
| "random QNAME attacks", in which attackers send many queries for | "random QNAME attacks", in which attackers send many queries for | |||
| random sub-domains to resolvers. As the resolver will not have the | random sub-domains to resolvers. As the resolver will not have the | |||
| answers cached, it has to ask external servers for each random query, | answers cached, it has to ask external servers for each random query, | |||
| leading to a DoS on the authoritative servers (and often resolvers). | leading to a DoS on the authoritative servers (and often resolvers). | |||
| Aggressive NSEC may help mitigate these attacks by allowing the | Aggressive NSEC may help mitigate these attacks by allowing the | |||
| resolver to answer directly from cache for any random queries which | resolver to answer directly from cache for any random queries which | |||
| fall within already requested ranges. It will not always work as an | fall within already requested ranges. It will not always work as an | |||
| effective defense, not least because not many zones are DNSSEC signed | effective defense, not least because not many zones are DNSSEC signed | |||
| skipping to change at page 9, line 46 ¶ | skipping to change at page 9, line 37 ¶ | |||
| (minutes or hours), their RRSIG expiration time can be much further | (minutes or hours), their RRSIG expiration time can be much further | |||
| in the future (weeks). An attacker who is able to successfully spoof | in the future (weeks). An attacker who is able to successfully spoof | |||
| responses might poison a cache with old NSEC/NSEC3 records. If the | responses might poison a cache with old NSEC/NSEC3 records. If the | |||
| resolver is NOT making aggressive use of NSEC/NSEC3, the attacker has | resolver is NOT making aggressive use of NSEC/NSEC3, the attacker has | |||
| to repeat the attack for every query. If the resolver IS making | to repeat the attack for every query. If the resolver IS making | |||
| aggressive use of NSEC/NSEC3, one successful attack would be able to | aggressive use of NSEC/NSEC3, one successful attack would be able to | |||
| suppress many queries for new names, up to the negative TTL. | suppress many queries for new names, up to the negative TTL. | |||
| 10. Implementation Status | 10. Implementation Status | |||
| Unbound currenty implements aggressive negative caching, as does | [ Editor note: RFC Editor, please remove this entire section. | |||
| RFC6982 says: "Since this information is necessarily time dependent, | ||||
| it is inappropriate for inclusion in a published RFC." ] | ||||
| Unbound currently implements aggressive negative caching, as does | ||||
| Google Public DNS. | Google Public DNS. | |||
| 11. Acknowledgments | 11. Acknowledgments | |||
| The authors gratefully acknowledge DLV [RFC5074] author Samuel Weiler | The authors gratefully acknowledge DLV [RFC5074] author Samuel Weiler | |||
| and the Unbound developers. | and the Unbound developers. | |||
| The authors would like to specifically thank Stephane Bortzmeyer, | The authors would like to specifically thank Stephane Bortzmeyer, | |||
| Tony Finch, Tatuya JINMEI for extensive review and comments, and also | Tony Finch, Tatuya JINMEI for extensive review and comments, and also | |||
| Mark Andrews, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | Mark Andrews, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | |||
| Harold, Shumon Huque, John Levine, Pieter Lexis and Matthijs Mekking | Harold, Shumon Huque, John Levine, Pieter Lexis and Matthijs Mekking | |||
| (who even sent pull requests!). | (who even sent pull requests!). Mark Andrews also provided the text | |||
| (https://www.ietf.org/mail-archive/web/dnsop/current/msg18332.html) | ||||
| which we made into Appendix B | ||||
| 11.1. Change History | 11.1. Change History | |||
| RFC Editor: Please remove this section prior to publication. | RFC Editor: Please remove this section prior to publication. | |||
| -04 to -05: | ||||
| o Bob pointed out that I did a stupid - when I added the wildcard to | ||||
| 'example.com' I made the example wrong / confusing. I have | ||||
| attempted to fix this by adding a second example zone | ||||
| (example.org) with the wildcard instead. | ||||
| o More helpful changes (in a pull request, thanks!) from Matthijs | ||||
| o Included Mark Andrew's useful explanation of how to tell ENT from | ||||
| NXD as an Appendix. | ||||
| -03 to -04: | -03 to -04: | |||
| o Working group does want the "positive" answers, not just negative | o Working group does want the "positive" answers, not just negative | |||
| ones. This requires readding what used to be Section 7, and a | ones. This requires reading what used to be Section 7, and a | |||
| bunch of cleanup, including: | bunch of cleanup, including: | |||
| * Additional text in the Problem Statement | * Additional text in the Problem Statement | |||
| * Added a wildcard record to the zone. | * Added a wildcard record to the zone. | |||
| * Added "or positive answers from wildcards" type text (where | * Added "or positive answers from wildcards" type text (where | |||
| appropriate) to explain that this isn't just for negative | appropriate) to explain that this isn't just for negative | |||
| answers. | answers. | |||
| skipping to change at page 15, line 10 ¶ | skipping to change at page 15, line 22 ¶ | |||
| expanded.) | expanded.) | |||
| o The aggressive negative caching may be inserted at the cache | o The aggressive negative caching may be inserted at the cache | |||
| lookup part of the recursive resolvers. | lookup part of the recursive resolvers. | |||
| o If errors happen in aggressive negative caching algorithm, | o If errors happen in aggressive negative caching algorithm, | |||
| resolvers MUST fall back to resolve the query as usual. "Resolve | resolvers MUST fall back to resolve the query as usual. "Resolve | |||
| the query as usual" means that the resolver must process the query | the query as usual" means that the resolver must process the query | |||
| as though it does not implement aggressive negative caching. | as though it does not implement aggressive negative caching. | |||
| Appendix B. Procedure for determining ENT vs NXDOMAN | ||||
| Thanks to Mark Andrews for providing these helpful notes for | ||||
| implementors. As they are more general than for Aggressive NSEC we | ||||
| have placed them in an appendix. | ||||
| If the NSEC record has not been verified as secure discard it. | ||||
| If the given name sorts before or matches the NSEC owner name discard | ||||
| it as it does not prove the NXDOMAIN or ENT. | ||||
| If the given name is a subdomain of the NSEC owner name and the NS | ||||
| bit is present and the SOA bit is absent then discard the NSEC as it | ||||
| is from a parent zone. | ||||
| If the next domain name sorts after the NSEC owner name and the given | ||||
| name sorts after or matches next domain name then discard the NSEC | ||||
| record as it does not prove the NXDOMAIN or ENT. | ||||
| If the next domain name sorts before or matches the NSEC owner name | ||||
| and the given name is not a subdomain of the next domain name then | ||||
| discard the NSEC as it does not prove the NXDOMAIN or ENT. | ||||
| You now have a NSEC record that proves the NXDOMAIN or ENT. | ||||
| If the next domain name is a subdomain of the given name you have a | ||||
| ENT otherwise you have a NXDOMAIN. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Kazunori Fujiwara | Kazunori Fujiwara | |||
| Japan Registry Services Co., Ltd. | Japan Registry Services Co., Ltd. | |||
| Chiyoda First Bldg. East 13F, 3-8-1 Nishi-Kanda | Chiyoda First Bldg. East 13F, 3-8-1 Nishi-Kanda | |||
| Chiyoda-ku, Tokyo 101-0065 | Chiyoda-ku, Tokyo 101-0065 | |||
| Japan | Japan | |||
| Phone: +81 3 5215 8451 | Phone: +81 3 5215 8451 | |||
| Email: fujiwara@jprs.co.jp | Email: fujiwara@jprs.co.jp | |||
| End of changes. 28 change blocks. | ||||
| 58 lines changed or deleted | 103 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/ | ||||