rfc9567.original | rfc9567.txt | |||
---|---|---|---|---|
dnsop R. Arends | Internet Engineering Task Force (IETF) R. Arends | |||
Internet-Draft M. Larson | Request for Comments: 9567 M. Larson | |||
Intended status: Standards Track ICANN | Category: Standards Track ICANN | |||
Expires: 5 September 2024 4 March 2024 | ISSN: 2070-1721 April 2024 | |||
DNS Error Reporting | DNS Error Reporting | |||
draft-ietf-dnsop-dns-error-reporting-08 | ||||
Abstract | Abstract | |||
DNS error reporting is a lightweight reporting mechanism that | DNS error reporting is a lightweight reporting mechanism that | |||
provides the operator of an authoritative server with reports on DNS | provides the operator of an authoritative server with reports on DNS | |||
resource records that fail to resolve or validate. A domain owner or | resource records that fail to resolve or validate. A domain owner or | |||
DNS hosting organization can use these reports to improve domain | DNS hosting organization can use these reports to improve domain | |||
hosting. The reports are based on extended DNS errors as described | hosting. The reports are based on extended DNS errors as described | |||
in [RFC8914]. | in RFC 8914. | |||
When a domain name fails to resolve or validate due to a | When a domain name fails to resolve or validate due to a | |||
misconfiguration or an attack, the operator of the authoritative | misconfiguration or an attack, the operator of the authoritative | |||
server may be unaware of this. To mitigate this lack of feedback, | server may be unaware of this. To mitigate this lack of feedback, | |||
this document describes a method for a validating resolver to | this document describes a method for a validating resolver to | |||
automatically signal an error to a monitoring agent specified by the | automatically signal an error to a monitoring agent specified by the | |||
authoritative server. The error is encoded in the QNAME, thus the | authoritative server. The error is encoded in the QNAME; thus, the | |||
very act of sending the query is to report the error. | very act of sending the query is to report the error. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 5 September 2024. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9567. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Requirements Notation . . . . . . . . . . . . . . . . . . . . 3 | 2. Requirements Notation | |||
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Terminology | |||
4. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Overview | |||
4.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4.1. Example | |||
5. EDNS0 Option Specification . . . . . . . . . . . . . . . . . 5 | 5. EDNS0 Option Specification | |||
6. DNS error reporting specification . . . . . . . . . . . . . . 6 | 6. DNS Error Reporting Specification | |||
6.1. Reporting Resolver Specification . . . . . . . . . . . . 6 | 6.1. Reporting Resolver Specification | |||
6.1.1. Constructing the Report Query . . . . . . . . . . . . 6 | 6.1.1. Constructing the Report Query | |||
6.2. Authoritative server specification . . . . . . . . . . . 7 | 6.2. Authoritative Server Specification | |||
6.3. Monitoring agent specification . . . . . . . . . . . . . 7 | 6.3. Monitoring Agent Specification | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 7. IANA Considerations | |||
8. Operational Considerations . . . . . . . . . . . . . . . . . 8 | 8. Operational Considerations | |||
8.1. Choosing an agent domain . . . . . . . . . . . . . . . . 8 | 8.1. Choosing an Agent Domain | |||
8.2. Managing Caching Optimizations . . . . . . . . . . . . . 8 | 8.2. Managing Caching Optimizations | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | 9. Security Considerations | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 | 10. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 10.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 10 | 10.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 11 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
When an authoritative server serves a stale DNSSEC-signed zone, the | When an authoritative server serves a stale DNSSEC-signed zone, the | |||
cryptographic signatures over the resource record sets (RRsets) may | cryptographic signatures over the resource record sets (RRsets) may | |||
have lapsed. A validating resolver will fail to validate these | have lapsed. A validating resolver will fail to validate these | |||
resource records. | resource records. | |||
Similarly, when there is a mismatch between the Delegation Signer | Similarly, when there is a mismatch between the Delegation Signer | |||
(DS) records at a parent zone and the key signing key at the child | (DS) records at a parent zone and the key signing key at the child | |||
zone, a validating resolver will fail to authenticate records in the | zone, a validating resolver will fail to authenticate records in the | |||
child zone. | child zone. | |||
These are two of several failure scenarios that may go unnoticed for | These are two of several failure scenarios that may go unnoticed for | |||
some time by the operator of a zone. | some time by the operator of a zone. | |||
Today, there is no direct relationship between operators of | Today, there is no direct relationship between operators of | |||
validating resolvers and authoritative servers. Outages are often | validating resolvers and authoritative servers. Outages are often | |||
noticed indirectly by end users, and reported via E-Mail or social | noticed indirectly by end users and reported via email or social | |||
media (if reported at all). | media (if reported at all). | |||
When records fail to validate, there is no facility to report this | When records fail to validate, there is no facility to report this | |||
failure in an automated way. If there is any indication that an | failure in an automated way. If there is any indication that an | |||
error or warning has happened, it may be buried in log files of the | error or warning has happened, it may be buried in log files of the | |||
resolver or not logged at all. | resolver or not logged at all. | |||
This document describes a method that can be used by validating | This document describes a method that can be used by validating | |||
resolvers to report DNSSEC validation errors in an automated way. | resolvers to report DNSSEC validation errors in an automated way. | |||
It allows an authoritative server to announce a monitoring agent | It allows an authoritative server to announce a monitoring agent to | |||
where validating resolvers can report issues if those resolvers are | which validating resolvers can report issues if those resolvers are | |||
configured to do so. | configured to do so. | |||
The burden to report a failure falls on the validating resolver. It | The burden to report a failure falls on the validating resolver. It | |||
is important that the effort needed to report failure is low, with | is important that the effort needed to report failure is low, with | |||
minimal impact to its main functions. To accomplish this goal, the | minimal impact to its main functions. To accomplish this goal, the | |||
DNS itself is utilized to report the error. | DNS itself is utilized to report the error. | |||
2. Requirements Notation | 2. Requirements Notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Terminology | 3. Terminology | |||
DNS Terminology used in this document is from BCP 219 [RFC8499], with | This document uses DNS terminology defined in BCP 219 [RFC9499]. | |||
these additions: | This document also defines and uses the following terms: | |||
Reporting resolver: In the context of this document, "reporting | Reporting resolver: A validating resolver that supports DNS error | |||
resolver" is used as a shorthand for a validating resolver that | reporting. | |||
supports DNS error reporting. | ||||
Report query: The DNS query used to report an error is called a | Report query: The DNS query used to report an error. A report query | |||
report query. A report query is for a DNS TXT resource record | is for a DNS TXT resource record type. The content of the error | |||
type. The content of the error report is encoded in the QNAME of | report is encoded in the QNAME of a DNS request to the monitoring | |||
a DNS request to the monitoring agent. | agent. | |||
Monitoring agent: An authoritative server that receives and responds | Monitoring agent: An authoritative server that receives and responds | |||
to report queries. This facility is indicated by a domain name, | to report queries. This facility is indicated by a domain name, | |||
referred to as the agent domain. | referred to as the "agent domain". | |||
Agent domain: A domain name which is returned in the DNS Error | Agent domain: A domain name that is returned in the EDNS0 Report- | |||
Reporting EDNS0 option that indicates where DNS resolvers can send | Channel option and indicates where DNS resolvers can send error | |||
error reports. | reports. | |||
4. Overview | 4. Overview | |||
An authoritative server indicates support for DNS error reporting by | An authoritative server indicates support for DNS error reporting by | |||
including an EDNS0 Report-Channel option with OPTION-CODE [TBD] and | including an EDNS0 Report-Channel option with OPTION-CODE 18 and the | |||
the agent domain in the response. The agent domain is a fully | agent domain in the response. The agent domain is a fully qualified, | |||
qualified, uncompressed domain name in DNS wire format. The | uncompressed domain name in DNS wire format. The authoritative | |||
authoritative server MUST NOT include this option in the response if | server MUST NOT include this option in the response if the configured | |||
the configured agent domain is empty, or is the null label (which | agent domain is empty or is the null label (which would indicate the | |||
would indicate the DNS root). | DNS root). | |||
The authoritative server includes the EDNS0 Report-Channel option | The authoritative server includes the EDNS0 Report-Channel option | |||
unsolicited. That is, the option is included in a response despite | unsolicited. That is, the option is included in a response despite | |||
the EDNS0 Report-Channel option being absent in the request. | the EDNS0 Report-Channel option being absent in the request. | |||
If the authoritative server has indicated support for DNS error | If the authoritative server has indicated support for DNS error | |||
reporting and there is an issue that can be reported via extended DNS | reporting and there is an issue that can be reported via extended DNS | |||
errors, the reporting resolver encodes the error report in the QNAME | errors, the reporting resolver encodes the error report in the QNAME | |||
of the report query. The reporting resolver builds this QNAME by | of the report query. The reporting resolver builds this QNAME by | |||
concatenating the _er label, the QTYPE, the QNAME that resulted in | concatenating the "_er" label, the QTYPE, the QNAME that resulted in | |||
failure, the extended error code (as described in [RFC8914]), the | failure, the extended DNS error code (as described in [RFC8914]), the | |||
label "_er" again, and the agent domain. See the example in | label "_er" again, and the agent domain. See the example in | |||
Section 4.1. Note that a regular RCODE is not included because the | Section 4.1 and the specification in Section 6.1.1. Note that a | |||
RCODE is not relevant to the extended error code. | regular RCODE is not included because the RCODE is not relevant to | |||
the extended DNS error code. | ||||
The resulting report query is sent as a standard DNS query for a TXT | The resulting report query is sent as a standard DNS query for a TXT | |||
DNS resource record type by the reporting resolver. | DNS resource record type by the reporting resolver. | |||
The report query will ultimately arrive at the monitoring agent. A | The report query will ultimately arrive at the monitoring agent. A | |||
response is returned by the monitoring agent, which in turn can be | response is returned by the monitoring agent, which in turn can be | |||
cached by the reporting resolver. This caching is essential. It | cached by the reporting resolver. This caching is essential. It | |||
dampens the number of report queries sent by a reporting resolver for | dampens the number of report queries sent by a reporting resolver for | |||
the same problem, that is, once per TTL. However, certain | the same problem (that is, with caching, one report query per TTL is | |||
optimizations such as [RFC8020] and [RFC8198] may reduce the number | sent). However, certain optimizations, such as those described in | |||
of error report queries as well. | [RFC8020] and [RFC8198], may reduce the number of error report | |||
queries as well. | ||||
This document gives no guidance on the content of the TXT resource | This document gives no guidance on the content of the RDATA in the | |||
record RDATA for this record. | TXT resource record. | |||
4.1. Example | 4.1. Example | |||
A query for "broken.test.", type A, is sent by a reporting resolver. | A query for "broken.test.", type A, is sent by a reporting resolver. | |||
The domain "test." is hosted on a set of authoritative servers. One | The domain "test." is hosted on a set of authoritative servers. One | |||
of these authoritative servers serves a stale version of the "test." | of these authoritative servers serves a stale version of the "test." | |||
zone. This authoritative server has an agent domain configured: | zone. This authoritative server has an agent domain configured as | |||
"a01.agent-domain.example.". | "a01.agent-domain.example.". | |||
The authoritative server with the stale "test." zone receives the | The authoritative server with the stale "test." zone receives the | |||
request for "broken.test". It returns a response that includes the | request for "broken.test.". It returns a response that includes the | |||
EDNS0 Report-Channel option with the domain name "a01.agent- | EDNS0 Report-Channel option with the domain name "a01.agent- | |||
domain.example.". | domain.example.". | |||
The reporting resolver is unable to validate the "broken.test" RRset | The reporting resolver is unable to validate the "broken.test." | |||
for type 1 (an A record), due to an RRSIG record with an expired | RRset for type A (an RR type with value 1), due to an RRSIG record | |||
signature. | with an expired signature. | |||
The reporting resolver constructs the QNAME | The reporting resolver constructs the QNAME | |||
"_er.1.broken.test.7._er.a01.agent-domain.example." and resolves it. | "_er.1.broken.test.7._er.a01.agent-domain.example." and resolves it. | |||
This QNAME indicates extended DNS error 7 occurred while trying to | This QNAME indicates extended DNS error 7 occurred while trying to | |||
validate "broken.test." type 1 record. | validate "broken.test." for a type A (an RR type with value 1) | |||
record. | ||||
When this query is received at the monitoring agent (the operators of | When this query is received at the monitoring agent (the operators of | |||
the authoritative server for a01.agent-domain.example), the agent can | the authoritative server for "a01.agent-domain.example."), the agent | |||
determine the "test." zone contained an expired signature record | can determine the "test." zone contained an expired signature record | |||
(extended error 7) for type A for the domain name "broken.test.". | (extended DNS error 7) for type A for the domain name "broken.test.". | |||
The monitoring agent can contact the operators of "test." to fix the | The monitoring agent can contact the operators of "test." to fix the | |||
issue. | issue. | |||
5. EDNS0 Option Specification | 5. EDNS0 Option Specification | |||
This method uses an EDNS0 [RFC6891] option to indicate the agent | This method uses an EDNS0 [RFC6891] option to indicate the agent | |||
domain in DNS responses. The option is structured as follows: | domain in DNS responses. The option is structured as follows: | |||
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 | 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| OPTION-CODE = TBD | OPTION-LENGTH | | | OPTION-CODE = 18 | OPTION-LENGTH | | |||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
/ AGENT DOMAIN / | / AGENT DOMAIN / | |||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
Field definition details: | Field definition details: | |||
OPTION-CODE: 2 octets; an EDNS0 code that is used in an EDNS0 option | OPTION-CODE: 2 octets; an EDNS0 code that is used in an EDNS0 option | |||
to indicate support for error reporting. The name for this EDNS0 | to indicate support for error reporting. The name for this EDNS0 | |||
option code is Report-Channel. | option code is Report-Channel. | |||
OPTION-LENGTH: 2-octets; contains the length of the AGENT DOMAIN | OPTION-LENGTH: 2 octets; contains the length of the AGENT DOMAIN | |||
field in octets. | field in octets. | |||
AGENT DOMAIN: A fully qualified domain name [RFC8499] in | AGENT DOMAIN: A fully qualified domain name [RFC9499] in | |||
uncompressed DNS wire format. | uncompressed DNS wire format. | |||
6. DNS error reporting specification | 6. DNS Error Reporting Specification | |||
The various errors that a reporting resolver may encounter are listed | The various errors that a reporting resolver may encounter are listed | |||
in [RFC8914]. Note that not all listed errors may be supported by | in [RFC8914]. Note that not all listed errors may be supported by | |||
the reporting resolver. This document does not specify what is or is | the reporting resolver. This document does not specify what is or is | |||
not an error. | not an error. | |||
The DNS class is not specified in the error report. | The DNS class is not specified in the error report. | |||
6.1. Reporting Resolver Specification | 6.1. Reporting Resolver Specification | |||
Care should be taken when more DNS resolving is needed to resolve the | Care should be taken when additional DNS resolution is needed to | |||
error reporting QNAME. This resolving itself could trigger another | resolve the QNAME that contains the error report. This resolution | |||
error reporting to be created. A maximum expense or depth limit MUST | itself could trigger another error report to be created. A maximum | |||
be used to prevent cascading errors. | expense or depth limit MUST be used to prevent cascading errors. | |||
The EDNS0 Report-Channel option MUST NOT be included in queries. | The EDNS0 Report-Channel option MUST NOT be included in queries. | |||
The reporting resolver MUST NOT use DNS error reporting if the | The reporting resolver MUST NOT use DNS error reporting if the | |||
authoritative server returned an empty agent domain field in the | authoritative server returned an empty AGENT DOMAIN field in the | |||
EDNS0 Report-Channel option. | EDNS0 Report-Channel option. | |||
For the benefit of the monitoring agent to get more confidence that | For the monitoring agent to gain more confidence that the report is | |||
the report is not spoofed, the reporting resolver SHOULD send error | not spoofed, the reporting resolver SHOULD send error reports over | |||
reports over TCP [RFC7766] or other connection oriented protocols or | TCP [RFC7766] or other connection-oriented protocols or SHOULD use | |||
SHOULD use DNS COOKIEs [RFC7873]. This makes it harder to falsify | DNS Cookies [RFC7873]. This makes it harder to falsify the source | |||
the source address. | address. | |||
A reporting resolver MUST validate responses received from the | A reporting resolver MUST validate responses received from the | |||
monitoring agent. There is no special treatment for responses to | monitoring agent. There is no special treatment for responses to | |||
error-reporting queries. The Security Considerations section | error-reporting queries. Section 9 ("Security Considerations") | |||
contains the rationale behind this. | contains the rationale behind this. | |||
6.1.1. Constructing the Report Query | 6.1.1. Constructing the Report Query | |||
The QNAME for the report query is constructed by concatenating the | The QNAME for the report query is constructed by concatenating the | |||
following elements: | following elements: | |||
* A label containing the string "_er". | * A label containing the string "_er". | |||
* The QTYPE that was used in the query that resulted in the extended | * The QTYPE that was used in the query that resulted in the extended | |||
DNS error, presented as a decimal value, in a single DNS label. | DNS error, presented as a decimal value, in a single DNS label. | |||
If additional QTYPEs were present in the query, such as described | If additional QTYPEs were present in the query, such as described | |||
in [I-D.ietf-dnssd-multi-qtypes], they are represented as unique, | in [MULTI-QTYPES], they are represented as unique, ordered decimal | |||
ordered decimal values separated by a hyphen. As an example, if | values separated by a hyphen. As an example, if both QTYPE A and | |||
both QTYPE A and AAAA were present in the query, they are | AAAA were present in the query, they are presented as the label | |||
presented as the label "1-28". | "1-28". | |||
* The list of non-null labels representing the query name which is | * The list of non-null labels representing the query name that is | |||
the subject of the DNS error report. | the subject of the DNS error report. | |||
* The extended DNS error, presented as a decimal value, in a single | * The extended DNS error code, presented as a decimal value, in a | |||
DNS label. | single DNS label. | |||
* A label containing the string "_er". | * A label containing the string "_er". | |||
* The agent domain. The agent domain as received in the EDNS0 | * The agent domain. The agent domain as received in the EDNS0 | |||
Report-Channel option set by the authoritative server. | Report-Channel option set by the authoritative server. | |||
If the report query QNAME exceeds 255 octets, it MUST NOT be sent. | If the QNAME of the report query exceeds 255 octets, it MUST NOT be | |||
sent. | ||||
The "_er" labels allow the monitoring agent to differentiate between | The "_er" labels allow the monitoring agent to differentiate between | |||
the agent domain and the faulty query name. When the specified agent | the agent domain and the faulty query name. When the specified agent | |||
domain is empty, or a null label (despite being not allowed in this | domain is empty, or is a null label (despite being not allowed in | |||
specification), the report query will have "_er" as a top-level | this specification), the report query will have "_er" as a top-level | |||
domain as a result and not the original query. The purpose of the | domain, and not the top-level domain from the query name that was the | |||
first "_er" label is to indicate that a complete report query has | subject of this error report. The purpose of the first "_er" label | |||
been received, instead of a shorter report query due to query | is to indicate that a complete report query has been received instead | |||
minimization. | of a shorter report query due to query minimization. | |||
6.2. Authoritative server specification | 6.2. Authoritative Server Specification | |||
The authoritative server MUST NOT include more than one EDNS0 Report- | The authoritative server MUST NOT include more than one EDNS0 Report- | |||
Channel option in a response. | Channel option in a response. | |||
The authoritative server includes the EDNS0 Report-Channel option | The authoritative server includes the EDNS0 Report-Channel option | |||
unsolicited in responses. There is no requirement that the EDNS0 | unsolicited in responses. There is no requirement that the EDNS0 | |||
Report-Channel option is present in queries. | Report-Channel option be present in queries. | |||
6.3. Monitoring agent specification | 6.3. Monitoring Agent Specification | |||
It is RECOMMENDED that the authoritative server for the agent domain | It is RECOMMENDED that the authoritative server for the agent domain | |||
replies with a positive response (i.e., not NODATA or NXDOMAIN) | reply with a positive response (i.e., not with NODATA or NXDOMAIN) | |||
containing a TXT record. | containing a TXT record. | |||
The monitoring agent SHOULD respond to queries received over UDP that | The monitoring agent SHOULD respond to queries received over UDP that | |||
have no DNS COOKIE set with a response that has the truncation bit | have no DNS Cookie set with a response that has the truncation bit | |||
(TC bit) set to challenge the resolver to re-query over TCP. | (TC bit) set to challenge the resolver to requery over TCP. | |||
7. IANA Considerations | 7. IANA Considerations | |||
IANA is requested to assign the following DNS EDNS0 option code | IANA has assigned the following in the "DNS EDNS0 Option Codes (OPT)" | |||
registry: | registry: | |||
Value Name Status Reference | +=======+================+==========+===========+ | |||
----- -------------- -------- --------------- | | Value | Name | Status | Reference | | |||
TBD Report-Channel Standard [this document] | +=======+================+==========+===========+ | |||
| 18 | Report-Channel | Standard | RFC 9567 | | ||||
+-------+----------------+----------+-----------+ | ||||
IANA is requested to assign the following Underscored and Globally | Table 1 | |||
Scoped DNS Node Name registry: | ||||
RR Type _NODE NAME Reference | IANA has assigned the following in the "Underscored and Globally | |||
----- ---------- --------- | Scoped DNS Node Names" registry: | |||
TXT _er [this document] | ||||
+=========+============+===========+ | ||||
| RR Type | _NODE NAME | Reference | | ||||
+=========+============+===========+ | ||||
| TXT | _er | RFC 9567 | | ||||
+---------+------------+-----------+ | ||||
Table 2 | ||||
8. Operational Considerations | 8. Operational Considerations | |||
8.1. Choosing an agent domain | 8.1. Choosing an Agent Domain | |||
It is RECOMMENDED that the agent domain be kept relatively short to | It is RECOMMENDED that the agent domain be kept relatively short to | |||
allow for a longer QNAME in the report query. The agent domain MUST | allow for a longer QNAME in the report query. The agent domain MUST | |||
NOT be a subdomain of the domain it is reporting on. That is, if the | NOT be a subdomain of the domain it is reporting on. That is, if the | |||
authoritative server hosts the foo.example domain, then its agent | authoritative server hosts the foo.example domain, then its agent | |||
domain MUST NOT end in foo.example. | domain MUST NOT end in foo.example. | |||
8.2. Managing Caching Optimizations | 8.2. Managing Caching Optimizations | |||
The reporting resolver may utilize various caching optimizations that | The reporting resolver may utilize various caching optimizations that | |||
skipping to change at page 9, line 21 ¶ | skipping to change at line 399 ¶ | |||
A solution is to avoid DNSSEC for the agent domain. Signing the | A solution is to avoid DNSSEC for the agent domain. Signing the | |||
agent domain will incur an additional burden on the reporting | agent domain will incur an additional burden on the reporting | |||
resolver, as it has to validate the response. However, this response | resolver, as it has to validate the response. However, this response | |||
has no utility to the reporting resolver other than dampening the | has no utility to the reporting resolver other than dampening the | |||
query load for error reports. | query load for error reports. | |||
9. Security Considerations | 9. Security Considerations | |||
Use of DNS error reporting may expose local configuration mistakes in | Use of DNS error reporting may expose local configuration mistakes in | |||
the reporting resolver, such as stale DNSSEC trust anchors to the | the reporting resolver, such as stale DNSSEC trust anchors, to the | |||
monitoring agent. | monitoring agent. | |||
DNS error reporting SHOULD be done using DNS query name minimization | DNS error reporting SHOULD be done using DNS query name minimization | |||
[RFC9156] to improve privacy. | [RFC9156] to improve privacy. | |||
DNS error reporting is done without any authentication between the | DNS error reporting is done without any authentication between the | |||
reporting resolver and the authoritative server of the agent domain. | reporting resolver and the authoritative server of the agent domain. | |||
Resolvers that send error reports SHOULD send these over TCP | Resolvers that send error reports SHOULD send them over TCP [RFC7766] | |||
[RFC7766] or SHOULD use DNS COOKIEs [RFC7873]. This makes it hard to | or SHOULD use DNS Cookies [RFC7873]. This makes it hard to falsify | |||
falsify the source address. The monitoring agent SHOULD respond to | the source address. The monitoring agent SHOULD respond to queries | |||
queries received over UDP that have no DNS COOKIE set with a response | received over UDP that have no DNS Cookie set with a response that | |||
that has the truncation bit (TC bit) set to challenge the resolver to | has the truncation bit (TC bit) set to challenge the resolver to | |||
re-query over TCP. | requery over TCP. | |||
Well-known addresses of reporting resolvers can provide a higher | Well-known addresses of reporting resolvers can provide a higher | |||
level of confidence in the error reports, and potentially enable more | level of confidence in the error reports and potentially enable more | |||
automated processing of these reports. | automated processing of these reports. | |||
Monitoring agents that receive error reports over UDP should consider | Monitoring agents that receive error reports over UDP should consider | |||
that the source of the reports and the reports itself may be false. | that the source of the reports and the reports themselves may be | |||
false. | ||||
The method described in this document will cause additional queries | The method described in this document will cause additional queries | |||
by the reporting resolver to authoritative servers in order to | by the reporting resolver to authoritative servers in order to | |||
resolve the report query. | resolve the report query. | |||
This method can be abused by intentionally deploying broken zones | This method can be abused by intentionally deploying broken zones | |||
with agent domains that are delegated to victims. This is | with agent domains that are delegated to victims. This is | |||
particularly effective when DNS requests that trigger error messages | particularly effective when DNS requests that trigger error messages | |||
are sent through open resolvers [RFC8499] or widely distributed | are sent through open resolvers [RFC9499] or widely distributed | |||
network monitoring systems that perform distributed queries from | network monitoring systems that perform distributed queries from | |||
around the globe. | around the globe. | |||
An adversary may create massive error report flooding to camouflage | An adversary may create massive error report flooding to camouflage | |||
an attack. | an attack. | |||
Though this document gives no guidance on the content of the TXT | Though this document gives no guidance on the content of the RDATA in | |||
resource record RDATA for this record, if the RDATA content is | the TXT resource record, if the RDATA content is logged, the | |||
logged, it MUST assume the content can be malicious and take | monitoring agent MUST assume the content can be malicious and take | |||
appropriate meassures to avoid exploitation. One such method could | appropriate measures to avoid exploitation. One such method could be | |||
be to log in hexadecimal. This would avoid remote code execution | to log in hexadecimal. This would avoid remote code execution | |||
through logging string attacks such as [CVE-2021-44228]. | through logging string attacks, such as the vulnerability described | |||
in [CVE-2021-44228]. | ||||
The rationale behind mandating DNSSEC validation for responses from a | The rationale behind mandating DNSSEC validation for responses from a | |||
reporting agent, even if the agent domain is proposed to remain | reporting agent, even if the agent domain is proposed to remain | |||
unsigned, is to mitigate the risk of a downgrade attack orchestrated | unsigned, is to mitigate the risk of a downgrade attack orchestrated | |||
by adversaries. In such an attack, a victim's legitimately signed | by adversaries. In such an attack, a victim's legitimately signed | |||
domain could be deceptively advertised as an agent domain by | domain could be deceptively advertised as an agent domain by | |||
malicious actors. Consequently, if the validating resolver treats it | malicious actors. Consequently, if the validating resolver treats it | |||
as unsigned, it is exposed to potential cache poisoning attacks. By | as unsigned, it is exposed to potential cache poisoning attacks. By | |||
enforcing DNSSEC validation, this vulnerability is preemptively | enforcing DNSSEC validation, this vulnerability is preemptively | |||
addressed. | addressed. | |||
10. Acknowledgements | 10. References | |||
This document is based on an idea by Roy Arends and David Conrad. | ||||
The authors would like to thank Peter van Dijk, Stephane Bortzmeyer, | ||||
Shane Kerr, Vladimir Cunat, Paul Hoffman, Philip Homburg, Mark | ||||
Andrews, Libor Peltan, Matthijs Mekking, Willem Toorop, Tom Carpay, | ||||
Dick Franks, Ben Schwartz, Yaron Sheffer, Viktor Dukhovni, Wes | ||||
Hardaker, James Gannon, Tim Wicinski, Warren Kumari, Gorry Fairhurst, | ||||
Benno Overeinder, Paul Wouters and Petr Spacek for their | ||||
contributions. | ||||
11. References | ||||
11.1. Normative References | 10.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, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
11.2. Informative References | 10.2. Informative References | |||
[CVE-2021-44228] | [CVE-2021-44228] | |||
Common Vulnerabilities and Exposures, "CVE-2021-44228", 10 | CVE, "CVE-2021-44228", 26 November 2021, | |||
December 2021, <https://cve.mitre.org/cgi-bin/ | <https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE- | |||
cvename.cgi?name=CVE-2021-44228>. | 2021-44228>. | |||
[I-D.ietf-dnssd-multi-qtypes] | [MULTI-QTYPES] | |||
Bellis, R., "DNS Multiple QTYPEs", Work in Progress, | Bellis, R., "DNS Multiple QTYPEs", Work in Progress, | |||
Internet-Draft, draft-ietf-dnssd-multi-qtypes-00, 4 | Internet-Draft, draft-ietf-dnssd-multi-qtypes-00, 4 | |||
December 2023, <https://datatracker.ietf.org/doc/html/ | December 2023, <https://datatracker.ietf.org/doc/html/ | |||
draft-ietf-dnssd-multi-qtypes-00>. | draft-ietf-dnssd-multi-qtypes-00>. | |||
[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, | |||
<https://www.rfc-editor.org/info/rfc2308>. | <https://www.rfc-editor.org/info/rfc2308>. | |||
[RFC4592] Lewis, E., "The Role of Wildcards in the Domain Name | [RFC4592] Lewis, E., "The Role of Wildcards in the Domain Name | |||
skipping to change at page 12, line 5 ¶ | skipping to change at line 511 ¶ | |||
<https://www.rfc-editor.org/info/rfc7873>. | <https://www.rfc-editor.org/info/rfc7873>. | |||
[RFC8020] Bortzmeyer, S. and S. Huque, "NXDOMAIN: There Really Is | [RFC8020] Bortzmeyer, S. and S. Huque, "NXDOMAIN: There Really Is | |||
Nothing Underneath", RFC 8020, DOI 10.17487/RFC8020, | Nothing Underneath", RFC 8020, DOI 10.17487/RFC8020, | |||
November 2016, <https://www.rfc-editor.org/info/rfc8020>. | November 2016, <https://www.rfc-editor.org/info/rfc8020>. | |||
[RFC8198] Fujiwara, K., Kato, A., and W. Kumari, "Aggressive Use of | [RFC8198] Fujiwara, K., Kato, A., and W. Kumari, "Aggressive Use of | |||
DNSSEC-Validated Cache", RFC 8198, DOI 10.17487/RFC8198, | DNSSEC-Validated Cache", RFC 8198, DOI 10.17487/RFC8198, | |||
July 2017, <https://www.rfc-editor.org/info/rfc8198>. | July 2017, <https://www.rfc-editor.org/info/rfc8198>. | |||
[RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | ||||
Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | ||||
January 2019, <https://www.rfc-editor.org/info/rfc8499>. | ||||
[RFC8914] Kumari, W., Hunt, E., Arends, R., Hardaker, W., and D. | [RFC8914] Kumari, W., Hunt, E., Arends, R., Hardaker, W., and D. | |||
Lawrence, "Extended DNS Errors", RFC 8914, | Lawrence, "Extended DNS Errors", RFC 8914, | |||
DOI 10.17487/RFC8914, October 2020, | DOI 10.17487/RFC8914, October 2020, | |||
<https://www.rfc-editor.org/info/rfc8914>. | <https://www.rfc-editor.org/info/rfc8914>. | |||
[RFC9156] Bortzmeyer, S., Dolmans, R., and P. Hoffman, "DNS Query | [RFC9156] Bortzmeyer, S., Dolmans, R., and P. Hoffman, "DNS Query | |||
Name Minimisation to Improve Privacy", RFC 9156, | Name Minimisation to Improve Privacy", RFC 9156, | |||
DOI 10.17487/RFC9156, November 2021, | DOI 10.17487/RFC9156, November 2021, | |||
<https://www.rfc-editor.org/info/rfc9156>. | <https://www.rfc-editor.org/info/rfc9156>. | |||
[RFC9499] Hoffman, P. and K. Fujiwara, "DNS Terminology", BCP 219, | ||||
RFC 9499, DOI 10.17487/RFC9499, March 2024, | ||||
<https://www.rfc-editor.org/info/rfc9499>. | ||||
Acknowledgements | ||||
This document is based on an idea by Roy Arends and David Conrad. | ||||
The authors would like to thank Peter van Dijk, Stephane Bortzmeyer, | ||||
Shane Kerr, Vladimir Cunat, Paul Hoffman, Philip Homburg, Mark | ||||
Andrews, Libor Peltan, Matthijs Mekking, Willem Toorop, Tom Carpay, | ||||
Dick Franks, Ben Schwartz, Yaron Sheffer, Viktor Dukhovni, Wes | ||||
Hardaker, James Gannon, Tim Wicinski, Warren Kumari, Gorry Fairhurst, | ||||
Benno Overeinder, Paul Wouters, and Petr Spacek for their | ||||
contributions. | ||||
Authors' Addresses | Authors' Addresses | |||
Roy Arends | Roy Arends | |||
ICANN | ICANN | |||
Email: roy.arends@icann.org | Email: roy.arends@icann.org | |||
Matt Larson | Matt Larson | |||
ICANN | ICANN | |||
Email: matt.larson@icann.org | Email: matt.larson@icann.org | |||
End of changes. 63 change blocks. | ||||
172 lines changed or deleted | 182 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |