Avertissement : Cet article a été traduit de l’anglais par un LLM. La précision n’est pas garantie. Vous pouvez lire l’article original en anglais.
Si vous suivez l’actualité sur Internet, vous avez peut-être vu qu’à la fin du mois de février, la FCC (Federal Communications Commission) a lancé une enquête sur le BGP. L’introduction du document de l’avis d’enquête mentionne que :
La Commission, en parallèle avec ses partenaires fédéraux, a exhorté le secteur des communications à se défendre contre les cybermenaces, tout en prenant des mesures pour renforcer la préparation de notre Nation et consolider la cybersécurité des services et infrastructures de communications vitaux, en particulier à la lumière de l’escalade des actions de la Russie en Ukraine. […] Nous sollicitons des commentaires sur les vulnérabilités menaçant la sécurité et l’intégrité du Border Gateway Protocol (BGP), qui est central pour Internet
Vous avez peut-être entendu parler du BGP comme de la chose utilisée pour router Internet, ou comme de la chose qui a fait tomber Facebook l’an dernier. Mais savez-vous vraiment ce que c’est, comment ça fonctionne, et quelles sont ses failles potentielles ? Découvrons-le.
Routage des paquets et BGP#
Si l’on veut définir Internet, on pourrait dire qu’Internet est un ensemble de réseaux interconnectés. Selon Cisco, il y aura 5,3 milliards d’utilisateurs d’ici 2023, et selon siteefy, il existe actuellement 1,17 milliard de sites web. C’est formidable, mais avec ces chiffres, vous pouvez imaginer qu’une sorte de carte est nécessaire pour qu’un paquet aille de la machine A à la machine B. C’est à cela que sert le BGP.
Pour donner une définition plus technique, le BGP (Border Gateway Protocol - utilisant le port 179 sur TCP) permet de router les paquets entre les systèmes autonomes. Les systèmes autonomes utilisent le BGP pour annoncer les adresses IP qu’ils gèrent et à quels autres systèmes autonomes ils sont connectés. Avant d’entrer plus dans les détails, prenons un moment pour définir quelques termes.
Terminologie#
Système autonome (AS)#
Un système autonome est un groupe d’un ou plusieurs préfixes IP (par exemple 8.8.0.0/24 qui représente toutes les adresses IP entre 8.8.0.1 et 8.8.0.254) ayant une politique de routage unique et clairement définie. Ils sont généralement gérés par une seule organisation, par exemple une entreprise (ex. Google, Amazon), une agence gouvernementale ou un FAI (ex. Verizon). Il est possible pour une organisation de gérer plusieurs systèmes autonomes.
Numéro de système autonome (ASN)#
Chaque système autonome est identifié par un numéro de système autonome (ASN), qui est attribué par un registre Internet régional (RIR). Il est utilisé par les opérateurs réseau pour échanger des informations de routage.
Il est possible d’en savoir plus sur le propriétaire d’un ASN en utilisant la commande whois (comme vous le feriez pour un nom de domaine). Par exemple, whois AS15169 (la sortie est assez volumineuse, donc je ne la collerai pas ici).
Vous pouvez également savoir à quel AS et préfixe IP une adresse IP appartient. Par exemple, cymru.com fournit une API interrogeable via whois
> whois -h whois.cymru.com -- '-v 8.8.8.8'
AS | IP | BGP Prefix | CC | Registry | Allocated | AS Name
15169 | 8.8.8.8 | 8.8.8.0/24 | US | arin | 1992-12-01 | GOOGLE, USDivers services sur Internet vous permettent également d’en savoir plus sur un ASN. Par exemple, AS15169 sur ipinfo.io, où vous pouvez voir toutes les plages d’IP attribuées à l’AS et comment il est connecté aux autres systèmes autonomes.
Registre Internet régional (RIR) et Internet Assigned Number Authority (IANA)#
Il existe cinq registres Internet régionaux, et chacun est attribué à une zone géographique particulière. Par exemple, l’American Registry for Internet Numbers (ARIN) est chargé d’attribuer les ASN aux entités américaines. Les cinq RIR sont gérés par l’Internet Assigned Number Authority (IANA). Les RIR sont également chargés de l’attribution des plages d’IP.
Exemple de haut niveau#
Toutes ces définitions sont bonnes, mais regardons quelque chose de concret, et disons que vous voulez envoyer une requête au DNS de Google 8.8.8.8. Pour votre ordinateur, ce sera assez simple : la seule connexion réseau qu’il a est votre routeur, donc il y envoie la requête. Ensuite, votre routeur n’a aussi qu’un seul choix : envoyer votre requête à votre FAI. Et ensuite ?
La figure suivante est une carte simplifiée d’Internet. En haut à droite se trouve votre FAI (disons AS0), et en bas à gauche Google (disons AS15169). Depuis votre ordinateur, votre requête est routée à travers différentes parties du réseau de votre FAI (éventuellement en utilisant le BGP interne, iBGP) et finit par atteindre le routeur de bordure de votre FAI. À partir de là, votre FAI décide (grâce au BGP et aux politiques internes) que le meilleur chemin est AS0 -> AS1 -> AS2 -> AS10 -> AS15169, et enverra donc votre requête à AS1, qui routera votre requête à travers son réseau interne et l’enverra à AS2, et ainsi de suite jusqu’à ce qu’elle atteigne le bon endroit.
Notez que par souci de simplification, la Figure 1 montre un seul routeur BGP pour chaque FAI, mais il y en aura en réalité plusieurs (en plus des routeurs BGP internes).
Comment les systèmes autonomes sont-ils connectés entre eux#
Une chose que vous vous êtes peut-être demandée en regardant la Figure 1 précédente est comment les différents AS sont réellement connectés entre eux. Définissons quelques termes supplémentaires et voyons comment ils s’intègrent dans le tableau d’ensemble.
Systèmes autonomes en amont et en aval#
Si vous regardez la page ipinfo.io pour AS15169, vous remarquerez qu’il y a une liste d’ASN en amont et une liste d’ASN en aval. En résumé, les ASN en aval représentent les AS utilisant Google pour accéder au réseau plus large, et les ASN en amont représentent les AS utilisés par Google pour accéder au réseau plus large.
Transit Internet (IP) et peering#
Le transit IP est un service où un FAI (fournisseur en amont) vend le droit d’utiliser son réseau pour se connecter à l’Internet au sens large (c’est-à-dire utiliser les connexions BGP que le FAI a avec d’autres FAI).
Il y a des cas où deux FAI peuvent se permettre mutuellement l’accès à leurs réseaux gratuitement. C’est ce qu’on appelle le peering. Cela se produit généralement quand les FAI ont des intérêts commerciaux à accéder gratuitement aux réseaux de l’autre.
Réseaux Tier 1, 2 et 3#
Nous avons mentionné deux types de connexions entre FAI : le transit IP et le peering. La façon dont les FAI les utilisent dépend principalement de leur Tier.
Réseaux Tier 1 Les FAI Tier 1 sont les plus grands. Ils sont généralement définis comme étant capables d’accéder à tous les autres réseaux sur Internet sans avoir à payer pour le transit Internet ou le peering.
Quelques exemples de FAI Tier 1 sont AT&T, NTT et Orange.
Réseaux Tier 2 Les FAI Tier 2 font du peering avec d’autres réseaux (principalement Tier 2), mais achètent également du transit IP auprès de fournisseurs Tier 1 pour accéder à l’ensemble d’Internet.
Les FAI Tier 2 ont généralement une portée nationale ou régionale, et seuls quelques-uns sont capables de servir des clients sur plusieurs continents grâce à leur propre infrastructure.
Quelques exemples de FAI Tier 2 sont Korea Telecom, British Telecom et Comcast.
Réseaux Tier 3 Les fournisseurs de services Tier 3 sont généralement petits et achètent uniquement du transit IP auprès de réseaux Tier 2 et (parfois) Tier 1.
Point d’échange Internet (IXP) et interconnexion réseau privée (PNI)#
Un IXP est un emplacement physique où les entreprises d’infrastructure Internet (par exemple les FAI et les CDN) se connectent pour échanger du trafic. C’est essentiellement un centre de données contenant des commutateurs réseau, maintenu (financé) par les différents participants.
L’avantage pour les participants est qu’ils peuvent accéder aux réseaux les uns des autres sans avoir à payer de plus gros fournisseurs pour le peering. Les IXP aident également à améliorer la latence des requêtes échangées entre les participants. Notez que les participants ne partagent pas leurs connexions en amont via les IXP.
Vous pouvez voir quelques exemples d’IXP sur ce site web.
Notez que les IXP impliquent généralement plus de deux participants. Si deux FAI estiment qu’une connexion mutuelle est suffisamment importante, ils créeront une interconnexion réseau privée (PNI), qui est une connexion fibre directe entre les deux.
Un exemple concret#
Maintenant que nous avons défini tous les acteurs utilisant le BGP, regardons à nouveau un exemple, mais cette fois avec un niveau de détail plus profond (notez qu’il y a beaucoup à dire, donc nous essaierons de garder les choses simples et de ne pas entrer dans chaque aspect).
Dans la Figure 2 suivante, nous avons :
- AS1 est un FAI Tier 2, il obtient une connexion en amont vers AS2, un FAI Tier 1
- AS2 a une connexion en aval vers AS1 et AS4
- AS3, AS4 et AS5 sont des FAI Tier 2
- AS3 et AS5 partagent une connexion via un IXP
- AS1 et AS3 échangent beaucoup de trafic, ils ont donc un peering
- Idem pour AS4 et AS5

Disons que nous sommes AS1, un nouveau FAI qui vient d’être mis en ligne. Nous devons d’abord configurer nos voisins. Comme nous avons des accords avec AS3 et AS2, nous les ajoutons à notre configuration de voisins BGP. Notre table ressemblerait alors à ce qui suit (en réalité, elle serait plus complexe et contiendrait des statistiques, un statut, …) :
| Voisin | AS |
|---|---|
| 1.5.0.1 | 3 |
| 1.2.0.1 | 2 |
À partir de là, nous recevrons des informations BGP, et notre table BGP sera remplie avec les éléments suivants (encore une fois, version simplifiée) :
| Réseau | Prochain saut | Chemin |
|---|---|---|
| 1.1.0.1 | 0.0.0.0 | i |
| 1.5.0.0/16 | 1.5.0.1 | AS3 |
| 1.4.0.0/16 | 1.5.0.1 | AS3, AS5 |
| 1.3.0.0/16 | 1.5.0.1 | AS3, AS5, AS4 |
| 1.2.0.0/16 | 1.5.0.1 | AS3, AS5, AS4, AS2 |
| 1.2.0.0/16 | 1.2.0.1 | AS2 |
| 1.3.0.0/16 | 1.2.0.1 | AS2, AS4 |
| 1.4.0.0/16 | 1.2.0.1 | AS2, AS4, AS5 |
Notez que les routes peuvent également être définies manuellement au lieu de s’appuyer sur les messages des voisins. Les réseaux n’étant pas quelque chose de figé, des mises à jour seront envoyées via BGP lorsque des changements sont effectués. Par exemple, s’il devenait non pertinent pour AS4 et AS5 d’avoir un accord de peering, et qu’ils cessaient d’avoir une connexion directe, notre table locale serait mise à jour comme suit.
| Réseau | Prochain saut | Chemin |
|---|---|---|
| 1.1.0.1 | 0.0.0.0 | i |
| 1.5.0.0/16 | 1.5.0.1 | AS3 |
| 1.4.0.0/16 | 1.5.0.1 | AS3, AS5 |
| 1.2.0.0/16 | 1.2.0.1 | AS2 |
| 1.3.0.0/16 | 1.2.0.1 | AS2, AS4 |
Revenons à notre table BGP initiale, disons que nous voulons envoyer un paquet à AS5. Nous avons deux options :
- Prendre la route AS3 -> AS5
- Prendre la route AS2 -> AS4 -> AS5
Puisque nous avons plusieurs options, le routeur examinera la configuration BGP pour choisir quelle route utiliser. Les politiques BGP permettent de baser les décisions de routage sur plusieurs éléments tels que :
- La longueur du chemin
- La préférence locale
- L’ancienneté de la route
- Si le paquet peut être routé via iBGP plutôt qu’eBGP
- … (voir les références de l’article pour plus de détails)
Dans notre cas, puisque nous payons pour le trafic envoyé à AS2, nous pourrions avoir une préférence locale indiquant au routeur de faire passer les paquets par AS3 en priorité, car nous avons un accord de peering gratuit.
Qu’est-ce qui peut mal tourner ?#
Le BGP est un protocole assez ancien (esquissé en 1989) et, comme la plupart des anciens protocoles (je vous regarde ARP, DNS et bien d’autres), il n’a pas été conçu avec la sécurité à l’esprit.
Le risque le plus significatif avec le BGP est l’attaque de détournement BGP (BGP hijack). Elle consiste à faire envoyer par un AS de fausses informations de routage. Par exemple, revenons à la Figure 2. Nous avons une relation avec AS2 et AS3, nous avons donc choisi de leur faire confiance pour ne pas agir de manière malveillante, mais nous n’avons pas de contrôle sur leurs voisins, les voisins de leurs voisins, et ainsi de suite… Il est tout à fait possible qu’à un moment donné, AS5 devienne malveillant et annonce qu’il possède le réseau 1.3.0.0/24 (qui appartient en réalité à AS4). Comme le BGP est basé sur la confiance, nos routes BGP seraient compromises, et certaines de nos communications pourraient finir entre de mauvaises mains (notez que dans cet exemple, AS5 devient malveillant, mais cela pourrait tout aussi bien être une erreur humaine).
Il existe en fait plusieurs exemples d’attaques de détournement BGP ayant été exécutées. En 2018, un FAI russe a détourné des préfixes IP appartenant aux serveurs DNS d’Amazon et a redirigé les utilisateurs d’un portefeuille de cryptomonnaies vers un site web malveillant. Les pirates ont volé l’équivalent d’environ 152 000 USD en cryptomonnaies (référence)
Un autre problème récurrent est la fuite de routes. Cela se produit essentiellement lorsqu’une route se retrouve (non intentionnellement) diffusée au-delà de sa portée prévue. Par exemple, en 2008, Pakistan Telecom a tenté de censurer YouTube en mettant les adresses IP du service en route nulle. Les routes ont ensuite été envoyées par erreur au fournisseur en amont de Pakistan Telecom, PCCW, et de là, se sont propagées à travers Internet.
Corriger le BGP#
La tentative la plus récente pour corriger le BGP est le RPKI (Resource Public Key Infrastructure), mais il n’est pas encore largement déployé. Vous pouvez en lire plus ici, ainsi que voir ses progrès d’adoption. En résumé, il fonctionne de la manière suivante :
- Les propriétaires de préfixes créent une ROA (Route Origin Authorization) qui permet d’associer un AS à un préfixe IP
- Les ROA sont signées par l’autorité de certification du registre Internet régional approprié (Trust Anchor) pour attester que l’association est correcte
- Les systèmes autonomes peuvent vérifier que l’association AS/préfixe IP qu’ils ont dans leurs routes est correcte en récupérant les informations et en vérifiant les signatures (par exemple en utilisant un validateur)
Sources et ressources supplémentaires#
- StackPath: What is an Autonomous System Number (ASN)
- IANA: Number Resources
- ARIN: Autonomous System Numbers
- Wikipedia: Autonomous system (Internet)
- miloserdov: How to find out the Autonomous system on the IP and how to find out all the Autonomous System IPs
- Juniper Networks: BGP Overview
- CloudFlare: What is an Internet exchange point? | How do IXPs work?
- Cisco: BGP Techniques for Internet Service Providers
- Noction: IP Transit and the Tiers of Transit Providers
- Wikipedia: Tier 1 network
- Wikipedia: Tier 2 network
- Euro IX: Internet Exchange Points, 2018-2019 Report
- MTIN Consulting: Transit, peer, downstream..what do they all mean?
- Global Internet Exchange Points / BGP Peering Points / IXP
- NSRC: BGP For All
- Network Urge: BGP Messages
- N-Study: BGP Basic Configuration and Verification Commands
- Network Urge: BGP Best Path Selection Criteria
- Juniper: Understanding BGP Path Selection
- Loyola University of Chicago: Border Gateway Protocol (BGP)
- BGP.us: Overview of the BGP (Border Gateway Protocol)
- Network World: BGP: What is border gateway protocol, and how does it work?
- Cloudflare: Why Google Went Offline Today and a Bit about How the Internet Works
- Catchpoint: BGP Route Leak Incident Review
- Thousand Eyes: BGP Route Leak
- Thousand Eyes: BGP Route Hijacking
- IETF: BGPsec Protocol Specification
- Internet Society: BGPSec - A reality now
- phoenixNAP: RPKI Explained - Secure BGP Routing
- ARIN: What is Hosted RPKI?
- MANRS: What is route origin validation?
- RIPE: Resource Public Key Infrastructure (RPKI)
Crédits images#
- Photo de couverture par Lars Kienle sur Unsplash