| < draft-ietf-dnsop-nsec-aggressiveuse-01.txt | draft-ietf-dnsop-nsec-aggressiveuse-02.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: February 3, 2017 W. Kumari | Expires: March 17, 2017 W. Kumari | |||
| August 02, 2016 | September 13, 2016 | |||
| Aggressive use of NSEC/NSEC3 | Aggressive use of NSEC/NSEC3 | |||
| draft-ietf-dnsop-nsec-aggressiveuse-01 | draft-ietf-dnsop-nsec-aggressiveuse-02 | |||
| 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 generate negative answers within a | |||
| range. This increases resilience to DoS attacks, increases | range. This increases performance / decreases latency, decreases | |||
| performance / decreases latency, decreases resource utilization on | resource utilization on both authoritative and recursive servers, and | |||
| both authoritative and recursive servers, and also increases privacy. | also increases privacy. 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 resolvers to generate | |||
| negative answers based upon NSEC/NSEC3 records. | 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 | |||
| skipping to change at page 2, line 12 ¶ | skipping to change at page 2, line 15 ¶ | |||
| 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 February 3, 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. Proposed Solution . . . . . . . . . . . . . . . . . . . . . . 5 | 5. Proposed Solution . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5.1. Aggressive Negative Caching . . . . . . . . . . . . . . . 5 | 5.1. Aggressive Negative Caching . . . . . . . . . . . . . . . 5 | |||
| 5.2. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 5.2. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.3. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.3. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.4. Wildcard . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.4. Wildcard . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.5. Consideration on TTL . . . . . . . . . . . . . . . . . . 7 | 5.5. Consideration on TTL . . . . . . . . . . . . . . . . . . 7 | |||
| 6. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 7 | 6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 7. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Implementation Status . . . . . . . . . . . . . . . . . . . . 8 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 8 | 10. Implementation Status . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11. Change History . . . . . . . . . . . . . . . . . . . . . . . 8 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . . . 9 | 12. Change History . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . . . 9 | 12.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . . . 11 | |||
| 11.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . . . 9 | 12.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . . . 11 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 12.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . . . 11 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 10 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 11 | |||
| Appendix A. Detailed implementation idea . . . . . . . . . . . . 11 | 13.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| Appendix B. Side effect: mitigation of random subdomain attacks 11 | Appendix A. Detailed implementation notes . . . . . . . . . . . 12 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 1. Introduction | 1. Introduction | |||
| A DNS negative cache currently exists, and is used to cache the fact | A DNS negative cache currently exists, and is used to cache the fact | |||
| that a name does not exist. This method of negative caching requires | that a name does not exist. This method of negative caching requires | |||
| exact matching; this leads to unnecessary additional lookups, which | exact matching; this leads to unnecessary additional lookups, | |||
| have negative implications for DoS survivability, increases latency, | increases latency, leads to extra resource utilization on both | |||
| leads to extra resource utilization on both authoritative and | authoritative and recursive servers, and decreases privacy by leaking | |||
| 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 aggressively cache negative answers. | |||
| This would allow such resolvers to respond with NXDOMAIN immediately | This would allow such resolvers to respond with NXDOMAIN immediately | |||
| if the name in question falls into a range expressed by a NSEC/NSEC3 | if the name in question falls into a range expressed by a NSEC/NSEC3 | |||
| resource record already in the cache. | 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. | |||
| skipping to change at page 3, line 39 ¶ | skipping to change at page 3, line 41 ¶ | |||
| 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]. | DNS Terminology [RFC7719]. In this document we are using the terms | |||
| "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 current DNS negative cache caches negative (non-existent) | |||
| skipping to change at page 5, line 32 ¶ | skipping to change at page 5, line 37 ¶ | |||
| 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 full-service | | | Once the records are validated, DNSSEC enabled validating | | |||
| | resolvers MAY use NSEC/NSEC3 resource records to generate | | | resolvers MAY 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 full-service resolver's cache has sufficient information to | If the validating resolver's cache has sufficient information to | |||
| validate the query, the full-service resolver MAY use NSEC/NSEC3/ | validate the query, the resolver SHOULD use NSEC/NSEC3/wildcard | |||
| wildcard records aggressively. Otherwise, the full-service resolver | records aggressively. Otherwise, it MUST fall back to send the query | |||
| 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 full-service resolver may | information requested does not exist, the resolver may respond with a | |||
| respond with a NODATA (empty) answer. | NODATA (empty) answer. | |||
| 5.2. NSEC | 5.2. NSEC | |||
| If a full-service resolver implementation supports aggressive | Implementations SHOULD enable aggressive use of NSEC by default. | |||
| negative caching, then it SHOULD support aggressive use of NSEC and | Implementations SHOULD provide a configuration switch to disable | |||
| enable it by default. It SHOULD provide a configuration switch to | aggressive use of NSEC and allow it to be enabled or disabled per | |||
| disable aggressive use of NSEC and allow it to be enabled or disabled | domain. | |||
| for specific zones. | ||||
| 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 full-service 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 | |||
| full-service resolver may respond with NXDOMAIN error immediately. | resolver may respond with NXDOMAIN error immediately. | |||
| 5.3. NSEC3 | 5.3. 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 full-service resolver's cache contains an NSEC3 RR matching | If the validating resolver's cache contains an NSEC3 RR matching the | |||
| the closest encloser, an NSEC3 RR covering the next closer name, and | closest encloser, an NSEC3 RR covering the next closer name, and an | |||
| 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 | |||
| full-service resolver to respond with NXDOMAIN immediately. | 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 full-service 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 SHOULD 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.4. Wildcard | |||
| The last paragraph of RFC 4035 Section 4.5 discusses aggressive use | 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 | of a cached deduced wildcard (as well as aggressive use of NSEC) and | |||
| recommends that it is not relied upon. | recommends that it is not relied upon. | |||
| Just like the case for the aggressive use of NSEC discussed in this | Just like the case for the aggressive use of NSEC discussed in this | |||
| draft, we revise this recommendation. As long as the full-service | draft, we revise this recommendation. As long as the resolver knows | |||
| resolver knows a name would not exist without the wildcard match, it | a name would not exist without the wildcard match, it can answer a | |||
| can answer a query for that name using the cached deduced wildcard, | query for that name using the cached deduced wildcard, and it may be | |||
| and it may be justified for performance and other benefits. (Note | justified for performance and other benefits. | |||
| that, so far, this is orthogonal to "when aggressive use (of NSEC) is | ||||
| enabled"). | 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 | Furthermore, when aggressive use of NSEC is enabled, the aggressive | |||
| use of cached deduced wildcard will be more effective. | use of cached deduced wildcard will be more effective. | |||
| A full-service resolver implementation MAY support aggressive use of | An implementation MAY support aggressive use of wildcards. It SHOULD | |||
| wildcards. It SHOULD provide a configuration switch to disable | provide a configuration switch to disable aggressive use of | |||
| aggressive use of wildcards. | wildcards. | |||
| 5.5. Consideration on TTL | 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 full-service resolvers limit the maximum effective | RECOMMENDED that resolvers limit the maximum effective TTL value of | |||
| TTL value of negative responses (NSEC/NSEC3 RRs) to this same value. | negative responses (NSEC/NSEC3 RRs) to this same value. | |||
| 6. Update to RFC 4035 | 6. Benefits | |||
| The techniques described in this document provide a number of | ||||
| benefits, including (in no specific order): | ||||
| Latency By answering directly from cache, recursive resolvers can | ||||
| immediately inform clients that the name they are looking for does | ||||
| not exist, improving the user experience. | ||||
| Decreased recursive server load By answering negative queries from | ||||
| the cache, recursive servers avoid having send a query and wait | ||||
| for a response. In addition to decreasing the bandwidth used, it | ||||
| also means that the server does not need to allocate and maintain | ||||
| state, thereby decreasing memory and CPU load. | ||||
| Decreased authorative server load Because recursive servers can | ||||
| answer (negative) queries without asking the authoritative server, | ||||
| the authoritative servers receive less queries. This decreases | ||||
| the authoritative server bandwidth, queries per second and CPU | ||||
| utilization. | ||||
| The scale of the benefit depends upon multiple factors, including the | ||||
| query distribution. For example, currently around 65% of queries to | ||||
| Root Name servers result in NXDOMAIN responses; this technique will | ||||
| 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 | ||||
| "random QNAME attacks", in which attackers send many queries for | ||||
| random sub-domains to recursive resolvers. As the recursive server | ||||
| will not have the answers cached it has to ask the authoritative | ||||
| servers for each random query, leading to a DoS on the authoritative | ||||
| (and often recursive) servers. Aggressive NSEC may help mitigate | ||||
| these attacks by allowing the recursive to answer directly from cache | ||||
| for any random queries which fall within already requested ranges. | ||||
| The effectiveness of this depends upon a number of factors, including | ||||
| if the attacker is making his queries through recursive resolvers | ||||
| (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 | ||||
| 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". | |||
| (If approved, ) The paragraph is updated as follows: | The paragraph is updated as follows: | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| | Once the records are validated, DNSSEC enabled full-service | | | Once the records are validated, DNSSEC enabled recursive | | |||
| | 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 (positive and) negative responses until their | | |||
| | effective TTLs or signatures for those records expire. | | | effective TTLs or signatures for those records expire. | | |||
| +--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| 7. IANA Considerations | 8. IANA Considerations | |||
| This document has no IANA actions. | This document has no IANA actions. | |||
| 8. 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 cause security problems. It is highly recommended to | |||
| apply DNSSEC validation. | apply DNSSEC validation. | |||
| 9. Implementation Status | 10. Implementation Status | |||
| Unbound has aggressive negative caching code in its DLV validator. | Unbound supports aggressive negative caching. | |||
| The author implemented NSEC aggressive caching using Unbound and its | ||||
| DLV validator code. | ||||
| 10. Acknowledgments | 11. Acknowledgments | |||
| The authors gratefully acknowledge DLV [RFC5074] author Samuel Weiler | The authors gratefully acknowledge DLV [RFC5074] author Samuel Weiler | |||
| and Unbound developers. Valuable comments were provided by Alexander | and the Unbound developers. | |||
| Dupuy, Olafur Gudmundsson, Pieter Lexis, Bob Harold, Tatuya JINMEI, | ||||
| Shumon Huque, Mark Andrews, Casey Deccio, Bob Harold, Stephane | ||||
| Bortzmeyer and Matthijs Mekking. | ||||
| 11. Change History | The authors would like to specifically thank Tatuya JINMEI for | |||
| extensive review and comments, and also Mark Andrews, Stephane | ||||
| Bortzmeyer, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | ||||
| Harold, Shumon Huque, Pieter Lexis and Matthijs Mekking. | ||||
| 12. Change History | ||||
| RFC Editor: Please remove this section prior to publication. | RFC Editor: Please remove this section prior to publication. | |||
| -01 to -02: | ||||
| o Added Section 6 - Benefits (as suggested by Jinmei). | ||||
| o Removed Appendix B (Jinmei) | ||||
| o Replaced "full-service" with "validating" (where applicable) | ||||
| o Integrated other comments from Jinmei from https://www.ietf.org/ | ||||
| mail-archive/web/dnsop/current/msg17875.html | ||||
| o Integrated comment from co-authors, including re-adding parts of | ||||
| Appendix B, terminology, typos. | ||||
| o Tried to explain under what conditions this may actually mitigate | ||||
| attacks. | ||||
| -00 to -01: | -00 to -01: | |||
| o Comments from DNSOP meeting in Berlin. | o Comments from DNSOP meeting in Berlin. | |||
| o Changed intended status to Standards Track (updates RFC 4035) | o Changed intended status to Standards Track (updates RFC 4035) | |||
| o Added a section "Updates to RFC 4035" | o Added a section "Updates to RFC 4035" | |||
| o Some language clarification / typo / cleanup | o Some language clarification / typo / cleanup | |||
| o Cleaned up the TTL section a bit. | o Cleaned up the TTL section a bit. | |||
| o Removed Effects section, Additional proposal section, and pseudo | o Removed Effects section, Additional proposal section, and pseudo | |||
| code. | code. | |||
| o Moved "mitigaton of random subdomain attacks" to Appendix. | o Moved "mitigation of random subdomain attacks" to Appendix. | |||
| From draft-fujiwara-dnsop-nsec-aggressiveuse-03 -> draft-ietf-dnsop- | From draft-fujiwara-dnsop-nsec-aggressiveuse-03 -> draft-ietf-dnsop- | |||
| nsec-aggressiveuse | nsec-aggressiveuse | |||
| o Document adopted by DNSOP WG. | o Document adopted by DNSOP WG. | |||
| o Adoption comments | o Adoption comments | |||
| o Changed main purpose to performance | o Changed main purpose to performance | |||
| o Use NSEC3/Wildcard keywords | o Use NSEC3/Wildcard keywords | |||
| o Improved wordings (from good comments) | o Improved wordings (from good comments) | |||
| o Simplified pseudo code for NSEC3 | o Simplified pseudo code for NSEC3 | |||
| o Added Warren as co-author. | o Added Warren as co-author. | |||
| o Reworded much of the problem statement | o Reworded much of the problem statement | |||
| o Reworked examples to better explain the problem / solution. | o Reworked examples to better explain the problem / solution. | |||
| 11.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 | 12.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 | |||
| o Added reference to DLV [RFC5074] and imported some sentences. | o Added reference to DLV [RFC5074] and imported some sentences. | |||
| o Added Aggressive Negative Caching Flag idea. | o Added Aggressive Negative Caching Flag idea. | |||
| o Added detailed algorithms. | o Added detailed algorithms. | |||
| 11.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 | 12.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 | |||
| o Added reference to [I-D.vixie-dnsext-resimprove] | o Added reference to [I-D.vixie-dnsext-resimprove] | |||
| o Added considerations for the CD bit | o Added considerations for the CD bit | |||
| o Updated detailed algorithms. | o Updated detailed algorithms. | |||
| o Moved Aggressive Negative Caching Flag idea into Additional | o Moved Aggressive Negative Caching Flag idea into Additional | |||
| Proposals | Proposals | |||
| 11.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 | 12.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 | |||
| o Added "Partial implementation" | o Added "Partial implementation" | |||
| o Section 4,5,6 reorganized for better representation | o Section 4,5,6 reorganized for better representation | |||
| o Added NODATA answer in Section 4 | o Added NODATA answer in Section 4 | |||
| o Trivial updates | o Trivial updates | |||
| o Updated pseudo code | o Updated pseudo code | |||
| 12. References | 13. References | |||
| 12.1. Normative References | ||||
| 13.1. Normative References | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ | Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ | |||
| RFC2119, March 1997, | RFC2119, March 1997, | |||
| <http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | |||
| NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | |||
| <http://www.rfc-editor.org/info/rfc2308>. | <http://www.rfc-editor.org/info/rfc2308>. | |||
| skipping to change at page 10, line 37 ¶ | skipping to change at page 12, line 27 ¶ | |||
| [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS | [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS | |||
| Security (DNSSEC) Hashed Authenticated Denial of | Security (DNSSEC) Hashed Authenticated Denial of | |||
| Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008, | Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008, | |||
| <http://www.rfc-editor.org/info/rfc5155>. | <http://www.rfc-editor.org/info/rfc5155>. | |||
| [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
| Terminology", RFC 7719, DOI 10.17487/RFC7719, December | Terminology", RFC 7719, DOI 10.17487/RFC7719, December | |||
| 2015, <http://www.rfc-editor.org/info/rfc7719>. | 2015, <http://www.rfc-editor.org/info/rfc7719>. | |||
| 12.2. Informative References | 13.2. Informative References | |||
| [I-D.ietf-dnsop-nxdomain-cut] | [I-D.ietf-dnsop-nxdomain-cut] | |||
| Bortzmeyer, S. and S. Huque, "NXDOMAIN really means there | Bortzmeyer, S. and S. Huque, "NXDOMAIN really means there | |||
| is nothing underneath", draft-ietf-dnsop-nxdomain-cut-03 | is nothing underneath", draft-ietf-dnsop-nxdomain-cut-03 | |||
| (work in progress), May 2016. | (work in progress), May 2016. | |||
| [I-D.vixie-dnsext-resimprove] | [I-D.vixie-dnsext-resimprove] | |||
| Vixie, P., Joffe, R., and F. Neves, "Improvements to DNS | Vixie, P., Joffe, R., and F. Neves, "Improvements to DNS | |||
| Resolvers for Resiliency, Robustness, and Responsiveness", | Resolvers for Resiliency, Robustness, and Responsiveness", | |||
| draft-vixie-dnsext-resimprove-00 (work in progress), June | draft-vixie-dnsext-resimprove-00 (work in progress), June | |||
| 2010. | 2010. | |||
| Appendix A. Detailed implementation idea | Appendix A. Detailed implementation notes | |||
| o Previously, cached negative responses were indexed by QNAME, | o Previously, cached negative responses were indexed by QNAME, | |||
| QCLASS, QTYPE, and the setting of the CD bit (see RFC 4035, | QCLASS, QTYPE, and the setting of the CD bit (see RFC 4035, | |||
| Section 4.7), and only queries matching the index key would be | Section 4.7), and only queries matching the index key would be | |||
| answered from the cache. With aggressive negative caching, the | answered from the cache. With aggressive negative caching, the | |||
| validator, in addition to checking to see if the answer is in its | validator, in addition to checking to see if the answer is in its | |||
| cache before sending a query, checks to see whether any cached and | cache before sending a query, checks to see whether any cached and | |||
| validated NSEC record denies the existence of the sought | validated NSEC record denies the existence of the sought | |||
| record(s). Using aggressive negative caching, a validator will | record(s). Using aggressive negative caching, a validator will | |||
| not make queries for any name covered by a cached and validated | not make queries for any name covered by a cached and validated | |||
| skipping to change at page 11, line 29 ¶ | skipping to change at page 13, line 15 ¶ | |||
| on the incoming query. (Imported from Section 6 of [RFC5074]). | on the incoming query. (Imported from Section 6 of [RFC5074]). | |||
| o Implementing aggressive negative caching suggests that a validator | o Implementing aggressive negative caching suggests that a validator | |||
| will need to build an ordered data structure of NSEC and NSEC3 | will need to build an ordered data structure of NSEC and NSEC3 | |||
| records for each signer domain name of NSEC / NSEC3 records in | records for each signer domain name of NSEC / NSEC3 records in | |||
| order to efficiently find covering NSEC / NSEC3 records. Call the | order to efficiently find covering NSEC / NSEC3 records. Call the | |||
| table as NSEC_TABLE. (Imported from Section 6.1 of [RFC5074] and | table as NSEC_TABLE. (Imported from Section 6.1 of [RFC5074] and | |||
| 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 full-service 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 full-resolver resolve the query | the query as usual" means that the resolver must process the query | |||
| in Recursive-mode as if the full-service resolver does not | as though it does not implement aggressive negative caching. | |||
| implement aggressive negative caching. | ||||
| Appendix B. Side effect: mitigation of random subdomain attacks | ||||
| Random sub-domain attacks (referred to as "Water Torture" attacks or | ||||
| NXDomain attacks) send many queries for non-existent information to | ||||
| full-service resolvers. Their query names consist of random prefixes | ||||
| and a target domain name. The negative cache does not work well, and | ||||
| thus targeted full-service resolvers end up sending queries to | ||||
| authoritative DNS servers of the target domain name. | ||||
| The aggressive negative caching is one of possible countermeasures to | ||||
| random subdomain attacks. If the full-service resolver supports | ||||
| aggressive negative caching and the target domain name is signed with | ||||
| NSEC/NSEC3 (without Opt-Out), the aggressive negative caching is one | ||||
| of countermeasures of random subdomain attacks. | ||||
| However, attackers can set the CD bit to their attack queries. The | ||||
| CD bit disables signature validation and the aggressive negative | ||||
| caching will be of no use. | ||||
| 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 | |||
| End of changes. 42 change blocks. | ||||
| 105 lines changed or deleted | 166 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/ | ||||