| < draft-mcbride-grow-as-path-prepend-00.txt | draft-mcbride-grow-as-path-prepend-01.txt > | |||
|---|---|---|---|---|
| Network Working Group M. McBride | Network Working Group M. McBride | |||
| Internet-Draft Futurewei | Internet-Draft Futurewei | |||
| Intended status: Best Current Practice D. Madory | Intended status: Best Current Practice D. Madory | |||
| Expires: January 14, 2021 Oracle | Expires: January 27, 2021 Oracle | |||
| J. Tantsura | J. Tantsura | |||
| Apstra | Apstra | |||
| July 13, 2020 | July 26, 2020 | |||
| AS-Path Prepend | AS-Path Prepend | |||
| draft-mcbride-grow-as-path-prepend-00 | draft-mcbride-grow-as-path-prepend-01 | |||
| Abstract | Abstract | |||
| AS_Path prepending provides a tool to manipulate the BGP AS_Path | AS_Path prepending provides a tool to manipulate the BGP AS_Path | |||
| attribute through prepending multiple entries of an AS. AS_Path | attribute through prepending multiple entries of an AS. AS_Path | |||
| prepend is used to deprioritize a route or alternate path. By | prepend is used to deprioritize a route or alternate path. By | |||
| prepending the local ASN multiple times, ASes can make advertised AS | prepending the local ASN multiple times, ASes can make advertised AS | |||
| paths appear artificially longer. Excessive AS_Path prepending has | paths appear artificially longer. Excessive AS_Path prepending has | |||
| caused routing issues in the internet. This document provides | caused routing issues in the internet. This document provides | |||
| guidance,to the internet community, with how best to utilize AS_Path | guidance,to the internet community, with how best to utilize AS_Path | |||
| skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 14, 2021. | This Internet-Draft will expire on January 27, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 | |||
| skipping to change at page 2, line 24 ¶ | skipping to change at page 2, line 24 ¶ | |||
| 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Problems . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Problems . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Excessive Prepending . . . . . . . . . . . . . . . . . . 3 | 2.1. Excessive Prepending . . . . . . . . . . . . . . . . . . 3 | |||
| 2.2. Prepending during a routing leak . . . . . . . . . . . . 3 | 2.2. Prepending during a routing leak . . . . . . . . . . . . 3 | |||
| 2.3. Route Competition . . . . . . . . . . . . . . . . . . . . 4 | 2.3. Route Competition . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.4. Prepending to All . . . . . . . . . . . . . . . . . . . . 5 | 2.4. Prepending to All . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.5. Memory . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.5. Memory . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.6. Errant announcement . . . . . . . . . . . . . . . . . . . 6 | 2.6. Errant announcement . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Best Practices . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Best Practices . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 7 | 6. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. Normative References . . . . . . . . . . . . . . . . . . . . 7 | 7. Normative References . . . . . . . . . . . . . . . . . . . . 7 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 7 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 1. Introduction | 1. Introduction | |||
| The Border Gateway Protocol (BGP) [RFC4271] specifies the AS_Path | The Border Gateway Protocol (BGP) [RFC4271] specifies the AS_Path | |||
| attribute which enumerates the ASs that must be traversed to reach | attribute which enumerates the ASs that must be traversed to reach | |||
| the networks listed in the BGP UPDATE message. If the UPDATE message | the networks listed in the BGP UPDATE message. If the UPDATE message | |||
| is propagated over an external link, then the local AS number is | is propagated over an external link, then the local AS number is | |||
| skipping to change at page 3, line 30 ¶ | skipping to change at page 3, line 30 ¶ | |||
| which is normally announced with an inordinate amount of prepending. | which is normally announced with an inordinate amount of prepending. | |||
| A recent analysis revealed that 95.47.142.0/23 is announced to the | A recent analysis revealed that 95.47.142.0/23 is announced to the | |||
| world along the following AS path: | world along the following AS path: | |||
| 3255 197158 197158 197158 197158 197158 197158 197158 197158 197158 | 3255 197158 197158 197158 197158 197158 197158 197158 197158 197158 | |||
| 197158 197158 197158 197158 197158 197158 197158 197158 197158 197158 | 197158 197158 197158 197158 197158 197158 197158 197158 197158 197158 | |||
| 197158 197158 197158 197158 | 197158 197158 197158 197158 | |||
| In this example, the origin AS197158 appears 23 consecutive times | In this example, the origin AS197158 appears 23 consecutive times | |||
| before being passed on to a single upstream (AS3255), which passes it | before being passed on to a single upstream (AS3255), which passes it | |||
| on to the global internet, prepended-to-all. An attacker wanting to | on to the global internet, prepended-to-all. An attacker, wanting to | |||
| intercept or manipulate traffic to this prefix might enlist a | intercept or manipulate traffic to this prefix, could enlist a | |||
| datacenter of questionable morals who would allow announcements of | datacenter to allow announcements of the same prefix with a | |||
| the same prefix with a fabricated AS path such as 999999 3255 197158. | fabricated AS path such as 999999 3255 197158. Here the fictional | |||
| Here the fictional AS999999 represents the shady datacenter. This | AS999999 represents the shady datacenter. This malicious route would | |||
| malicious route would be pretty popular due to the shortened AS path | be pretty popular due to the shortened AS path length and might go | |||
| length and might go unnoticed by the true origin, even if route- | unnoticed by the true origin, even if route-monitoring had been | |||
| monitoring had been implemented. Standard BGP route monitoring | implemented. Standard BGP route monitoring checks a route's origin | |||
| checks a route's origin and upstream and both would be intact in this | and upstream and both would be intact in this scenario. The length | |||
| scenario. The length of the prepending gives the attacker room to | of the prepending gives the attacker room to craft an AS path that | |||
| craft an AS path that would appear plausible to the casual observer, | would appear plausible to the casual observer, comply with origin | |||
| comply with origin validation mechanisms, and not be detected by off- | validation mechanisms, and not be detected by off-the-shelf route | |||
| the-shelf route monitoring. | monitoring. | |||
| 2.2. Prepending during a routing leak | 2.2. Prepending during a routing leak | |||
| In April 2010, China Telecom experienced a routing leak. While | In April 2010, China Telecom experienced a routing leak. While | |||
| analyzing the leak something peculiar was noticed. When we ranked | analyzing the leak something peculiar was noticed. When we ranked | |||
| the approximately 50,000 prefixes involved in the leak based on how | the approximately 50,000 prefixes involved in the leak based on how | |||
| many ASes accepted the leaked routes, most of the impact was | many ASes accepted the leaked routes, most of the impact was | |||
| constrained to Chinese routes. However, two of the top five most- | constrained to China routes. However, two of the top five most- | |||
| propagated leaked routes (listed in the table below) were US routes. | propagated leaked routes (listed in the table below) were US routes. | |||
| Was there some grand conspiracy to intercept traffic destined for | ||||
| these routes? Actually, it was due to something much more troubling: | ||||
| gratuitous AS path prepending. | ||||
| During the routing leak, nearly all of the ASes of the internet | During the routing leak, nearly all of the ASes of the internet | |||
| preferred the Chinese leaked routes for 12.5.48.0/21 and | preferred the China leaked routes for 12.5.48.0/21 and 12.4.196.0/22 | |||
| 12.4.196.0/22 because, at the time, these two US prefixes were being | because, at the time, these two US prefixes were being announced to | |||
| announced to the entire internet along the following excessively | the entire internet along the following excessively prepended AS | |||
| prepended AS path: 3257 7795 12163 12163 12163 12163 12163 12163. | path: 3257 7795 12163 12163 12163 12163 12163 12163. Virtually any | |||
| With this odd configuration, virtually any illegitimate route, | illegitimate route would be preferred over the legitimate route. In | |||
| whether a deliberate hijack or an inadvertent leak, would be | this case, the victim is all but ensuring their victimhood. | |||
| preferred over the legitimate route. In this case, the victim is all | ||||
| but ensuring their victimhood. | ||||
| There was only a single upstream seen in the prepending example from | There was only a single upstream seen in the prepending example from | |||
| above, so the prepending was achieving nothing while incurring risk | above, so the prepending was achieving nothing except incurring risk. | |||
| of hijacked traffic during a routing leak or hijack. You'd think | You would think such mistakes would be relatively rare, especially | |||
| such mistakes would be relatively rare, especially now, 10 years | now, 10 years later. As it turns out, there is quite a lot of | |||
| later. As it turns out, there is quite a lot of prepending-to-all | prepending-to-all going on right now and during leaks, it doesn't go | |||
| going on right now and during leaks, it doesn't go well for those who | well for those who make this mistake. While one can debate the | |||
| make this mistake. While one can debate the merits of prepending to | merits of prepending to a subset of multiple transit providers, it is | |||
| a subset of multiple transit providers, it is difficult to see the | difficult to see the utility in prepending to every provider. In | |||
| utility in prepending to every provider. In this configuration, the | this configuration, the prepending is no longer shaping route | |||
| prepending is no longer shaping route propagation. It is simply | propagation. It is simply incentivizing ASes to choose another | |||
| incentivizing ASes to choose another origin if one were to suddenly | origin if one were to suddenly appear whether by mistake or | |||
| appear whether by mistake or otherwise. | otherwise. | |||
| 2.3. Route Competition | 2.3. Route Competition | |||
| So what happens when a non-prepended route competes against an | So what happens when a non-prepended route competes against an | |||
| excessively prepended route? Let's consider a real-world example. | excessively prepended route? Let's consider a real-world example. | |||
| The Polish route 91.149.240.0/22 is normally announced with the | The Polish route 91.149.240.0/22 is normally announced with the | |||
| origin prepended three times (41952 41952 41952) to three providers | origin prepended three times (41952 41952 41952) to three providers | |||
| and prepended twice to a fourth. Beginning at 15:28:14 UTC on June | and prepended twice to a fourth. Beginning at 15:28:14 UTC on June | |||
| 6, a new origin that was not prepended appeared in the routing table | 6, a new origin that was not prepended appeared in the routing table | |||
| for this route. As is illustrated in the graphic below, AS60781 | for this route. As is illustrated in the graphic below, AS60781 | |||
| End of changes. 10 change blocks. | ||||
| 41 lines changed or deleted | 36 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/ | ||||