<?xml version="1.0" encoding="US-ASCII"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "reference.RFC.2119.xml">
<!ENTITY RFC2131 SYSTEM "reference.RFC.2131.xml">
<!ENTITY RFC2629 SYSTEM "reference.RFC.2629.xml">
<!ENTITY RFC3315 SYSTEM "reference.RFC.3315.xml">
<!ENTITY RFC3552 SYSTEM "reference.RFC.3552.xml">
<!ENTITY RFC3971 SYSTEM "reference.RFC.3971.xml">
<!ENTITY RFC4861 SYSTEM "reference.RFC.4861.xml">
<!ENTITY RFC4862 SYSTEM "reference.RFC.4862.xml">
<!ENTITY RFC6085 SYSTEM "reference.RFC.6085.xml">
<!ENTITY RFC6620 SYSTEM "reference.RFC.6620.xml">
<!ENTITY RFC7219 SYSTEM "reference.RFC.7219.xml">
<!ENTITY RFC7039 SYSTEM "reference.RFC.7039.xml">
<!ENTITY RFC7513 SYSTEM "reference.RFC.7513.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>

<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc rfcedstyle="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc number="8074" ipr="trust200902" category="std" submissionType="IETF" consensus="yes">

<front>
<title abbrev='SAVI-MIX'>
Source Address Validation
Improvement&nbsp;(SAVI)&nbsp;for&nbsp;Mixed&nbsp;Address&nbsp;Assignment
Methods Scenario</title>

<author initials='J' surname='Bi' fullname='Jun Bi'>
<organization abbrev='Tsinghua University'>Tsinghua University</organization>
<address>
<postal>
<street>Institute for Network Sciences and Cyberspace, Tsinghua University</street>
<city>Beijing</city>
<code>100084</code>
<country>China</country>
</postal>
<email>junbi@tsinghua.edu.cn</email>
</address>
</author>

<author initials='G' surname='Yao' fullname='Guang Yao'>
<organization abbrev='Tsinghua University/Baidu'>Tsinghua University/Baidu</organization>
<address>
<postal>
<street>Baidu Science and Technology Park, Building 1</street>
<city>Beijing</city>
<code>100193</code>
<country>China</country>
</postal>
<email>yaoguang.china@gmail.com</email>
</address>
</author>

<author initials='J' surname='Halpern' fullname='Joel M. Halpern'>
<organization abbrev='Ericsson'>Ericsson</organization>
<address>
<postal>
<street></street>
<city></city>
<region></region>
<code></code>
<country></country>
</postal>
<email>joel.halpern@ericsson.com</email>
</address>
</author>
   
<author initials='E' surname='Levy-Abegnoli' role='editor' fullname='Eric Levy-Abegnoli'>
<organization abbrev='Cisco'>Cisco Systems</organization>
<address>
<postal>
<street> Village d'Entreprises Green Side - 400, Avenue Roumanille</street>
<city>Biot-Sophia Antipolis</city>
<code>06410</code>
<country>France</country>
</postal>
<email>elevyabe@cisco.com</email>
</address>
</author>

 <date year='2017' month='February'/>
 <area>Internet</area>
 <workgroup>SAVI</workgroup>

<abstract>

   <t>In networks that use multiple techniques for address assignment, the
   spoofing of addresses assigned by each technique can be prevented using
   the appropriate Source Address Validation Improvement (SAVI) methods.
   This document reviews how multiple SAVI methods can
   coexist in a single SAVI device and how collisions are resolved when the
   same binding entry is discovered by two or more methods.</t>

</abstract>

</front>

<middle>

<section
  title='Introduction'
  anchor='introduction'>
  
  
   <t>There are currently several Source Address Validation Improvement
(SAVI) documents (<xref target='RFC6620'/>,
   <xref target='RFC7513'/>, and <xref target='RFC7219'/>) that describe the
   different methods by which a switch can discover and record bindings
   between a node's IP address and a binding anchor and use that
   binding to perform source address validation.  Each of these
   documents specifies how to learn on-link addresses, based on the
   technique used for their assignment: StateLess Address
   Autoconfiguration (SLAAC), the Dynamic Host Control Protocol (DHCP), and
   Secure Neighbor Discovery (SEND), respectively.  Each of these documents describes
   separately how one particular SAVI method deals with address
   collisions (same address but different binding anchor).</t>

   <t>While multiple IP assignment techniques can be used in the same layer 2
   domain, this means that a single
SAVI device might have to deal with a combination or mix of SAVI methods.  
   The purpose of this document is to provide
   recommendations to avoid collisions and to review collision handling
   when two or more such methods come up with competing bindings.</t>

</section>

<section title="Requirements Language">

    <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">RFC 2119</xref>.</t>

</section>

<section
  title='Problem Scope'
  anchor='scope'>
  
  
<t>Three different IP address assignment techniques have been 
analyzed for SAVI:</t>
   <t>
   <list style="numbers">

   <t>StateLess Address Autoconfiguration (SLAAC) -- analyzed in
        FCFS SAVI (First-Come, First-Served) <xref target="RFC6620"/></t>
   <t>Dynamic Host Control Protocol address assignment (DHCP) --
       analyzed in SAVI-DHCP <xref target="RFC7513"/></t>
   <t>Secure Neighbor Discovery (SEND) address assignment -- analyzed in
       SEND SAVI <xref target="RFC7219"/></t>
   </list>
   </t>

 <t>In addition, there is a fourth technique for managing 
(i.e., creation, management, and deletion) a binding on the switch, referred to as
   "manual".  It is based on manual binding configuration. How to
   manage manual bindings is determined by operators, so there is not a new SAVI method
   for manual addresses.
 </t>

 <t>All combinations of address assignment techniques can coexist within a
   layer 2 domain.  A SAVI device MUST implement the
   corresponding binding setup methods (referred to as "SAVI
   methods") for each such technique that is in use if it is to provide
source address validation. 
 </t>

 <t>
   SAVI methods are normally viewed as independent from each other, 
each one handling its own entries. If multiple methods are used in the 
same device without coordination,  each method will attempt to
      reject packets sourced with any addresses that method did not
discover.  To
   prevent addresses discovered by one SAVI method from being filtered out by
   another method, the SAVI binding table SHOULD be shared by all the 
SAVI methods in use in the device.
   This in turn could create some conflict when the same entry is
   discovered by two different methods. The purpose of this document is
   twofold: to provide recommendations and methods to avoid conflicts
   and to resolve conflicts when they happen.  Collisions happening
   within a given method are outside the scope of this document.
 </t>

</section>

<section
  title='Architecture'
  anchor='architecture'>

<t>
    A SAVI device may implement and use multiple SAVI methods. 
This mechanism, called
    "SAVI-MIX", is proposed as an arbiter of the binding generation 
    algorithms from these multiple methods, 
generating the final binding entries as illustrated
    in <xref target='fig_arch'/>.  Once a SAVI
    method generates a candidate binding, it will request that SAVI-MIX
    set up a corresponding entry in the binding table. 
    Then, SAVI-MIX will check if there is any conflict in 
    the binding table. A new binding will be generated if there is no 
    conflict. If there is a conflict, SAVI-MIX will determine whether to
    replace the existing binding or reject the candidate binding based
    on the policies specified in <xref target='collision'/>.
    </t>

<t>
    As a result of this, the packet filtering in the SAVI device
will not be performed by 
    each SAVI method separately. Instead, the table resulting from 
applying SAVI-MIX will be used to perform filtering.  Thus, the filtering is 
based on the combined results of the different SAVI mechanisms. 
It is beyond the scope of this document to describe the details of
the filtering mechanism and its use of the combined SAVI binding
table.</t>
<t>
<figure title='SAVI-MIX Architecture' anchor='fig_arch'>
<artwork>
<![CDATA[                                                            
+--------------------------------------------------------+  
|                                                        |  
|                                        SAVI Device     |  
|                                                        |  
|                                                        |  
|     +------+    +------+    +------+                   |  
|     | SAVI |    | SAVI |    | SAVI |                   |  
|     |      |    |      |    |      |                   |  
|     | FCFS |    | DHCP |    | SEND |                   |  
|     +------+    +------+    +------+                   |  
|        |            |           |   Binding            |  
|        |            |           |   setup              |  
|        v            v           v   requests           |  
|     +------------------------------+                   |  
|     |                              |                   |  
|     |            SAVI-MIX          |                   |  
|     |                              |                   |  
|     +------------------------------+                   |  
|                     |                                  |  
|                     v               Final Binding      |  
|             +--------------+                           |  
|             |   Binding    |                           |  
|             |              |                           |  
|             |   Table      |                           |  
|             +--------------+                           |  
|                                                        |  
+--------------------------------------------------------+
]]></artwork>
</figure>
</t>
<t>Each entry in the binding table will contain the following fields:</t>
<t>
<list style="numbers">
    <t> IP source address
    </t>
    <t> Binding anchor <xref target="RFC7039"/>
    </t>
    <t> Lifetime
    </t>
    <t> Creation time
    </t>
    <t> Binding methods: the SAVI method used for this entry
    </t>

</list>
</t>
</section>

<section
  title='Recommendations for Assignment Separation'
  anchor='recommendation'>

   <t>If each address assignment technique uses a 
separate portion of the IP address space, collisions won't
   happen.  Using non-overlapping address space across 
address assignment techniques, and thus across SAVI methods, is
   therefore recommended.  To that end, one should:</t>

     <t>
     <list style="numbers">
   <t>DHCP and SLAAC: use a non-overlapping prefix for DHCP and SLAAC.  Set
       the A bit in the Prefix Information option of the Router Advertisement
       for the SLAAC prefix, and set the M bit in the Router Advertisement for
       the DHCP prefix.  For detailed explanations of these bits, refer to
       <xref target="RFC4861"/> and <xref target="RFC4862"/>.</t>
   <t>SEND and non-SEND: avoid mixed environments (where SEND and non-SEND
       nodes are deployed) or separate the prefixes announced to SEND
       and non-SEND nodes.  One way to separate the prefixes is to have
       the router(s) announcing different (non-overlapping) prefixes to
       SEND and to non-SEND nodes, using unicast 
Router Advertisements <xref target="RFC6085"/>,
       in response to SEND/non-SEND Router Solicit. </t>
   </list>
   </t>
 
</section>

<section
  title='Resolving Binding Collisions'
  anchor='collision'>
  
<t>In situations where collisions cannot be avoided by assignment separation, 
two cases should be considered:</t>
   <t>
   <list style="numbers">
   <t>The same address is bound on two different binding anchors by
       different SAVI methods.</t>
   <t>The same address is bound on the same binding anchor by different
       SAVI methods.</t>
   </list>
   </t>

    <section title ="Same Address on Different Binding Anchors" anchor='same-different'>
    
       <t>This would typically occur if assignment address spaces could
       not be separated.  For instance, an address is assigned by SLAAC
       on node X, installed in the binding table using FCFS SAVI, and anchored
       to "anchor-X".  Later, the same address is assigned by DHCP to node
       Y, and SAVI-DHCP will generate a candidate binding entry, anchored to
       "anchor-Y".
       </t>
    
        <section title="Basic Preference" anchor="basic">
        <t>If there is any manually configured binding, the SAVI device SHOULD choose the manually
          configured binding anchor.</t>

       <t>For an address not covered by any manual bindings, the SAVI device must decide to which binding anchor the address should be bound
       (anchor-X or anchor-Y in this example).  Current standard documents
       of address assignment methods have implied the prioritization
       relationship based on order in time, i.e., First-Come, First-Served.</t>


        <t>
       <list style="symbols">
       <t>SLAAC: Section 5.4.5 of <xref target="RFC4862"/></t>
       <t>DHCPv4: Section 3.1, Point 5 of <xref target="RFC2131"/></t>
       <t>DHCPv6: Section 18.1.8 of <xref target="RFC3315"/></t>
       <t>SEND: Section 8 of <xref target="RFC3971"/></t>
       </list>
       </t>

       <t>In the absence of any configuration or
       protocol hint (see <xref target="exceptions"/>), the SAVI device SHOULD choose the first-come binding anchor, whether it was learned from SLAAC, SEND, or DHCP.</t>

       
      </section>
    
        <section title="Exceptions" anchor="exceptions">
    
       <t>There are two identified exceptions to the general prioritization
       model, one being Cryptographically Generated Addresses (CGA)
       <xref target="RFC3971"/> and the other controlled by the
       configuration of the switch.</t>
       
       <section title="CGA Preference">
    
       <t>When CGA addresses are used and a collision is detected,
           preference should be given to the anchor that carries the CGA
           credentials once they are verified, in particular, the CGA
           parameters and the RSA options.  Note that if an attacker was
           trying to replay CGA credentials, he would then compete on the
           base of the "First-Come, First-Served" (FCFS) principle.</t>

       </section>

       <section title="Configuration Preference">
       <t>For configuration-driven exceptions, the SAVI device may allow
       the configuration of a triplet ("prefix", "anchor", "method") or
        ("address", "anchor", "method").  The "prefix" or "address" represents
the address or address prefix to which this preference entry applies.  The 
"anchor" is the value of a known binding anchor that this device expects to 
see using this address or addresses from this prefix.  The "method" is
the SAVI method that this device expects to use in validating 
address binding entries from the address or prefix.  At least one of "anchor"
and "method" MUST be specified.  Later, if a Duplicate Address Detection (DAD)
message <xref target="RFC4861"/> is
received with the following conditions verified:</t>

       <t><list style="numbers">

       <t>The target in the DAD message does not exist in the binding
           table,</t>

       <t>The target is within the configured "prefix" (or equal to
           "address"),</t>

       <t>The anchor bound to the target is different from the configured
           anchor, when specified, and</t>

       <t>The configured method, if any, is different from FCFS SAVI,</t>
        </list></t>

       <t>then the switch SHOULD defend the address by responding to the DAD
       message, with a Neighbor Advertisement (NA) message, on behalf of the 
       target node.  It SHOULD NOT install the entry into the
       binding table. The DAD message SHOULD be discarded and not
       forwarded. Forwarding it may cause other SAVI devices to send
   additional defense NAs. SEND nodes in the network MUST disable the option to 
ignore unsecured advertisements (see Section 8 of <xref target="RFC3971"/>). If
       the option is enabled, the case is outside the scope of this document.
       It is suggested to limit the rate of defense NAs to reduce security threats
       to the switch. Otherwise, a malicious host could consume the resource of the switch heavily
       with flooding DAD messages.
      </t> 
       <t>This will simply prevent the node from assigning the
       address and will de facto prioritize the configured anchor.
 It is especially
 useful to protect well-known bindings (such as a static address of a
 server) against any other host, even when the server is down. It is also a way to give priority to a binding learned
       from SAVI-DHCP over a binding for the same address, learned from
       FCFS SAVI.</t>
        </section>

    </section>
        
      <section title="Multiple SAVI Device Scenario" anchor="multiple">
    
       <t>A single SAVI device doesn't have the information of all bound
       addresses on the perimeter.  Therefore, it is not enough to look up
       local bindings to identify a collision.  However, assuming DAD is
       performed throughout the security perimeter for all addresses
       regardless of the assignment method, then the DAD response will inform
       all SAVI devices about any collision.  In that case, "First-Come,
       First-Served" will apply
       the same way as in a single switch scenario.  

   If the admin configured a prefix (or a single static binding) on one of the
   switches to defend, the DAD response generated by this
   switch will also prevent the binding from being installed on other
   switches on the perimeter. The SAVI-MIX preferences of all the SAVI devices in the same layer 2 
       domain should be consistent. Inconsistent configurations may cause 
       network breaks.</t>
    
      </section>
        
    </section>


    <section title="Same Address on the Same Binding Anchor" anchor="same-same">
    
       <t>A binding may be set up on the same binding anchor by multiple
       methods, typically FCFS SAVI and SAVI-DHCP.  If the binding lifetimes
       obtained from the two methods are different, priority should be given
       to 1) manual configuration, 2) SAVI-DHCP, 3) and FCFS SAVI as the least
       authoritative.  The binding will be removed when the prioritized
       lifetime expires, even if a less authoritative method had a longer
       lifetime. </t>

    </section>

</section>

<section title='Security Considerations' anchor='security'>
<t>Combining SAVI methods (as in SAVI-MIX) does not improve or eliminate the
security considerations associated with each individual SAVI method.
Therefore, security considerations for each enabled SAVI method should be
addressed as described in that method's associated RFC. Moreover, combining
methods (as in SAVI-MIX) has two additional implications for security. First,
it may increase susceptibility to DoS attacks, because the SAVI binding setup
rate will be the sum of the rates of all enabled SAVI methods.  Implementers
must take these added resource requirements into account. Second, because SAVI-MIX supports multiple binding mechanisms, it potentially reduces the security
level to that of the weakest supported method, unless additional steps (e.g.,
requiring non-overlapping address spaces for different methods) are
taken. </t>

</section>

<section title='Privacy Considerations' anchor='privacy'>
<t>When implementing multiple SAVI methods, privacy considerations of
    all methods apply cumulatively. </t>
</section>

<section title='IANA Considerations' anchor='iana'>
<t>This document does not require any IANA registrations.
</t>
</section>



</middle>

<back>
<references title="Normative References">

  &RFC2119;
  &RFC2131;
  &RFC3315;
  &RFC3971;
  &RFC6085;
  &RFC6620;
  &RFC7219;
  &RFC7513;

</references>

<references title="Informative References">

  &RFC4861;
  &RFC4862;
  &RFC7039;

</references>

<section
  title='Acknowledgments'
  anchor='acknowledgment' numbered="no">

<t>Thanks to Christian Vogt, Eric Nordmark, Marcelo Bagnulo Braun, David Lamparter, Scott G.&nbsp;Kelly, and Jari Arkko for their valuable contributions.</t>

</section>

</back>

</rfc>
