<?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.7.18 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-idr-content-filter-flowspec-03" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title>Packet Content Filter for BGP FlowSpec</title>
    <seriesInfo name="Internet-Draft" value="draft-cui-idr-content-filter-flowspec-03"/>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <author initials="Y." surname="Gao" fullname="Yujia Gao">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <phone>+86-185-1028-7458</phone>
        <email>gaoyj@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="S." surname="Hares" fullname="Susan Hares">
      <organization>Hickory Hill Consulting</organization>
      <address>
        <postal>
          <street>7453 Hickory Hill</street>
          <city>Saline</city>
          <region>Michigan</region>
          <code>48176</code>
          <country>United States of America</country>
        </postal>
        <phone>+1-734-604-0332</phone>
        <email>shares@ndzh.com</email>
      </address>
    </author>
    <date year="2024" month="August" day="15"/>
    <area>Security</area>
    <workgroup>IETF</workgroup>
    <keyword>DDoS Mitigation, BGP flow specification</keyword>
    <abstract>
      <?line 122?>

<t>The BGP Flow Specification enables the distribution of traffic filter policies (traffic filters and actions) via BGP, facilitating DDoS traffic filtering. 
However, the traffic filter in FSv1 and FSv2 predominantly focuses on IP header fields, which may not adequately address volumetric DDoS attack traffic characterized by fixed patterns within the packet content. 
This document introduces a new flow specification filter type designed for packet content filtering. 
The match field includes ptype, otype, offset, content-length, content, and mask encoded in the Flowspec NLRI. 
This new filter aims to leverage network devices such as routers and switches to defend against simple volumetric DDoS attacks, reducing the overall defence cost of carrier network.</t>
    </abstract>
  </front>
  <middle>
    <?line 130?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>BGP flow specification describes the distribution of traffic filter policies through BGP, allowing for efficient traffic management and DDoS attack mitigation. 
Existing versions, FSv1 and FSv2, primarily offer n-tuple matching conditions for policy enforcement, enabling actions such as packet dropping, re-directing, or limitation, etc.
These filter rules can be propagated to all BGP peers simultaneously without necessitating router configuration changes. 
Despite their utility, existing filters reliance on IP header fields for traffic filtering is increasingly inadequate for new kinds of DDoS attack. DDoS attacks such as ACK flood, UDP flood, ICMP flood and HTTP flood attacks, etc, have been found to potentially characterise a fixed content in the packet.</t>
      <t>This document delineates a new flow specification filter type that facilitates packet content filtering, leveraging ptype, otype, offset, content-length, content, and mask fields within the FlowSpec NLRI to enhance DDoS defense mechanisms.</t>
      <section anchor="terminology">
        <name>Terminology</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>
        <!-- # Body [REPLACE] -->

</section>
    </section>
    <section anchor="definitions-and-acronyms">
      <name>Definitions and Acronyms</name>
      <ul spacing="normal">
        <li>
          <t>DDoS: Distributed Denial of Service</t>
        </li>
        <li>
          <t>NLRI: Network Layer Reachability Information</t>
        </li>
        <li>
          <t>FSv1: Flow Specification Version 1, defined in <xref target="RFC8955"/> and <xref target="RFC8956"/></t>
        </li>
        <li>
          <t>FSv2: Flow Specification Version 2 define in [draft-hares-idr-flowspec-v2-ddos-00]</t>
        </li>
      </ul>
    </section>
    <section anchor="the-packet-content-filter-for-fsv1">
      <name>The Packet Content Filter for FSv1</name>
      <t>This document specifies a new flow specification filter type that is encoded in the BGP FS NLRI and we follow the FSv1 definition format. The packet content filter is defined as follows:</t>
      <t>Type TBD – Packet-Content</t>
      <t>Encoding:&lt; type (1 octet), value&gt;</t>
      <t>The value field is encoded using ptype, otype, offset, content-length, content and mask.</t>
      <t>Encoding: &lt; ptype (4 bits), otype (4 bits), offset (2 octets), content-length (1 octets), content (Variable), mask (Variable)&gt;</t>
      <section anchor="ptype-field">
        <name>Ptype Field</name>
        <t>The ptype is defined as a 4-bit unsigned integer that defines the packet type via AFI, because some filters are added to hardware that are IPv4 or IPv6 specific.</t>
        <artwork><![CDATA[
+-------+-----------------------------+
| Value | Description of Ptype        |
+-------+-----------------------------+
| 1     | IPv4                        |
| 2     | IPv6                        |
+-------+-----------------------------+
]]></artwork>
        <t>Figure 1： Ptype field</t>
      </section>
      <section anchor="otype-and-offset-fields">
        <name>Otype and Offset Fields</name>
        <t>The otype and offset fields define the starting position of the packet content used for matching.</t>
        <t>To avoid the effect of variable header length on the offset, we use the hierarchical way like [draft-khare-idr-bgp-flowspec-payload-match-08]. The Otype is defined as a 4-bit unsigned integer. The detail are as follows:</t>
        <artwork><![CDATA[
+-------+-----------------------------+
| Value | Description of Otype        |
+-------+-----------------------------+
| 0     | IP Header                   |
| 1     | IP Payload                  |
| 2     | TCP/UDP Payload             |
+-------+-----------------------------+
]]></artwork>
        <t>Figure 2： Otype field</t>
        <t>Otype 0 is defined as the start of the IP header. Otype 1 is defined as the start of the data portion of the IP header after the IP options. Otype 2 is defined as the start of the TCP or UDP data. Type 2 will only be used if it is the Layer 4 transport protocol is TCP (6) or UDP (17). For other IP protocols, type 1 or type 2 can be used.</t>
        <t>The offset is defined as a 2-octet unsigned integer that specifies the count of octets to be bypassed from the otype's starting position to match the packet content. 
It is worth noting that packet fragmentation will cause the offset value to change, so it is not enough to filter the fragmented packets through the packet content filter. One possible way is to filter the first packet through the payload filter, and then use its header information along with the fragment filter to filter the subsequent packets.</t>
        <t>Example:</t>
        <ul spacing="normal">
          <li>
            <t>By setting otype 0 and an offset of 0, the match is configured to start precisely at the beginning of the IP header.</t>
          </li>
          <li>
            <t>By setting otype 1 and an offset of 2, the match will start two octets past the initial data portion of the IP header, skipping over any IP options. This configuration, for example, in UDP packets, specifically targets the start of the destination port information.</t>
          </li>
          <li>
            <t>By setting otype 2 and an offset of 10, the match will start ten octets into the content of the TCP/UDP packet.</t>
          </li>
        </ul>
      </section>
      <section anchor="content-length-content-and-mask-fields">
        <name>Content-length, Content and Mask Fields</name>
        <t>The content-length is a one octet unsigned integer field that contains the length of the value field in octets.
Content and mask fields have a same length which defined by the content-length.</t>
        <t>The content provides a string to be matched. 
Based on the information provided by equipment vendors and operators, 8 octets is usually sufficient for the identification of DDoS attacks.</t>
        <t>Mask is a string containing 0 and 1, where 1 represents what will be matched and 0 represents characters that can be ignored.</t>
        <t>The content and mask are operated AND by bit to get the final content of the packet that needs to be matched.</t>
      </section>
      <section anchor="example-of-encoding">
        <name>Example of Encoding</name>
        <t>An example of a FlowSpec NLRI encoding for:"all packets to 192.0.2.0/24 and have fixed content 5858 in the tcp payload with offset of 0".</t>
        <table>
          <thead>
            <tr>
              <th align="left">length</th>
              <th align="left">destination</th>
              <th align="left">packet content</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0b</td>
              <td align="left">01 18 c0 00 02</td>
              <td align="left">TBD 40 12 00 00 02 58 58 ff ff</td>
            </tr>
          </tbody>
        </table>
        <t>Description of each field of the FlowSpec NLRI.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left"> </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0f</td>
              <td align="left">length</td>
              <td align="left">15 octets (if len&lt;240, 1 octet)</td>
            </tr>
            <tr>
              <td align="left">0x01</td>
              <td align="left">type</td>
              <td align="left">Type 1 - Destination Prefix</td>
            </tr>
            <tr>
              <td align="left">0x18</td>
              <td align="left">length</td>
              <td align="left">24 bits</td>
            </tr>
            <tr>
              <td align="left">0xc0</td>
              <td align="left">prefix</td>
              <td align="left">192</td>
            </tr>
            <tr>
              <td align="left">0x00</td>
              <td align="left">prefix</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">prefix</td>
              <td align="left">2</td>
            </tr>
            <tr>
              <td align="left">TBD</td>
              <td align="left">type</td>
              <td align="left">Type TBD - Packet Content</td>
            </tr>
            <tr>
              <td align="left">0x40</td>
              <td align="left">length</td>
              <td align="left">64 bits</td>
            </tr>
            <tr>
              <td align="left">0x12</td>
              <td align="left">ptype, otype</td>
              <td align="left">IPv4, TCP payload</td>
            </tr>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">offset</td>
              <td align="left">0 octets</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">content-length</td>
              <td align="left">2 octets</td>
            </tr>
            <tr>
              <td align="left">0x5858</td>
              <td align="left">content</td>
              <td align="left">0x5858</td>
            </tr>
            <tr>
              <td align="left">0xffff</td>
              <td align="left">mask</td>
              <td align="left">0xffff</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="the-packet-content-filter-for-fsv2">
      <name>The Packet Content Filter for FSv2</name>
      <section anchor="filter-encoding">
        <name>Filter Encoding</name>
        <t>To adapt to the updates of flowSpec, this document also gives the definition of the packet content filters in FSv2. The formate is as same as the NLRI formate for extented IP filters, as shown in Figure 3:</t>
        <artwork><![CDATA[
+--------------------------------+
| NLRI length (2 octets)         |
+--------------------------------+
| TLVs+                          |
| +============================+ |
| | order (4 octets)           | |
| +----------------------------+ |
| | identifier (4 octets)      | |
| +----------------------------+ |
| | FSv2 Filter type = 2       | |
| +----------------------------+ |
| | length TLVs (2 octet)      | |
| +----------------------------+ |
| +----------------------------+ |
| + +------------------------+ + |
| + |FSv2 filters version    | + |
| + +------------------------+ + |
| + | Sub-TLVs               | + |
| + +------------------------+ + |
| +----------------------------+ |
+--------------------------------+
]]></artwork>
        <t>Figure 3： NLRI formate for extented IP filters</t>
        <t>The formate of Sub-TLVs is showns in Figure 4:</t>
        <artwork><![CDATA[
+----------------------------+
|  Component Type (1 octet)  |
+----------------------------+
|  Length (1 octet)          |
+ ---------------------------+
|  Value (variable)          |
+----------------------------+
]]></artwork>
        <t>Figure 4: formate for Sub-TLV</t>
        <t>The defination of packet content filter in sub-TLV formate are as follows:</t>
        <artwork><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |Component Type | Component Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PType | Otype |             Offset            | Content Length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Content                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Mask                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Figure 5: Defination of the packet content filter</t>
        <t>where fileds have the same length as FSv1.</t>
        <t>Encoding: &lt; ptype (4 bits), otype (4 bits), offset (2 octets), content-length (1 octets), content (Variable), mask (Variable)&gt;</t>
      </section>
      <section anchor="filter-ordering-rule">
        <name>Filter Ordering Rule</name>
        <t>Compared to FSv1, FSv2 adds filter ordering function. According to the defination of ordering rules in FSv2, the transmission of SubTLVs within a flow specification rule MUST be sent ascending order by SubTLV type. 
If the SubTLV types are the same, then the value fields are compared using mechanisms defined in <xref target="RFC8955"/> and <xref target="RFC8956"/> and MUST be in ascending order.</t>
        <t>However, due to multiple fields in the value of the packet content filter, the mechanisms defined in <xref target="RFC8955"/> and <xref target="RFC8956"/> do not apply. To give the default ordering rules of packet content filters, this document gives the defination as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Filters with a larger content-length are implemented first.</t>
          </li>
          <li>
            <t>If they have the same content-length, compare otype and the larger type is implemented first.</t>
          </li>
          <li>
            <t>If they have the same content-lengte and otype, compare offset and the larger value will be implemented first.</t>
          </li>
          <li>
            <t>If they have the same content-length, otype, and offset, compare the content as a binary string using the memcmp() function as deﬁned by [ISO_IEC_9899]. The common preﬁx is compared. If the common preﬁx is not equal, the string with the lower preﬁx has higher precedence.</t>
          </li>
        </ol>
        <t>When there are multiple component exist in multiple NLRI, determine the order of the packet content filters according to the above ordering rules.</t>
      </section>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>Here is a use case for ordering rules with multiple NLRI and multiple components. There are five components, with the same destination IP and user order, each of which contains a packet content filter with different values:</t>
        <artwork><![CDATA[
User-Order – 10  

FSv2 – NLRI with Extended IP Filters

Component 1: Destination IP + Packet content filter (otype 0, offset 50, content-length 2, content 0x1111) + Rate Limit 

Component 2: Destination IP + Packet content filter (otype 0, offset 50, content-length 3, content 0x111122) + Discard 

Component 3: Destination IP + Packet content filter (otype 2, offset 70, content-length 2, content 0x1111) + Rate Limit

Component 4: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111122) + Discard 

Component 5: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111133) + Rate Limit
]]></artwork>
        <t>The rules will be installed as:</t>
        <artwork><![CDATA[
User-Order – 10

Component 4: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111122) + Discard

Component 5: Destination IP + Packet content filter (otype 2, offset 70, content-length 3, content 0x111133) + Rate Limit

Component 2: Destination IP + Packet content filter (otype 0, offset 50, content-length 3, content 0x111122) + Discard

Component 3: Destination IP + Packet content filter (otype 2, offset 70, content-length 2, content 0x1111) + Rate Limit

Component 1: Destination IP + Packet content filter (otype 0, offset 50, content-length 2, content 0x1111) + Rate Limit
]]></artwork>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>In accordance with the procedures outlined for managing the "Flow Spec Component Types" registry, IANA is hereby requested to assign a new Type Value. 
This assignment is sought from the First Come First Served range, as detailed below:</t>
      <artwork><![CDATA[
+------------+---------------------------+---------------+
| Type Value | Name                      | Reference     |
+------------+---------------------------+---------------+
| TBD        | Packet Content filter     | this document |
+------------+---------------------------+---------------+
]]></artwork>
      <t>The introduction of the "Packet Content filter" Type Value is purposed to expand the capability of BGP FSv1 by enabling more granular control over traffic filtering.</t>
      <t>This is especially pertinent for addressing complex patterns within packet content that are characteristic of Distributed Denial of Service (DDoS) attacks and other security challenges. 
The proposed Packet Content filter facilitate the specification of detailed criteria for traffic matching, including but not limited to, content inspection at specific packet offsets. In the following update we will add the definition of FSv2.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>No new security issues are introduced to the BGP protocol by this specification</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC8955">
        <front>
          <title>Dissemination of Flow Specification Rules</title>
          <author fullname="C. Loibl" initials="C." surname="Loibl"/>
          <author fullname="S. Hares" initials="S." surname="Hares"/>
          <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
          <author fullname="D. McPherson" initials="D." surname="McPherson"/>
          <author fullname="M. Bacher" initials="M." surname="Bacher"/>
          <date month="December" year="2020"/>
          <abstract>
            <t>This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix.</t>
            <t>It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI. Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
            <t>This document obsoletes both RFC 5575 and RFC 7674.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8955"/>
        <seriesInfo name="DOI" value="10.17487/RFC8955"/>
      </reference>
      <reference anchor="RFC8956">
        <front>
          <title>Dissemination of Flow Specification Rules for IPv6</title>
          <author fullname="C. Loibl" initials="C." role="editor" surname="Loibl"/>
          <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk"/>
          <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
          <date month="December" year="2020"/>
          <abstract>
            <t>"Dissemination of Flow Specification Rules" (RFC 8955) provides a Border Gateway Protocol (BGP) extension for the propagation of traffic flow information for the purpose of rate limiting or filtering IPv4 protocol data packets.</t>
            <t>This document extends RFC 8955 with IPv6 functionality. It also updates RFC 8955 by changing the IANA Flow Spec Component Types registry.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8956"/>
        <seriesInfo name="DOI" value="10.17487/RFC8956"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <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="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 397?>

<section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>We wish to thank Jeffery Hass and Li Yang for their valuable comments and suggestions on this document.
We also wish to thank Rui Xu and Yannan Hu for their contribution in the implementation and validation of the packet content filter software.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
qUCQ9h/udkEoHqd4iJ009n/vzFLOCUgAAA==

-->

</rfc>
