draft-ietf-dnsop-nsec-aggressiveuse-03.txt | draft-ietf-dnsop-nsec-aggressiveuse-04.txt | |||
---|---|---|---|---|
Network Working Group K. Fujiwara | Network Working Group K. Fujiwara | |||
Internet-Draft JPRS | Internet-Draft JPRS | |||
Updates: 4035 (if approved) A. Kato | Updates: 4035 (if approved) A. Kato | |||
Intended status: Standards Track Keio/WIDE | Intended status: Standards Track Keio/WIDE | |||
Expires: April 7, 2017 W. Kumari | Expires: April 10, 2017 W. Kumari | |||
October 4, 2016 | October 7, 2016 | |||
Aggressive use of NSEC/NSEC3 | Aggressive use of NSEC/NSEC3 | |||
draft-ietf-dnsop-nsec-aggressiveuse-03 | draft-ietf-dnsop-nsec-aggressiveuse-04 | |||
Abstract | Abstract | |||
The DNS relies upon caching to scale; however, the cache lookup | The DNS relies upon caching to scale; however, the cache lookup | |||
generally requires an exact match. This document specifies the use | generally requires an exact match. This document specifies the use | |||
of NSEC/NSEC3 resource records to allow DNSSEC validating resolvers | of NSEC/NSEC3 resource records to allow DNSSEC validating resolvers | |||
to generate negative answers within a range. This increases | to generate negative answers within a range, and positive answers | |||
performance / decreases latency, decreases resource utilization on | from wildcards. This increases performance / decreases latency, | |||
both authoritative and recursive servers, and also increases privacy. | decreases resource utilization on both authoritative and recursive | |||
It may also help increase resilience to certain DoS attacks in some | servers, and also increases privacy. It may also help increase | |||
circumstances. | resilience to certain DoS attacks in some circumstances. | |||
This document updates RFC4035 by allowing validating resolvers to | This document updates RFC4035 by allowing validating resolvers to | |||
generate negative answers based upon NSEC/NSEC3 records. | generate negative based upon NSEC/NSEC3 records (and positive answers | |||
in the presence of wildcards). | ||||
[ 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.] | |||
Status of This Memo | Status of This Memo | |||
skipping to change at page 2, line 4 ¶ | skipping to change at page 2, line 6 ¶ | |||
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 April 10, 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 | |||
4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Background . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
5. Aggressive Negative Caching . . . . . . . . . . . . . . . . . 5 | 5. Aggressive Caching . . . . . . . . . . . . . . . . . . . . . 5 | |||
5.1. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 5.1. NSEC . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
5.2. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.2. NSEC3 . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
5.3. Consideration on TTL . . . . . . . . . . . . . . . . . . 6 | 5.3. Wildcards . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.4. Consideration on TTL . . . . . . . . . . . . . . . . . . 7 | |||
7. Update to RFC 4035 . . . . . . . . . . . . . . . . . . . . . 7 | 6. Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
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 . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
12.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . . . 10 | 11.1. Change History . . . . . . . . . . . . . . . . . . . . . 10 | |||
12.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . . . 10 | 11.1.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 . 12 | |||
12.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . . . 10 | 11.1.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 . 12 | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 11.1.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 . 13 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 11.2. new section . . . . . . . . . . . . . . . . . . . . . . 13 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 11 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
Appendix A. Detailed implementation notes . . . . . . . . . . . 12 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 13 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | 12.2. Informative References . . . . . . . . . . . . . . . . . 14 | |||
Appendix A. Detailed implementation notes . . . . . . . . . . . 14 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
1. Introduction | 1. Introduction | |||
A DNS negative cache exists, and is used to cache the fact that a | A DNS negative cache exists, and is used to cache the fact that a | |||
name does not exist. This method of negative caching requires exact | name does not exist. This method of negative caching requires exact | |||
matching; this leads to unnecessary additional lookups, increases | matching; this leads to unnecessary additional lookups, increases | |||
latency, leads to extra resource utilization on both authoritative | latency, leads to extra resource utilization on both authoritative | |||
and recursive servers, and decreases privacy by leaking queries. | and recursive servers, and decreases privacy by leaking queries. | |||
This document updates RFC 4035 to allow recursive resolvers to use | This document updates RFC 4035 to allow recursive resolvers to use | |||
NSEC/NSEC3 resource records to synthetize negative answers from the | NSEC/NSEC3 resource records to synthesize negative answers from the | |||
information they have in the cache. This allows validating resolvers | information they have in the cache. This allows validating resolvers | |||
to respond with NXDOMAIN immediately if the name in question falls | to respond with NXDOMAIN immediately if the name in question falls | |||
into a range expressed by a NSEC/NSEC3 resource record already in the | into a range expressed by a NSEC/NSEC3 resource record already in the | |||
cache. | cache. It also allows the synthesis of positive answers in the | |||
presence of wildcard records. | ||||
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 | |||
skipping to change at page 3, line 44 ¶ | skipping to change at page 4, line 5 ¶ | |||
"Closest Encloser" is also defined in NSEC3 [RFC5155], as is "Next | "Closest Encloser" is also defined in NSEC3 [RFC5155], as is "Next | |||
closer name". | closer name". | |||
3. Problem Statement | 3. Problem Statement | |||
The DNS negative cache caches negative (non-existent) information, | The DNS negative cache caches negative (non-existent) information, | |||
and requires an exact match in most instances [RFC2308]. | and requires an exact match in most instances [RFC2308]. | |||
Assume that the (DNSSEC signed) "example.com" zone contains: | Assume that the (DNSSEC signed) "example.com" zone contains: | |||
apple.example.com IN A 192.0.2.1 | 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 | *.example.com IN A 192.0.2.3 | |||
zebra.example.com IN A 192.0.2.4 | ||||
zebra.example.com IN A 192.0.2.3 | ||||
If a validating resolver gets a query for cat.example.com, it will | If a validating resolver receives a query for cat.example.com, it | |||
query the example.com servers and will get back an NSEC (or NSEC3) | contacts its resolver (which may be itself) to query the example.com | |||
record starting that there are no records between apple and elephant. | servers and will get back an NSEC record starting that there are no | |||
The resolver then knows that cat.example.com does not exist; however, | records (alphabetically) between apple and elephant, or an NSEC3 | |||
it does not use the fact that the proof covers a range (apple to | record stating there is nothing between two hashed names. The | |||
resolver then knows that cat.example.com does not exist; however, it | ||||
does not use the fact that the proof covers a range (apple to | ||||
elephant) to suppress queries for other labels that fall within this | elephant) to suppress queries for other labels that fall within this | |||
range. This means that if the validating resolver gets a query for | range. This means that if the validating resolver gets a query for | |||
ball.example.com (or dog.example.com) it will once again go off and | ball.example.com (or dog.example.com) it will once again go off and | |||
query the example.com servers for these names. | query the example.com servers for these names. | |||
Further, if a query is received for lion.example.com, it contacts its | ||||
resolver (which may be itself) to query the example.com servers and | ||||
will get back an NSEC record stating that there are no records | ||||
(alphabetically) between elephant and zebra (or an NSEC3 record | ||||
stating there is nothing between two hashed names), as well as an | ||||
answer for lion.example.com, with the label count of the signature | ||||
set to two (see [RFC7129], section 5.3 for more details). | ||||
Apart from wasting bandwidth, this also wastes resources on the | Apart from wasting bandwidth, this also wastes resources on the | |||
recursive server (it needs to keep state for outstanding queries), | recursive server (it needs to keep state for outstanding queries), | |||
wastes resources on the authoritative server (it has to answer | wastes resources on the authoritative server (it has to answer | |||
additional questions), increases latency (the end user has to wait | additional questions), increases latency (the end user has to wait | |||
longer than necessary to get back an NXDOMAIN answer), can be used by | longer than necessary to get back an NXDOMAIN answer), can be used by | |||
attackers to cause a DoS (see additional resources), and also has | attackers to cause a DoS (see additional resources), and also has | |||
privacy implications (e.g: typos leak out further than necessary). | privacy implications (e.g: typos leak out further than necessary). | |||
4. Background | 4. Background | |||
DNSSEC [RFC4035] and [RFC5155] both provide "authenticated denial of | DNSSEC [RFC4035] and [RFC5155] both provide "authenticated denial of | |||
existence"; this is a cryptographic proof that the queried for name | existence"; this is a cryptographic proof that the queried for name | |||
does not exist, accomplished by providing a (DNSSEC secured) record | does not exist, accomplished by providing a (DNSSEC secured) record | |||
containing the names which appear alphabetically before and after the | containing the names which appear alphabetically before and after the | |||
queried for name. In the example above, if the (DNSSEC validating) | queried for name. In the example above, if the (DNSSEC validating) | |||
recursive server were to query for lion.example.com it would receive | recursive server were to query for dog.example.com it would receive a | |||
a (signed) NSEC/NSEC3 record stating that there are no labels between | (signed) NSEC record stating that there are no labels between "apple" | |||
"elephant" and "zebra". This is a signed, cryptographic proof that | and "elephant" (or, for NSEC3, a similar pair of hashed names). This | |||
these names are the ones before and after the queried for label. As | is a signed, cryptographic proof that these names are the ones before | |||
lion.example.com falls within this range, the recursive server knows | and after the queried for label. As dog.example.com falls within | |||
that lion.example.com really does not exist. This document specifies | this range, the recursive server knows that dog.example.com really | |||
that this NSEC/NSEC3 record should be used to generate negative | does not exist. | |||
answers for any queries that the recursive server receives that fall | ||||
within the range covered by the record (for the TTL for the record). | This document specifies that this NSEC/NSEC3 record should be used to | |||
generate negative answers for any queries that the validating server | ||||
receives that fall within the range covered by the record (for the | ||||
TTL for the record). This document also specifies that a positive | ||||
answer should be generated for any queries that the validating server | ||||
receives that are proven to be covered by a wildcard record. | ||||
Section 4.5 of [RFC4035] says: | Section 4.5 of [RFC4035] says: | |||
"In theory, a resolver could use wildcards or NSEC RRs to generate | "In theory, a resolver could use wildcards or NSEC RRs to generate | |||
positive and negative responses (respectively) until the TTL or | positive and negative responses (respectively) until the TTL or | |||
signatures on the records in question expire. However, it seems | signatures on the records in question expire. However, it seems | |||
prudent for resolvers to avoid blocking new authoritative data or | prudent for resolvers to avoid blocking new authoritative data or | |||
synthesizing new data on their own. Resolvers that follow this | synthesizing new data on their own. Resolvers that follow this | |||
recommendation will have a more consistent view of the namespace." | recommendation will have a more consistent view of the namespace." | |||
and "The reason for these recommendations is that, between the | and "The reason for these recommendations is that, between the | |||
initial query and the expiration of the data from the cache, the | initial query and the expiration of the data from the cache, the | |||
authoritative data might have been changed (for example, via dynamic | authoritative data might have been changed (for example, via dynamic | |||
update).". In other words, if a resolver generates negative answers | update).". In other words, if a resolver generates negative answers | |||
from an NSEC record, it will not send any queries for names within | from an NSEC record, it will not send any queries for names within | |||
that NSEC range (for the TTL). If a new name is added to the zone | that NSEC range (for the TTL). If a new name is added to the zone | |||
during this interval the resolver will not know this. | during this interval the resolver will not know this. Similarly, if | |||
the resolver is generating responses from a wildcard record, it will | ||||
continue to do so (for the | ||||
We believe this recommendation can be relaxed because, in the absense | We believe this recommendation can be relaxed because, in the absense | |||
of this technique, a lookup for the exact name could have come in | of this technique, a lookup for the exact name could have come in | |||
during this interval, and so this could already be cached (see | during this interval, and so a negative answer could already be | |||
[RFC2308] for more background). This means that zone operators | cached (see [RFC2308] for more background). This means that zone | |||
should have no expectation that an added name would work immediately. | operators should have no expectation that an added name would work | |||
With DNSSEC and Aggressive NSEC, the TTL of the NSEC record is the | immediately. With DNSSEC and Aggressive NSEC, the TTL of the NSEC | |||
authoritative statement of how quickly a name can start working | record is the authoritative statement of how quickly a name can start | |||
within a zone. | working within a zone. | |||
5. Aggressive Negative Caching | 5. Aggressive Caching | |||
Section 4.5 of [RFC4035] shows that "In theory, a resolver could use | Section 4.5 of [RFC4035] says that "In theory, a resolver could use | |||
wildcards or NSEC RRs to generate positive and negative responses | wildcards or NSEC RRs to generate positive and negative responses | |||
(respectively) until the TTL or signatures on the records in question | (respectively) until the TTL or signatures on the records in question | |||
expire. However, it seems prudent for resolvers to avoid blocking | expire. However, it seems prudent for resolvers to avoid blocking | |||
new authoritative data or synthesizing new data on their own. | new authoritative data or synthesizing new data on their own. | |||
Resolvers that follow this recommendation will have a more consistent | Resolvers that follow this recommendation will have a more consistent | |||
view of the namespace". | view of the namespace". | |||
This document relaxes this this restriction, as follows: | This document relaxes this this restriction, as follows: | |||
+--------------------------------------------------------------+ | +--------------------------------------------------------------+ | |||
| Once the records are validated, DNSSEC enabled validating | | | Once the records are validated, DNSSEC enabled validating | | |||
| resolvers SHOULD use NSEC/NSEC3 resource records to generate | | | resolvers MAY use wildcards and NSEC/NSEC3 resource records | | |||
| negative responses until their effective TTLs or signatures | | | to generate positive and negative responses until the | | |||
| for those records expire. | | | effective TTLs or signatures 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 | ||||
information requested does not exist, the validating resolver may | ||||
respond with a NODATA (empty) answer. | ||||
5.1. NSEC | 5.1. NSEC | |||
Implementations which support aggressive use of NSEC SHOULD enable | Implementations which support aggressive use of NSEC SHOULD enable | |||
this by default. Implementations MAY provide a configuration switch | this by default. Implementations MAY provide a configuration switch | |||
to disable aggressive use of NSEC and allow it to be enabled or | to disable aggressive use of NSEC and allow it to be enabled or | |||
disabled per 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 denial of existence can be determined according to the rules set | |||
source of synthesis and the covering NSEC RR of the query name, the | out in Section 5.4 of [RFC4035], using NSEC records in the cache, | |||
validating resolver may respond with NXDOMAIN error immediately. | then the resolver can immediately return an NXDOMAIN or NODATA (as | |||
appropriate) response. | ||||
5.2. NSEC3 | 5.2. NSEC3 | |||
NSEC3 aggressive negative caching is more difficult. If the zone is | NSEC3 aggressive negative caching is more difficult than NSEC | |||
signed with NSEC3, the validating resolver needs to check the | aggressive caching. If the zone is signed with NSEC3, the validating | |||
existence of non-terminals and wildcards which derive from query | resolver needs to check the existence of non-terminals and wildcards | |||
names. | which derive from query names. | |||
If the validating resolver's cache contains an NSEC3 RR matching the | A validating resolver implementation MAY support aggressive use of | |||
closest encloser, an NSEC3 RR covering the next closer name, and an | NSEC3. If it does support aggressive use of NSEC3, it SHOULD enable | |||
NSEC3 RR covering the source of synthesis, it is possible for the | this by default. It MAY provide a configuration switch to disable | |||
validating resolver to respond with NXDOMAIN immediately. | aggressive use of NSEC3 and allow it to be enabled or disabled for | |||
specific zones. | ||||
If denial of existence can be determined according to the rules set | ||||
out in [RFC5155] sections 8.4, 8.5, 8.6, 8.7,using NSEC3 records in | ||||
the cache, then the resolver can immediately return an NXDOMAIN or | ||||
NODATA response (as appropriate). | ||||
If a covering NSEC3 RR has Opt-Out flag, the covering NSEC3 RR does | If a covering NSEC3 RR has Opt-Out flag, the covering NSEC3 RR does | |||
not prove the non-existence of the domain name and the aggressive | not prove the non-existence of the domain name and the aggressive | |||
negative caching is not possible for the domain name. | negative caching is not possible for the domain name. | |||
A validating resolver implementation MAY support aggressive use of | 5.3. Wildcards | |||
NSEC3. If it does aggressive use of NSEC3, it MAY provide a | ||||
configuration switch to disable aggressive use of NSEC3 and allow it | ||||
to be enabled or disabled for specific zones. | ||||
5.3. Consideration on TTL | The last paragraph of [RFC4035] Section 4.5 also discusses the use of | |||
wildcards and NSEC RRs to generate positive responses and recommends | ||||
that it not be relied upon. Just like the case for the aggressive | ||||
use of NSEC/NSEC3 for negative answers, we revise this | ||||
recommendation. | ||||
As long as the validating resolver can determine that a name would | ||||
not exist without the wildcard match, it MAY synthesize an answer for | ||||
that name using the cached deduced wildcard. If the corresponding | ||||
wildcard record is not in the cache, it MUST fall back to send the | ||||
query to the authoritative DNS servers. | ||||
An implementation MAY support aggressive use of wildcards. It SHOULD | ||||
provide a configuration switch to disable aggressive use of | ||||
wildcards. | ||||
5.4. Consideration on TTL | ||||
The TTL value of negative information is especially important, | The TTL value of negative information is especially important, | |||
because newly added domain names cannot be used while the negative | because newly added domain names cannot be used while the negative | |||
information is effective. Section 5 of RFC 2308 states that the | information is effective. | |||
maximum number of negative cache TTL value is 3 hours (10800). It is | ||||
RECOMMENDED that validating resolvers limit the maximum effective TTL | Section 5 of [RFC2308] states that the maximum number of negative | |||
value of negative responses (NSEC/NSEC3 RRs) to this same value. | cache TTL value is 3 hours (10800). It is RECOMMENDED that | |||
validating resolvers limit the maximum effective TTL value of | ||||
negative responses (NSEC/NSEC3 RRs) to this same value. | ||||
Section 5 of [RFC2308]also states that a negative cache entry TTL is | ||||
taken from the minimum of the SOA.MINIMUM field and SOA's TTL. This | ||||
can be less than the TTL of an NSEC or NSEC3 record, since their TTL | ||||
is equal to the SOA.MINIMUM field (see [RFC4035]section 2.3 and | ||||
[RFC5155] section 3.) | ||||
A resolver that supports aggressive use of NSEC and NSEC3 should | ||||
reduce the TTL of NSEC and NSEC3 records to match the TTL of the SOA | ||||
record in the authority section of a negative response, if the SOA | ||||
TTL is smaller. | ||||
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): | |||
Reduced latency By answering directly from cache, validating | Reduced latency: By answering directly from cache, validating | |||
resolvers can immediately inform clients that the name they are | resolvers can immediately inform clients that the name they are | |||
looking for does 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, validating servers avoid having send a query and wait | the cache, validating servers avoid having to send a query and | |||
for a response. In addition to decreasing the bandwidth used, it | wait for a response. In addition to decreasing the bandwidth | |||
also means that the server does not need to allocate and maintain | used, it also means that the server does not need to allocate and | |||
state, thereby decreasing memory and CPU load. | maintain 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 fewer queries. This decreases | |||
the authoritative server bandwidth, queries per second and CPU | the authoritative server bandwidth, queries per second and CPU | |||
utilization. | utilization. | |||
The scale of the benefit depends upon multiple factors, including the | The scale of the benefit depends upon multiple factors, including the | |||
query distribution. For example, currently around 65% of queries to | query distribution. For example, at the time of this writing, around | |||
Root Name servers result in NXDOMAIN responses; this technique will | 65% of queries to Root Name servers result in NXDOMAIN responses (see | |||
eliminate a sizable quantity of these. | statis [root-servers.org]); this technique will eliminate a sizable | |||
quantity of these. | ||||
The technique described in this document may also mitigate so-called | The technique described in this document may also mitigate so-called | |||
"random QNAME attacks", in which attackers send many queries for | "random QNAME attacks", in which attackers send many queries for | |||
random sub-domains to resolvers. As the resolver will not have the | random sub-domains to resolvers. As the resolver will not have the | |||
answers cached it has to ask external servers for each random query, | answers cached, it has to ask external servers for each random query, | |||
leading to a DoS on the authoritative servers (and often resolvers). | leading to a DoS on the authoritative servers (and often resolvers). | |||
Aggressive NSEC may help mitigate these attacks by allowing the | Aggressive NSEC may help mitigate these attacks by allowing the | |||
resolver to answer directly from cache for any random queries which | resolver to answer directly from cache for any random queries which | |||
fall within already requested ranges. It will not always work as an | fall within already requested ranges. It will not always work as an | |||
effective defense, not least because not many zones are DNSSEC signed | effective defense, not least because not many zones are DNSSEC signed | |||
at all, but it will still provide an additional layer of defense. | at all -- but it will still provide an additional layer of defense. | |||
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 validating | | | Once the records are validated, DNSSEC enabled validating | | |||
| resolvers MAY use wildcards and NSEC/NSEC3 resource records | | | resolvers MAY use wildcards and NSEC/NSEC3 resource records | | |||
| to generate negative responses until their effective TTLs | | | to generate positive and negative responses until the | | |||
| or signatures for those records expire. | | | effective TTLs 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 | |||
Use of NSEC / NSEC3 resource records without DNSSEC validation may | ||||
create serious security issues, and so this technique requires DNSSEC | ||||
validation. | ||||
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 | Although the TTL of NSEC/NSEC3 records is typically fairly short | |||
validation may create serious security issues, and so this technique | (minutes or hours), their RRSIG expiration time can be much further | |||
requires DNSSEC validation. | in the future (weeks). An attacker who is able to successfully spoof | |||
responses might poison a cache with old NSEC/NSEC3 records. If the | ||||
resolver is NOT making aggressive use of NSEC/NSEC3, the attacker has | ||||
to repeat the attack for every query. If the resolver IS making | ||||
aggressive use of NSEC/NSEC3, one successful attack would be able to | ||||
suppress many queries for new names, up to the negative TTL. | ||||
10. Implementation Status | 10. Implementation Status | |||
Unbound currenty implements aggressive negative caching, as does | Unbound currenty implements aggressive negative caching, as does | |||
Google Public DNS. | Google Public DNS. | |||
11. Acknowledgments | 11. Acknowledgments | |||
The authors gratefully acknowledge DLV [RFC5074] author Samuel Weiler | The authors gratefully acknowledge DLV [RFC5074] author Samuel Weiler | |||
and the Unbound developers. | and the Unbound developers. | |||
The authors would like to specifically thank Tatuya JINMEI for | The authors would like to specifically thank Stephane Bortzmeyer, | |||
extensive review and comments, and also Mark Andrews, Stephane | Tony Finch, Tatuya JINMEI for extensive review and comments, and also | |||
Bortzmeyer, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | Mark Andrews, Casey Deccio, Alexander Dupuy, Olafur Gudmundsson, Bob | |||
Harold, Shumon Huque, John Levine, Pieter Lexis and Matthijs Mekking | Harold, Shumon Huque, John Levine, Pieter Lexis and Matthijs Mekking | |||
(who even sent pull requests!). | (who even sent pull requests!). | |||
12. Change History | 11.1. Change History | |||
RFC Editor: Please remove this section prior to publication. | RFC Editor: Please remove this section prior to publication. | |||
-03 to -04: | ||||
o Working group does want the "positive" answers, not just negative | ||||
ones. This requires readding what used to be Section 7, and a | ||||
bunch of cleanup, including: | ||||
* Additional text in the Problem Statement | ||||
* Added a wildcard record to the zone. | ||||
* Added "or positive answers from wildcards" type text (where | ||||
appropriate) to explain that this isn't just for negative | ||||
answers. | ||||
* Reworded much of the Wildcard text. | ||||
o Incorporated pull request from Tony Finch (thanks!): | ||||
https://github.com/wkumari/draft-ietf-dnsop-nsec-aggressiveuse/ | ||||
pull/1 | ||||
o More fixups from Tony (including text): https://www.ietf.org/mail- | ||||
archive/web/dnsop/current/msg18271.html. This included much | ||||
clearer text on TTL, refernces to the NSEC / NSEC3 RFCs (instead | ||||
of my clumsy summary), good text on replays, etc. | ||||
o Converted the "zone file" to a figure to make it more readable. | ||||
o Text from Tim W: "If a validating resolver receives a query for | ||||
cat.example.com, it contacts its resolver (which may be itself) to | ||||
query..." - which satisfies Jinmei's concern (which I was too | ||||
dense to grock). | ||||
o Fixup of the "validation required" in security considerations. | ||||
-02 to -03: | -02 to -03: | |||
o Integrated a bunch of comments from Matthijs Mekking - details in: | o Integrated a bunch of comments from Matthijs Mekking - details in: | |||
https://github.com/wkumari/draft-ietf-dnsop-nsec-aggressiveuse/ | https://github.com/wkumari/draft-ietf-dnsop-nsec-aggressiveuse/ | |||
pull/1. I decided to keep "Aggressive Negative Caching" instead | pull/1. I decided to keep "Aggressive Negative Caching" instead | |||
of "Aggressive USE OF Negative Caching" for readability. | of "Aggressive USE OF Negative Caching" for readability. | |||
o Attempted to address Bob Harold's comment on the readability | o Attempted to address Bob Harold's comment on the readability | |||
issues with "But, it will be more effective when both are | issues with "But, it will be more effective when both are | |||
enabled..." in Section 5.4 - https://www.ietf.org/mail- | enabled..." in Section 5.4 - https://www.ietf.org/mail- | |||
skipping to change at page 10, line 21 ¶ | skipping to change at page 12, line 32 ¶ | |||
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. | |||
12.1. Version draft-fujiwara-dnsop-nsec-aggressiveuse-01 | 11.1.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. | |||
12.2. Version draft-fujiwara-dnsop-nsec-aggressiveuse-02 | 11.1.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 | |||
12.3. Version draft-fujiwara-dnsop-nsec-aggressiveuse-03 | 11.1.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 | |||
13. References | 11.2. new section | |||
13.1. Normative References | 12. References | |||
12.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 11, line 36 ¶ | skipping to change at page 13, line 50 ¶ | |||
[RFC5074] Weiler, S., "DNSSEC Lookaside Validation (DLV)", RFC 5074, | [RFC5074] Weiler, S., "DNSSEC Lookaside Validation (DLV)", RFC 5074, | |||
DOI 10.17487/RFC5074, November 2007, | DOI 10.17487/RFC5074, November 2007, | |||
<http://www.rfc-editor.org/info/rfc5074>. | <http://www.rfc-editor.org/info/rfc5074>. | |||
[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>. | |||
[RFC7129] Gieben, R. and W. Mekking, "Authenticated Denial of | ||||
Existence in the DNS", RFC 7129, DOI 10.17487/RFC7129, | ||||
February 2014, <http://www.rfc-editor.org/info/rfc7129>. | ||||
[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>. | |||
13.2. Informative References | 12.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. | |||
[root-servers.org] | ||||
IANA, "Root Server Technical Operations Assn", | ||||
<http://www.root-servers.org/>. | ||||
Appendix A. Detailed implementation notes | 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 | |||
End of changes. 48 change blocks. | ||||
115 lines changed or deleted | 219 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/ |