One document matched: draft-ietf-dprive-dnsodtls-07.xml
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-dprive-dnsodtls-07" ipr="trust200902">
<front>
<title abbrev="DNS over DTLS (DNSoD)">DNS over DTLS (DNSoD)</title>
<author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy">
<organization abbrev="Cisco">Cisco Systems, Inc.</organization>
<address>
<postal>
<street>Cessna Business Park, Varthur Hobli</street>
<street>Sarjapur Marathalli Outer Ring Road</street>
<city>Bangalore</city>
<region>Karnataka</region>
<code>560103</code>
<country>India</country>
</postal>
<email>tireddy@cisco.com</email>
</address>
</author>
<author fullname="Dan Wing" initials="D." surname="Wing">
<organization abbrev="Cisco">Cisco Systems, Inc.</organization>
<address>
<postal>
<street>170 West Tasman Drive</street>
<city>San Jose</city>
<region>California</region>
<code>95134</code>
<country>USA</country>
</postal>
<email>dwing@cisco.com</email>
</address>
</author>
<author fullname="Prashanth Patil" initials="P." surname="Patil">
<organization abbrev="Cisco">Cisco Systems, Inc.</organization>
<address>
<postal>
<street/>
<street/>
<city>Bangalore</city>
<country>India</country>
</postal>
<email>praspati@cisco.com</email>
</address>
</author>
<date/>
<workgroup>DPRIVE</workgroup>
<abstract>
<t>DNS queries and responses are visible to network elements on the path
between the DNS client and its server. These queries and responses can
contain privacy-sensitive information which is valuable to protect. An
active attacker can send bogus responses causing misdirection of the
subsequent connection.</t>
<t>To counter passive listening and active attacks, this document
proposes the use of Datagram Transport Layer Security (DTLS) for DNS, to
protect against passive listeners and certain active attacks. As DNS
needs to remain fast, this proposal also discusses mechanisms to reduce
DTLS round trips and reduce DTLS handshake size. The proposed mechanism
runs over port 853.</t>
</abstract>
</front>
<middle>
<section anchor="introduction" title="Introduction">
<t>The Domain Name System is specified in <xref target="RFC1034"/> and
<xref target="RFC1035"/> . DNS queries and responses are normally
exchanged unencrypted and are thus vulnerable to eavesdropping. Such
eavesdropping can result in an undesired entity learning domains that a
host wishes to access, thus resulting in privacy leakage. DNS privacy
problem is further discussed in <xref target="RFC7626"/> .</t>
<t>Active attackers have long been successful at injecting bogus
responses, causing cache poisoning and causing misdirection of the
subsequent connection (if attacking A or AAAA records). A popular
mitigation against that attack is to use ephemeral and random source
ports for DNS queries <xref target="RFC5452"/> .</t>
<t>This document defines DNS over DTLS (DNSoD, pronounced "dee-enn-sod")
which provides confidential DNS communication between stub resolvers and
recursive resolvers, stub resolvers and forwarders, forwarders and
recursive resolvers.</t>
<t>The motivations for proposing DNSoD are that</t>
<t><list style="symbols">
<t>TCP suffers from network head-of-line blocking, where the loss of
a packet causes all other TCP segments to not be delivered to the
application until the lost packet is re-transmitted. DNSoD, because
it uses UDP, does not suffer from network head-of-line blocking.</t>
<t>DTLS session resumption consumes 1 round trip whereas TLS session
resumption can start only after TCP handshake is complete. Although
<xref target="RFC7413">TCP Fast Open</xref> can reduce that
handshake, TCP Fast Open is only available on a few OSs, it is not
yet ubiquitous.</t>
</list></t>
<section title="Relationship to TCP Queries and to DNSSEC">
<t>DNS queries can be sent over UDP or TCP. The scope of this
document, however, is only UDP. DNS over TCP could be protected with
TLS, as described in <xref target="RFC7858"/>.</t>
<t>DNS Security Extensions ( <xref target="RFC4033">DNSSEC</xref> )
provides object integrity of DNS resource records, allowing end-users
(or their resolver) to verify legitimacy of responses. However, DNSSEC
does not protect privacy of DNS requests or responses. DNSoD works in
conjunction with DNSSEC, but DNSoD does not replace the need or value
of DNSSEC.</t>
</section>
</section>
<section anchor="term" title="Terminology">
<t>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 <xref
target="RFC2119"/> .</t>
</section>
<section title="Establishing and Managing DNS-over-DTLS Sessions">
<section title="Session Initiation">
<t>DNSoD MUST run over standard UDP port 853 as defined in <xref
target="IANA"/>.</t>
<t>The host should determine if the DNS server supports DNSoD by
sending a DTLS ClientHello message. A DNS server that does not support
DNSoD will not respond to ClientHello messages sent by the client. If
no response is received from that server, and the client has no better
round-trip estimate, the client MUST retransmit the DTLS ClientHello
according to Section 4.2.4.1 of <xref target="RFC6347"/>. After 15
seconds, it MUST cease attempts to re-transmit its ClientHello. The
client MAY repeat that procedure in the event the DNS server upgrades
to support DNSoD, but such probing SHOULD NOT be done more frequently
than every 24 hours and MUST NOT be done more frequently than every 15
minutes. This mechanism requires no additional signaling between the
client and server. Behavior for an unsuccessful DTLS connection is
discussed in <xref target="usage"/>.</t>
</section>
<section title="DTLS Handshake and Authentication">
<t>Once the DNS client succeeds in receiving HelloVerifyRequest from
the server via UDP on the well-known port for DNS over DTLS, it
proceeds with DTLS handshake as described in <xref target="RFC6347"/>,
following the best practices specified in <xref
target="RFC7525"/>.</t>
<t>DNS privacy requires encrypting the query (and response) from
passive attacks. Such encryption typically provides integrity
protection as a side-effect, which means on-path attackers cannot
simply inject bogus DNS responses. However, to provide stronger
protection from active attackers pretending to be the server, the
server itself needs to be authenticated. To authenticate the server
providing DNS privacy, DNS client can use the authenication mechanisms
discussed in <xref target="I-D.ietf-dprive-dtls-and-tls-profiles"/>.
This document does not propose new ideas for authentication.</t>
<t>After DTLS negotiation completes, the connection will be encrypted
and is now protected from eavesdropping.</t>
</section>
<section title="Established Sessions">
<t>In DTLS, all data is protected using the same record encoding and
mechanisms. When the mechanism described in this document is in
effect, DNS messages are encrypted using the standard DTLS record
encoding. When a user of DTLS wishes to send an DNS message, it
delivers it to the DTLS implementation as an ordinary application data
write (e.g., SSL_write()). To reduce client and server workload,
clients SHOULD re-use the DTLS session. A single DTLS session can be
used to send multiple DNS requests and receive multiple DNS
responses.</t>
<t>DNSoD client and server can use DTLS heartbeat <xref
target="RFC6520"/> to verify that the peer still has DTLS state. DTLS
session is terminated by the receipt of an authenticated message that
closes the connection (e.g., a DTLS fatal alert).</t>
<figure title="Message Flow for Full Handshake Issuing New Session Ticket">
<artwork align="left"><![CDATA[
Client Server
------ ------
ClientHello -------->
<------- HelloVerifyRequest
(contains cookie)
ClientHello -------->
(contains cookie)
(empty SessionTicket extension)
ServerHello
(empty SessionTicket extension)
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
(ChangeCipherSpec)
Finished -------->
NewSessionTicket
(ChangeCipherSpec)
<-------- Finished
DNS Request --------->
<--------- DNS Response
]]></artwork>
</figure>
</section>
</section>
<section anchor="performance" title="Performance Considerations">
<t>To reduce number of octets of the DTLS handshake, especially the size
of the certificate in the ServerHello (which can be several kilobytes),
DNS client and server can use raw public keys <xref target="RFC7250"/>
or <xref target="I-D.ietf-tls-cached-info">Cached Information
Extension</xref> . Cached Information Extension avoids transmitting the
server's certificate and certificate chain if the client has cached that
information from a previous TLS handshake.</t>
<t>Since pipelined responses can arrive out of order, clients MUST match
responses to outstanding queries on the same DTLS connection using the
Message ID. If the response contains a question section, the client MUST
match the QNAME, QCLASS, and QTYPE fields. Failure by clients to
properly match responses to outstanding queries can have serious
consequences for interoperability ( <xref target="RFC7766"/> , Section
7).</t>
<t>It is highly advantageous to avoid server-side DTLS state and reduce
the number of new DTLS sessions on the server which can be done with
<xref target="RFC5077"/> . This also eliminates a round-trip for
subsequent DNSoD queries, because with <xref target="RFC5077"/> the DTLS
session does not need to be re-established.</t>
<t>Compared to normal DNS, DTLS adds at least 13 octets of header, plus
cipher and authentication overhead to every query and every response.
This reduces the size of the DNS payload that can be carried. DNS client
and server MUST support the EDNS0 option defined in <xref
target="RFC6891"/> so that the DNS client can indicate to the DNS server
the maximum DNS response size it can reassemble and deliver in the DNS
client’s network stack. The client sets its EDNS0 value as if DTLS
is not being used. The DNS server must ensure that the DNS response size
does not exceed the Path MTU. The DNS server must consider the amount of
record expansion expected by the DTLS processing when calculating the
size of DNS response that fits within the path MTU. Path MTU MUST be
greater than equal to [DNS response size + DTLS overhead of 13 octets +
padding size (<xref target="RFC7830"/>) + authentication overhead of the
negotiated DTLS cipher suite + block padding (Section 4.1.1.1 of <xref
target="RFC6347"/>]. If the DNS server's response were to exceed that
calculated value, the server sends a response that does fit within that
value and sets the TC (truncated) bit. The client, upon receiving a
response with the TC bit set and wanting to receive the entire response,
establishes a DNS-over-TLS <xref target="RFC7858"/> connection to the
same server, and sends a new DNS request for the same resource
record.</t>
<t>DNSoD puts an additional computational load on servers. The largest
gain for privacy is to protect the communication between the DNS client
(the end user's machine) and its caching resolver.</t>
</section>
<section title="Anycast">
<t>DNS servers are often configured with anycast addresses. While the
network is stable, packets transmitted from a particular source to an
anycast address will reach the same server that has the cryptographic
context from the DNS over DTLS handshake. But when the network
configuration changes, a DNS over DTLS packet can be received by a
server that does not have the necessary cryptographic context. To
encourage the client to initiate a new DTLS handshake, DNS servers
SHOULD generate a DTLS Alert message in response to receiving a DTLS
packet for which the server does not have any cryptographic context.
Upon receipt of an un-authenicated DTLS alert, the DTLS client validates
the Alert is within the replay window (Section 4.1.2.6 of <xref
target="RFC6347"/> ). It is difficult for the DTLS client to validate
that the DTLS alert was generated by the DTLS server in response to a
request or was generated by an on- or off-path attacker. Thus, upon
receipt of an in-window DTLS Alert, the client SHOULD continue
re-transmitting the DTLS packet (in the event the Alert was spoofed),
and at the same time it SHOULD initiate DTLS session resumption. When
the DTLS client receives authenticated DNS response from one of those
DTLS sessions, the other DTLS session should be terminated.</t>
</section>
<section anchor="usage" title="Usage">
<t>Using DNS privacy with an authenticated server is most preferred, DNS
privacy with an unauthenticated server is next preferred, and plain DNS
is least preferred. This section gives a non-normative discussion on
common behaviors and choices.</t>
<t>An implementation MAY attempt to obtain DNS privacy by contacting DNS
servers on the local network (provided by DHCP) and on the Internet, and
make those attempts in parallel to reduce user impact. If DNS privacy
cannot be successfully negotiated for whatever reason, the client can do
three things, in order from best to worst for privacy: <list
style="numbers">
<t>refuse to send DNS queries on this network, which means the
client cannot make effective use of this network, as modern networks
require DNS; or,</t>
<t>use opportunistic security, as described in <xref
target="RFC7435"/> or,</t>
<t>send plain DNS queries on this network, which means no DNS
privacy is provided.</t>
</list></t>
<t>Heuristics can improve this situation, but only to a degree (e.g.,
previous success of DNS privacy on this network may be reason to alert
the user about failure to establish DNS privacy on this network now).
Still, the client (in cooperation with the end user) has to decide to
use the network without the protection of DNS privacy.</t>
</section>
<section anchor="IANA" title="IANA Considerations">
<t>This specification uses port 853 already allocated in the IANA port
number registry as defined in Section 6 of <xref target="RFC7858"/>.</t>
</section>
<section anchor="security" title="Security Considerations">
<t>The interaction between a DNS client and DNS server requires Datagram
Transport Layer Security (DTLS) with a ciphersuite offering
confidentiality protection and guidance given in <xref
target="RFC7525"/> must be followed to avoid attacks on DTLS. DNS
clients keeping track of servers known to support DTLS enables clients
to detect downgrade attacks. To interfere with DNS over DTLS, an on- or
off-path attacker might send an ICMP message towards the DTLS client or
DTLS server. As these ICMP messages cannot be authenticated, all ICMP
errors should be treated as <xref target="RFC1122">soft errors</xref> .
For servers with no connection history and no apparent support for DTLS,
depending on their Privacy Profile and privacy requirements, clients may
choose to (a) try another server when available, (b) continue without
DTLS, or (c) refuse to forward the query. Once a DNSoD client has
established a security association with a particular DNS server, and
outstanding normal DNS queries with that server (if any) have been
received, the DNSoD client MUST ignore any subsequent normal DNS
responses from that server, as all subsequent responses should be
encrypted. This behavior mitigates all possible attacks described in
<xref target="RFC5452"> Measures for Making DNS More Resilient against
Forged Answers </xref> .</t>
<t>A malicious client might attempt to perform a high number of DTLS
handshakes with a server. As the clients are not uniquely identified by
the protocol and can be obfuscated with IPv4 address sharing and with
IPv6 temporary addresses, a server needs to mitigate the impact of such
an attack. Such mitigation might involve rate limiting handshakes from a
certain subnet or more advanced DoS/DDoS techniques beyond the scope of
this paper.</t>
</section>
<section anchor="ack" title="Acknowledgements">
<t>Thanks to Phil Hedrick for his review comments on TCP and to Josh
Littlefield for pointing out DNSoD load on busy servers (most notably
root servers). The authors would like to thank Simon Josefsson, Daniel
Kahn Gillmor, Bob Harold, Ilari Liusvaara, Sara Dickinson, Christian
Huitema, Stephane Bortzmeyer and Geoff Huston for discussions and
comments on the design of DNSoD.</t>
</section>
</middle>
<back>
<references title="Normative References">
<?rfc include="reference.RFC.2119"?>
<?rfc include="reference.RFC.1034"?>
<?rfc include="reference.RFC.1035"?>
<?rfc include="reference.RFC.4033"?>
<?rfc include="reference.RFC.5077"
?>
<?rfc include="reference.RFC.6347"
?>
<?rfc include='reference.RFC.7830'
?>
<?rfc ?>
<!--
-->
<?rfc include="reference.RFC.5452"
?>
<?rfc include="reference.RFC.6891"
?>
<?rfc include="reference.RFC.7525"?>
<?rfc include="reference.RFC.6520"?>
</references>
<references title="Informative References">
<?rfc include='reference.I-D.ietf-dprive-dtls-and-tls-profiles'
?>
<?rfc include='reference.RFC.7858' ?>
<?rfc include="reference.I-D.ietf-tls-cached-info"?>
<?rfc include="reference.RFC.7626"?>
<?rfc include="reference.RFC.7250"?>
<?rfc include="reference.RFC.7435"?>
<!--
<?rfc include="reference.RFC.4892"?>
-->
<?rfc include="reference.RFC.7413"?>
<?rfc include="reference.RFC.1122"?>
<?rfc include="reference.RFC.7766"?>
<!--
<reference anchor="IANA-domain" target="http://www.iana.org/assignments/special-use-domain-names/special-use-domain-names.xhtml">
<front>
<title>Special-Use Domain Names</title>
<author>
<organization>IANA</organization>
</author>
<date month="February" year="2013"/>
</front>
</reference>
-->
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 04:23:33 |