Internet DRAFT - draft-rescorla-dprive-adox-latest
draft-rescorla-dprive-adox-latest
dprive T. Pauly
Internet-Draft Apple Inc.
Intended status: Informational E. Rescorla
Expires: 27 August 2021 Mozilla
D. Schinazi
Google LLC
C.A. Wood
Cloudflare
23 February 2021
Signaling Authoritative DNS Encryption
draft-rescorla-dprive-adox-latest-00
Abstract
This document defines a mechanism for signaling that a given
authoritative DNS server is reachable by encrypted DNS.
Discussion Venues
This note is to be removed before publishing as an RFC.
Discussion of this document takes place on the DNS PRIVate Exchange
Working Group mailing list (dns-privacy@ietf.org), which is archived
at https://mailarchive.ietf.org/arch/browse/dns-privacy/.
Source for this draft and an issue tracker can be found at
https://github.com/ekr/draft-rescorla-dprive-adox.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
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
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 27 August 2021.
Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License.
Table of Contents
1. Introduction
2. Conventions and Definitions
3. Overview of Operation
4. Use of SVCB Records to Signal Encrypted Transport
4.1. Caching and lifetime
4.2. Authenticating the Server
5. Example
6. Security Considerations
7. IANA Considerations
8. References
8.1. Normative References
8.2. Informative References
Acknowledgments
Authors' Addresses
1. Introduction
The IETF has defined a number of mechanisms for carrying DNS queries
over encrypted transport [DOH] [DOT] [DOQ]. However, there is no
scalable way for a recursive resolver to know that a given
authoritative resolver supports encrypted transport, which inhibits
the deployment of encrypted DNS for queries from recursive resolvers.
This specification defines a mechanism for carrying that signal,
using the DNS SVCB [SVCB] record.
2. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
3. Overview of Operation
The mechanism defined in this document works by using the DNS SVCB
[SVCB] record to indicate that a given server supports TLS. The
recursive resolver can obtain these records in two distinct ways:
* In the additional data block of the response that referred the
recursive to the target authoritative server.
* By directly resolving a SVCB query for the target authoritative
resolver.
As a practical matter, the first of these options is preferred as it
allows the recursive to learn that the authoritative server supports
encrypted transport without an additional round trip, as shown below:
Recursive .com ns.example.example
Authoritative Server (Authoritative for example.com)
NS example.com? ------------>
<----- example.com NS ns.example.example
ns.example.example A 192.0.2.1
_dns.ns.example.example SVCB alpn=dot
<-------------- TLS connection to ns.example ------------>
A example.com? ------------------------------------------->
The recursive resolver starts by contacting the authoritative server
for .com and asks for the NS records for example.com. Note that .com
is not authoritative for the example.com apex, and will not sign the
NS RRset; see [RFC4035], Section 2.2, and Section 6 for details. The
authoritative returns the NS record pointing at ns.example.example
and also returns a glue records for ns.example.example indicating
that it supports DNS over TLS (DoT), in much the same way as it might
have sent an IP address for that server. This additional record is
the only difference from the current situation, and allows the
recursive resolver to know that it can reach ns.example.example over
encrypted transport.
Note: SVCB is not presently permitted at the root [REGISTRY]. In the
interim, recursive resolvers may be preconfigured with the TLS status
of the resolvers for TLDs. [[OPEN ISSUE: Do we want to invent some
other sentinel as a temporary measure?]]
4. Use of SVCB Records to Signal Encrypted Transport
Any given authoritative server name can have one or more DNS Server
SVCB records, as defined in [I-D.schwartz-svcb-dns].
For instance, the following records would indicate that
ns.example.example could be reached by either DoT or DoH (over both
TCP and QUIC).
_dns.ns.example.example. 7200 IN SVCB 1 ns.example.example. alpn=dot,h2,h3 dohpath=/dns-query{?dns}
Upon determining that a given nameserver supports a compatible
encrypted transport, an implementation MUST only use encrypted
transport for the rest of the cache lifetime for that information and
MUST hard fail with error if it is unable to establish a connection.
If multiple encrypted transports are available, an implementation
SHOULD try all of them before declaring failure.
[[OPEN ISSUE: figure out error details]]
4.1. Caching and lifetime
Note that in the common case where the name of the target
authoritative server is out-of-bailiwick [RFC7719] for the referring
resolver, then the SVCB record may not be retained for future
queries. This can create a situation in which a given authoritative
server will be queried over encrypted transport for one name and over
unencrypted transport for another. This is not the end of the world
(HTTPS has historically operated in this way, with the security
properties being attached to the reference), but is also not ideal.
In order to prevent this, resolvers which are also authoritative for
their own name SHOULD send SVCB glue records in the additional data
section so that they can be properly cached, and the TTL for these
SVCB records SHOULD match that of the corresponding NS records in the
same RRset.
[[OPEN ISSUE: How often is the case where ns.example.example is not
authoritative for itself? Should we encourage people to accept out-
of-bailiwick responses in that case?]]
4.2. Authenticating the Server
Recursive servers MUST authenticate the authoritative server using
the procedures associated with the relevant protocol, [RFC6125] and
[RFC2818] for DoT and DoH respectively. This is in principle
compatible with having the server authenticated either with the
WebPKI or with TLSA records [DANE], or both. In order for this to
work properly, however, the recursive resolver must know at the time
it connects whether it will be willing to accept the authoritative
server's credentials.
This can be addressed in several ways:
1. Require a particular form of authentication (e.g., the WebPKI or
TLSA records) as mandatory.
2. Have the SVCB record indicate what kind(s) of authentication the
authoritative server supports, allowing the recursive to filter
out incompatible advertisements. For instance, the SVCB record
could contain a key that stated that it only had a WebPKI
certificate, in which case the resolver could ignore that entry.
[[OPEN ISSUE: If we have the kind of advertisement indicated in (2)
above, is not necessary to have an MTI, but it might be desirable to
promote interoperability.]]
One challenge with TLSA records in this context is that they may not
be in the recursive resolver's cache at the time when it wants to
connect to the authoritative. This can create added latency if the
recursive resolver must then first retrieve TLSA records for the
authoritative. If we wish for servers to authenticate with DANE, we
will also probably want some mechanism to carry the TLSA records in
the TLS handshake, as, for instance defined in
[I-D.ietf-tls-dnssec-chain-extension].
[[OPEN ISSUE: Resolve this.]]
5. Example
A complete example is shown below.
Recursive x.root-servers.org ns.a.example ns.example.example
(Auth. for .) (Auth for .example) (Auth for .example.example)
<== TLS handshake ==>
NS .example? ------->
<- .example NS ns.op.example
ns.op.example A 198.51.100.1
_dns.ns.op.example SVCB alpn=dot
<============ TLS handshake ===========>
NS example.example? ------------------->
<----- example.example NS ns.example.example
ns.example.example A 203.0.113.1
_dns.ns.example.example SVCB alpn=dot
<====================== TLS Handshake ======================>
A www.example.example? ------------------------------------->
<---------------------------- www.example.example A 192.0.2.1
In this case, the recursive wants to resolve www.example.example.
Resolution proceeds in three phases.
Initially, the recursive connects to the root server. We assume that
the recursive knows that the root server is able to do DoT, either
because it has been preconfigured with his information or because it
has connected to that root server before. It performs an NS query
for ".example" (we are assuming QMIN) and receives:
* An NS record pointing to ns.op.example
* A glue A record for ns.op.example = 198.51.100.1
* A SVCB record stating that ns.op.example speaks DoT
Next, the recursive resolver forms a TLS connection to ns.op.example
and requests an NS record for example.example. It receives:
* An NS record pointing to ns.example.example
* A glue A record for ns.example.example = 203.0.113.1
* A SVCB record stating that ns.example.example speaks DoT
Finally, the recursive resolver forms a TLS connection to
ns.example.example and request an A record for www.example.example
and receives the A record of 192.0.2.1.
6. Security Considerations
The primary security property delivered by this mechanism is
confidentiality of the query and response. As long as (1) all
queries in the resolution chain, including to the authoritative
server are encrypted and (2) all resolvers in the resolution chain
are trustworthy, then even an on-path attacker cannot discover the
name being resolved or its response. However, if either of these
conditions is violated, then an attack is possible:
* If the connection to the authoritative server is not encrypted,
then the request and response can be read directly.
* If one of the earlier connections is not encrypted, then the
attacker can substitute their own NS records. records from the
additional_data, forcing the resolution back to unencrypted mode.
* If one of the resolvers is untrustworthy, then they can substitute
their own NS records.
DNSSEC signing only partly mitigates these issues because delegations
at top-level zones are not signed, as per [RFC4035], Section 2.2. In
practice, this means a recursive resolver attempting to resolve a
zone apex query, such as example.com in Section 3, cannot assume the
NS answer is authentic. While NS records received from the
authoritative server may be signed, in order to retrieve them, the
recursive resolver will have to contact the servers listed by the
unverified NS records received from the referring server, at which
point it has leaked the zone apex to the (potentially fake)
authoritative server (as well as to the referring server).
If the recursive resolver is attempting to resolve a specific
subdomain from the resolver (e.g., server-1234.example.com), then it
may be able to protect against this attack by (1) using query
minimization [QMIN] and (2) querying the (alleged) authoritative for
its DNSSEC-signed NS and SVCB records and only once it has received
those, attempting to retrieve the actual subdomain. If the domain is
DNSSEC signed, then this prevents a malicious referring resolver from
redirecting the recursive resolver to their own authoritative and
learning the true subdomain. However, if, as is common, the
recursive is just trying to resolve the apex name or one of the
common "service" names such as "www.example.com", then this procedure
does not provide additional protection.
Encryption does not mitigate all leakage. In some circumstances, an
on-path attacker may learn the identity of the authoritative server
if, for example, that server only serves a small number of domains.
The attacker can learn information about what is being resolved by
observing whether or not server is queried.
As a secondary property, the mechanism in this document can provide
some level of integrity for DNS responses, again under the condition
that each resolver in the chain is trustworthy. By contrast, DNSSEC
provides integrity even if the resolvers are untrustworthy.
7. IANA Considerations
This document has no IANA actions.
8. References
8.1. Normative References
[DANE] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication
of Named Entities (DANE) Transport Layer Security (TLS)
Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August
2012, <https://datatracker.ietf.org/doc/html/rfc6698>.
[DOH] Hoffman, P. and P. McManus, "DNS Queries over HTTPS
(DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018,
<https://datatracker.ietf.org/doc/html/rfc8484>.
[DOT] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D.,
and P. Hoffman, "Specification for DNS over Transport
Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May
2016, <https://datatracker.ietf.org/doc/html/rfc7858>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://datatracker.ietf.org/doc/html/rfc2119>.
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
DOI 10.17487/RFC2818, May 2000,
<https://datatracker.ietf.org/doc/html/rfc2818>.
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and
Verification of Domain-Based Application Service Identity
within Internet Public Key Infrastructure Using X.509
(PKIX) Certificates in the Context of Transport Layer
Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March
2011, <https://datatracker.ietf.org/doc/html/rfc6125>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://datatracker.ietf.org/doc/html/rfc8174>.
8.2. Informative References
[DOQ] Huitema, C., Mankin, A., and S. Dickinson, "Specification
of DNS over Dedicated QUIC Connections", Work in Progress,
Internet-Draft, draft-ietf-dprive-dnsoquic-02, 22 February
2021, <https://datatracker.ietf.org/doc/html/draft-ietf-
dprive-dnsoquic-02.txt>.
[I-D.ietf-tls-dnssec-chain-extension]
Shore, M., Barnes, R., Huque, S., and W. Toorop, "A DANE
Record and DNSSEC Authentication Chain Extension for TLS",
Work in Progress, Internet-Draft, draft-ietf-tls-dnssec-
chain-extension-07, 21 March 2018,
<https://datatracker.ietf.org/doc/html/draft-ietf-tls-
dnssec-chain-extension-07.txt>.
[I-D.schwartz-svcb-dns]
Schwartz, B., "Service Binding Mapping for DNS Servers",
Work in Progress, Internet-Draft, draft-schwartz-svcb-dns-
02, 17 February 2021,
<https://datatracker.ietf.org/doc/html/draft-schwartz-
svcb-dns-02.txt>.
[QMIN] Bortzmeyer, S., "DNS Query Name Minimisation to Improve
Privacy", RFC 7816, DOI 10.17487/RFC7816, March 2016,
<https://datatracker.ietf.org/doc/html/rfc7816>.
[REGISTRY] ICANN, "ICANN Registry Agreement", July 2017,
<https://newgtlds.icann.org/sites/default/files/
agreements/agreement-approved-31jul17-en.html#exhibitA.1>.
[RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Protocol Modifications for the DNS Security
Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
<https://datatracker.ietf.org/doc/html/rfc4035>.
[RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS
Terminology", RFC 7719, DOI 10.17487/RFC7719, December
2015, <https://datatracker.ietf.org/doc/html/rfc7719>.
[SVCB] Schwartz, B., Bishop, M., and E. Nygren, "Service binding
and parameter specification via the DNS (DNS SVCB and
HTTPS RRs)", Work in Progress, Internet-Draft, draft-ietf-
dnsop-svcb-https-03, 17 February 2021,
<https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-
svcb-https-03.txt>.
Acknowledgments
TODO acknowledge.
Authors' Addresses
Tommy Pauly
Apple Inc.
Email: tpauly@apple.com
Eric Rescorla
Mozilla
Email: ekr@rtfm.com
David Schinazi
Google LLC
Email: dschinazi.ietf@gmail.com
Christopher A. Wood
Cloudflare
Email: caw@heapingbits.net