<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-zhang-sidrops-aspa-egress-03" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="ASPA-based AS_PATH Verification for BGP Export">ASPA-based AS_PATH Verification for BGP Export</title>
    <!--  [REPLACE/DELETE] abbrev. The abbreviated title is required if the full title is longer than 39 characters -->

    <seriesInfo name="Internet-Draft" value="draft-zhang-sidrops-aspa-egress-03"/>
   

    <author initials="J." surname="Zhang" fullname="Jia Zhang">
        <organization>Zhongguancun Laboratory</organization>
        <address>
          <postal>
            <city>Beijing</city>
            <country>China</country>
          </postal>
          <email>zhangj@mail.zgclab.edu.cn</email>
        </address>
      </author>

    <author initials="Y." surname="Wang" fullname="Yangyang Wang">
        <organization>Tsinghua University</organization>
        <address>
          <postal>
            <city>Beijing</city>
            <country>China</country>
          </postal>
          <email>wangyy@cernet.edu.cn</email>
        </address>
      </author>
    
    <author initials="M." surname="Matejka" fullname="Maria Matejka">
        <organization>CZ.NIC</organization>
        <address>
          <postal>
            <country>Czechia</country>
          </postal>
          <email>maria.matejka@nic.cz</email>
        </address>
      </author>
    
    <author initials="M." surname="Xu" fullname="Mingwei Xu">
        <organization>Tsinghua University</organization>
        <address>
          <postal>
            <city>Beijing</city>
            <country>China</country>
          </postal>
          <email>xmw@cernet.edu.cn</email>
        </address>
      </author>


    <date year="2025"/>
    <!-- On draft subbmission:
         * If only the current year is specified, the current day and month will be used.
         * If the month and year are both specified and are the current ones, the current day will
           be used
         * If the year is not the current one, it is necessary to specify at least a month and day="1" will be used.
    -->

    <area>Operations and Management Area (OPS)</area>
    <workgroup>SIDR Operations Working Group</workgroup>
    <!-- "Internet Engineering Task Force" is fine for individual submissions.  If this element is 
          not present, the default is "Network Working Group", which is used by the RFC Editor as 
          a nod to the history of the RFC Series. -->

    <keyword>BGP</keyword>
    <keyword>ASPA</keyword>
    <keyword>Route leak</keyword>
    <!-- [REPLACE/DELETE]. Multiple allowed.  Keywords are incorporated into HTML output files for 
         use by search engines. -->

    <abstract>
      <t>This document describes that a BGP speaker may perform AS_PATH verification on the routes it sends to BGP neighbors at external BGP (eBGP) egress 
        based on Autonomous System Provider Authorization (ASPA) objects in the Resource Public Key Infrastructure (RPKI). Before BGP speakers advertise 
        routes to external peers at eBGP egress, performing ASPA-based AS_PATH verification can prevent route leaks to external peers, check for 
        local misconfigurations and detect ASPA registration errors, thus avoiding the advertisement of invalid routes.</t>
    </abstract>
 
  </front>

  <middle>
    
    <section>
      <name>Introduction</name>
        <t>Autonomous System Provider Authorization (ASPA) objects in the RPKI can be used to verify BGP AS_PATH for detection and mitigation of route leaks 
            and certain prefix hijacks involving forged origins or forged path-segments with some improbable AS paths. The ASPA object profile is defined in <xref target="I-D.ietf-sidrops-aspa-profile"/>. </t>

        <t> In the procedures of ASPA-based BGP AS_PATH verification defined in <xref target="I-D.ietf-sidrops-aspa-verification"/>, ingress external BGP (eBGP) router of 
            an AS receives routes from its BGP peers, and perform ASPA-based BGP AS_PATH verification and mitigation at eBGP ingress, as recomendations 
            specified in Section 8.1 in <xref target="I-D.ietf-sidrops-aspa-verification"/>. BGP AS_PATH verification at eBGP ingress can detect and 
            prevent the route leaks in the routes received from BGP neighbors. However, considering that route leaks may occur within the local AS and 
            that the local AS may modify the AS_PATH, it lacks the ability to prevent the BGP speaker from advertising invalid routes to its external 
            peers at eBGP egress.</t>
        
        <t>This document describes ASPA-based BGP AS_PATH verification at eBGP egress. It does not change the semantics or procedures of ASPA-based BGP AS_PATH 
            verification defined in <xref target="I-D.ietf-sidrops-aspa-verification"/>. It explains important use cases and specifics of correct implementation 
            of ASPA-based path verification in eBGP egress policies, as <xref target="RFC8893"/> did with RPKI origin validation for BGP export.
            The verification procedure at eBGP egress is a little bit different from the process at the eBGP ingress. By AS_PATH verification before sending 
            routes to BGP neighbors at eBGP egress, a BGP speaker can detect ASPA registration errors and local misconfiguration, and prevent the improper 
            propagation of route leaks.</t>
      
      <section>
        <name>Requirements Language</name>
        <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 BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in
          all capitals, as shown here.</t>
      </section>
      <!-- [CHECK] The 'Requirements Language' section is optional -->
    </section>
    
  <section>
    <name>Suggested Reading</name>
    <t>
      It is assumed that the reader understands BGP<xref target="RFC4271"/>, RPKI<xref target="RFC6480"/>,  
      ASPA object profile<xref target="I-D.ietf-sidrops-aspa-profile"/>, 
      ASPA-based BGP AS_PATH verification<xref target="I-D.ietf-sidrops-aspa-verification"/>, and RPKI-ROV for BGP export<xref target="RFC8893"/>.
    </t>
  </section>

    <section>
      <name>Procedure of ASPA-based AS_PATH Verification at eBGP Egress</name>

      <t>When a BGP speaker advertises a route to an external peer through eBGP egress, the BGP speaker prepends its own AS number to the AS_PATH of 
        the route, and performs ASPA-based AS_PATH verification before sending the route to the external peer. </t>

        <t>Suppose the BGP speaker is at AS X, and its external peer is at AS Y, and the AS_PATH P of the route to be advertised to external peer 
            by the BGP speaker is represented by {AS X, AS(N), ..., AS(2), AS(1)},  where AS(1) is the origin AS, and AS X is the local AS number 
            added by the BGP speaker of AS X at eBGP egress. </t>
        <figure anchor="fig1" align="left" suppress-title="false" pn="figure-1">
            <name slugifiedName="secnario">Illustration of the eBGP egress.</name>
            <artwork align="left" name="" type="" alt="">
    <![CDATA[
                        +------------------------+              
                        |          AS X          |              
                        |                        |              
        +-------+  eBGP |  +----+  iBGP  +----+  | eBGP  +--------+
        | AS(N) |-------->>| R1 |------>>| R2 |-------->>|  AS Y  |
        +-------+       |  +----+        +----+ \|       +--------+
                        |                        \                         
                        +------------------------+\              
                                                   \ eBGP egress         
    ]]>
    </artwork>
          </figure>   
        
        
        <t>The method of ASPA-based AS_PATH verification at the eBGP egress of the BGP speaker is described as follows:</t>

        <t>1. Regard the external neighbor AS Y as the virtual receiving/validating AS point. </t>

        <t>2. The BGP roles of AS X and AS Y, including Customer, Provider, Route Server (RS), Route Server Client (RS-client) and Peer, are defined in <xref target="RFC9234"/>, and they can be 
            configured locally and used for the path verification.</t>

        <t>3. If AS X is the Customer or Peer to AS Y, or AS Y is a (transparent or non-transparent) Route Server (RS) and AS X is a RS-client, 
            or, AS Y is a RS-client and AS X is a (transparent or non-transparent) RS, 
            use the upstream path verification algorithm (described in <xref target="I-D.ietf-sidrops-aspa-verification"/>) to verify the AS_PATH P. </t>

        <t>4. If AS X is the Provider to AS Y, use the downstream path verification algorithm (described 
            in <xref target="I-D.ietf-sidrops-aspa-verification"/>) to verify the AS_PATH P.</t>
            
            
    </section>

    
  <section>
    <name>Necessity and Benificial Cases</name>
    <t>By performing AS_PATH verification before sending routes to BGP neighbors at the eBGP egress, a BGP speaker can avoid local misconfigurations, prevent local route leaks, 
      and detect ASPA registration errors.</t>

    <section>
    <name>Prevent Local Misconfigurations</name>
    <t>Egress AS_PATH verification will prevent misconfigurations of the egress router. If the local AS has multiple AS numbers, it is necessary to ensure 
    that the AS number added to the AS_PATH at the egress is correct and whether it could lead to neighbors validating it as invalid. Additionally, the 
    local AS needs to check if any modifications to the AS_PATH in export policy are legitimate. Verification at the egress will prevent the local AS from 
    advertising routes with invalid AS_PATHs, allowing for quick detection of issues and correction of local configuration errors.</t>

    </section>

    <section>
    <name>Complete ASPA-based Verification Method</name>

    <t>The current ASPA-based AS_PATH verification is not a complete solution. Performing AS_PATH verification at the ingress can detect route leaks 
    in the routes received from BGP neighbors, but it cannot prevent local route leaks. Egress AS_PATH verification can detect local route leaks, 
    further completing the overall ASPA-based AS_PATH verification solution.</t>
    
    <t>Even though OTC, defined in <xref target="RFC9234"/>, can address local route leaks when used properly, it is tightly coupled with BGP, which increases 
    the likelihood of configuration errors. In contrast, ASPA provides an out-of-band verification solution that decouples from BGP protocol configuration, 
    making the chances of simultaneous configuration errors much lower. 
    Additionally, ASPA has advantages in both security and operability. OTC lacks built-in tamper-proof mechanisms and integrity verification, leaving it 
    vulnerable to malicious attackers or misconfigurations. ASPA achieves secure verification through the distribution of resource certificates and authentication.
    In terms of operational complexity, OTC requires BGP role configuration per router per session, increasing configuration complexity. Furthermore, to 
    implement OTC as specified in <xref target="RFC9234"/>, both the local AS and remote peers need router updates, while ASPA only requires that neighbors 
    have records in ASPA for local verification.</t>
    </section>

    <section>
    <name>Detect ASPA Registration Errors</name>
    <t>If the local AS or customers have registration errors or omissions, they can be detected at the egress, allowing for 
    quick identification of the issue. This mainly includes the following two scenarios:</t>

      <t>(1) Case of local AS: if the local AS has omitted one or more providers in ASPA provider list, the local AS may end up advertising routes with 
      ASPA-invalid AS_PATH to its customers.</t>

      <t>(2) Case of Customer: if the Customer of local AS forgets to include the local AS in their ASPA provider list, the local AS may end up advertising 
      their routes with ASPA-invalid AS_PATH to its neighbors.</t>

    <t>Performing AS_PATH verification at the egress could detect such registration errors immediately and point to its actual source clearly and noticeably; 
    otherwise, routes advertised by the local AS may be filtered by other ASes, leaving the local AS unaware of the issue.</t>
    </section>
  </section>

    <section anchor="operation">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Operational Considerations</name>
      <t>
         The peering relationships between the local AS and its external neighbor ASes, including Customer-Provider/Provider-Customer, Peer-Peer, 
         Route Server (RS) and RS-client, mutual-transit, are used in path verification procedures to determine whether upstream or downstream procedures 
         should be applied. There are the following possible ways to know the relations between the local AS and its external neighbor AS: (1) The first way 
         is to use the BGP Role Capabilities exchanged in the BGP OPEN message as specified in <xref target="RFC9234"/>. (2) The second way is to use ASPA objects 
         registered by the local AS and its external neighbor AS. (3) Another possible way is to use local configuration. When the relation of two neighboring 
         ASes is mutual-transit, they are Customers of each other in BGP roles. It can be confirmed by BGP roles advertised in the BGP OPEN message, or 
         configuration in local file. If a mutual-transit relation is identified as Cutomer-Provider, a false positive of route leak may be generated in path 
         verification.
      </t>
    </section>


    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
      <t>
        The security considerations that apply to ASPA-based AS_PATH verification (see <xref target="I-D.ietf-sidrops-aspa-verification"/>) also apply to 
        the procedure described in this document.
      </t>
    </section>

    <section anchor="IANA">
    <!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
      <t>This document has no IANA actions</t>
    </section>
    

    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.6480.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.4271.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8893.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9234.xml"/>
        

        <!-- The recommended and simplest way to include a well known reference -->

      </references>
 
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-sidrops-aspa-profile" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-aspa-profile-19">
        <front>
        <title>A Profile for Autonomous System Provider Authorization</title>
        <author initials="A." surname="Azimov" fullname="Alexander Azimov">
        <organization>Yandex</organization>
        </author>
        <author initials="E." surname="Uskov" fullname="Eugene Uskov">
        <organization>JetLend</organization>
        </author>
        <author initials="R." surname="Bush" fullname="Randy Bush">
        <organization>Internet Initiative Japan</organization>
        </author>
        <author initials="J." surname="Snijders" fullname="Job Snijders">
        <organization>Fastly</organization>
        </author>
        <author initials="R." surname="Housley" fullname="Russ Housley">
        <organization>Vigil Security, LLC</organization>
        </author>
        <author initials="B." surname="Maddison" fullname="Ben Maddison">
        <organization>Workonline</organization>
        </author>
        <date month="January" day="6" year="2025"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-aspa-profile-19"/>
        </reference>


        <reference anchor="I-D.ietf-sidrops-aspa-verification" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-aspa-verification-22">
        <front>
        <title>BGP AS_PATH Verification Based on Autonomous System Provider Authorization (ASPA) Objects</title>
        <author initials="A." surname="Azimov" fullname="Alexander Azimov">
        <organization>Yandex</organization>
        </author>
        <author initials="E." surname="Bogomazov" fullname="Eugene Bogomazov">
        <organization>Qrator Labs</organization>
        </author>
        <author initials="R." surname="Bush" fullname="Randy Bush">
        <organization>Internet Initiative Japan &amp; Arrcus, Inc.</organization>
        </author>
        <author initials="K." surname="Patel" fullname="Keyur Patel">
        <organization>Arrcus</organization>
        </author>
        <author initials="J." surname="Snijders" fullname="Job Snijders">
        <organization>Fastly</organization>
        </author>
        <author initials="K." surname="Sriram" fullname="Kotikalapudi Sriram">
        <organization>USA National Institute of Standards and Technology</organization>
        </author>
        <date month="March" day="23" year="2025"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-aspa-verification-22"/>
        </reference>
      
      </references>
    </references>
    
    
    <!--
    <section>
      <name>Appendix 1 [REPLACE/DELETE]</name>
      <t>This becomes an Appendix [REPLACE]</t>
    </section>
    -->

    <section anchor="Acknowledgements" numbered="false"> 
      <!-- [REPLACE/DELETE] an Acknowledgements section is optional -->
      <name>Acknowledgements</name>
      <t>The authors thank Nan Geng, Sriram Kotikalapudi and Randy Bush for their valuable suggestions and comments.</t>
    </section>

 <!--     <section anchor="Contributors" numbered="false">-->
      <!-- [REPLACE/DELETE] a Contributors section is optional -->
 <!--     <name>Contributors</name>
      <t>Thanks to all of the contributors. [REPLACE]</t>-->
      <!-- [CHECK] it is optional to add a <contact> record for some or all contributors -->
  <!--   </section>
-->


 </back>
</rfc>
