One document matched: draft-ietf-dprive-dnsodtls-00.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-00" 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 the default DNS port and can also run over an alternate
      port.</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="I-D.bortzmeyer-dnsop-dns-privacy"></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.</t>

      <t>This document defines DNS over DTLS (DNSoD, pronounced "dee-enn-sod")
      which provides confidential DNS communication for stub resolvers,
      recursive resolvers, iterative resolvers and authoritative servers.</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>

    <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.hzhwm-start-tls-for-dns"></xref>.
      Alternatively, a shim protocol could be defined between DTLS and DNS,
      allowing large responses to be sent over DTLS itself, see <xref
      target="performance"></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 title="Common problems with DNS Privacy">
      <t>This section describes problems common to any DNS privacy solution.
      To achieve DNS privacy an encrypted and integrity-protected channel is
      needed between the client and server. This channel can be blocked, and
      the client needs to react to such blockages.</t>

      <section title="Firewall Blocking Ports or DNS Privacy Protocol">
        <t>When sending DNS over an encrypted channel, there are two choices:
        send the encrypted traffic over the DNS ports (UDP 53, TCP 53) or send
        the encrypted traffic over a different port. The encrypted traffic is
        not normal DNS traffic, but rather is a cryptographic handshake
        followed by encrypted payloads. There can be firewalls, other security
        devices, or intercepting DNS proxies which block the non-DNS traffic
        or otherwise react negatively (e.g., quarantining the host for
        suspicious behavior). Alternatively, if a different port is used for
        the encrypted traffic, a firewall or other security device might block
        that port or otherwise react negatively.</t>

        <t>There is no panacea, and only experiments on the Internet will
        uncover which technique or combination of techniques will work best.
        The authors believe a combination of techniques will be necessary, as
        that has proven necessary with other protocols that desire to work on
        existing networks.</t>
      </section>

      <section title="Authenticating the 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.</t>

        <t>To authenticate the server providing DNS privacy, the DNS client
        needs to be configured with the names or IP addresses of those DNS
        privacy servers. The server certificate MUST contain DNS-ID
        (subjectAltName) as described in Section 4.1 of <xref
        target="RFC6125"></xref>. DNS names and IP addresses can be contained
        in the subjectAltName entries. The client MUST use the rules and
        guidelines given in section 6 of <xref target="RFC6125"></xref> to
        validate the DNS server identity.</t>

        <figure>
          <preamble>We imagine this could be implemented by adding the
          certificate name to the /etc/resolv.conf file, such as
          below:</preamble>

          <artwork align="left"><![CDATA[
  nameserver 8.8.8.8
  certificate google-public-dns.google.com
  nameserver 208.67.220.220
  certificate resolver.opendns.com
]]></artwork>
        </figure>

        <t>For DNS privacy servers that don't have a certificate trust chain
        (e.g., because they are on a home network or a corporate network), the
        configured list of DNS privacy servers can contain the certificate
        fingerprint of the DNS privacy server (i.e., a simple whitelist of
        name and certificate fingerprint).</t>

        <figure>
          <preamble>We imagine this could be implemented by adding the
          certificate fingerprint to the /etc/resolv.conf file, such as below
          (line split for Internet Draft formatting):</preamble>

          <artwork align="left"><![CDATA[
  nameserver 192.168.1.1
  certificate-fingerprint 
    01:56:D3:AC:CF:5B:3F:B8:8F:0F:B4:30:88:2D:F6:72:4E:8C:F2:EE
]]></artwork>
        </figure>
      </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. An implementation will attempt to obtain
        DNS privacy by contacting DNS servers on the local network (provided
        by DHCP) and on the Internet, and will make those attempts in parallel
        to reduce user impact. If DNS privacy cannot be successfully
        negotiated for whatever reason, client can do three things: <list
            style="numbers">
            <t>refuse to send DNS queries on this network, which means the
            client can not make effective use of this network, as modern
            networks require DNS; or,</t>

            <t>use DNS privacy with an un-authorized server, which means an
            attacker could be spoofing the handshake with the DNS privacy
            server; 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>

    <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="problem_stmt" title="Incremental Deployment">
      <t>DNSoD can be deployed incrementally by the Internet Service Provider
      or as an Internet service.</t>

      <t>If the ISP's DNS resolver supports DNSoD, then DNS queries are
      protected from passive listening and from many active attacks along that
      path.</t>

      <t>DNSoD can be offered as an Internet service, and a stub resolver or
      DNS resolver can be configured to point to that DNSoD server (rather
      than to the ISP-provided DNS server).</t>
    </section>

    <section anchor="demux"
             title="Demultiplexing, Polling, Port Usage, and Discovery">
      <t>[Note - This section requires further discussion]</t>

      <t>Many modern operating systems already detect if a web proxy is
      interfering with Internet communications, using proprietary mechanisms
      that are out of scope of this document. After that mechanism has run
      (and detected Internet connectivity is working), the DNSoD procedure
      described in this document should commence. This timing avoids delays in
      joining the network (and displaying an icon indicating successful
      Internet connection), at the risk that those initial DNS queries will be
      sent without protection afforded by DNSoD.</t>

      <t>DNSoD can run over standard UDP port 53 as defined in <xref
      target="RFC1035"></xref>. A DNS client or server that does not implement
      this specification will not respond to the incoming DTLS packets because
      they don't parse as DNS packets (the DNS Opcode would be 15, which is
      undefined). A DNS client or server that does implement this
      specification can demultiplex DNS and DTLS packets by examining the
      third octet. For TLS 1.2, which is what is defined by this
      specification, a DTLS packet will contain 253 in the third octet,
      whereas a DNS packet will never contain 253 in the third octet.</t>

      <t>There has been some concern with sending DNSoD traffic over the same
      port as normal, un-encrypted DNS traffic. The intent of this section is
      to show that DNSoD could successfully be sent over port 53. Further
      analysis and testing on the Internet may be valuable to determine if
      multiplexing on port 53, using a separate port, or some fallback between
      a separate port and port 53 brings the most success.</t>

      <t>After performing the above steps, 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, because they are not valid DNS requests
      (specifically, the DNS Opcode is invalid). 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. 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),
      we should consider using plain public keys <xref
      target="I-D.ietf-tls-oob-pubkey"></xref>. Considering that to authorize
      a certain DNS server the client already needs explicit configuration of
      the DNS servers it trusts, maybe the public key configuration problem is
      really no worse than the configuration problem of those whitelisted
      certificates?</t>

      <t>Multiple DNS queries can be sent over a single DNSoD security
      association. The existing QueryID 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 the 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.</t>

      <t>It is highly advantageous to avoid server-side DTLS state and reduce
      the number of new DTLS security associations 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 security association does not need to
      be re-established. Note: with the shim (described below) perhaps we
      could send the query and the restore server-side state in the
      ClientHello packet.</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. Certain
      DNS responses are large (e.g., many AAAA records, TXT, SRV) and don't
      fit into a single UDP packet, causing a partial response with the
      truncation (TC) bit set. The client is then expected to repeat the query
      over TCP, which causes additional name resolution delay. We have
      considered two ideas, one that reduces the need to switch to TCP and
      another that eliminates the need to switch to TCP: <list style="symbols">
          <t>Path MTU can be determined using <xref
          target="RFC4821">Packetization Layer Path MTU Discovery</xref> using
          DTLS heartbeat. <xref target="RFC4821"></xref> does not rely on ICMP
          or ICMPv6, and would not affect DNS state or responsiveness on the
          client or server. However, it would be additional chattiness.</t>

          <t>To avoid IP fragmentation, DTLS handshake messages incorporate
          their own fragment offset and fragment length. We might utilize a
          similar mechanism in a shim layer between DTLS and DNS, so that
          large DNS messages could be carried without causing IP
          fragmentation.</t>
        </list></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. Because of the load
      imposed, and because of the infrequency of queries to root servers means
      the DTLS overhead is unlikely to be amoritized over the DNS queries sent
      over that DTLS connection, implementing DNSoD on root servers is NOT
      RECOMMENDED.</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()). A single DTLS session can be used to receive multiple DNS
      requests and generate DNS multiple responses.</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="DTLS Features and Cipher Suites">
      <t>To improve interoperability, the set of DTLS features and cipher
      suites is restricted. The DTLS implementation MUST disable compression.
      DTLS compression can lead to the exposure of information that would not
      otherwise be revealed <xref target="RFC3749"></xref>. Generic
      compression is unnecessary since DNS provides compression features
      itself. DNS over DTLS MUST only be used with cipher suites that have
      ephemeral key exchange, such as the ephemeral Diffie-Hellman (DHE) <xref
      target="RFC5246"></xref> or the elliptic curve variant (ECDHE) <xref
      target="RFC4492"></xref>. Ephemeral key exchange MUST have a minimum
      size of 2048 bits for DHE or security level of 128 bits for ECDHE.
      Authenticated Encryption with Additional Data (AEAD) modes, such as the
      Galois Counter Model (GCM) mode for AES <xref target="RFC5288"></xref>
      are acceptable.</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.</t>
    </section>

    <section title="IANA Considerations">
      <t>If demultiplexing DTLS and DNS (using the third octet, <xref
      target="demux"></xref>) is useful, we should reserve DNS Opcode 15 to
      ensure DNS always has a 0 bit where DTLS always has a 1 bit.</t>
    </section>

    <section anchor="security" title="Security Considerations">
      <t>The interaction between the DNS client and the DNS server requires
      Datagram Transport Layer Security (DTLS) with a ciphersuite offering
      confidentiality protection and the 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
      inside DNSoD. This behavior mitigates all (?) attacks described in <xref
      target="RFC5452">Measures for Making DNS More Resilient against Forged
      Answers</xref>.</t>

      <t>Security considerations discussed in <xref
      target="RFC6347">DTLS</xref> also apply to this document.</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 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.5246"?>

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

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

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

    <references title="Informative References">
      <?rfc include='reference.I-D.bortzmeyer-dnsop-dns-privacy'?>

      <?rfc include='reference.I-D.hzhwm-start-tls-for-dns'?>

      <?rfc include='reference.I-D.ietf-tls-oob-pubkey'?>

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

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

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

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

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

      <!--
      <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-24 04:25:12