Première rédaction de cet article le 4 février 2012
On le sait, le protocole BGP (normalisé dans le RFC 4271), sur lequel repose tout l'Internet, car c'est lui qui permet à l'information de routage de circuler entre les opérateurs, ce protocole, donc, est peu sûr. N'importe qui peut annoncer n'importe quelle route, dire « Je suis Google, envoyez-moi toutes les requêtes Google » et les autres le croient. Résoudre cette vulnérabilité n'est pas trivial, pour des raisons essentiellement non techniques. Néanmoins, le manque d'un mécanisme standard pour valider les routes était une des faiblesses du routage Internet. Une série de RFC vient de partiellement combler ce déficit.
Écrits par le groupe de travail IETF SIDR (Secure Inter-Domain Routing), ces RFC décrivent une série de protocoles, règles et formats qui permettent de sécuriser une partie de BGP. À eux seuls, ils sont loin de résoudre le problème, qui est très complexe. Mais ils fournissent des briques sur lesquelles seront bâties les solutions ultérieures.
Ces annonces de route anormales sont relativement banales sur l'Internet. Pour ne citer que trois exemples relativement récents :
Toutes étaient des erreurs et pas des attaques. Néanmoins, le risque que cette même faiblesse soit exploitée pour des attaques est réel. Celles-ci seront sans doute plus subtiles que les trois grosses bavures citées plus haut, et utiliseront sans doute des techniques de furtivité comme celle de Kapela & Pilosov.
Mais alors, pourquoi malgré autant d'attaques (n'exagérons rien : il n'y en a pas tous les mois), n'a-t-on pas encore déployé une solution de sécurité ? Parce que le problème est compliqué. Le routage sur l'Internet n'est pas hiérarchique. Les relations entre opérateurs sont un graphe plutôt complexe, et un opérateur qui est situé loin ne sait pas ce qui est normal : après tout, qui me dit que YouTube n'a pas subitement changé de fournisseur pour s'installer au Pakistan ? Même si un être humain peut trouver cela bizarre, le pauvre routeur BGP n'a pas de moyen de décider si une annonce est normale ou pas.
Il y a en fait deux choses qu'on peut vouloir authentifier dans
une annonce BGP. Imaginons qu'un routeur reçoive une annonce pour le
préfixe 2001:db8:666::/48
et que le chemin des
AS traversés soit 64496 65550
65543
(rappelez-vous que le chemin se lit de droite à
gauche, l'annonce initiale a donc été faite par l'AS 65543). Le
routeur peut se demander « Est-ce que 65543 était bien autorisé à
annoncer ce préfixe ? », ce qu'on appelle la validation de
l'origine. Et il peut aussi s'interroger « Est-ce que 65550
avait le droit de relayer cette annonce ? Et 64496 ? ». C'est la
validation du chemin. La première est
relativement simple (il n'y a pas tant de préfixes IP que cela et ils
sont normalement tous enregistrés dans les bases des
RIR, et les origines changent rarement). La
seconde est bien plus complexe (explosion combinatoire du nombre de
possibilités, relations entre opérateurs qui ne sont pas dans les
bases des RIR, changements fréquents) et ne
sera traitée que dans un deuxième temps.
Il y a donc eu de nombreuses tentatives de résoudre ce problème de sécurité (une liste partielle figure à la fin de cet article). Attention d'ailleurs en lisant ce qu'on trouve sur l'Internet : vous extrayerez des tas de propositions dépassées ou abandonnées.
L'approche choisie par le groupe SIDR est modulaire : il n'y a pas une technique unique qui résout tout mais un ensemble d'outils, à combiner selon les cas. À la base, se trouve la RPKI, une IGC hiérarchique, partant de l'IANA et des RIR, permettant de produire des certificats attestant de la « possession » d'une ressource (un préfixe IP, un numéro d'AS, etc). L'émission de ces certificats a été un des premiers pas concrets.
Une fois les certificats émis, les titulaires des ressources (typiquement, des adresses IP) créent des objets signés, les ROA (Route Origin Authorizations). Ces ROA et les certificats sont distribués sur l'Internet (pas en temps réel) et tout routeur peut les consulter pour savoir si une annonce est légitime. Pour éviter de charger le routeur avec des calculs cryptographiques, la validation sera typiquement faite par une machine spécialisée, le validateur, que le routeur interrogera avec un protocole simple.
Voici la longue liste des 14 (!) RFC qui viennent de paraître sur ce sujet. L'ordre ci-dessous est leur ordre d'importance décroissante (selon moi) :
En outre, quelques mois après, est sorti le RFC 6810, sur RTR (RPKI/Router Protocol) le protocole de communication entre le routeur BGP et son validateur, typiquement un serveur Unix spécialisé. Et le RFC 6811, décrivant plus précisement la validation de préfixes.
Quelles sont les chances d'adoption de RPKI+ROA, sachant que d'innombrables protocoles de sécurité de l'IETF ont été peu ou pas déployés (IPsec, PGP, etc) ? Tout le monde dit en effet vouloir davantage de sécurité mais, en pratique, personne ne veut en payer le prix. Les systèmes de sécurité sont lourds, contraignants, et ne semblent pas en valoir la peine. Il est possible que des des mesures a posteriori (via des systèmes d'alerte) suffisent à gérer le problème de la sécurité de BGP.
Sinon, ce système soulève des tas de questions liées à la gouvernance, comme c'est souvent le cas des mécanismes de sécurité. Quelques exemples :
Pour le fonctionnement concret du système RPKI+ROA, et des exemples, voir mon autre article.
Dans le futur, des travaux auront lieu pour valider le chemin et non plus seulement l'origine comme le fait notre nouveau système (le cahier des charges de ce projet a été publié dans le RFC 7353). Après des propositions comme Secure BGP, le futur protocole se nommera probablement BGPSEC car, contrairement au système qui vient d'être normalisé, il sera une modification de BGP. Humour par Hugo Salgado : si l'actuel BGP, sans sécurité, est BGPbrut, RPKI+ROA est un BGPdemisec - à moitié sécurisé - et le futur protocole sera, logiquement, BGPsec...
Quelques articles intéressants :
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)