One document matched: draft-ietf-dprive-dnsodtls-04.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-04" 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>

          <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"></xref>
      and <xref target="RFC1035"></xref>. 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"></xref>.</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"></xref>.</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 not yet available in
          commercially-popular operating systems.</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="I-D.ietf-dprive-dns-over-tls"></xref>.</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"></xref>.</t>
    </section>

    <section anchor="demux"
             title="DTLS session initiation, Polling and Discovery">
      <t>DNSoD MUST run over standard UDP port 853 as defined in <xref
      target="IANA"></xref>. A DNS server that supports DNSoD MUST listen for
      and accept DTLS packets on a designated port 853.</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. The client
      MUST use timer values defined in Section 4.2.4.1 of <xref
      target="RFC6347"></xref> for retransmission of ClientHello message and
      if no response is received from the DNS server. After 15 seconds, it
      MUST cease attempts to re-transmit its ClientHello. If the DNS client
      receives a hard ICMP error <xref target="RFC1122"></xref>, it MUST
      immediately cease attempts to re-transmit its ClientHello. Thereafter,
      the client MAY repeat that procedure in the event the DNS server has
      been upgraded 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.</t>
    </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"></xref> 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>Multiple DNS queries can be sent over a single DTLS session and the
      DNSoD client need not wait for an outstanding reply before sending the
      next query. The existing Query ID allows multiple requests and responses
      to be interleaved in whatever order they can be fulfilled by the DNS
      server. This means DNSoD reduces the consumption of UDP port numbers,
      and because DTLS protects the communication between a DNS client and its
      server, the resolver SHOULD NOT use random ephemeral source ports
      (Section 9.2 of <xref target="RFC5452"></xref>) because such source port
      use would incur additional, unnecessary DTLS load on the DNSoD server.
      When sending multiple queries over a single DTLS session, clients MUST
      take care to avoid Message ID collisions. In other words, they MUST NOT
      re-use the DNS Message ID of an in-flight query.</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"></xref>. This also eliminates a round-trip for
      subsequent DNSoD queries, because with <xref target="RFC5077"></xref>
      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"></xref> so that the DNS client can indicate to the DNS
      server the maximum DNS response size it can handle without IP
      fragmentation. If the DNS server's response exceeds the EDNS0 value, the
      DNS server sets the TC (truncated) bit. On receiving a response with the
      TC bit set, the client establishes a DNS-over-TLS 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. Implementing DNSoD on
      root servers is outside the scope of this document.</t>
    </section>

    <section anchor="DTLS" 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"></xref> 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 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, as usual (Section 4.1.2.6 of
      <xref target="RFC6347"></xref>). It is difficult for the DTLS client to
      validate 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.</t>
    </section>

    <section title="Downgrade attacks">
      <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: <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"></xref>. 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>IANA is requested to add the following value to the "Service Name and
      Transport Protocol Port Number Registry" registry in the System Range.
      The registry for that range requires IETF Review or IESG Approval <xref
      target="RFC6335"></xref> and such a review has been requested using the
      Early Allocation process <xref target="RFC7120"></xref> for the
      well-known UDP port in this document. <!-- That
             registry is populated by expert review  <xref target="RFC6335"/>,
             and such a review will be requested if this document
             progresses.
        --></t>

      <figure>
        <artwork><![CDATA[
    Service Name            domain-s
    Transport Protocol(s)   UDP/TCP
    Port                    853
    Assignee                IESG
    Contact                 dwing@cisco.com
    Description             DNS query-response protocol runs over 
                            DTLS and TLS
    Reference               This document
      ]]></artwork>
      </figure>
    </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"></xref> must be followed to avoid attacks on DTLS. 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 title="Authenticating a DNS Privacy Server">
        <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.dgr-dprive-dtls-and-tls-profiles"></xref>.</t>
      </section>
    </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 and Christian
      Huitema 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.6891"?>
-->

      <?rfc include="reference.RFC.5452"?>

      <!--
      <?rfc include="reference.RFC.3596"?>
-->

      <?rfc include="reference.RFC.7525"?>

      <?rfc include="reference.RFC.6335"
?>

      <?rfc include="reference.RFC.7120"?>

      <?rfc include="reference.RFC.6891"?>

      <?rfc include="reference.RFC.6520"?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.dgr-dprive-dtls-and-tls-profiles'?>

      <?rfc include='reference.I-D.ietf-dprive-dns-over-tls' ?>

      <?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"?>

      <!--
      <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-20262026-04-23 05:27:49