| < draft-ietf-dnsop-nsec-aggressiveuse-02.txt | draft-ietf-dnsop-nsec-aggressiveuse-03.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: March 17, 2017 W. Kumari | Expires: April 7, 2017 W. Kumari | |||
| September 13, 2016 | October 4, 2016 | |||
| Aggressive use of NSEC/NSEC3 | Aggressive use of NSEC/NSEC3 | |||
| draft-ietf-dnsop-nsec-aggressiveuse-02 | draft-ietf-dnsop-nsec-aggressiveuse-03 | |||
| 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 generate negative answers within a | of NSEC/NSEC3 resource records to allow DNSSEC validating resolvers | |||
| range. This increases performance / decreases latency, decreases | to generate negative answers within a range. This increases | |||
| resource utilization on both authoritative and recursive servers, and | performance / decreases latency, decreases resource utilization on | |||
| also increases privacy. It may also help increase resilience to | both authoritative and recursive servers, and also increases privacy. | |||
| certain DoS attacks in some circumstances. | It may also help increase resilience to certain DoS attacks in some | |||
| circumstances. | ||||
| This document updates RFC4035 by allowing resolvers to generate | This document updates RFC4035 by allowing validating resolvers to | |||
| negative answers based upon NSEC/NSEC3 records. | generate negative answers based upon NSEC/NSEC3 records. | |||
| [ Ed note: Text inside square brackets ([]) is additional background | [ Ed note: Text inside square brackets ([]) is additional background | |||
| information, answers to frequently asked questions, general musings, | information, answers to frequently asked questions, general musings, | |||
| etc. They will be removed before publication.This document is being | etc. They will be removed before publication.This document is being | |||
| collaborated on in Github at: https://github.com/wkumari/draft-ietf- | collaborated on in Github at: https://github.com/wkumari/draft-ietf- | |||
| dnsop-nsec-aggressiveuse. The most recent version of the document, | dnsop-nsec-aggressiveuse. The most recent version of the document, | |||
| open issues, etc should all be available here. The authors | open issues, etc should all be available here. The authors | |||
| (gratefully) accept pull requests. | (gratefully) accept pull requests.] | |||
| Known / open issues [To be moved to Github issue tracker]: | ||||
| 1. We say things like: "Currently the DNS does ..." - this will not | ||||
| be true after this is deployed, but I'm having a hard time | ||||
| rewording this. "Without the techniques described in this | ||||
| document..." seems klunky. Perhaps "historically?!" | ||||
| ] | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 7, 2017. | ||||
| This Internet-Draft will expire on March 17, 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 | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. Proposed Solution . . . . . . . . . . . . . . . . . . . . . . 5 | 5. Aggressive Negative Caching . . . . . . . . . . . . . . . . . 5 | |||
| 5.1. Aggressive Negative Caching . . . . . . . . . . . . . . . 5 | 5.1. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5.2. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.2. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.3. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.3. Consideration on TTL . . . . . . . . . . . . . . . . . . 6 | |||
| 5.4. Wildcard . . . . . . . . . . . . . . . . . . . . . . . . 6 | 6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.5. Consideration on TTL . . . . . . . . . . . . . . . . . . 7 | 7. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 8 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 10. Implementation Status . . . . . . . . . . . . . . . . . . . . 8 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 10. Implementation Status . . . . . . . . . . . . . . . . . . . . 9 | 12. Change History . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 9 | 12.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . . . 10 | |||
| 12. Change History . . . . . . . . . . . . . . . . . . . . . . . 9 | 12.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . . . 10 | |||
| 12.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . . . 11 | 12.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . . . 10 | |||
| 12.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . . . 11 | ||||
| 12.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . . . 11 | ||||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 11 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 12 | 13.2. Informative References . . . . . . . . . . . . . . . . . 11 | |||
| Appendix A. Detailed implementation notes . . . . . . . . . . . 12 | Appendix A. Detailed implementation notes . . . . . . . . . . . 12 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 1. Introduction | 1. Introduction | |||
| A DNS negative cache currently exists, and is used to cache the fact | A DNS negative cache exists, and is used to cache the fact that a | |||
| that a name does not exist. This method of negative caching requires | name does not exist. This method of negative caching requires exact | |||
| exact matching; this leads to unnecessary additional lookups, | matching; this leads to unnecessary additional lookups, increases | |||
| increases latency, leads to extra resource utilization on both | latency, leads to extra resource utilization on both authoritative | |||
| authoritative and recursive servers, and decreases privacy by leaking | and recursive servers, and decreases privacy by leaking queries. | |||
| queries. | ||||
| This document updates RFC 4035 to allow recursive resolvers to use | This document updates RFC 4035 to allow recursive resolvers to use | |||
| NSEC/NSEC3 resource records to aggressively cache negative answers. | NSEC/NSEC3 resource records to synthetize negative answers from the | |||
| This would allow such resolvers to respond with NXDOMAIN immediately | information they have in the cache. This allows validating resolvers | |||
| if the name in question falls into a range expressed by a NSEC/NSEC3 | to respond with NXDOMAIN immediately if the name in question falls | |||
| resource record already in the cache. | into a range expressed by a NSEC/NSEC3 resource record already in the | |||
| cache. | ||||
| Aggressive Negative Caching was first proposed in Section 6 of DNSSEC | Aggressive Negative Caching was first proposed in Section 6 of DNSSEC | |||
| Lookaside Validation (DLV) [RFC5074] in order to find covering NSEC | Lookaside Validation (DLV) [RFC5074] in order to find covering NSEC | |||
| records efficiently. | records efficiently. | |||
| Section 3 of [I-D.vixie-dnsext-resimprove] "Stopping Downward Cache | Section 3 of [I-D.vixie-dnsext-resimprove] "Stopping Downward Cache | |||
| Search on NXDOMAIN" and [I-D.ietf-dnsop-nxdomain-cut] proposed | Search on NXDOMAIN" and [I-D.ietf-dnsop-nxdomain-cut] proposed | |||
| another approach to use NXDOMAIN information effectively. | another approach to use NXDOMAIN information effectively. | |||
| 2. Terminology | 2. 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", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| Many of the specialized terms used in this document are defined in | Many of the specialized terms used in this document are defined in | |||
| DNS Terminology [RFC7719]. In this document we are using the terms | DNS Terminology [RFC7719]. | |||
| "recursive resolver" or "recursive server" as a more readable | ||||
| alternative to the more formal[RFC7719] "full-service resolver" | ||||
| The key words "Closest Encloser" and "Source of Synthesis" in this | The key words "Closest Encloser" and "Source of Synthesis" in this | |||
| document are to be interpreted as described in[RFC4592]. | document are to be interpreted as described in [RFC4592]. | |||
| "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 current DNS negative cache caches negative (non-existent) | The DNS negative cache caches negative (non-existent) information, | |||
| 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 | apple.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 | |||
| zebra.example.com IN A 192.0.2.3 | zebra.example.com IN A 192.0.2.3 | |||
| If a recursive resolver gets a query for cat.example.com, it will | If a validating resolver gets a query for cat.example.com, it will | |||
| query the example.com authoritative servers and will get back an NSEC | query the example.com servers and will get back an NSEC (or NSEC3) | |||
| (or NSEC3) record starting that there are no records between apple | record starting that there are no records between apple and elephant. | |||
| and elephant. The recursive resolver then knows that cat.example.com | The resolver then knows that cat.example.com does not exist; however, | |||
| does not exist; however, it (currently) does not use the fact that | it does not use the fact that the proof covers a range (apple to | |||
| the proof covers a range (apple to elephant) to suppress queries for | elephant) to suppress queries for other labels that fall within this | |||
| other labels that fall within this range. This means that if the | range. This means that if the validating resolver gets a query for | |||
| recursive resolvers gets a query for ball.example.com (or | ball.example.com (or dog.example.com) it will once again go off and | |||
| dog.example.com) it will once again go off and query the example.com | query the example.com servers for these names. | |||
| servers for these names. | ||||
| 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 | |||
| skipping to change at page 5, line 5 ¶ | skipping to change at page 4, line 37 ¶ | |||
| recursive server were to query for lion.example.com it would receive | recursive server were to query for lion.example.com it would receive | |||
| a (signed) NSEC/NSEC3 record stating that there are no labels between | a (signed) NSEC/NSEC3 record stating that there are no labels between | |||
| "elephant" and "zebra". This is a signed, cryptographic proof that | "elephant" and "zebra". This is a signed, cryptographic proof that | |||
| these names are the ones before and after the queried for label. As | these names are the ones before and after the queried for label. As | |||
| lion.example.com falls within this range, the recursive server knows | lion.example.com falls within this range, the recursive server knows | |||
| that lion.example.com really does not exist. This document specifies | that lion.example.com really does not exist. This document specifies | |||
| that this NSEC/NSEC3 record should be used to generate negative | that this NSEC/NSEC3 record should be used to generate negative | |||
| answers for any queries that the recursive server receives that fall | answers for any queries that the recursive server receives that fall | |||
| within the range covered by the record (for the TTL for the record). | within the range covered by the record (for the TTL for the record). | |||
| [RFC4035]; Section 4.5 states: | Section 4.5 of [RFC4035] says: | |||
| For a zone signed with NSEC, it would be possible to use the | "In theory, a resolver could use wildcards or NSEC RRs to generate | |||
| information carried in NSEC resource records to indicate the non- | positive and negative responses (respectively) until the TTL or | |||
| existence of a range of names. However, such use is discouraged by | signatures on the records in question expire. However, it seems | |||
| Section 4.5 of RFC4035. It is recommended that readers read RFC4035 | prudent for resolvers to avoid blocking new authoritative data or | |||
| in its entirety for a better understanding. At the root of the | synthesizing new data on their own. Resolvers that follow this | |||
| concern is that new records could have been added to the zone during | recommendation will have a more consistent view of the namespace." | |||
| the TTL of the NSEC record, and that generating negative responses | and "The reason for these recommendations is that, between the | |||
| from the NSEC record would hide these. We believe this | initial query and the expiration of the data from the cache, the | |||
| recommendation can be relaxed because lookups for the specific name | authoritative data might have been changed (for example, via dynamic | |||
| could have come in during the normal negative cache time and so | update).". In other words, if a resolver generates negative answers | |||
| operators should have no expectation that an added name would work | from an NSEC record, it will not send any queries for names within | |||
| immediately. We think that the TTL of the NSEC record is the | that NSEC range (for the TTL). If a new name is added to the zone | |||
| during this interval the resolver will not know this. | ||||
| We believe this recommendation can be relaxed because, in the absense | ||||
| of this technique, a lookup for the exact name could have come in | ||||
| during this interval, and so this could already be cached (see | ||||
| [RFC2308] for more background). This means that zone operators | ||||
| should have no expectation that an added name would work immediately. | ||||
| With DNSSEC and Aggressive NSEC, the TTL of the NSEC record is the | ||||
| authoritative statement of how quickly a name can start working | authoritative statement of how quickly a name can start working | |||
| within a zone. | within a zone. | |||
| 5. Proposed Solution | 5. Aggressive Negative Caching | |||
| 5.1. Aggressive Negative Caching | ||||
| Section 4.5 of [RFC4035] shows that "In theory, a resolver could use | Section 4.5 of [RFC4035] shows 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 NSEC/NSEC3 resource records to generate | | | resolvers SHOULD use NSEC/NSEC3 resource records to generate | | |||
| | negative responses until their effective TTLs or signatures | | | negative responses until their effective TTLs or signatures | | |||
| | for those records expire. | | | for those records expire. | | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| If the validating resolver's cache has sufficient information to | If the validating resolver's cache has sufficient information to | |||
| validate the query, the resolver SHOULD use NSEC/NSEC3/wildcard | validate the query, the resolver SHOULD use NSEC/NSEC3/wildcard | |||
| records aggressively. Otherwise, it MUST fall back to send the query | records aggressively. Otherwise, it MUST fall back to send the query | |||
| to the authoritative DNS servers. | to the authoritative DNS servers. | |||
| If the query name has the matching NSEC/NSEC3 RR proving the | If the query name has the matching NSEC/NSEC3 RR proving the | |||
| information requested does not exist, the resolver may respond with a | information requested does not exist, the validating resolver may | |||
| NODATA (empty) answer. | respond with a NODATA (empty) answer. | |||
| 5.2. NSEC | 5.1. NSEC | |||
| Implementations SHOULD enable aggressive use of NSEC by default. | Implementations which support aggressive use of NSEC SHOULD enable | |||
| Implementations SHOULD provide a configuration switch to disable | this by default. Implementations MAY provide a configuration switch | |||
| aggressive use of NSEC and allow it to be enabled or disabled per | to disable aggressive use of NSEC and allow it to be enabled or | |||
| domain. | 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 the validating resolver's cache contains an NSEC RR covering the | If the validating resolver's cache contains an NSEC RR covering the | |||
| source of synthesis and the covering NSEC RR of the query name, the | source of synthesis and the covering NSEC RR of the query name, the | |||
| resolver may respond with NXDOMAIN error immediately. | validating resolver may respond with NXDOMAIN error immediately. | |||
| 5.3. NSEC3 | 5.2. NSEC3 | |||
| NSEC3 aggressive negative caching is more difficult. If the zone is | NSEC3 aggressive negative caching is more difficult. If the zone is | |||
| signed with NSEC3, the validating resolver needs to check the | signed with NSEC3, the validating resolver needs to check the | |||
| existence of non-terminals and wildcards which derive from query | existence of non-terminals and wildcards which derive from query | |||
| names. | names. | |||
| If the validating resolver's cache contains an NSEC3 RR matching the | If the validating resolver's cache contains an NSEC3 RR matching the | |||
| closest encloser, an NSEC3 RR covering the next closer name, and an | closest encloser, an NSEC3 RR covering the next closer name, and an | |||
| NSEC3 RR covering the source of synthesis, it is possible for the | NSEC3 RR covering the source of synthesis, it is possible for the | |||
| resolver to respond with NXDOMAIN immediately. | validating resolver to respond with NXDOMAIN immediately. | |||
| 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. | |||
| A validating resolver implementation MAY support aggressive use of | A validating resolver implementation MAY support aggressive use of | |||
| NSEC3. If it does aggressive use of NSEC3, it SHOULD provide a | NSEC3. If it does aggressive use of NSEC3, it MAY provide a | |||
| configuration switch to disable aggressive use of NSEC3 and allow it | configuration switch to disable aggressive use of NSEC3 and allow it | |||
| to be enabled or disabled for specific zones. | to be enabled or disabled for specific zones. | |||
| 5.4. Wildcard | 5.3. Consideration on TTL | |||
| The last paragraph of RFC 4035 Section 4.5 discusses aggressive use | ||||
| of a cached deduced wildcard (as well as aggressive use of NSEC) and | ||||
| recommends that it is not relied upon. | ||||
| Just like the case for the aggressive use of NSEC discussed in this | ||||
| draft, we revise this recommendation. As long as the resolver knows | ||||
| a name would not exist without the wildcard match, it can answer a | ||||
| query for that name using the cached deduced wildcard, and it may be | ||||
| justified for performance and other benefits. | ||||
| Such aggressive use of cached deduced wildcard can be employed | ||||
| independently from aggressive use of NSEC. But, it will be more | ||||
| effective when both are enabled since the resolver can determine the | ||||
| name subject to wildcard would not otherwise exist more efficiently. | ||||
| Furthermore, when aggressive use of NSEC is enabled, the aggressive | ||||
| use of cached deduced wildcard will be more effective. | ||||
| An implementation MAY support aggressive use of wildcards. It SHOULD | ||||
| provide a configuration switch to disable aggressive use of | ||||
| wildcards. | ||||
| 5.5. 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. Section 5 of RFC 2308 states that the | information is effective. Section 5 of RFC 2308 states that the | |||
| maximum number of negative cache TTL value is 3 hours (10800). It is | maximum number of negative cache TTL value is 3 hours (10800). It is | |||
| RECOMMENDED that resolvers limit the maximum effective TTL value of | RECOMMENDED that validating resolvers limit the maximum effective TTL | |||
| negative responses (NSEC/NSEC3 RRs) to this same value. | value of negative responses (NSEC/NSEC3 RRs) to this same value. | |||
| 6. Benefits | 6. Benefits | |||
| The techniques described in this document provide a number of | The techniques described in this document provide a number of | |||
| benefits, including (in no specific order): | benefits, including (in no specific order): | |||
| Latency By answering directly from cache, recursive resolvers can | Reduced latency By answering directly from cache, validating | |||
| immediately inform clients that the name they are looking for does | resolvers can immediately inform clients that the name they are | |||
| not exist, improving the user experience. | looking for does not exist, improving the user experience. | |||
| Decreased recursive server load By answering negative queries from | Decreased recursive server load By answering negative queries from | |||
| the cache, recursive servers avoid having send a query and wait | the cache, validating servers avoid having send a query and wait | |||
| for a response. In addition to decreasing the bandwidth used, it | for a response. In addition to decreasing the bandwidth used, it | |||
| also means that the server does not need to allocate and maintain | also means that the server does not need to allocate and maintain | |||
| state, thereby decreasing memory and CPU load. | state, thereby decreasing memory and CPU load. | |||
| 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 less queries. This decreases | the authoritative servers receive less 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, currently around 65% of queries to | query distribution. For example, currently around 65% of queries to | |||
| Root Name servers result in NXDOMAIN responses; this technique will | Root Name servers result in NXDOMAIN responses; this technique will | |||
| eliminate a sizable quantity of these. | eliminate a sizable quantity of these. | |||
| [ Editor note: There has been some discussion on if this document | ||||
| should discuss this attack and mitigation. The authors think that | ||||
| this is useful / important, but some participants feel that it | ||||
| oversells the DoS mitigation benefit. Please let us know if the | ||||
| below is helpful. Also, the below description is not as clear as it | ||||
| could be - it's been tricky to balance readability, correctness and | ||||
| conciseness. Text gratefully accepted... ] | ||||
| 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 recursive resolvers. As the recursive server | random sub-domains to resolvers. As the resolver will not have the | |||
| will not have the answers cached it has to ask the authoritative | answers cached it has to ask external servers for each random query, | |||
| servers for each random query, leading to a DoS on the authoritative | leading to a DoS on the authoritative servers (and often resolvers). | |||
| (and often recursive) servers. Aggressive NSEC may help mitigate | Aggressive NSEC may help mitigate these attacks by allowing the | |||
| these attacks by allowing the recursive to answer directly from cache | resolver to answer directly from cache for any random queries which | |||
| for any random queries which fall within already requested ranges. | fall within already requested ranges. It will not always work as an | |||
| The effectiveness of this depends upon a number of factors, including | effective defense, not least because not many zones are DNSSEC signed | |||
| if the attacker is making his queries through recursive resolvers | at all, but it will still provide an additional layer of defense. | |||
| (e.g to hide his source), the number of entries in the zone, the TTL, | ||||
| if the zone is using NSEC, if the attacker is setting the CD bit, | ||||
| etc. In the ideal case, authoritative servers under attack will need | ||||
| to answer somewhere between number_of_entries_in_zone queries and 2 * | ||||
| number_of_entries_in_zone queries from each recursive server. This | ||||
| is because there are as many "holes" between labels as there are | ||||
| labels in a zone. If the random query falls in range for which | ||||
| recursive server does not have an NSEC record cached, it will send a | ||||
| query to the authoritative server, and so it will send approximately | ||||
| the same number of queries as there are "holes" between entries. If | ||||
| the random queries happen to be for names which exist in the zone, | ||||
| the recursive will send those as well. | ||||
| 7. Update to RFC 4035 | 7. Update to RFC 4035 | |||
| Section 4.5 of [RFC4035] shows that "In theory, a resolver could use | Section 4.5 of [RFC4035] shows 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". | |||
| The paragraph is updated as follows: | The paragraph is updated as follows: | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| | Once the records are validated, DNSSEC enabled recursive | | | 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 their | | | to generate negative responses until their effective TTLs | | |||
| | effective TTLs or signatures for those records expire. | | | or signatures for those records expire. | | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| This document has no IANA actions. | This document has no IANA actions. | |||
| 9. Security Considerations | 9. Security Considerations | |||
| Newly registered resource records may not be used immediately. | Newly registered resource records may not be used immediately. | |||
| However, choosing suitable TTL value and negative cache TTL value | However, choosing suitable TTL value and negative cache TTL value | |||
| (SOA MINIMUM field) will mitigate the delay concern, and it is not a | (SOA MINIMUM field) will mitigate the delay concern, and it is not a | |||
| security problem. | security problem. | |||
| It is also suggested to limit the maximum TTL value of NSEC / NSEC3 | It is also suggested to limit the maximum TTL value of NSEC / NSEC3 | |||
| resource records in the negative cache to, for example, 10800 seconds | resource records in the negative cache to, for example, 10800 seconds | |||
| (3hrs), to mitigate this issue. Implementations which comply with | (3hrs), to mitigate this issue. Implementations which comply with | |||
| this proposal are recommended to have a configurable maximum value of | this proposal are recommended to have a configurable maximum value of | |||
| NSEC RRs in the negative cache. | NSEC RRs in the negative cache. | |||
| Aggressive use of NSEC / NSEC3 resource records without DNSSEC | Aggressive use of NSEC / NSEC3 resource records without DNSSEC | |||
| validation may cause security problems. It is highly recommended to | validation may create serious security issues, and so this technique | |||
| apply DNSSEC validation. | requires DNSSEC validation. | |||
| 10. Implementation Status | 10. Implementation Status | |||
| Unbound supports aggressive negative caching. | Unbound currenty implements aggressive negative caching, as does | |||
| 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 Tatuya JINMEI for | The authors would like to specifically thank Tatuya JINMEI for | |||
| extensive review and comments, and also Mark Andrews, Stephane | extensive review and comments, and also Mark Andrews, Stephane | |||
| Bortzmeyer, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | Bortzmeyer, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | |||
| Harold, Shumon Huque, Pieter Lexis and Matthijs Mekking. | Harold, Shumon Huque, John Levine, Pieter Lexis and Matthijs Mekking | |||
| (who even sent pull requests!). | ||||
| 12. Change History | 12. Change History | |||
| RFC Editor: Please remove this section prior to publication. | RFC Editor: Please remove this section prior to publication. | |||
| -02 to -03: | ||||
| o Integrated a bunch of comments from Matthijs Mekking - details in: | ||||
| https://github.com/wkumari/draft-ietf-dnsop-nsec-aggressiveuse/ | ||||
| pull/1. I decided to keep "Aggressive Negative Caching" instead | ||||
| of "Aggressive USE OF Negative Caching" for readability. | ||||
| o Attempted to address Bob Harold's comment on the readability | ||||
| issues with "But, it will be more effective when both are | ||||
| enabled..." in Section 5.4 - https://www.ietf.org/mail- | ||||
| archive/web/dnsop/current/msg17997.html | ||||
| o MAYs and SHOULD drifted in the text block. Fixed - thanks to | ||||
| https://mailarchive.ietf.org/arch/msg/ | ||||
| dnsop/2ljmmzxtIMCFMLOZmWcSbTYVOy4 | ||||
| o A number of good edits from Stephane in: https://www.ietf.org/ | ||||
| mail-archive/web/dnsop/current/msg18109.html | ||||
| o A bunch more edits from Jinmei, as in: https://www.ietf.org/mail- | ||||
| archive/web/dnsop/current/msg18206.html | ||||
| -01 to -02: | -01 to -02: | |||
| o Added Section 6 - Benefits (as suggested by Jinmei). | o Added Section 6 - Benefits (as suggested by Jinmei). | |||
| o Removed Appendix B (Jinmei) | o Removed Appendix B (Jinmei) | |||
| o Replaced "full-service" with "validating" (where applicable) | o Replaced "full-service" with "validating" (where applicable) | |||
| o Integrated other comments from Jinmei from https://www.ietf.org/ | o Integrated other comments from Jinmei from https://www.ietf.org/ | |||
| mail-archive/web/dnsop/current/msg17875.html | mail-archive/web/dnsop/current/msg17875.html | |||
| End of changes. 41 change blocks. | ||||
| 165 lines changed or deleted | 137 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/ | ||||