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 | |||
skipping to change at page 9, line 16 ¶ | skipping to change at page 11, line 9 ¶ | |||
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.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |