<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.24 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-mmusic-mdns-ice-candidates-01" category="info" updates="8839">

  <front>
    <title abbrev="mdns-ice-candidates">Using Multicast DNS to protect privacy when exposing ICE candidates</title>

    <author initials="Y." surname="Fablet" fullname="Youenn Fablet">
      <organization>Apple Inc.</organization>
      <address>
        <email>youenn@apple.com</email>
      </address>
    </author>
    <author initials="J." surname="de Borst" fullname="Jeroen de Borst">
      <organization>Google</organization>
      <address>
        <email>jeroendb@google.com</email>
      </address>
    </author>
    <author initials="J." surname="Uberti" fullname="Justin Uberti">
      <organization>Google</organization>
      <address>
        <email>juberti@google.com</email>
      </address>
    </author>
    <author initials="Q." surname="Wang" fullname="Qingsi Wang">
      <organization>Google</organization>
      <address>
        <email>qingsi@google.com</email>
      </address>
    </author>

    <date year="2021" month="March" day="09"/>

    <area>General</area>
    <workgroup>MMUSIC</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>WebRTC applications collect ICE candidates as part of the process of creating
peer-to-peer connections. To maximize the probability of a direct peer-to-peer
connection, client private IP addresses are included in this candidate
collection. However, disclosure of these addresses has privacy implications.
This document describes a way to share local IP addresses with other clients
while preserving client privacy. This is achieved by concealing IP addresses
with dynamically generated Multicast DNS (mDNS) names.</t>



    </abstract>


  </front>

  <middle>


<section anchor="problems" title="Introduction">

<t>As detailed in <xref target="IPHandling"/>, exposing client private IP addresses by default
to web applications maximizes the probability of successfully creating direct
peer-to-peer connections between clients, but creates a significant surface for
user fingerprinting. <xref target="IPHandling"/> recognizes this issue, but also admits that
there is no current solution to this problem; implementations that choose to use
Mode 3 to address the privacy concerns often suffer from failing or suboptimal
connections in WebRTC applications. This is particularly an issue on unmanaged
networks, typically homes or small offices, where NAT loopback may not be
supported.</t>

<t>This document proposes an overall solution to this problem by extending
<xref target="ICESDP"/> to allow ICE implementations to register ephemeral mDNS <xref target="RFC6762"/>
names for local private IP addresses, and then provide those names, rather than
the IP addresses, in their ICE candidates. While this technique is intended
to benefit WebRTC implementations in web browsers, by preventing collection
of private IP addresses by arbitrary web pages, it can also be used by any
endpoint that wants to avoid disclosing information about its local network
to remote peers on other networks.</t>

<t>WebRTC and WebRTC-compatible endpoints <xref target="Overview"/> that receive ICE
candidates with mDNS names will resolve these names to IP addresses and
perform ICE processing as usual. In the case where the
endpoint is a web application, the WebRTC implementation will manage this
resolution internally and will not disclose the actual IP addresses to the
application.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in <xref target="RFC2119"/>.</t>

</section>
<section anchor="description" title="Description">

<t>This section uses the concept of ICE agent as defined in <xref target="RFC8445"/>. In the
remainder of the document, it is assumed that each browsing context (as defined
in Section 7.1 of <xref target="HTMLSpec"/>) has its own ICE agent.</t>

<section anchor="gathering" title="ICE Candidate Gathering">

<t>This section outlines how mDNS should be used by ICE agents to conceal local
IP addresses.</t>

<section anchor="procedure" title="Procedure">

<t>For each host candidate gathered by an ICE agent as part of the gathering
process described in <xref target="RFC8445"/>, Section 5.1.1, the candidate is handled as
described below.</t>

<t><list style="numbers">
  <t>Check whether this IP address satisfies the ICE agent’s policy regarding
whether an address is safe to expose. If so, expose the candidate and abort
this process.</t>
  <t>Check whether the ICE agent has previously generated, registered, and stored
an mDNS hostname for this IP address as per steps 3 to 5. If it has, skip
ahead to step 6.</t>
  <t>Generate a unique mDNS hostname. The unique name MUST consist of a version 4
UUID as defined in <xref target="RFC4122"/>, followed by “.local”.</t>
  <t>Register the candidate’s mDNS hostname as defined in <xref target="RFC6762"/>. The ICE agent
SHOULD send an mDNS announcement for the hostname, but as the hostname is expected
to be unique, the ICE agent SHOULD skip probing of the hostname.</t>
  <t>Store the mDNS hostname and its related IP address in the ICE agent for
future reuse.</t>
  <t>Replace the IP address of the ICE candidate with its mDNS hostname and
provide the candidate to the web application.</t>
</list></t>

<t>ICE agents can implement this procedure in any way as long as it produces
equivalent results. An implementation may for instance pre-register mDNS
hostnames by executing steps 3 to 5 and prepopulate an ICE agent accordingly.
By doing so, only step 6 of the above procedure will be executed at the time
of gathering candidates.</t>

<t>In order to prevent web applications from using this mechanism to query for
mDNS support in the local network, the ICE agent SHOULD still provide mDNS
candidates in step 6 even if the local network does not support mDNS or mDNS
registration fails in step 4.</t>

<t>This procedure ensures that an mDNS name is used to replace only one IP address.
Specifically, an ICE agent using an interface with both IPv4 and IPv6 addresses
MUST expose a different mDNS name for each address.</t>

</section>
<section anchor="implementation-guidance" title="Implementation Guidance">

<section anchor="registration" title="Registration">

<t>Sending the mDNS announcement to the network can be delayed, for instance due
to rate limits. An ICE agent SHOULD provide the candidate to the web application
as soon as its mDNS name is generated, regardless of whether the announcement
has been sent on the network.</t>

</section>
<section anchor="determining-address-privacy-and-server-reflexive-candidates" title="Determining Address Privacy and Server-Reflexive Candidates">

<t>Naturally, an address that is already exposed to the Internet does not need to
be protected by mDNS, as it can be trivially observed by the web server or
remote endpoint. However, determining this ahead of time is not straightforward;
while the fact that an IPv4 address is private can sometimes be inferred by its
value, e.g., whether it is an <xref target="RFC1918"/> address, the reverse is not
necessarily true. IPv6 addresses present their own complications, e.g.,
private IPv6 addresses as a result of NAT64 <xref target="RFC6146"/>.</t>

<t>Instead, the determination of whether an address is public can be reliably made
as part of the ICE gathering process. For each mDNS host candidate generated
according the guidance above, the usual STUN <xref target="RFC5389"/> request is sent to
a STUN server. This can be done for both IPv4 and IPv6 local addresses,
provided that the application has configured both IPv4 and IPv6 STUN servers.
If the STUN response returns the same value as the local IP address,
this indicates the address is in fact public.</t>

<t>Regardless of the result, a server-reflexive candidate will be generated;
the transport address of this candidate is an IP address and therefore
distinct from the hostname transport address of the associated mDNS candidate,
and as such MUST NOT be considered redundant per the guidance in <xref target="RFC8445"/>,
Section 5.1.3. To avoid accidental IP address disclosure, this server-reflexive
candidate MUST have its raddr field set to “0.0.0.0”/”::” and its rport field
set to “9”, as discussed in <xref target="ICESDP"/>, Section 9.1.</t>

<t>Once an address has been identified as public, the ICE agent MAY cache this
information and omit mDNS protection for that address in future ICE gathering
phases.</t>

</section>
<section anchor="special-handling-for-ipv6-addresses" title="Special Handling for IPv6 Addresses">

<t>As noted in <xref target="IPHandling"/>, private IPv4 addresses are especially problematic
because of their unbounded lifetime. However, the <xref target="RFC4941"/> IPv6
addresses recommended for WebRTC have inherent privacy protections, namely
a short lifetime and the lack of any stateful information. Accordingly,
implementations MAY choose to not conceal <xref target="RFC4941"/> addresses with mDNS names
as a tradeoff for improved peer-to-peer connectivity.</t>

</section>
<section anchor="mdns-candidate-encoding" title="mDNS Candidate Encoding">

<t>The mDNS name of an mDNS candidate MUST be used in the connection-address field
of its candidate attribute. However, when an mDNS candidate would be the
default candidate, typically because there are no other candidates, its mDNS
name MUST NOT be used in the connection-address field of the SDP “c=” line, as
experimental deployment has indicated that many remote endpoints will fail to
handle such a SDP. In this situation, the IP address values “0.0.0.0”/”::” and
port value “9” MUST instead be used in the c= and m= lines, similar to how the
no-candidates case is handled in <xref target="ICESDP"/>, Section 4.3.1.</t>

<t>Any candidates exposed to the application via local descriptions MUST be
identical to those provided during candidate gathering (i.e., MUST NOT
contain private host IP addresses).</t>

</section>
</section>
</section>
<section anchor="processing" title="ICE Candidate Processing">

<t>This section outlines how received ICE candidates with mDNS names are
processed by ICE agents, and is relevant to all endpoints.</t>

<section anchor="procedure-1" title="Procedure">

<t>For any remote ICE candidate received by the ICE agent, the following procedure
is used:</t>

<t><list style="numbers">
  <t>If the connection-address field value of the ICE candidate does not end with
“.local” or if the value contains more than one “.”, then process the candidate
as defined in <xref target="RFC8445"/>.</t>
  <t>If the ICE candidate policy is “relay”, as defined in <xref target="JSEP"/>, ignore the candidate.</t>
  <t>Otherwise, resolve the candidate using mDNS. The ICE agent SHOULD set the
unicast-response bit of the corresponding mDNS query message; this minimizes
multicast traffic, as the response is probably only useful to the
querying node.</t>
  <t>If it resolves to an IP address, replace the mDNS hostname of the ICE
candidate with the resolved IP address and continue processing of the candidate
as defined in <xref target="RFC8445"/>.</t>
  <t>Otherwise, ignore the candidate.</t>
</list></t>

</section>
<section anchor="implementation-guidance-1" title="Implementation Guidance">

<t>An ICE agent may use a hostname resolver that transparently supports both
Multicast and Unicast DNS. In this case the resolution of a “.local” name may
happen through Unicast DNS as noted in <xref target="RFC6762"/>, Section 3.</t>

<t>An ICE agent SHOULD ignore candidates where the hostname resolution returns
more than one IP address.</t>

<t>An ICE agent MAY add additional restrictions regarding the ICE candidates it
will resolve using mDNS, as this mechanism allows attackers to send ICE traffic
to devices with well-known mDNS names. In particular, ICE agents SHOULD NOT
resolve mDNS names if they are not in the format defined by <xref target="gathering"/>.</t>

</section>
</section>
<section anchor="privacy" title="Additional Privacy Considerations">

<t>The goal of this mechanism is to keep knowledge of private host IP
addresses within the ICE agent while continuing to allow the
application to transmit ICE candidates. Besides keeping private
host IP addresses out of ICE candidates, implementations must take
steps to prevent these IP addresses from being exposed to web
applications through other means.</t>

<section anchor="statistics" title="Statistics">

<t>Statistics related to ICE candidates that are accessible to the web
application MUST NOT contain the IP address of a local or remote mDNS
candidate; the mDNS name SHOULD be used instead.</t>

<t>Statistics SHOULD NOT leak whether the mDNS resolution succeeds or fails.
For that reason, RTCIceCandidateStats objects as defined in <xref target="WebRTCStats"/>
SHOULD be generated for any remote mDNS candidate submitted to the ICE agent,
even if the mDNS candidate is ignored as part of <xref target="processing"/>.
An implementation strategy to obfuscate the address of an mDNS candidate in the statistics, regardless if it is resolved or not, is to replace
the mDNS hostname of the ICE candidate with IP values “0.0.0.0” or “::”.</t>

<t>In addition, a peer-reflexive remote candidate may be constructed
from a remote host IP address as a result of an ICE connectivity
check, as described in Section 7.3.1.3 of <xref target="RFC8445"/>. This check
may arrive before the candidate due to signaling or mDNS
resolution delays, as shown in the examples above.</t>

<t>To prevent disclosure of the host IP address to the application in
this scenario, statistics related to ICE candidates MUST NOT
contain the IP address of any peer-reflexive candidate, unless that IP
has already been learned through signaling of a candidate with the
same address and either the same or a different port; this includes cases
where the signaled candidate is discarded as redundant according to
Section 5.1.3 of <xref target="RFC8445"/>.</t>

</section>
<section anchor="interactions-with-turn-servers" title="Interactions With TURN Servers">

<t>When sending data to a TURN <xref target="RFC5766"/> server, the sending client tells
the server the destination IP and port for the data. This means that
if the client uses TURN to send to an IP that was obtained by mDNS
resolution, the TURN server will learn the underlying host IP and port,
and this information can then be relayed to the web application,
defeating the value of the mDNS wrapping.</t>

<t>To prevent disclosure of the host IP address to a TURN server, the ICE
agent MUST NOT form candidate pairs between its own relay candidates
and remote mDNS candidates. This restriction applies to all remote mDNS
candidate types, not just host candidates; mDNS candidates can be
clearly identified from their connection-address fields.
Note also that the converse is not an issue;
the ICE agent MAY form candidate pairs between its own mDNS candidates and
remote relay candidates, as in this situation host IPs will not be sent
directly to the TURN server.</t>

<t>This restriction has no effect on connectivity; in the cases where
host IP addresses are private and need to be wrapped with mDNS names,
they will be unreachable from the TURN server, and as noted above,
the reverse path will continue to work normally.</t>

</section>
<section anchor="generated-name-reuse" title="Generated Name Reuse">

<t>It is important that use of registered mDNS hostnames is limited in time
and/or scope. Indefinitely reusing the same mDNS hostname candidate would
provide applications an even more reliable tracking mechanism than the private
IP addresses that this specification is designed to hide. In the case of a web
application, the use of registered mDNS hostnames SHOULD be scoped by the web
application origin, and SHOULD have the lifetime of the page executing the web
application.</t>

</section>
<section anchor="specific-browsing-contexts" title="Specific Browsing Contexts">

<t>As noted in <xref target="IPHandling"/>, privacy may be breached if a web application running
in two browsing contexts can determine whether it is running on the same device.
While the approach in this document prevents the application from directly
comparing local private IP addresses, a successful local WebRTC connection
can also present a threat to user privacy. Specifically, when the latency of a
WebRTC connection latency is close to zero, the probability is high that the
two peers are running on the same device.</t>

<t>To avoid this issue, browsers SHOULD NOT register mDNS names for WebRTC
applications running in a third-party browsing context (i.e., a context that
has a different origin than the top-level browsing context), or a private
browsing context.</t>

</section>
<section anchor="network-interface-enumeration" title="Network Interface Enumeration">

<t>Even when local IP addresses are not exposed, the number of mDNS hostname
candidates can still provide a fingerprinting dimension. This is in particular
the case for network interfaces with limited connectivity that will not generate
server-reflexive or relay candidates.</t>

<t>The more mDNS names an endpoint exposes through mDNS hostname candidates, the
higher the fingerprinting risk. One countermeasure is to limit this number to a
small value.</t>

<t>Note that no additional fingerprinting risk is introduced when restricting mDNS
hostname candidates to default route only.</t>

</section>
<section anchor="monitoring-of-sessions" title="Monitoring of Sessions">

<t>A malicious endpoint in the local network may also record other endpoints who
are registering, unregistering, and resolving mDNS names. By doing so, they can
create a session log that shows which endpoints are communicating, and for how
long. If both endpoints in the session are on the same network, the fact they
are communicating can be discovered.</t>

<t>Mitigation of this threat is beyond the scope of this proposal.</t>

</section>
</section>
</section>
<section anchor="update-to-rfc-8839" title="Update to RFC 8839">

<t>Section 5.1 of <xref target="ICESDP"/> states:</t>

<t><list style='empty'>
  <t>An agent generating local candidates MUST NOT use FQDN addresses.
An agent processing remote candidates MUST ignore candidate lines that 
include candidates with FQDN or IP address versions that are not supported
or recognized.</t>
</list></t>

<t>This document extends <xref target="ICESDP"/> to specifically allow the generation and
processing of ICE candidates with the “.local” FQDNs defined in {gathering}.
The restrictions on other FQDNs are unaffected.</t>

</section>
<section anchor="potential-limitations" title="Potential Limitations">

<section anchor="reduced-connectivity" title="Reduced Connectivity">

<t>With typical ICE, endpoints on the same network will usually be able to
establish a direct connection between their local IP addresses. When using the
mDNS technique, a direct connection is still possible, but only if at least one
side can properly resolve the provided mDNS candidates. This may not be possible
in all scenarios.</t>

<t>First, some networks may entirely disable mDNS.  Second, mDNS queries have
limited scope. On large networks, this may mean that an mDNS name cannot be
resolved if the remote endpoint is too many segments away.</t>

<t>When mDNS fails, ICE will attempt to fall back to either NAT hairpin, if
supported, or TURN relay if not. This may result in reduced connectivity,
reduced throughput and increased latency, as well as increased cost in case of
TURN relay.</t>

<t>During experimental testing of the mDNS technique across a set of known
mDNS-aware endpoints that had configured a STUN server but not a TURN server,
the observed impact to ICE connection rate was 2% (relative) when mDNS
was enabled on both sides, compared to when mDNS was only enabled on one
side. In this testing, the percentage of connections that required STUN
(i.e., went through a NAT) increased from 94% to 97%, indicating that
mDNS succeeded about half the time, and fell back to NAT hairpin for the
remainder. The most likely explanation for the overall connection rate drop
is that hairpinning failed in some cases.</t>

</section>
<section anchor="connection-setup-latency" title="Connection Setup Latency">

<t>As noted in <xref target="description"/>, ICE agents using the mDNS technique are responsible
for registering and resolving mDNS names as part of the ICE process. These
steps may delay establishment of a direct peer-to-peer connection, compared to
when raw local IP addresses are used.</t>

<t>Given that these mDNS registrations and queries are typically occurring on a
local network, any associated delays should be small. Also, as noted in
<xref target="gathering"/>, pre-registration can be employed to eliminate gathering delays
entirely.</t>

</section>
<section anchor="backward-compatibility" title="Backward Compatibility">

<t>For the most part, backward compatibility does not present a significant issue
for the mDNS technique. When an endpoint that supports mDNS communicates with
an endpoint that does not, the legacy endpoint will still provide its local IP
addresses, and accordingly a direct connection can still be attempted, even
though the legacy endpoint cannot resolve the mDNS names provided by the new
endpoint. In the event the legacy endpoint attempts to resolve mDNS names using
Unicast DNS, this may cause ICE to take somewhat longer to fully complete, but
should not have any effect on connectivity or connection setup time.</t>

<t>However, some legacy endpoints are not fully spec-compliant and can
behave unpredictably in the presence of ICE candidates that contain a hostname,
potentially leading to ICE failure. Some endpoints may also fail to handle
a connectivity check from an address that they have not received in signaling.
During the aforementioned experimental testing, the connection rate when
interacting with endpoints that provided raw IP addresses (and therefore 
should be unaffected) decreased by 3% (relative), presumably for these reasons.</t>

</section>
</section>
<section anchor="examples" title="Examples">

<t>The examples below show how the mDNS technique is used during ICE processing.
The first example shows a simple case, the next two examples demonstrate how
peer-reflexive candidates for local IP addresses can be created due to timing
differences, and the final example shows a real-world case with IPv4, IPv6, and
STUN.</t>

<section anchor="normal-handling" title="Normal Handling">

<t>In this example, mDNS candidates are exchanged between peers and resolved
normally to obtain the corresponding IP addresses.</t>

<figure><artwork><![CDATA[
           ICE Agent 1 (192.0.2.1)           ICE Agent 2 (192.0.2.2)
       <Register mDNS |                                 |
         name N1,     |                                 |
         192.0.2.1>   |                                 |
                      |------- mDNS Candidate N1 ------>|
                      |                                 | <Register mDNS
                      |                                 |  name N2,
                      |                                 |  192.0.2.2>
                      |<------ mDNS Candidate N2 -------|
       <Resolve       |                                 | <Resolve
        mDNS name N2> |                                 |  mDNS name N1>
                      |<=== STUN check to 192.0.2.1 ====|
                      |==== STUN check to 192.0.2.2 ===>|
                      |                                 |
]]></artwork></figure>

<t>The exchange of ICE candidates relies on out-of-band signaling, for example,
the SDP Offer/Answer procedure defined in <xref target="ICESDP"/>. In the above example,
the candidate attributes in the SDP messages to exchange the mDNS candidates
between ICE Agent 1 and 2 are as follows:</t>

<t>ICE Agent 1:</t>

<figure><artwork><![CDATA[
a=candidate:1 1 udp 2122262783 1f4712db-ea17-4bcf-a596-105139dfd8bf.local
  54596 typ host
]]></artwork></figure>

<t>ICE Agent 2:</t>

<figure><artwork><![CDATA[
a=candidate:1 1 udp 2122262783 2579ef4b-50ae-4bfe-95af-70b3376ecb9c.local
  61606 typ host
]]></artwork></figure>

</section>
<section anchor="peer-reflexive-candidate-from-slow-signaling" title="Peer-reflexive Candidate From Slow Signaling">

<t>In this example, a peer-reflexive candidate is generated because the
mDNS candidate is signaled after the STUN checks begin.</t>

<figure><artwork><![CDATA[
           ICE Agent 1 (192.0.2.1)           ICE Agent 2 (192.0.2.2)
       <Register mDNS |                                 |
         name N1,     |                                 |
         192.0.2.1>   |                                 |
                      |------- mDNS Candidate N1 ------>|
                      |                                 | <Resolve
                      |                                 |  mDNS name N1>
                      |<=== STUN check to 192.0.2.1 ====|
      prflx candidate |                                 | <Register mDNS
    192.0.2.2 created |                                 |  name N2,
                      |                                 |  192.0.2.2>
                      |<------ mDNS Candidate N2 -------|
                      |                                 |
]]></artwork></figure>

</section>
<section anchor="peer-reflexive-candidate-from-slow-resolution" title="Peer-reflexive Candidate From Slow Resolution">

<t>In this example, a peer-reflexive candidate is generated because the
mDNS resolution for name N2 does not complete until after the STUN checks are
received.</t>

<figure><artwork><![CDATA[
           ICE Agent 1 (192.0.2.1)           ICE Agent 2 (192.0.2.2)
       <Register mDNS |                                 | <Register mDNS
         name N1,     |                                 |  name N2,
         192.0.2.1>   |                                 |  192.0.2.2>
                      |------- mDNS Candidate N1 ------>|
                      |<------ mDNS Candidate N2 -------|
<Resolve              |                                 | <Resolve
 mDNS                 |                                 |  mDNS name N1>
  .                   |<=== STUN check to 192.0.2.1 ====|
  .   prflx candidate |                                 |
  . 192.0.2.2 created |                                 |
 name                 |                                 |
 N2>                  |                                 |
]]></artwork></figure>

</section>
<section anchor="ipv4-ipv6-and-stun-handling" title="IPv4, IPv6, and STUN handling">

<t>This last example demonstrates the overall ICE gathering process for two
endpoints, each with a private IPv4 address and a public IPv6 address. They
preregister their mDNS names to speed up ICE gathering.</t>

<figure><artwork><![CDATA[
               ICE Agent 1                        ICE Agent 2
               192.168.1.1         STUN           192.168.1.2
               2001:db8::1        Server          2001:db8::2
  ----------------------------------------------------------------------
                      Pre-registration of mDNS names
                   |                |                 |
    <Register mDNS |                |                 | <Register mDNS
      name N1.1,   |                |                 |  name N2.1,
      192.168.1.1> |                |                 |  192.168.1.2>
    <Register mDNS |                |                 | <Register mDNS
      name N1.2,   |                |                 |  name N2.2,
      2001:db8::1> |                |                 |  2001:db8::2>
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                    ICE Agent 1 sends mDNS candidates
                   |                |                 |
            <N1.1> |------- mDNS Candidate C1.1 ----->|
            <N1.2> |------- mDNS Candidate C1.2 ----->|
                   |                |                 | <Resolve mDNS
                   |                |                 |  name N1.1 to
                   |                |                 |  192.168.1.1>
                   |                |                 | <Resolve mDNS
                   |                |                 |  name N1.2 to
                   |                |                 |  2001:db8::1>
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              ICE Agent 1 sends server-reflexive candidates
                   |                |                 |
    <192.168.1.1   |--Binding Req-->|                 |
     is 192.0.2.1> |<-Binding Resp--|                 |
       <192.0.2.1> |------ srflx Candidate C1.3 ----->|
  <2001:db8::1     |--Binding Req-->|                 |
   is 2001:db8::1> |<-Binding Resp--|                 |
     <2001:db8::1> |------ srflx Candidate C1.4 ----->| <Discard C1.4
                   |                |                 |  as redundant>
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          ICE Agent 2 sends mDNS candidates, resolution is slow
                   |                |                 |
                   |<------ mDNS Candidate C2.1 ------| <N2.1>
                   |<------ mDNS Candidate C2.2 ------| <N2.2>
   <Resolve mDNS   |                |                 |
    name N2.1 ...> |                |                 |
   <Resolve mDNS   |                |                 |
    name N2.2 ...> |                |                 |
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ICE Agent 2 sends server-reflexive candidates, resolution completes
                   |                |                 |
                   |                |<--Binding Req---| <192.168.1.2
                   |                |---Binding Resp->|  is 192.0.2.2>
                   |<----- srflx Candidate C2.3 ------| <192.0.2.2>
                   |                |<--Binding Req---| <2001:db8::2
                   |                |---Binding Resp->|  is 2001:db8::2>
                   |<----- srflx Candidate C2.4 ------| <2001:db8::2>
                   |                |                 |
    <... N2.1 is   |                |                 |
     192.168.1.2>  |                |                 |
    <... N2.2 is   |                |                 |
     2001:db8::2,  |                |                 |
     discard C2.4> |                |                 |
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          ICE connectivity checks
                   |                |                 |
       2001:db8::1 |<============= STUN ==============| 2001:db8::2
       2001:db8::1 |============== STUN =============>| 2001:db8::2
       192.168.1.1 |<============= STUN ==============| 192.168.1.2
       192.168.1.1 |============== STUN =============>| 192.168.1.2
         192.0.2.1 |    Failed <-- STUN --------------| 192.168.1.2
       192.168.1.1 |---------------STUN --> Failed    | 192.0.2.2
       2001:db8::1 |====== STUN(USE-CANDIDATE) ======>| 2001:db8::2
]]></artwork></figure>

<t>Ice Agent 1 candidates:</t>

<figure><artwork><![CDATA[
  C1.1: candidate:1 1 udp 2122262783 9b36eaac-bb2e-49bb-bb78-
                  21c41c499900.local 10004 typ host
  C1.2: candidate:2 1 udp 2122262527 76c82649-02d6-4030-8aef-
                  a2ba3a9019d5.local 10006 typ host
  C1.3: candidate:1 1 udp 1686055167 192.0.2.1
                  30004 typ srflx raddr 0.0.0.0 rport 0
  C1.4: candidate:2 1 udp 1686054911 2001:db8::1
                  10006 typ srflx raddr 0.0.0.0 rport 0
]]></artwork></figure>

<t>Ice Agent 2 candidates:</t>

<figure><artwork><![CDATA[
  C2.1: candidate:1 1 udp 2122262783 b977f597-260c-4f70-9ac4-
                  26e69b55f966.local 20004 typ host
  C2.2: candidate:2 1 udp 2122262527 ac4595a7-7e42-4e85-85e6-
                  c292abe0e681.local 20006 typ host
  C2.3: candidate:1 1 udp 1686055167 192.0.2.2
                  40004 typ srflx raddr 0.0.0.0 rport 0
  C2.4: candidate:2 1 udp 1686054911 2001:db8::2
                  20006 typ srflx raddr 0.0.0.0 rport 0
]]></artwork></figure>

</section>
</section>
<section anchor="security" title="Security Considerations">

<section anchor="mdns-message-flooding" title="mDNS Message Flooding">

<t>The implementation of this proposal requires the mDNS querying capability of the
browser for registering mDNS names or adding remote ICE host candidates with
such names. It also requires the mDNS responding capability of either the
browser or the operating platform of the browser for registering, removing or
resolving mDNS names. In particular,</t>

<t><list style="symbols">
  <t>the registration of name requires optional probing queries and mandatory
announcing responses (<xref target="RFC6762"/>, Section 8), and this is performed at the
beginning of ICE gathering;</t>
  <t>the addition of remote ICE host candidates with mDNS names generates mDNS
queries for names of each candidate;</t>
  <t>the removal of names could happen when the browsing context of the ICE agent
is destroyed in an implementation, and goodbye responses should be sent to
invalidate records generated by the ICE agent in the local network
(<xref target="RFC6762"/>, Section 10.1).</t>
</list></t>

<t>A malicious Web application could flood the local network with mDNS messages by:</t>

<t><list style="symbols">
  <t>creating browsing contexts that create ICE agents and start gathering of
local ICE host candidates;</t>
  <t>destroying these local candidates soon after the name registration is done;</t>
  <t>adding fictitious remote ICE host candidates with mDNS names.</t>
</list></t>

<t><xref target="RFC6762"/> defines a general per-question and per-record multicast rate
limiting rule, in which a given question or record on a given interface cannot be
sent less than one second since its last transmission. This rate limiting rule
however does not mitigate the above attacks, in which new names, hence new
questions or records, are constantly created and sent. Therefore, a browser-wide
mDNS message rate limit MUST be provided for all mDNS queries and responses that
are dispatched during the ICE candidate gathering and processing described in
<xref target="description"/>. A browser MAY implement more specific rate limits, e.g., to
ensure a single origin does not prevent other origins from registering,
unregistering, or resolving mDNS names.</t>

</section>
<section anchor="malicious-responses-to-deny-name-registration" title="Malicious Responses to Deny Name Registration">

<t>If the optional probing queries are implemented for the name registration, a
malicious endpoint in the local network, which is capable of responding mDNS
queries, could send responses to block the use of the generated names. This
would lead to the discarding of this ICE host candidate as in Step 5 in
<xref target="gathering"/>.</t>

<t>The above attack can be mitigated by skipping the probing when registering a
name, which also conforms to Section 8 in <xref target="RFC6762"/>, given that the name is
randomly generated for the probabilistic uniqueness (e.g. a version 4 UUID) in
Step 3 in <xref target="gathering"/>. However, a similar attack can be performed by
exploiting the negative responses (defined in <xref target="RFC6762"/>, Section 8.1), in
which NSEC resource records are sent to claim the nonexistence of records
related to the gathered ICE host candidates.</t>

<t>The existence of malicious endpoints in the local network poses a generic
threat, and requires dedicated protocol suites to mitigate, which is beyond the
scope of this proposal.</t>

</section>
<section anchor="unsolicited-ice-communications" title="Unsolicited ICE Communications">

<t>As noted in Section 4.2 of <xref target="RTCWebSecurity"/>, an attacker may use ICE as a way
to send unsolicited network traffic to specific endpoints. While this is not
specific to mDNS hostname candidates, this technique makes it easier to
target devices with well-known mDNS names.</t>

<t>Also, the same technique can be used as an oracle to determine whether some
local services are reachable in the local network. This knowledge can be used
for fingerprinting purposes or as a basis for attacking local networks.</t>

<t>As noted in <xref target="processing"/>, ICE agents are discouraged to resolve mDNS names
that are not in the format defined by <xref target="gathering"/> and may further constrain
the mDNS names they will actually try to resolve.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document requires no actions from IANA.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC4122" target='https://www.rfc-editor.org/info/rfc4122'>
<front>
<title>A Universally Unique IDentifier (UUID) URN Namespace</title>
<author initials='P.' surname='Leach' fullname='P. Leach'><organization /></author>
<author initials='M.' surname='Mealling' fullname='M. Mealling'><organization /></author>
<author initials='R.' surname='Salz' fullname='R. Salz'><organization /></author>
<date year='2005' month='July' />
<abstract><t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t><t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4122'/>
<seriesInfo name='DOI' value='10.17487/RFC4122'/>
</reference>



<reference  anchor="RFC4941" target='https://www.rfc-editor.org/info/rfc4941'>
<front>
<title>Privacy Extensions for Stateless Address Autoconfiguration in IPv6</title>
<author initials='T.' surname='Narten' fullname='T. Narten'><organization /></author>
<author initials='R.' surname='Draves' fullname='R. Draves'><organization /></author>
<author initials='S.' surname='Krishnan' fullname='S. Krishnan'><organization /></author>
<date year='2007' month='September' />
<abstract><t>Nodes use IPv6 stateless address autoconfiguration to generate addresses using a combination of locally available information and information advertised by routers.  Addresses are formed by combining network prefixes with an interface identifier.  On an interface that contains an embedded IEEE Identifier, the interface identifier is typically derived from it.  On other interface types, the interface identifier is generated through other means, for example, via random number generation.  This document describes an extension to IPv6 stateless address autoconfiguration for interfaces whose interface identifier is derived from an IEEE identifier.  Use of the extension causes nodes to generate global scope addresses from interface identifiers that change over time, even in cases where the interface contains an embedded IEEE identifier.  Changing the interface identifier (and the global scope addresses generated from it) over time makes it more difficult for eavesdroppers and other information collectors to identify when different addresses used in different transactions actually correspond to the same node.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4941'/>
<seriesInfo name='DOI' value='10.17487/RFC4941'/>
</reference>



<reference  anchor="RFC5389" target='https://www.rfc-editor.org/info/rfc5389'>
<front>
<title>Session Traversal Utilities for NAT (STUN)</title>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'><organization /></author>
<author initials='R.' surname='Mahy' fullname='R. Mahy'><organization /></author>
<author initials='P.' surname='Matthews' fullname='P. Matthews'><organization /></author>
<author initials='D.' surname='Wing' fullname='D. Wing'><organization /></author>
<date year='2008' month='October' />
<abstract><t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with Network Address Translator (NAT) traversal.  It can be used by an endpoint to determine the IP address and port allocated to it by a NAT.  It can also be used to check connectivity between two endpoints, and as a keep-alive protocol to maintain NAT bindings.  STUN works with many existing NATs, and does not require any special behavior from them.</t><t>STUN is not a NAT traversal solution by itself.  Rather, it is a tool to be used in the context of a NAT traversal solution.  This is an important change from the previous version of this specification (RFC 3489), which presented STUN as a complete solution.</t><t>This document obsoletes RFC 3489.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5389'/>
<seriesInfo name='DOI' value='10.17487/RFC5389'/>
</reference>



<reference  anchor="RFC5766" target='https://www.rfc-editor.org/info/rfc5766'>
<front>
<title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
<author initials='R.' surname='Mahy' fullname='R. Mahy'><organization /></author>
<author initials='P.' surname='Matthews' fullname='P. Matthews'><organization /></author>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'><organization /></author>
<date year='2010' month='April' />
<abstract><t>If a host is located behind a NAT, then in certain situations it can be impossible for that host to communicate directly with other hosts (peers).  In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay.  This specification defines a protocol, called TURN (Traversal Using Relays around NAT), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay.  TURN differs from some other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5766'/>
<seriesInfo name='DOI' value='10.17487/RFC5766'/>
</reference>



<reference  anchor="RFC6762" target='https://www.rfc-editor.org/info/rfc6762'>
<front>
<title>Multicast DNS</title>
<author initials='S.' surname='Cheshire' fullname='S. Cheshire'><organization /></author>
<author initials='M.' surname='Krochmal' fullname='M. Krochmal'><organization /></author>
<date year='2013' month='February' />
<abstract><t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important.  In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t><t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server.  In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t><t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t></abstract>
</front>
<seriesInfo name='RFC' value='6762'/>
<seriesInfo name='DOI' value='10.17487/RFC6762'/>
</reference>



<reference  anchor="RFC8445" target='https://www.rfc-editor.org/info/rfc8445'>
<front>
<title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
<author initials='A.' surname='Keranen' fullname='A. Keranen'><organization /></author>
<author initials='C.' surname='Holmberg' fullname='C. Holmberg'><organization /></author>
<author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'><organization /></author>
<date year='2018' month='July' />
<abstract><t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication.  This protocol is called Interactive Connectivity Establishment (ICE).  ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t><t>This document obsoletes RFC 5245.</t></abstract>
</front>
<seriesInfo name='RFC' value='8445'/>
<seriesInfo name='DOI' value='10.17487/RFC8445'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC1918" target='https://www.rfc-editor.org/info/rfc1918'>
<front>
<title>Address Allocation for Private Internets</title>
<author initials='Y.' surname='Rekhter' fullname='Y. Rekhter'><organization /></author>
<author initials='B.' surname='Moskowitz' fullname='B. Moskowitz'><organization /></author>
<author initials='D.' surname='Karrenberg' fullname='D. Karrenberg'><organization /></author>
<author initials='G. J.' surname='de Groot' fullname='G. J. de Groot'><organization /></author>
<author initials='E.' surname='Lear' fullname='E. Lear'><organization /></author>
<date year='1996' month='February' />
<abstract><t>This document describes address allocation for private internets.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='5'/>
<seriesInfo name='RFC' value='1918'/>
<seriesInfo name='DOI' value='10.17487/RFC1918'/>
</reference>



<reference  anchor="RFC6146" target='https://www.rfc-editor.org/info/rfc6146'>
<front>
<title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
<author initials='M.' surname='Bagnulo' fullname='M. Bagnulo'><organization /></author>
<author initials='P.' surname='Matthews' fullname='P. Matthews'><organization /></author>
<author initials='I.' surname='van Beijnum' fullname='I. van Beijnum'><organization /></author>
<date year='2011' month='April' />
</front>
<seriesInfo name='RFC' value='6146'/>
<seriesInfo name='DOI' value='10.17487/RFC6146'/>
</reference>


<reference anchor="ICESDP" target="https://tools.ietf.org/html/draft-ietf-mmusic-ice-sip-sdp">
  <front>
    <title>Session Description Protocol (SDP) Offer/Answer procedures for Interactive Connectivity Establishment (ICE)</title>
    <author initials="A." surname="Keranen">
      <organization></organization>
    </author>
    <date year="2018" month="April" day="01"/>
  </front>
</reference>
<reference anchor="IPHandling" target="https://tools.ietf.org/html/draft-ietf-rtcweb-ip-handling">
  <front>
    <title>WebRTC IP Address Handling Requirements</title>
    <author initials="G." surname="Shieh">
      <organization></organization>
    </author>
    <date year="2018" month="April" day="18"/>
  </front>
</reference>
<reference anchor="Overview" target="https://tools.ietf.org/html/draft-ietf-rtcweb-overview">
  <front>
    <title>Overview: Real Time Protocols for Browser-based Applications</title>
    <author initials="H." surname="Alvestrand">
      <organization></organization>
    </author>
    <date year="2017" month="November" day="12"/>
  </front>
</reference>
<reference anchor="WebRTCSpec" target="https://w3c.github.io/webrtc-pc/">
  <front>
    <title>The WebRTC specification</title>
    <author initials="J.I." surname="Bruaroey">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="WebRTCStats" target="https://w3c.github.io/webrtc-stats/">
  <front>
    <title>Identifiers for WebRTC's Statistics API</title>
    <author initials="H." surname="Boström">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="HTMLSpec" target="https://html.spec.whatwg.org">
  <front>
    <title>HTML Living Standard</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="RTCWebSecurity" target="https://tools.ietf.org/html/draft-ietf-rtcweb-security">
  <front>
    <title>Security Considerations for WebRTC</title>
    <author initials="E." surname="Rescorla">
      <organization></organization>
    </author>
    <date year="2018" month="January" day="22"/>
  </front>
</reference>
<reference anchor="JSEP" target="https://tools.ietf.org/html/draft-ietf-rtcweb-jsep">
  <front>
    <title>JavaScript Session Establishment Protocol</title>
    <author initials="E." surname="Rescorla, Ed">
      <organization></organization>
    </author>
    <date year="2019" month="February" day="27"/>
  </front>
</reference>


    </references>



  </back>

<!-- ##markdown-source:
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
UsT5Juq/AO7yVvMijAAA

-->

</rfc>

