rfc9098.original | rfc9098.txt | |||
---|---|---|---|---|
IPv6 Operations Working Group (v6ops) F. Gont | Internet Engineering Task Force (IETF) F. Gont | |||
Internet-Draft SI6 Networks | Request for Comments: 9098 SI6 Networks | |||
Intended status: Informational N. Hilliard | Category: Informational N. Hilliard | |||
Expires: December 13, 2021 INEX | ISSN: 2070-1721 INEX | |||
G. Doering | G. Doering | |||
SpaceNet AG | SpaceNet AG | |||
W. Kumari | W. Kumari | |||
G. Huston | G. Huston | |||
APNIC | APNIC | |||
W. Liu | W. Liu | |||
Huawei Technologies | Huawei Technologies | |||
June 11, 2021 | September 2021 | |||
Operational Implications of IPv6 Packets with Extension Headers | Operational Implications of IPv6 Packets with Extension Headers | |||
draft-ietf-v6ops-ipv6-ehs-packet-drops-08 | ||||
Abstract | Abstract | |||
This document summarizes the operational implications of IPv6 | This document summarizes the operational implications of IPv6 | |||
extension headers specified in the IPv6 protocol specification | extension headers specified in the IPv6 protocol specification (RFC | |||
(RFC8200), and attempts to analyze reasons why packets with IPv6 | 8200) and attempts to analyze reasons why packets with IPv6 extension | |||
extension headers are often dropped in the public Internet. | headers are often dropped in the public Internet. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Not all documents | |||
approved by the IESG are candidates for any level of Internet | ||||
Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on December 13, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9098. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology | |||
3. Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Disclaimer | |||
4. Background Information . . . . . . . . . . . . . . . . . . . 3 | 4. Background Information | |||
5. Previous Work on IPv6 Extension Headers . . . . . . . . . . . 5 | 5. Previous Work on IPv6 Extension Headers | |||
6. Packet Forwarding Engine Constraints . . . . . . . . . . . . 7 | 6. Packet-Forwarding Engine Constraints | |||
6.1. Recirculation . . . . . . . . . . . . . . . . . . . . . . 8 | 6.1. Recirculation | |||
7. Requirement to Process Layer-3/layer-4 information in | 7. Requirement to Process Layer 3 / Layer 4 Information in | |||
Intermediate Systems . . . . . . . . . . . . . . . . . . . . 8 | Intermediate Systems | |||
7.1. ECMP and Hash-based Load-Sharing . . . . . . . . . . . . 8 | 7.1. ECMP and Hash-Based Load Sharing | |||
7.2. Enforcing infrastructure ACLs . . . . . . . . . . . . . . 9 | 7.2. Enforcing Infrastructure ACLs | |||
7.3. DDoS Management and Customer Requests for Filtering . . . 10 | 7.3. DDoS Management and Customer Requests for Filtering | |||
7.4. Network Intrusion Detection and Prevention . . . . . . . 10 | 7.4. Network Intrusion Detection and Prevention | |||
7.5. Firewalling . . . . . . . . . . . . . . . . . . . . . . . 11 | 7.5. Firewalling | |||
8. Operational and Security Implications . . . . . . . . . . . . 12 | 8. Operational and Security Implications | |||
8.1. Inability to Find Layer-4 Information . . . . . . . . . . 12 | 8.1. Inability to Find Layer 4 Information | |||
8.2. Route-Processor Protection . . . . . . . . . . . . . . . 12 | 8.2. Route-Processor Protection | |||
8.3. Inability to Perform Fine-grained Filtering . . . . . . . 12 | 8.3. Inability to Perform Fine-Grained Filtering | |||
8.4. Security Concerns Associated with IPv6 Extension Headers 12 | 8.4. Security Concerns Associated with IPv6 Extension Headers | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | 9. IANA Considerations | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 10. Security Considerations | |||
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 | 11. References | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 11.1. Normative References | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 14 | 11.2. Informative References | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 15 | Acknowledgements | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
IPv6 Extension Headers (EHs) allow for the extension of the IPv6 | IPv6 extension headers (EHs) allow for the extension of the IPv6 | |||
protocol, and provide support for core functionality such as IPv6 | protocol and provide support for core functionality such as IPv6 | |||
fragmentation. However, common implementation limitations suggest | fragmentation. However, common implementation limitations suggest | |||
that EHs present a challenge for IPv6 packet routing equipment and | that EHs present a challenge for IPv6 packet routing equipment and | |||
middle-boxes, and evidence exists that IPv6 packets with EHs are | middleboxes, and evidence exists that IPv6 packets with EHs are | |||
intentionally dropped in the public Internet in some circumstances. | intentionally dropped in the public Internet in some circumstances. | |||
This document has the following goals: | This document has the following goals: | |||
o Raise awareness about the operational and security implications of | * Raise awareness about the operational and security implications of | |||
IPv6 Extension Headers specified in [RFC8200], and present reasons | IPv6 extension headers specified in [RFC8200] and present reasons | |||
why some networks resort to intentionally dropping packets | why some networks resort to intentionally dropping packets | |||
containing IPv6 Extension Headers. | containing IPv6 extension headers. | |||
o Highlight areas where current IPv6 support by networking devices | * Highlight areas where current IPv6 support by networking devices | |||
maybe sub-optimal, such that the aforementioned support is | may be suboptimal, such that the aforementioned support is | |||
improved. | improved. | |||
o Highlight operational issues associated with IPv6 extension | * Highlight operational issues associated with IPv6 extension | |||
headers, such that those issues are considered in IETF | headers, such that those issues are considered in IETF | |||
standardization efforts. | standardization efforts. | |||
Section 4 provides background information about the IPv6 packet | Section 4 of this document provides background information about the | |||
structure and associated implications. Section 5 of this document | IPv6 packet structure and associated implications. Section 5 | |||
summarizes the previous work that has been carried out in the area of | summarizes previous work that has been carried out in the area of | |||
IPv6 extension headers. Section 6 discusses packet forwarding engine | IPv6 extension headers. Section 6 discusses packet-forwarding engine | |||
constraints in contemporary routers. Section 7 discusses why | constraints in contemporary routers. Section 7 discusses why | |||
intermediate systems may need to access Layer-4 information to make a | intermediate systems may need to access Layer 4 information to make a | |||
forwarding decision. Finally, Section 8 discusses the operational | forwarding decision. Finally, Section 8 discusses operational | |||
implications of IPv6 EHs. | implications of IPv6 EHs. | |||
2. Terminology | 2. Terminology | |||
This document uses the term "intermediate system" to describe both | This document uses the term "intermediate system" to describe both | |||
routers and middle-boxes, when there is no need to distinguish | routers and middleboxes when there is no need to distinguish between | |||
between the two and where the important issue is that the device | the two and where the important issue is that the device being | |||
being discussed forwards packets. | discussed forwards packets. | |||
3. Disclaimer | 3. Disclaimer | |||
This document analyzes the operational challenges represented by | This document analyzes the operational challenges represented by | |||
packets that employ IPv6 Extension Headers, and documents some of the | packets that employ IPv6 extension headers and documents some of the | |||
operational reasons why these packets are often dropped in the public | operational reasons why these packets are often dropped in the public | |||
Internet. This document is not a recommendation to drop such | Internet. This document is not a recommendation to drop such | |||
packets, but rather an analysis of why they are currently dropped. | packets, but rather an analysis of why they are currently dropped. | |||
4. Background Information | 4. Background Information | |||
It is useful to compare the basic structure of IPv6 packets against | It is useful to compare the basic structure of IPv6 packets against | |||
that of IPv4 packets, and analyze the implications of the two | that of IPv4 packets and analyze the implications of the two | |||
different packet structures. | different packet structures. | |||
IPv4 packets have a variable-length header size, that allows for the | IPv4 packets have a variable-length header size that allows for the | |||
use of IPv4 "options" -- optional information that may be of use by | use of IPv4 "options" -- optional information that may be of use to | |||
nodes processing IPv4 packets. The IPv4 header length is specified | nodes processing IPv4 packets. The IPv4 header length is specified | |||
in the IHL header field of the mandatory IPv4 header, and must be in | in the "Internet Header Length" (IHL) field of the mandatory IPv4 | |||
the range from 20 octets (the minimum IPv4 header size) to 60 octets | header and must be in the range of 20 octets (the minimum IPv4 header | |||
(accommodating at most 40 octets of options). The upper-layer | size) to 60 octets, accommodating at most 40 octets of options. The | |||
protocol type is specified via the "Protocol" field of the mandatory | upper-layer protocol type is specified via the "Protocol" field of | |||
IPv4 header. | the mandatory IPv4 header. | |||
Protocol, IHL | Protocol, IHL | |||
+--------+ | +--------+ | |||
| | | | | | |||
| v | | v | |||
+------//-----+------------------------+ | +------//-----+------------------------+ | |||
| | | | | | | | |||
| IPv4 | Upper-Layer | | | IPv4 | Upper-Layer | | |||
| Header | Protocol | | | Header | Protocol | | |||
| | | | | | | | |||
+-----//------+------------------------+ | +-----//------+------------------------+ | |||
variable length | variable length | |||
<-------------> | <-------------> | |||
Figure 1: IPv4 Packet Structure | Figure 1: IPv4 Packet Structure | |||
IPv6 took a different approach to the IPv6 packet structure. Rather | IPv6 took a different approach to the IPv6 packet structure. Rather | |||
than employing a variable-length header as IPv4 does, IPv6 employs a | than employing a variable-length header as IPv4 does, IPv6 employs a | |||
linked-list-like packet structure, where a mandatory fixed-length | packet structure similar to a linked list, where a mandatory fixed- | |||
IPv6 header is followed by an arbitrary number of optional extension | length IPv6 header is followed by an arbitrary number of optional | |||
headers, with the upper-layer header being the last header in the | extension headers, with the upper-layer header being the last header | |||
IPv6 header chain. Each extension header typically specifies its | in the IPv6 header chain. Each extension header typically specifies | |||
length (unless it is implicit from the extension header type), and | its length (unless it is implicit from the extension header type) and | |||
the "next header" type that follows in the IPv6 header chain. | the "next header" (NH) type that follows in the IPv6 header chain. | |||
NH NH, EH-length NH, EH-length | NH NH, EH-length NH, EH-length | |||
+-------+ +------+ +-------+ | +-------+ +------+ +-------+ | |||
| | | | | | | | | | | | | | |||
| v | v | v | | v | v | v | |||
+-------------+-------------+-//-+---------------+--------------+ | +-------------+-------------+-//-+---------------+--------------+ | |||
| | | | | | | | | | | | | | |||
| IPv6 | Ext. | | Ext. | Upper-Layer | | | IPv6 | Ext. | | Ext. | Upper-Layer | | |||
| header | Header | | Header | Protocol | | | header | Header | | Header | Protocol | | |||
| | | | | | | | | | | | | | |||
+-------------+-------------+-//-+---------------+--------------+ | +-------------+-------------+-//-+---------------+--------------+ | |||
fixed length variable number of EHs & length | fixed length variable number of EHs & length | |||
<------------> <--------------------------------> | <------------> <--------------------------------> | |||
Figure 2: IPv6 Packet Structure | Figure 2: IPv6 Packet Structure | |||
This packet structure has the following implications: | This packet structure has the following implications: | |||
o [RFC8200] requires the entire IPv6 header chain to be contained in | * [RFC8200] requires the entire IPv6 header chain to be contained in | |||
the first fragment of a packet, therefore limiting the IPv6 | the first fragment of a packet, therefore limiting the IPv6 header | |||
extension header chain to the size of the path MTU. | chain to the size of the path MTU. | |||
o Other than the path MTU constraints, there are no other limits to | * Other than the path MTU constraints, there are no other limits to | |||
the number of IPv6 EHs that may be present in a packet. | the number of IPv6 EHs that may be present in a packet. | |||
Therefore, there is no upper-limit regarding "how deep into the | Therefore, there is no upper limit regarding how deep into the | |||
IPv6 packet" the upper-layer may be found. | IPv6 packet the upper-layer protocol header may be found. | |||
o The only way for a node to obtain the upper-layer protocol type or | * The only way for a node to obtain the upper-layer protocol type or | |||
find the upper-layer protocol header is to parse and process the | find the upper-layer protocol header is to parse and process the | |||
entire IPv6 header chain, in sequence, starting from the mandatory | entire IPv6 header chain, in sequence, starting from the mandatory | |||
IPv6 header, until the last header in the IPv6 header chain is | IPv6 header until the last header in the IPv6 header chain is | |||
found. | found. | |||
5. Previous Work on IPv6 Extension Headers | 5. Previous Work on IPv6 Extension Headers | |||
Some of the operational and security implications of IPv6 Extension | Some of the operational and security implications of IPv6 extension | |||
Headers have been discussed at the IETF: | headers have been discussed in the IETF: | |||
o [I-D.taylor-v6ops-fragdrop] discusses a rationale for which | * [OPERATORS] discusses a rationale for which operators drop IPv6 | |||
operators drop IPv6 fragments. | fragments. | |||
o [I-D.wkumari-long-headers] discusses possible issues arising from | * [HEADERS] discusses possible issues arising from "long" IPv6 | |||
"long" IPv6 header chains. | header chains. | |||
o [I-D.kampanakis-6man-ipv6-eh-parsing] describes how | * [PARSING] describes how inconsistencies in the way IPv6 packets | |||
inconsistencies in the way IPv6 packets with extension headers are | with extension headers are parsed by different implementations | |||
parsed by different implementations could result in evasion of | could result in evasion of security controls and presents | |||
security controls, and presents guidelines for parsing IPv6 | guidelines for parsing IPv6 extension headers, with the goal of | |||
extension headers with the goal of providing a common and | providing a common and consistent parsing methodology for IPv6 | |||
consistent parsing methodology for IPv6 implementations. | implementations. | |||
o [I-D.ietf-opsec-ipv6-eh-filtering] analyzes the security | * [IPV6-EH] analyzes the security implications of IPv6 EHs, as well | |||
implications of IPv6 EHs, and the operational implications of | as the operational implications of dropping packets that employ | |||
dropping packets that employ IPv6 EHs and associated options. | IPv6 EHs and associated options. | |||
o [RFC7113] discusses how some popular RA-Guard implementations are | * [RFC7113] discusses how some popular Router Advertisement Guard | |||
subject to evasion by means of IPv6 extension headers. | (RA-Guard) implementations are subject to evasion by means of IPv6 | |||
extension headers. | ||||
o [RFC8900] analyzes the fragility introduced by IP fragmentation. | * [RFC8900] analyzes the fragility introduced by IP fragmentation. | |||
A number of recent RFCs have discussed issues related to IPv6 | A number of recent RFCs have discussed issues related to IPv6 | |||
extension headers, specifying updates to a previous revision of the | extension headers and have specified updates to RFC 2460 [RFC2460] | |||
IPv6 standard [RFC2460], many of which have now been incorporated | (an earlier version of the IPv6 standard). Many of these updates | |||
into the current IPv6 core standard [RFC8200] or the IPv6 Node | have now been incorporated into the current IPv6 core standard | |||
Requirements [RFC8504]. Namely, | [RFC8200] or the IPv6 node requirements [RFC8504]. Namely, | |||
o [RFC5095] discusses the security implications of Routing Header | ||||
Type 0 (RTH0), and deprecates it. | ||||
o [RFC5722] analyzes the security implications of overlapping | * [RFC5095] discusses the security implications of Routing Header | |||
fragments, and provides recommendations in this area. | Type 0 (RHT0) and deprecates it. | |||
o [RFC7045] clarifies how intermediate nodes should deal with IPv6 | * [RFC5722] analyzes the security implications of overlapping | |||
fragments and provides recommendations in this area. | ||||
* [RFC7045] clarifies how intermediate nodes should deal with IPv6 | ||||
extension headers. | extension headers. | |||
o [RFC7112] discusses the issues arising in a specific fragmentation | * [RFC7112] discusses the issues arising in a specific fragmentation | |||
case where the IPv6 header chain is fragmented into two or more | case where the IPv6 header chain is fragmented into two or more | |||
fragments (and formally forbids such fragmentation). | fragments and formally forbids such fragmentation. | |||
o [RFC6946] discusses a flawed (but common) processing of the so- | * [RFC6946] discusses a flawed (but common) processing of the so- | |||
called IPv6 "atomic fragments", and specified improved processing | called IPv6 "atomic fragments" and specifies improved processing | |||
of such packets. | of such packets. | |||
o [RFC8021] deprecates the generation of IPv6 atomic fragments. | * [RFC8021] deprecates the generation of IPv6 atomic fragments. | |||
o [RFC8504] clarifies processing rules for packets with extension | * [RFC8504] clarifies processing rules for packets with extension | |||
headers, and also allows hosts to enforce limits on the number of | headers and also allows hosts to enforce limits on the number of | |||
options included in IPv6 EHs. | options included in IPv6 EHs. | |||
o [RFC7739] discusses the security implications of predictable | * [RFC7739] discusses the security implications of predictable | |||
fragment Identification values, and provides recommendations for | fragment Identification values and provides recommendations for | |||
the generation of these values. | the generation of these values. | |||
o [RFC6980] analyzes the security implications of employing IPv6 | * [RFC6980] analyzes the security implications of employing IPv6 | |||
fragmentation with Neighbor Discovery for IPv6, and formally | fragmentation with Neighbor Discovery for IPv6 and formally | |||
recommends against such usage. | recommends against such usage. | |||
Additionally, [RFC8200] has relaxed the requirement that "all nodes | Additionally, [RFC8200] has relaxed the requirement that "all nodes | |||
examine and process the Hop-by-Hop Options header" from [RFC2460], by | must examine and process the Hop-by-Hop Options header" from | |||
specifying that only nodes that have been explicitly configured to | [RFC2460], by specifying that only nodes that have been explicitly | |||
process the Hop-by-Hop Options header are required to do so. | configured to process the Hop-by-Hop Options header are required to | |||
do so. | ||||
A number of studies have measured the extent to which packets | A number of studies have measured the extent to which packets | |||
employing IPv6 extension headers are dropped in the public Internet: | employing IPv6 extension headers are dropped in the public Internet: | |||
o [PMTUD-Blackholes] and [Linkova-Gont-IEPG90] presented some | * [PMTUD-Blackholes] and [Linkova-Gont-IEPG90] present some | |||
preliminary measurements regarding the extent to which packet | preliminary measurements regarding the extent to which packets | |||
containing IPv6 EHs are dropped in the public Internet. | containing IPv6 EHs are dropped in the public Internet. | |||
o [RFC7872] presents more comprehensive results and documents the | * [RFC7872] presents more comprehensive results and documents the | |||
methodology used to obtain these results. | methodology used to obtain these results. | |||
o [Huston-2017] and [Huston-2020] measured packet drops resulting | * [Huston-2017] and [Huston-2020] measure packet drops resulting | |||
from IPv6 fragmentation when communicating with DNS servers. | from IPv6 fragmentation when communicating with DNS servers. | |||
6. Packet Forwarding Engine Constraints | 6. Packet-Forwarding Engine Constraints | |||
Most contemporary carrier-grade routers use dedicated hardware, e.g. | Most contemporary carrier-grade routers use dedicated hardware, e.g., | |||
application-specific integrated circuits (ASICs) or network | Application-Specific Integrated Circuits (ASICs) or Network | |||
processing units (NPUs), to determine how to forward packets across | Processing Units (NPUs), to determine how to forward packets across | |||
their internal fabrics (see [IEPG94-Scudder] and [APNIC-Scudder] for | their internal fabrics (see [IEPG94-Scudder] and [APNIC-Scudder] for | |||
details). One of the common methods of handling next-hop lookup is | details). One common method of handling next-hop lookups is to send | |||
to send a small portion of the ingress packet to a lookup engine with | a small portion of the ingress packet to a lookup engine with | |||
specialised hardware, e.g. ternary content-addressable memory (TCAM) | specialized hardware, e.g., ternary content-addressable memory (TCAM) | |||
or reduced latency dynamic random-access memory (RLDRAM), to | or reduced latency dynamic random-access memory (RLDRAM), to | |||
determine the packet's next-hop. Technical constraints mean that | determine the packet's next hop. Technical constraints mean that | |||
there is a trade-off between the amount of data sent to the lookup | there is a trade-off between the amount of data sent to the lookup | |||
engine and the overall packet forwarding rate of the lookup engine. | engine and the overall packet-forwarding rate of the lookup engine. | |||
If more data is sent, the lookup engine can inspect further into the | If more data is sent, the lookup engine can inspect further into the | |||
packet, but the overall packet forwarding rate of the system will be | packet, but the overall packet-forwarding rate of the system will be | |||
reduced. If less data is sent, the overall packet forwarding rate of | reduced. If less data is sent, the overall packet-forwarding rate of | |||
the router will be increased but the packet lookup engine may not be | the router will be increased, but the packet lookup engine may not be | |||
able to inspect far enough into a packet to determine how it should | able to inspect far enough into a packet to determine how it should | |||
be handled. | be handled. | |||
NOTE: | | NOTE: | |||
For example, some contemporary high-end routers are known to | | | |||
inspect up to 192 bytes, while others are known to parse up to 384 | | For example, some contemporary high-end routers are known to | |||
bytes of header. | | inspect up to 192 bytes, while others are known to parse up | |||
| to 384 bytes of header. | ||||
If a hardware forwarding engine on a contemporary router cannot make | If a hardware-forwarding engine on a contemporary router cannot make | |||
a forwarding decision about a packet because critical information is | a forwarding decision about a packet because critical information is | |||
not sent to the look-up engine, then the router will normally drop | not sent to the lookup engine, then the router will normally drop the | |||
the packet. Section 7 discusses some of the reasons for which a | packet. Section 7 discusses some of the reasons for which a | |||
contemporary router might need to access layer-4 information to make | contemporary router might need to access Layer 4 information to make | |||
a forwarding decision. | a forwarding decision. | |||
Historically, some packet forwarding engines punted packets of this | Historically, some packet-forwarding engines punted packets of this | |||
form to the control plane for more in-depth analysis, but this is | kind to the control plane for more in-depth analysis, but this is | |||
unfeasible on most contemporary router architectures as a result of | unfeasible on most contemporary router architectures as a result of | |||
the vast difference between the hardware forwarding capacity of the | the vast difference between the hardware-based forwarding capacity of | |||
router and processing capacity of the control plane and the size of | the router and the processing capacity of the control plane and the | |||
the management link which connects the control plane to the | size of the management link that connects the control plane to the | |||
forwarding plane. Other platforms may have a separate software | forwarding plane. Other platforms may have a separate software-based | |||
forwarding plane that is distinct both from the hardware forwarding | forwarding plane that is distinct both from the hardware-based | |||
plane and the control plane. However, the limited CPU resources of | forwarding plane and the control plane. However, the limited CPU | |||
this software-based forwarding plane, as well as the limited | resources of this software-based forwarding plane, as well as the | |||
bandwidth of the associated link results in similar throughput | limited bandwidth of the associated link, results in similar | |||
constraints. | throughput constraints. | |||
If an IPv6 header chain is sufficiently long that it exceeds the | If an IPv6 header chain is sufficiently long such that it exceeds the | |||
packet look-up capacity of the router, the router might be unable to | packet lookup capacity of the router, the router might be unable to | |||
determine how the packet should be handled, and thus could resort to | determine how the packet should be handled and thus could resort to | |||
dropping the packet. | dropping the packet. | |||
6.1. Recirculation | 6.1. Recirculation | |||
Although TLV chains are amenable to iterative processing on | Although type-length-value (TLV) chains are amenable to iterative | |||
architectures that have packet look-up engines with deep inspection | processing on architectures that have packet lookup engines with deep | |||
capabilities, some packet forwarding engines manage IPv6 Extension | inspection capabilities, some packet-forwarding engines manage IPv6 | |||
Header chains using recirculation. This approach processes Extension | header chains using recirculation. This approach processes extension | |||
Headers one at a time: when processing on one Extension Header is | headers one at a time: when processing on one extension header is | |||
completed, the packet is looped back through the processing engine | completed, the packet is looped back through the processing engine | |||
again. This recirculation process continues repeatedly until there | again. This recirculation process continues repeatedly until there | |||
are no more Extension Headers left to be processed. | are no more extension headers left to be processed. | |||
Recirculation is typically used on packet forwarding engines with | Recirculation is typically used on packet-forwarding engines with | |||
limited look-up capability, because it allows arbitrarily long header | limited lookup capability, because it allows arbitrarily long header | |||
chains to be processed without the complexity and cost associated | chains to be processed without the complexity and cost associated | |||
with packet forwarding engines which have deep look-up capabilities. | with packet-forwarding engines, which have deep lookup capabilities. | |||
However, recirculation can impact the forwarding capacity of | However, recirculation can impact the forwarding capacity of | |||
hardware, as each packet will pass through the processing engine | hardware, as each packet will pass through the processing engine | |||
multiple times. Depending on configuration, the type of packets | multiple times. Depending on configuration, the type of packets | |||
being processed, and the hardware capabilities of the packet | being processed, and the hardware capabilities of the packet- | |||
forwarding engine, this could impact data-plane throughput | forwarding engine, the data-plane throughput performance on the | |||
performance on the router. | router might be negatively affected. | |||
7. Requirement to Process Layer-3/layer-4 information in Intermediate | 7. Requirement to Process Layer 3 / Layer 4 Information in Intermediate | |||
Systems | Systems | |||
The following subsections discuss some of the reasons for which | The following subsections discuss some of the reasons for which | |||
intermediate systems may need to process Layer-3/layer-4 information | intermediate systems may need to process Layer 3 / Layer 4 | |||
to make a forwarding decision. | information to make a forwarding decision. | |||
7.1. ECMP and Hash-based Load-Sharing | 7.1. ECMP and Hash-Based Load Sharing | |||
In the case of equal cost multi-path (ECMP) load sharing, the | In the case of Equal Cost Multipath (ECMP) load sharing, the | |||
intermediate system needs to make a decision regarding which of its | intermediate system needs to make a decision regarding which of its | |||
interfaces to use to forward a given packet. Since round-robin usage | interfaces to use to forward a given packet. Since round-robin usage | |||
of the links is usually avoided to prevent packet reordering, | of the links is usually avoided to prevent packet reordering, | |||
forwarding engines need to use a mechanism that will consistently | forwarding engines need to use a mechanism that will consistently | |||
forward the same data streams down the same forwarding paths. Most | forward the same data streams down the same forwarding paths. Most | |||
forwarding engines achieve this by calculating a simple hash using an | forwarding engines achieve this by calculating a simple hash using an | |||
n-tuple gleaned from a combination of layer-2 through to layer-4 | n-tuple gleaned from a combination of Layer 2 through to Layer 4 | |||
packet header information. This n-tuple will typically use the src/ | protocol header information. This n-tuple will typically use the | |||
dst MAC address, src/dst IP address, and if possible further layer-4 | src/dst Media Access Control (MAC) addresses, src/dst IP addresses, | |||
src/dst port information. | and, if possible, further Layer 4 src/dst port information. | |||
In the IPv6 world, flows are expected to be identified by means of | In the IPv6 world, flows are expected to be identified by means of | |||
the IPv6 Flow Label [RFC6437]. Thus, ECMP and Hash-based Load- | the IPv6 "Flow Label" [RFC6437]. Thus, ECMP and hash-based load | |||
Sharing should be possible without the need to process the entire | sharing should be possible without the need to process the entire | |||
IPv6 header chain to obtain upper-layer information to identify | IPv6 header chain to obtain upper-layer information to identify | |||
flows. [RFC7098] discusses how the IPv6 Flow Label can used to | flows. [RFC7098] discusses how the IPv6 Flow Label can be used to | |||
enhance layer 3/4 load distribution and balancing for large server | enhance Layer 3/4 load distribution and balancing for large server | |||
farms. | farms. | |||
Historically, many IPv6 implementations failed to set the Flow Label, | Historically, many IPv6 implementations failed to set the Flow Label, | |||
and hash-based ECMP/load-sharing devices also did not employ the Flow | and hash-based ECMP/load-sharing devices also did not employ the Flow | |||
Label for performing their task. While support of [RFC6437] is | Label for performing their task. While support of [RFC6437] is | |||
currently widespread for current versions of all popular host | currently widespread for current versions of all popular host | |||
implementations, there is still only marginal usage of the IPv6 Flow | implementations, there is still only marginal usage of the IPv6 Flow | |||
Label for ECMP and load balancing [Cunha-2020]. A contributing | Label for ECMP and load balancing [Almeida-2020]. A contributing | |||
factor could be the issues that have been found in host | factor could be the issues that have been found in host | |||
implementations and middle-boxes [Jaeggli-2018]. | implementations and middleboxes [Jaeggli-2018]. | |||
Clearly, widespread support of [RFC6437] would relieve intermediate | Clearly, widespread support of [RFC6437] would relieve intermediate | |||
systems from having to process the entire IPv6 header chain, making | systems from having to process the entire IPv6 header chain, making | |||
Flow Label-based ECMP and Load-Sharing [RFC6438] feasible. | Flow Label-based ECMP and load sharing [RFC6438] feasible. | |||
If an intermediate system cannot determine consistent n-tuples for | If an intermediate system cannot determine consistent n-tuples for | |||
calculating flow hashes, data streams are more likely to end up being | calculating flow hashes, data streams are more likely to end up being | |||
distributed unequally across ECMP and load-shared links. This may | distributed unequally across ECMP and load-shared links. This may | |||
lead to packet drops or reduced performance. | lead to packet drops or reduced performance. | |||
7.2. Enforcing infrastructure ACLs | 7.2. Enforcing Infrastructure ACLs | |||
Infrastructure ACLs (iACLs) drop unwanted packets destined to a | Infrastructure Access Control Lists (iACLs) drop unwanted packets | |||
network's infrastructure. Typically, iACLs are deployed because | destined to a network's infrastructure. Typically, iACLs are | |||
external direct access to a network's infrastructure addresses is | deployed because external direct access to a network's infrastructure | |||
operationally unnecessary, and can be used for attacks of different | addresses is operationally unnecessary and can be used for attacks of | |||
sorts against router control planes. To this end, traffic usually | different sorts against router control planes. To this end, traffic | |||
needs to be differentiated on the basis of layer-3 or layer-4 | usually needs to be differentiated on the basis of Layer 3 or Layer 4 | |||
criteria to achieve a useful balance of protection and functionality. | criteria to achieve a useful balance of protection and functionality. | |||
For example, an infrastructure may be configured with the following | For example, an infrastructure may be configured with the following | |||
policy: | policy: | |||
o Permit some amount of ICMP echo (ping) traffic towards a router's | * Permit some amount of ICMP echo (ping) traffic towards a router's | |||
addresses for troubleshooting. | addresses for troubleshooting. | |||
o Permit BGP sessions on the shared network of an exchange point | * Permit BGP sessions on the shared network of an exchange point | |||
(potentially differentiating between the amount of packets/seconds | (potentially differentiating between the amount of packets/second | |||
permitted for established sessions and connection establishment), | permitted for established sessions and for connection | |||
but do not permit other traffic from the same peer IP addresses. | establishment), but do not permit other traffic from the same peer | |||
IP addresses. | ||||
If a forwarding router cannot determine consistent n-tuples for | If a forwarding router cannot determine consistent n-tuples for | |||
calculating flow hashes, data streams are more likely to end up being | calculating flow hashes, data streams are more likely to end up being | |||
distributed unequally across ECMP and load-shared links. This may | distributed unequally across ECMP and load-shared links. This may | |||
lead to packet drops or reduced performance. | lead to packet drops or reduced performance. | |||
If a network cannot deploy infrastructure ACLs, then the security of | If a network cannot deploy infrastructure ACLs, then the security of | |||
the network may be compromised due to having more potential attack | the network may be compromised as a result of the increased attack | |||
vectors open. | surface. | |||
7.3. DDoS Management and Customer Requests for Filtering | 7.3. DDoS Management and Customer Requests for Filtering | |||
The case of customer DDoS protection and edge-to-core customer | The case of customer Distributed Denial-of-Service (DDoS) protection | |||
protection filters is similar in nature to the iACL protection. | and edge-to-core customer protection filters is similar in nature to | |||
Similar to iACL protection, layer-4 ACLs generally need to be applied | the iACL protection. Similar to iACL protection, Layer 4 ACLs | |||
as close to the edge of the network as possible, even though the | generally need to be applied as close to the edge of the network as | |||
intent is usually to protect the customer edge rather than the | possible, even though the intent is usually to protect the customer | |||
provider core. Application of layer-4 DDoS protection to a network | edge rather than the provider core. Application of Layer 4 DDoS | |||
edge is often automated using Flowspec [RFC8955] [RFC8956]. | protection to a network edge is often automated using BGP Flowspec | |||
[RFC8955] [RFC8956]. | ||||
For example, a web site that normally only handled traffic on TCP | For example, a website that normally only handles traffic on TCP | |||
ports 80 and 443 could be subject to a volumetric DDoS attack using | ports 80 and 443 could be subject to a volumetric DDoS attack using | |||
NTP and DNS packets with randomised source IP address, thereby | NTP and DNS packets with a randomized source IP address, thereby | |||
rendering traditional [RFC5635] source-based real-time black hole | rendering source-based remote triggered black hole [RFC5635] | |||
mechanisms useless. In this situation, DDoS protection ACLs could be | mechanisms useless. In this situation, ACLs that provide DDoS | |||
configured to block all UDP traffic at the network edge without | protection could be configured to block all UDP traffic at the | |||
impairing the web server functionality in any way. Thus, being able | network edge without impairing the web server functionality in any | |||
to block arbitrary protocols at the network edge can avoid DDoS- | way. Thus, being able to block arbitrary protocols at the network | |||
related problems both in the provider network and on the customer | edge can avoid DDoS-related problems both in the provider network and | |||
edge link. | on the customer edge link. | |||
7.4. Network Intrusion Detection and Prevention | 7.4. Network Intrusion Detection and Prevention | |||
Network Intrusion Detection Systems (NIDS) examine network traffic | Network Intrusion Detection Systems (NIDS) examine network traffic | |||
and try to identify traffic patterns that can be correlated to | and try to identify traffic patterns that can be correlated to | |||
network-based attacks. These systems generally inspect application- | network-based attacks. These systems generally attempt to inspect | |||
layer traffic (if possible), but at the bare minimum inspect layer-4 | application-layer traffic (if possible) but, at the bare minimum, | |||
flows. When attack activity is inferred, the operator is notified of | inspect Layer 4 flows. When attack activity is inferred, the | |||
the potential intrusion attempt. | operator is notified of the potential intrusion attempt. | |||
Network Intrusion Prevention Systems (IPS) operate similarly to | Network Intrusion Prevention Systems (IPS) operate similarly to | |||
NIDS's, but they can also prevent intrusions by reacting to detected | NIDSs, but they can also prevent intrusions by reacting to detected | |||
attack attempts by e.g., triggering packet filtering policies at | attack attempts by e.g., triggering packet filtering policies at | |||
firewalls and other devices. | firewalls and other devices. | |||
Use of extension headers can be problematic for NIDS/IPS, since: | Use of extension headers can be problematic for NIDS/IPS, since: | |||
o Extension headers increase the complexity of resulting traffic, | * Extension headers increase the complexity of resulting traffic and | |||
and the associated work and system requirements to process it. | the associated work and system requirements to process it. | |||
o Use of unknown extension headers can prevent an NIDS/IPS from | * Use of unknown extension headers can prevent a NIDS or IPS from | |||
processing layer-4 information. | processing Layer 4 information. | |||
o Use of IPv6 fragmentation requires a stateful fragment-reassembly | * Use of IPv6 fragmentation requires a stateful fragment-reassembly | |||
operation, even for decoy traffic employing forged source | operation, even for decoy traffic employing forged source | |||
addresses (see e.g., [nmap]). | addresses (see, e.g., [nmap]). | |||
As a result, in order to increase the efficiency or effectiveness of | As a result, in order to increase the efficiency or effectiveness of | |||
these systems, packets employing IPv6 extension headers are often | these systems, packets employing IPv6 extension headers are often | |||
dropped at the network ingress point(s) of networks that deploy these | dropped at the network ingress point(s) of networks that deploy these | |||
systems. | systems. | |||
7.5. Firewalling | 7.5. Firewalling | |||
Firewalls enforce security policies by means of packet filtering. | Firewalls enforce security policies by means of packet filtering. | |||
These systems usually inspect layer-3 and layer-4 traffic, but can | These systems usually inspect Layer 3 and Layer 4 traffic but can | |||
often also examine application-layer traffic flows. | often also examine application-layer traffic flows. | |||
As with NIDS/IPS (Section 7.4), use of IPv6 extension headers can | As with a NIDS or IPS (Section 7.4), use of IPv6 extension headers | |||
represent a challenge to network firewalls, since: | can represent a challenge to network firewalls, since: | |||
o Extension headers increase the complexity of resulting traffic, | * Extension headers increase the complexity of resulting traffic and | |||
and the associated work and system requirements to process it, as | the associated work and system requirements to process it, as | |||
outlined in [Zack-FW-Benchmark]. | outlined in [Zack-FW-Benchmark]. | |||
o Use of unknown extension headers can prevent firewalls from | * Use of unknown extension headers can prevent firewalls from | |||
processing layer-4 information. | processing Layer 4 information. | |||
o Use of IPv6 fragmentation requires a stateful fragment-reassembly | * Use of IPv6 fragmentation requires a stateful fragment-reassembly | |||
operation, even for decoy traffic employing forged source | operation, even for decoy traffic employing forged source | |||
addresses (see e.g., [nmap]). | addresses (see, e.g., [nmap]). | |||
Additionally, a common firewall filtering policy is the so-called | Additionally, a common firewall filtering policy is the so-called | |||
"default deny", where all traffic is blocked (by default), and only | "default deny", where all traffic is blocked (by default), and only | |||
expected traffic is added to an "allow/accept list". | expected traffic is added to an "allow/accept list". | |||
As a result, packets employing IPv6 extension headers are often | As a result, packets employing IPv6 extension headers are often | |||
dropped by network firewalls, either because of the challenges | dropped by network firewalls, either because of the challenges | |||
represented by extension headers or because the use of IPv6 extension | represented by extension headers or because the use of IPv6 extension | |||
headers has not been explicitly allowed. | headers has not been explicitly allowed. | |||
Note that although the data presented in [Zack-FW-Benchmark] were | Note that although the data presented in [Zack-FW-Benchmark] was | |||
several years old at the time of publication of this document, many | several years old at the time of publication of this document, many | |||
contemporary firewalls use comparable hardware and software | contemporary firewalls use comparable hardware and software | |||
architecture, and consequently the conclusions of this benchmark are | architectures; consequently, the conclusions of this benchmark are | |||
still relevant, despite its age. | still relevant, despite its age. | |||
8. Operational and Security Implications | 8. Operational and Security Implications | |||
8.1. Inability to Find Layer-4 Information | 8.1. Inability to Find Layer 4 Information | |||
As discussed in Section 7, intermediate systems that need to find the | As discussed in Section 7, intermediate systems that need to find the | |||
layer-4 header must process the entire IPv6 extension header chain. | Layer 4 header must process the entire IPv6 header chain. When such | |||
When such devices are unable to obtain the required information, the | devices are unable to obtain the required information, the forwarding | |||
forwarding device has the option to drop the packet unconditionally, | device has the option to drop the packet unconditionally, forward the | |||
forward the packet unconditionally, or process the packet outside the | packet unconditionally, or process the packet outside the normal | |||
normal forwarding path. Forwarding packets unconditionally will | forwarding path. Forwarding packets unconditionally will usually | |||
usually allow for the circumvention of security controls (see e.g., | allow for the circumvention of security controls (see, e.g., | |||
Section 7.5), while processing packets outside of the normal | Section 7.5), while processing packets outside of the normal | |||
forwarding path will usually open the door to DoS attacks (see e.g., | forwarding path will usually open the door to Denial-of-Service (DoS) | |||
Section 6). Thus, in these scenarios, devices often simply resort to | attacks (see, e.g., Section 6). Thus, in these scenarios, devices | |||
dropping such packets unconditionally. | often simply resort to dropping such packets unconditionally. | |||
8.2. Route-Processor Protection | 8.2. Route-Processor Protection | |||
Most contemporary carrier-grade routers have a fast hardware-assisted | Most contemporary carrier-grade routers have a fast hardware-assisted | |||
forwarding plane and a loosely coupled control plane, connected | forwarding plane and a loosely coupled control plane, connected | |||
together with a link that has much less capacity than the forwarding | together with a link that has much less capacity than the forwarding | |||
plane could handle. Traffic differentiation cannot be performed by | plane could handle. Traffic differentiation cannot be performed by | |||
the control plane, because this would overload the internal link | the control plane because this would overload the internal link | |||
connecting the forwarding plane to the control plane. | connecting the forwarding plane to the control plane. | |||
The Hop-by-Hop Options header has been particularly challenging since | The Hop-by-Hop Options header has been particularly challenging | |||
in most circumstances, the corresponding packet is punted to the | since, in most circumstances, the corresponding packet is punted to | |||
control plane for processing. As a result, many operators drop IPv6 | the control plane for processing. As a result, many operators drop | |||
packets containing this extension header [RFC7872]. [RFC6192] | IPv6 packets containing this extension header [RFC7872]. [RFC6192] | |||
provides advice regarding protection of a router's control plane. | provides advice regarding protection of a router's control plane. | |||
8.3. Inability to Perform Fine-grained Filtering | 8.3. Inability to Perform Fine-Grained Filtering | |||
Some intermediate systems do not have support for fine-grained | Some intermediate systems do not have support for fine-grained | |||
filtering of IPv6 extension headers. For example, an operator that | filtering of IPv6 extension headers. For example, an operator that | |||
wishes to drop packets containing Routing Header Type 0 (RHT0), may | wishes to drop packets containing RHT0 may only be able to filter on | |||
only be able to filter on the extension header type (Routing Header). | the extension header type (Routing Header). This could result in an | |||
This could result in an operator enforcing a more coarse filtering | operator enforcing a coarser filtering policy (e.g., "drop all | |||
policy (e.g., "drop all packets containing a Routing Header" vs. | packets containing a Routing Header" vs. "only drop packets that | |||
"only drop packets that contain a Routing Header Type 0"). | contain a Routing Header Type 0"). | |||
8.4. Security Concerns Associated with IPv6 Extension Headers | 8.4. Security Concerns Associated with IPv6 Extension Headers | |||
The security implications of IPv6 Extension Headers generally fall | The security implications of IPv6 extension headers generally fall | |||
into one or more of these categories: | into one or more of these categories: | |||
o Evasion of security controls | * Evasion of security controls | |||
o DoS due to processing requirements | ||||
o DoS due to implementation errors | * DoS due to processing requirements | |||
o Extension Header-specific issues | * DoS due to implementation errors | |||
* Issues specific to the extension header type | ||||
Unlike IPv4 packets where the upper-layer protocol can be trivially | Unlike IPv4 packets where the upper-layer protocol can be trivially | |||
found by means of the "IHL" ("Internet Header Length") IPv4 header | found by means of the IHL field of the IPv4 header, the structure of | |||
field, the structure of IPv6 packets is more flexible and complex. | IPv6 packets is more flexible and complex. This can represent a | |||
This can represent a challenge for devices that need to find this | challenge for devices that need to find this information, since | |||
information, since locating upper-layer protocol information requires | locating upper-layer protocol information requires that all IPv6 | |||
that all IPv6 extension headers be examined. In turn, this presents | extension headers be examined. In turn, this presents implementation | |||
implementation difficulties, since some packet filtering mechanisms | difficulties, since some packet-filtering mechanisms that require | |||
that require upper-layer information (even if just the upper layer | upper-layer information (even if just the upper-layer protocol type) | |||
protocol type) can be trivially circumvented by inserting IPv6 | can be trivially circumvented by inserting IPv6 extension headers | |||
Extension Headers between the main IPv6 header and the upper layer | between the main IPv6 header and the upper-layer protocol header. | |||
protocol. [RFC7113] describes this issue for the RA-Guard case, but | [RFC7113] describes this issue for the RA-Guard case, but the same | |||
the same techniques could be employed to circumvent other IPv6 | techniques could be employed to circumvent other IPv6 firewall and | |||
firewall and packet filtering mechanisms. Additionally, | packet-filtering mechanisms. Additionally, implementation | |||
implementation inconsistencies in packet forwarding engines can | inconsistencies in packet-forwarding engines can result in evasion of | |||
result in evasion of security controls | security controls [PARSING] [Atlasis2014] [BH-EU-2014]. | |||
[I-D.kampanakis-6man-ipv6-eh-parsing] [Atlasis2014] [BH-EU-2014]. | ||||
Sometimes packets with IPv6 Extension Headers can impact throughput | Sometimes, packets with IPv6 extension headers can impact throughput | |||
performance on intermediate systems. Unless appropriate mitigations | performance on intermediate systems. Unless appropriate mitigations | |||
are put in place (e.g., packet dropping and/or rate-limiting), an | are put in place (e.g., packet dropping and/or rate limiting), an | |||
attacker could simply send a large amount of IPv6 traffic employing | attacker could simply send a large amount of IPv6 traffic employing | |||
IPv6 Extension Headers with the purpose of performing a Denial of | IPv6 extension headers with the purpose of performing a DoS attack | |||
Service (DoS) attack (see Section 6.1 and Section 8 for further | (see Sections 6.1 and 8 for further details). The extent to which | |||
details). | performance is affected on these devices is implementation dependent. | |||
NOTE: | | NOTE: | |||
In the most trivial case, a packet that includes a Hop-by-Hop | | | |||
Options header might go through the slow forwarding path, to be | | In the most trivial case, a packet that includes a Hop-by- | |||
processed by the router's CPU. Alternatively, a router configured | | Hop Options header might go through the slow forwarding | |||
to enforce an ACL based on upper-layer information (e.g., upper | | path, to be processed by the router's CPU. Alternatively, a | |||
layer protocol or TCP Destination Port) may need to process the | | router configured to enforce an ACL based on upper-layer | |||
entire IPv6 header chain in order to find the required | | information (e.g., upper-layer protocol type or TCP | |||
information, thereby causing the packet to be processed in the | | Destination Port) may need to process the entire IPv6 header | |||
slow path [Cisco-EH-Cons]. We note that, for obvious reasons, the | | chain in order to find the required information, thereby | |||
aforementioned performance issues can affect other devices such as | | causing the packet to be processed in the slow path | |||
firewalls, Network Intrusion Detection Systems (NIDS), etc. | | [Cisco-EH-Cons]. We note that, for obvious reasons, the | |||
[Zack-FW-Benchmark]. The extent to which performance is affected | | aforementioned performance issues can affect devices such as | |||
on these devices is implementation-dependent. | | firewalls, NIDSs, etc. [Zack-FW-Benchmark]. | |||
IPv6 implementations, like all other software, tend to mature with | IPv6 implementations, like all other software, tend to mature with | |||
time and wide-scale deployment. While the IPv6 protocol itself has | time and wide-scale deployment. While the IPv6 protocol itself has | |||
existed for over 20 years, serious bugs related to IPv6 Extension | existed for over 20 years, serious bugs related to IPv6 extension | |||
Header processing continue to be discovered (see e.g., [Cisco-Frag], | header processing continue to be discovered (see, e.g., [Cisco-Frag], | |||
[Microsoft-SA], and [FreeBSD-SA]). Because there is currently little | [Microsoft-SA], and [FreeBSD-SA]). Because there is currently little | |||
operational reliance on IPv6 Extension headers, the corresponding | operational reliance on IPv6 extension headers, the corresponding | |||
code paths are rarely exercised, and there is the potential for bugs | code paths are rarely exercised, and there is the potential for bugs | |||
that still remain to be discovered in some implementations. | that still remain to be discovered in some implementations. | |||
IPv6 Fragment Headers are employed to allow fragmentation of IPv6 | The IPv6 Fragment Header is employed for the fragmentation and | |||
packets. While many of the security implications of the | reassembly of IPv6 packets. While many of the security implications | |||
fragmentation / reassembly mechanism are known from the IPv4 world, | of the fragmentation/reassembly mechanism are known from the IPv4 | |||
several related issues have crept into IPv6 implementations. These | world, several related issues have crept into IPv6 implementations. | |||
range from denial of service attacks to information leakage, as | These range from DoS attacks to information leakages, as discussed in | |||
discussed in [RFC7739], [Bonica-NANOG58] and [Atlasis2012]). | [RFC7739], [Bonica-NANOG58], and [Atlasis2012]. | |||
9. IANA Considerations | 9. IANA Considerations | |||
This document has no IANA actions. | This document has no IANA actions. | |||
10. Security Considerations | 10. Security Considerations | |||
The security implications of IPv6 extension headers are discussed in | The security implications of IPv6 extension headers are discussed in | |||
Section 8.4. This document does not introduce any new security | Section 8.4. This document does not introduce any new security | |||
issues. | issues. | |||
11. Acknowledgements | 11. References | |||
The authors would like to thank (in alphabetical order) Mikael | ||||
Abrahamsson, Fred Baker, Dale W. Carder, Brian Carpenter, Tim Chown, | ||||
Owen DeLong, Gorry Fairhurst, Guillermo Gont, Tom Herbert, Lee | ||||
Howard, Tom Petch, Sander Steffann, Eduard Vasilenko, Eric Vyncke, | ||||
Rob Wilton, Jingrong Xie, and Andrew Yourtchenko, for providing | ||||
valuable comments on earlier versions of this document. | ||||
Fernando Gont would like to thank Jan Zorz / Go6 Lab | ||||
<https://go6lab.si/>, Jared Mauch, and Sander Steffann | ||||
<https://steffann.nl/>, for providing access to systems and networks | ||||
that were employed to perform experiments and measurements involving | ||||
packets with IPv6 Extension Headers. | ||||
12. References | ||||
12.1. Normative References | 11.1. Normative References | |||
[RFC5095] Abley, J., Savola, P., and G. Neville-Neil, "Deprecation | [RFC5095] Abley, J., Savola, P., and G. Neville-Neil, "Deprecation | |||
of Type 0 Routing Headers in IPv6", RFC 5095, | of Type 0 Routing Headers in IPv6", RFC 5095, | |||
DOI 10.17487/RFC5095, December 2007, | DOI 10.17487/RFC5095, December 2007, | |||
<https://www.rfc-editor.org/info/rfc5095>. | <https://www.rfc-editor.org/info/rfc5095>. | |||
[RFC5722] Krishnan, S., "Handling of Overlapping IPv6 Fragments", | [RFC5722] Krishnan, S., "Handling of Overlapping IPv6 Fragments", | |||
RFC 5722, DOI 10.17487/RFC5722, December 2009, | RFC 5722, DOI 10.17487/RFC5722, December 2009, | |||
<https://www.rfc-editor.org/info/rfc5722>. | <https://www.rfc-editor.org/info/rfc5722>. | |||
skipping to change at page 15, line 37 ¶ | skipping to change at line 687 ¶ | |||
[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", STD 86, RFC 8200, | (IPv6) Specification", STD 86, RFC 8200, | |||
DOI 10.17487/RFC8200, July 2017, | DOI 10.17487/RFC8200, July 2017, | |||
<https://www.rfc-editor.org/info/rfc8200>. | <https://www.rfc-editor.org/info/rfc8200>. | |||
[RFC8504] Chown, T., Loughney, J., and T. Winters, "IPv6 Node | [RFC8504] Chown, T., Loughney, J., and T. Winters, "IPv6 Node | |||
Requirements", BCP 220, RFC 8504, DOI 10.17487/RFC8504, | Requirements", BCP 220, RFC 8504, DOI 10.17487/RFC8504, | |||
January 2019, <https://www.rfc-editor.org/info/rfc8504>. | January 2019, <https://www.rfc-editor.org/info/rfc8504>. | |||
12.2. Informative References | 11.2. Informative References | |||
[Almeida-2020] | ||||
Almeida, R., Cunha, I., Teixeira, R., Veitch, D., and C. | ||||
Diot, "Classification of Load Balancing in the Internet", | ||||
IEEE INFOCOM 2020, DOI 10.1109/INFOCOM41043.2020.9155387, | ||||
July 2020, <https://homepages.dcc.ufmg.br/~cunha/papers/ | ||||
almeida20infocom-mca.pdf>. | ||||
[APNIC-Scudder] | [APNIC-Scudder] | |||
Scudder, J., "Modern router architecture and IPv6", APNIC | Scudder, J., "Modern router architecture and IPv6", APNIC | |||
Blog, June 4, 2020, <https://blog.apnic.net/2020/06/04/ | Blog, June 2020, <https://blog.apnic.net/2020/06/04/ | |||
modern-router-architecture-and-ipv6/>. | modern-router-architecture-and-ipv6/>. | |||
[Atlasis2012] | [Atlasis2012] | |||
Atlasis, A., "Attacking IPv6 Implementation Using | Atlasis, A., "Attacking IPv6 Implementation Using | |||
Fragmentation", BlackHat Europe 2012. Amsterdam, | Fragmentation", Black Hat Europe 2012, March 2012, | |||
Netherlands. March 14-16, 2012, | <https://void.gr/kargig/ipv6/bh-eu-12-Atlasis- | |||
<https://media.blackhat.com/bh-eu-12/Atlasis/bh-eu-12- | Attacking_IPv6-Slides.pdf>. | |||
Atlasis-Attacking_IPv6-Slides.pdf>. | ||||
[Atlasis2014] | [Atlasis2014] | |||
Atlasis, A., "A Novel Way of Abusing IPv6 Extension | Atlasis, A., "A Novel Way of Abusing IPv6 Extension | |||
Headers to Evade IPv6 Security Devices", May 2014, | Headers to Evade IPv6 Security Devices", May 2014, | |||
<http://www.insinuator.net/2014/05/a-novel-way-of-abusing- | <http://www.insinuator.net/2014/05/a-novel-way-of-abusing- | |||
ipv6-extension-headers-to-evade-ipv6-security-devices/>. | ipv6-extension-headers-to-evade-ipv6-security-devices/>. | |||
[BH-EU-2014] | [BH-EU-2014] | |||
Atlasis, A., Rey, E., and R. Schaefer, "Evasion of High- | Atlasis, A., Rey, E., and R. Schaefer, "Evasion of High- | |||
End IDPS Devices at the IPv6 Era", BlackHat Europe 2014, | End IDPS Devices at the IPv6 Era", Black Hat Europe 2014, | |||
2014, <https://www.ernw.de/download/eu-14-Atlasis-Rey- | 2014, <https://www.ernw.de/download/eu-14-Atlasis-Rey- | |||
Schaefer-briefings-Evasion-of-HighEnd-IPS-Devices-wp.pdf>. | Schaefer-briefings-Evasion-of-HighEnd-IPS-Devices-wp.pdf>. | |||
[Bonica-NANOG58] | [Bonica-NANOG58] | |||
Bonica, R., "IPV6 FRAGMENTATION: The Case For | Bonica, R., "IPv6 Fragmentation: The Case For | |||
Deprecation", NANOG 58. New Orleans, Louisiana, USA. June | Deprecation", NANOG 58, June 2013, | |||
3-5, 2013, <https://www.nanog.org/sites/default/files/ | <https://www.nanog.org/sites/default/files/ | |||
mon.general.fragmentation.bonica.pdf>. | mon.general.fragmentation.bonica.pdf>. | |||
[Cisco-EH-Cons] | [Cisco-EH-Cons] | |||
Cisco, "IPv6 Extension Headers Review and Considerations", | Cisco, "IPv6 Extension Headers Review and Considerations", | |||
October 2006, | October 2006, | |||
<http://www.cisco.com/en/US/technologies/tk648/tk872/ | <http://www.cisco.com/en/US/technologies/tk648/tk872/ | |||
technologies_white_paper0900aecd8054d37d.pdf>. | technologies_white_paper0900aecd8054d37d.pdf>. | |||
[Cisco-Frag] | [Cisco-Frag] | |||
Cisco, "Cisco IOS XR Software Crafted IPv6 Packet Denial | Cisco, "Cisco IOS XR Software Crafted IPv6 Packet Denial | |||
of Service Vulnerability", June 2015, | of Service Vulnerability", June 2015, | |||
<http://tools.cisco.com/security/center/content/ | <http://tools.cisco.com/security/center/content/ | |||
CiscoSecurityAdvisory/cisco-sa-20150611-iosxr>. | CiscoSecurityAdvisory/cisco-sa-20150611-iosxr>. | |||
[Cunha-2020] | ||||
Cunha, I., "IPv4 vs IPv6 load balancing in Internet | ||||
routes", NPS/CAIDA 2020 Virtual IPv6 Workshop, 2020, | ||||
<https://www.cmand.org/workshops/202006-v6/slides/ | ||||
cunha.pdf>. | ||||
[FreeBSD-SA] | [FreeBSD-SA] | |||
FreeBSD, "FreeBSD Security Advisory FreeBSD-SA-20:24.ipv6: | The FreeBSD Project, "IPv6 Hop-by-Hop options use-after- | |||
IPv6 Hop-by-Hop options use-after-free bug", September | free bug", September 2020, | |||
2020, <https://www.freebsd.org/security/advisories/ | <https://www.freebsd.org/security/advisories/FreeBSD-SA- | |||
FreeBSD-SA-20:24.ipv6.asc>. | 20:24.ipv6.asc>. | |||
[HEADERS] Kumari, W., Jaeggli, J., Bonica, R. P., and J. Linkova, | ||||
"Operational Issues Associated With Long IPv6 Header | ||||
Chains", Work in Progress, Internet-Draft, draft-wkumari- | ||||
long-headers-03, 16 June 2015, | ||||
<https://datatracker.ietf.org/doc/html/draft-wkumari-long- | ||||
headers-03>. | ||||
[Huston-2017] | [Huston-2017] | |||
Huston, G., "Dealing with IPv6 fragmentation in the | Huston, G., "Dealing with IPv6 fragmentation in the DNS", | |||
DNS", APNIC Blog, 2017, | APNIC Blog, August 2017, | |||
<https://blog.apnic.net/2017/08/22/dealing-ipv6- | <https://blog.apnic.net/2017/08/22/dealing-ipv6- | |||
fragmentation-dns/>. | fragmentation-dns/>. | |||
[Huston-2020] | [Huston-2020] | |||
Huston, G., "Measurement of IPv6 Extension Header | Huston, G., "Measurement of IPv6 Extension Header | |||
Support", NPS/CAIDA 2020 Virtual IPv6 Workshop, 2020, | Support", NPS/CAIDA 2020 Virtual IPv6 Workshop, June 2020, | |||
<https://www.cmand.org/workshops/202006-v6/ | <https://www.cmand.org/workshops/202006-v6/ | |||
slides/2020-06-16-xtn-hdrs.pdf>. | slides/2020-06-16-xtn-hdrs.pdf>. | |||
[I-D.ietf-opsec-ipv6-eh-filtering] | ||||
Gont, F. and W. Liu, "Recommendations on the Filtering of | ||||
IPv6 Packets Containing IPv6 Extension Headers at Transit | ||||
Routers", draft-ietf-opsec-ipv6-eh-filtering-07 (work in | ||||
progress), January 2021. | ||||
[I-D.kampanakis-6man-ipv6-eh-parsing] | ||||
Kampanakis, P., "Implementation Guidelines for parsing | ||||
IPv6 Extension Headers", draft-kampanakis-6man-ipv6-eh- | ||||
parsing-01 (work in progress), August 2014. | ||||
[I-D.taylor-v6ops-fragdrop] | ||||
Jaeggli, J., Colitti, L., Kumari, W., Vyncke, E., Kaeo, | ||||
M., and T. Taylor, "Why Operators Filter Fragments and | ||||
What It Implies", draft-taylor-v6ops-fragdrop-02 (work in | ||||
progress), December 2013. | ||||
[I-D.wkumari-long-headers] | ||||
Kumari, W., Jaeggli, J., Bonica, R. P., and J. Linkova, | ||||
"Operational Issues Associated With Long IPv6 Header | ||||
Chains", draft-wkumari-long-headers-03 (work in progress), | ||||
June 2015. | ||||
[IEPG94-Scudder] | [IEPG94-Scudder] | |||
Petersen, B. and J. Scudder, "Modern Router Architecture | Petersen, B. and J. Scudder, "Modern Router Architecture | |||
for Protocol Designers", IEPG 94. Yokohama, Japan. | for Protocol Designers", IEPG 94, November 2015, | |||
November 1, 2015, <http://www.iepg.org/2015-11-01-ietf94/ | <http://www.iepg.org/2015-11-01-ietf94/IEPG- | |||
IEPG-RouterArchitecture-jgs.pdf>. | RouterArchitecture-jgs.pdf>. | |||
[IPV6-EH] Gont, F. and W. Liu, "Recommendations on the Filtering of | ||||
IPv6 Packets Containing IPv6 Extension Headers at Transit | ||||
Routers", Work in Progress, Internet-Draft, draft-ietf- | ||||
opsec-ipv6-eh-filtering-08, 3 June 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-opsec- | ||||
ipv6-eh-filtering-08>. | ||||
[Jaeggli-2018] | [Jaeggli-2018] | |||
Jaeggli, J., "IPv6 flow label: misuse in hashing", APNIC | Jaeggli, J., "IPv6 flow label: misuse in hashing", APNIC | |||
Blog, 2018, <https://blog.apnic.net/2018/01/11/ipv6-flow- | Blog, January 2018, <https://blog.apnic.net/2018/01/11/ | |||
label-misuse-hashing/>. | ipv6-flow-label-misuse-hashing/>. | |||
[Linkova-Gont-IEPG90] | [Linkova-Gont-IEPG90] | |||
Linkova, J. and F. Gont, "IPv6 Extension Headers in the | Linkova, J. and F. Gont, "IPv6 Extension Headers in the | |||
Real World v2.0", IEPG 90. Toronto, ON, Canada. July 20, | Real World v2.0", IEPG 90, July 2014, | |||
2014, <http://www.iepg.org/2014-07-20-ietf90/iepg- | <http://www.iepg.org/2014-07-20-ietf90/iepg-ietf90-ipv6- | |||
ietf90-ipv6-ehs-in-the-real-world-v2.0.pdf>. | ehs-in-the-real-world-v2.0.pdf>. | |||
[Microsoft-SA] | [Microsoft-SA] | |||
Microsoft, "Windows TCP/IP Remote Code Execution | Microsoft, "Windows TCP/IP Remote Code Execution | |||
Vulnerability (CVE-2021-24094)", February 2021, | Vulnerability", CVE-2021-24094, February 2021, | |||
<https://msrc.microsoft.com/update-guide/vulnerability/ | <https://msrc.microsoft.com/update-guide/vulnerability/ | |||
CVE-2021-24094>. | CVE-2021-24094>. | |||
[nmap] Fyodor, "Dealing with IPv6 fragmentation in the | [nmap] Lyon, G., "Firewall/IDS Evasion and Spoofing", Chapter 15. | |||
DNS", Firewall/IDS Evasion and Spoofing, | Nmap Reference Guide, | |||
<https://nmap.org/book/man-bypass-firewalls-ids.html>. | <https://nmap.org/book/man-bypass-firewalls-ids.html>. | |||
[OPERATORS] | ||||
Jaeggli, J., Colitti, L., Kumari, W., Vyncke, E., Kaeo, | ||||
M., and T. Taylor, Ed., "Why Operators Filter Fragments | ||||
and What It Implies", Work in Progress, Internet-Draft, | ||||
draft-taylor-v6ops-fragdrop-02, 3 December 2013, | ||||
<https://datatracker.ietf.org/doc/html/draft-taylor-v6ops- | ||||
fragdrop-02>. | ||||
[PARSING] Kampanakis, P., "Implementation Guidelines for Parsing | ||||
IPv6 Extension Headers", Work in Progress, Internet-Draft, | ||||
draft-kampanakis-6man-ipv6-eh-parsing-01, 5 August 2014, | ||||
<https://datatracker.ietf.org/doc/html/draft-kampanakis- | ||||
6man-ipv6-eh-parsing-01>. | ||||
[PMTUD-Blackholes] | [PMTUD-Blackholes] | |||
De Boer, M. and J. Bosma, "Discovering Path MTU black | De Boer, M. and J. Bosma, "Discovering Path MTU black | |||
holes on the Internet using RIPE Atlas", July 2012, | holes on the Internet using RIPE Atlas", University of | |||
Amsterdam, MSc. Systems & Network Engineering, July 2012, | ||||
<http://www.nlnetlabs.nl/downloads/publications/pmtu- | <http://www.nlnetlabs.nl/downloads/publications/pmtu- | |||
black-holes-msc-thesis.pdf>. | black-holes-msc-thesis.pdf>. | |||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460, | |||
December 1998, <https://www.rfc-editor.org/info/rfc2460>. | December 1998, <https://www.rfc-editor.org/info/rfc2460>. | |||
[RFC5635] Kumari, W. and D. McPherson, "Remote Triggered Black Hole | [RFC5635] Kumari, W. and D. McPherson, "Remote Triggered Black Hole | |||
Filtering with Unicast Reverse Path Forwarding (uRPF)", | Filtering with Unicast Reverse Path Forwarding (uRPF)", | |||
RFC 5635, DOI 10.17487/RFC5635, August 2009, | RFC 5635, DOI 10.17487/RFC5635, August 2009, | |||
skipping to change at page 19, line 37 ¶ | skipping to change at line 882 ¶ | |||
RFC 8955, DOI 10.17487/RFC8955, December 2020, | RFC 8955, DOI 10.17487/RFC8955, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8955>. | <https://www.rfc-editor.org/info/rfc8955>. | |||
[RFC8956] Loibl, C., Ed., Raszuk, R., Ed., and S. Hares, Ed., | [RFC8956] Loibl, C., Ed., Raszuk, R., Ed., and S. Hares, Ed., | |||
"Dissemination of Flow Specification Rules for IPv6", | "Dissemination of Flow Specification Rules for IPv6", | |||
RFC 8956, DOI 10.17487/RFC8956, December 2020, | RFC 8956, DOI 10.17487/RFC8956, December 2020, | |||
<https://www.rfc-editor.org/info/rfc8956>. | <https://www.rfc-editor.org/info/rfc8956>. | |||
[Zack-FW-Benchmark] | [Zack-FW-Benchmark] | |||
Zack, E., "Firewall Security Assessment and Benchmarking | Zack, E., "Firewall Security Assessment and Benchmarking | |||
IPv6 Firewall Load Tests", IPv6 Hackers Meeting #1, | IPv6 Firewall Load Tests", IPv6 Hackers Meeting #1, June | |||
Berlin, Germany. June 30, 2013, | 2013, <https://www.ipv6hackers.org/files/meetings/ipv6- | |||
<https://www.ipv6hackers.org/files/meetings/ipv6-hackers- | hackers-1/zack-ipv6hackers1-firewall-security-assessment- | |||
1/zack-ipv6hackers1-firewall-security-assessment-and- | and-benchmarking.pdf>. | |||
benchmarking.pdf>. | ||||
Acknowledgements | ||||
The authors would like to thank (in alphabetical order) Mikael | ||||
Abrahamsson, Fred Baker, Dale W. Carder, Brian Carpenter, Tim Chown, | ||||
Owen DeLong, Gorry Fairhurst, Guillermo Gont, Tom Herbert, Lee | ||||
Howard, Tom Petch, Sander Steffann, Eduard Vasilenko, Éric Vyncke, | ||||
Rob Wilton, Jingrong Xie, and Andrew Yourtchenko for providing | ||||
valuable comments on earlier draft versions of this document. | ||||
Fernando Gont would like to thank Jan Zorz / Go6 Lab | ||||
<https://go6lab.si/>, Jared Mauch, and Sander Steffann | ||||
<https://steffann.nl/> for providing access to systems and networks | ||||
that were employed to perform experiments and measurements involving | ||||
packets with IPv6 extension headers. | ||||
Authors' Addresses | Authors' Addresses | |||
Fernando Gont | Fernando Gont | |||
SI6 Networks | SI6 Networks | |||
Segurola y Habana 4310, 7mo Piso | Segurola y Habana 4310, 7mo Piso | |||
Villa Devoto, Ciudad Autonoma de Buenos Aires | Villa Devoto | |||
Ciudad Autonoma de Buenos Aires | ||||
Argentina | Argentina | |||
Email: fgont@si6networks.com | Email: fgont@si6networks.com | |||
URI: https://www.si6networks.com | URI: https://www.si6networks.com | |||
Nick Hilliard | Nick Hilliard | |||
INEX | INEX | |||
4027 Kingswood Road | 4027 Kingswood Road | |||
Dublin 24 | Dublin | |||
IE | 24 | |||
Ireland | ||||
Email: nick@inex.ie | Email: nick@inex.ie | |||
Gert Doering | Gert Doering | |||
SpaceNet AG | SpaceNet AG | |||
Joseph-Dollinger-Bogen 14 | Joseph-Dollinger-Bogen 14 | |||
Muenchen D-80807 | D-80807 Muenchen | |||
Germany | Germany | |||
Email: gert@space.net | Email: gert@space.net | |||
Warren Kumari | Warren Kumari | |||
1600 Amphitheatre Parkway | 1600 Amphitheatre Parkway | |||
Mountain View, CA 94043 | Mountain View, CA 94043 | |||
US | United States of America | |||
Email: warren@kumari.net | Email: warren@kumari.net | |||
Geoff Huston | Geoff Huston | |||
Email: gih@apnic.net | Email: gih@apnic.net | |||
URI: http://www.apnic.net | URI: https://www.apnic.net | |||
Will (Shucheng) Liu | Will (Shucheng) Liu | |||
Huawei Technologies | Huawei Technologies | |||
Bantian, Longgang District | Bantian, Longgang District | |||
Shenzhen 518129 | Shenzhen | |||
P.R. China | 518129 | |||
China | ||||
Email: liushucheng@huawei.com | Email: liushucheng@huawei.com | |||
End of changes. 143 change blocks. | ||||
406 lines changed or deleted | 419 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |