<?xml version="1.0" encoding="utf-8"?>
<entry title="La longue marche de la sécurité du routage Internet : une étape importante, RPKI+ROA">
<date>2012-02-04</date>
<content>
<p>On le sait, le protocole <wikipedia name="Border Gateway Protocol">BGP</wikipedia> (normalisé dans
le <rfc num="4271" local="true"/>), sur lequel repose tout
l'<wikipedia>Internet</wikipedia>, car c'est lui qui permet à
l'information de <wikipedia>routage</wikipedia> 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
<wikipedia>Google</wikipedia>, 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.</p>
<p>Écrits par le groupe de travail <wikipedia name="Internet Engineering Task Force">IETF</wikipedia> <link
url="http://tools.ietf.org/wg/sidr">SIDR</link> (<foreign>Secure Inter-Domain Routing</foreign>), ces <wikipedia name="Request for comments">RFC</wikipedia> 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.</p>
<p>Ces annonces de route anormales sont relativement banales sur
l'Internet. Pour ne citer que trois exemples relativement récents :
<enum>
<item>Le 24 février <wikipedia>2008</wikipedia>, <wikipedia xml:lang="en" name="Pakistan Telecommunication Company Ltd">Pakistan Telecom</wikipedia> annonce les
adresses de <wikipedia>YouTube</wikipedia> et <link
local="pakistan-pirate-youtube">prive le monde de ce service pendant plusieurs
heures</link>,</item>
<item>Le 8 avril 2010, <wikipedia>China Telecom</wikipedia> annonce les
adresses d'une bonne partie de l'Internet et <link url="http://bgpmon.net/blog/?p=323">attire
ainsi leur trafic</link>,</item>
<item>Le 23 juin 2011, <wikipedia xml:lang="en" name="France Télécom" anchor="Subsidiaries">OpenTransit</wikipedia> fait la même
erreur et <link url="http://www.mail-archive.com/frnog@frnog.org/msg15150.html">détourne également une partie du
trafic</link>. Les abonnés au <link local="alarmes-as">service d'alarme BGPmon</link> reçoivent des <file name="bgpmon-as5511-june-2011.txt">avis de détournement</file>.</item>
</enum>
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 <link local="faille-bgp-2008">Kapela &amp; Pilosov</link>.</p>
<p>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.</p>
<p>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 <computer>2001:db8:666::/48</computer> et que le chemin des
<wikipedia name="Autonomous System">AS</wikipedia> traversés soit <computer>64496 65550
65543</computer> (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 <emphasis>validation de
l'origine</emphasis>. Et il peut aussi s'interroger « Est-ce que 65550
avait le droit de relayer cette annonce ? Et 64496 ? ». C'est la
<emphasis>validation du chemin</emphasis>. 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
<wikipedia name="Registre Internet régional">RIR</wikipedia>, 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.</p>
<p>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.<!--- Comme "BGP Prefix Origin Validation" de
Pradosh Mohapatra. --></p>
<p>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
<wikipedia xml:lang="en" name="Resource Public Key Infrastructure">RPKI</wikipedia>, une <wikipedia name="Infrastructure à clés publiques">IGC</wikipedia>
hiérarchique, partant de l'<wikipedia name="Internet Assigned Numbers Authority">IANA</wikipedia> et des
<wikipedia name="Registre Internet régional">RIR</wikipedia>, permettant de produire des
<wikipedia name="Certificat électronique">certificats</wikipedia> attestant de la « possession »
d'une ressource (un préfixe <wikipedia name="Internet Protocol">IP</wikipedia>, un numéro
d'<wikipedia name="Autonomous System">AS</wikipedia>, etc). L'émission de ces certificats a été
un des <link local="certificats-ressources-internet">premiers pas
concrets</link>.</p>
<p>Une fois les certificats émis, les titulaires des ressources
(typiquement, des adresses IP) créent des objets signés, les
<wikipedia>ROA</wikipedia> (<foreign>Route Origin
Authorizations</foreign>). 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 <wikipedia name="Cryptographie">cryptographiques</wikipedia>,
la validation sera typiquement faite par une machine spécialisée, le
validateur, que le routeur interrogera avec un protocole simple.</p>
<p>Voici la longue liste des 14 (!) <wikipedia name="Request for comments">RFC</wikipedia> qui viennent de paraître
sur ce sujet. L'ordre ci-dessous est leur ordre d'importance
décroissante (selon moi) :
<enum>
<item><rfc num="6480" local="true"/>, <foreign>An Infrastructure to Support Secure Internet Routing</foreign>, le plus important, décrit
l'architecture générale du système et notamment l'<wikipedia
name="Infrastructure à clés publiques">infrastructure de clés publiques</wikipedia>, la
<wikipedia>RPKI</wikipedia> (<foreign>Resource Public Key
Infrastructure</foreign>).</item>
<item><rfc num="6483" local="true"/>, <foreign>Validation of Route
Origination using the Resource Certificate PKI and ROAs</foreign>,
décrit le mécanisme de validation de l'<emphasis>origine</emphasis>
(le premier AS) d'une route, en utilisant les techniques ci-dessus.</item>
<item><rfc num="6481" local="true"/>, <foreign>A Profile
for Resource Certificate Repository Structure</foreign>, décrit la
structure du dépôt des objets de la RPKI (certificats et ROA).</item>
<item><rfc num="6488" local="true"/>, <foreign>Signed Object Template for the Resource Public Key Infrastructure</foreign>,
spécifie le profil <wikipedia name="Cryptographic Message Syntax" xml:lang="en">CMS</wikipedia> des objets signés,</item>
<item><rfc num="6482" local="true"/>, <foreign>A Profile for Route Origin Authorizations (ROAs)</foreign>, décrit le
format concret des <emphasis>ROA</emphasis> (<foreign>Route Origin
Authorization</foreign>), les objets signés cryptographiquement qui
permettent d'autoriser un <wikipedia name="Autonomous System">AS</wikipedia> à annoncer
l'origine d'une route.</item>
<item><rfc num="6486" local="false"/>, <foreign>Manifests for the Resource
Public Key Infrastructure</foreign>, sur les manifestes, ces listes
d'objets signés, elles-mêmes signées, et qui seront distribuées dans
les dépôts de la RPKI,</item>
<item><rfc num="6487" local="true"/> <foreign>A Profile for
X.509 PKIX Resource Certificates</foreign>, spécifie le profil (la
restriction) pour les certificats numériques utilisés dans la
RPKI,</item>
<item><rfc num="6493" local="true"/>, <foreign>The RPKI Ghostbusters
Record</foreign>, indique comment préciser dans le certificat les
informations permettant de contacter le titulaire de la ressource.</item>
<item><rfc num="6490" local="false"/>, <foreign>Resource Certificate PKI
(RPKI) Trust Anchor Locator</foreign>, indique comment trouver les
certificats racine (il a depuis été remplacé par le <rfc num="7730"/>),</item>
<item><rfc num="6492" local="true"/>, <foreign>A Protocol for Provisioning Resource Certificates</foreign>, le protocole d'avitaillement des certificats entre l'<wikipedia>AC</wikipedia> et ses clients,</item>
<item><rfc num="6484" local="false"/>, <foreign>Certificate Policy (CP) for the
Resource PKI (RPKI)</foreign>, où sont exposés les principes de la
politique que devraient suivre les AC de la RPKI,</item>
<item><rfc num="6491" local="true"/>, <foreign>RPKI Objects issued by IANA</foreign>, décrit
les objets que va devoir signer l'<wikipedia name="Internet Assigned Numbers Authority">IANA</wikipedia> pour
amorcer le processus (typiquement, les réseaux « spéciaux », normalement
non annoncés en BGP), </item>
<item><rfc num="6489" local="false"/>, <foreign>CA Key Rollover in the RPKI</foreign>,</item>
<item>Et enfin <rfc num="6485" local="false"/>, <foreign>The Profile for
Algorithms and Key Sizes for use in the Resource Public Key
Infrastructure</foreign>, qui spécifie les algorithmes de
cryptographie utilisés par la RPKI.</item>
</enum>
En outre, quelques mois après, est sorti le <rfc num="6810" local="true"/>, sur RTR (<foreign>RPKI/Router
Protocol</foreign>) le protocole de communication entre le
routeur BGP et son validateur, typiquement un serveur
<wikipedia>Unix</wikipedia> spécialisé. Et le <rfc num="6811"
local="true"/>, décrivant plus précisement la validation de préfixes.
</p>
<p>Quelles sont les chances d'adoption de RPKI+ROA, sachant que
d'innombrables protocoles de sécurité de l'<wikipedia name="Internet Engineering Task Force">IETF</wikipedia>
ont été peu ou pas déployés (<wikipedia name="Internet Protocol Security">IPsec</wikipedia>,
<wikipedia name="Pretty Good Privacy">PGP</wikipedia>, 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 <link
local="securite-bgp-et-reaction-rapide">des mesures a
posteriori</link> (via des <link local="alarmes-as">systèmes
d'alerte</link>) suffisent à gérer le problème de la sécurité de BGP.</p>
<p>Sinon, ce système soulève des tas de questions liées à la
<wikipedia>gouvernance</wikipedia>, comme c'est souvent le cas des
mécanismes de sécurité. Quelques exemples :
<enum>
<item>Faut-il une racine unique de certification ? Sur le papier, tout
le monde dit oui (<link
url="http://www.nro.net/news/nro-declaration-on-rpki">par exemple le
NRO</link> ou bien <link
url="http://www.ietf.org/mail-archive/web/ietf-announce/current/msg07028.html">l'IAB</link> ;
notez que les conflits dont parle l'IAB <link
local="conflit-numeros-as">se sont déjà produits</link>)
mais, en pratique, les membres du <wikipedia name="Registre Internet régional" anchor="Number_Resource_Organization">NRO</wikipedia> n'en veulent pas et le candidat
évident pour cette racine unique, l'<wikipedia name="Internet Assigned Numbers Authority">IANA</wikipedia>, n'a
donc qu'un rôle minime. Pour l'instant, chaque
<wikipedia name="Registre Internet régional">RIR</wikipedia> est racine de certification et il faut donc
avoir cinq certificats racine. L'<link url="http://www.internetgovernance.org/">IGP</link> a produit
une <link
url="http://blog.internetgovernance.org/blog/_archives/2010/3/13/4479658.html">critique
de la déclaration de l'IAB</link>.</item>
<item>RPKI+ROA augmente le pouvoir des <wikipedia name="Registre Internet régional">RIR</wikipedia>, via
les révocations, ce qui est une nouveauté. Avant, les RIR
n'intervenaient pas dans le routage, uniquement dans l'allocation des
adresses. Un RIR pouvait en théorie révoquer une allocation, mais cela
n'avait aucune conséquence pratique. Avec la RPKI, le RIR émettra une
révocation X.509 et les routeurs ROA arrêteront automatiquement
d'accepter la route... Le RIR aura donc désormais un rôle
opérationnel. Comme l'explique très bien l'excellent article de l'IGP
<foreign><link
	     url="http://internetgovernance.org/pdf/RPKI-VilniusIGPfinal.pdf">Building
a new governance hierarchy: RPKI and the future of Internet routing
and addressing</link></foreign>, cela peut changer les rôles des acteurs de la
gouvernance de l'Internet et la RPKI devrait donc être discutée
politiquement, pas uniquement techniquement (une version plus longue
de cet article est « <foreign><link
url="http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2021835">Negotiating
a New Governance Hierarchy: An Analysis of the Conflicting Incentives
to Secure Internet Routing</link></foreign> » par Brenden Kuerbis et Milton Mueller). Pour l'instant, les
partisans de la RPKI considèrent que le problème doit être relativisé
car le contrôle final est entre les mains du cache validateur qui
croit qui il veut. S'il ne veut pas utiliser les <foreign>trust
anchors</foreign> des RIR, il le peut. (Il peut aussi ne pas valider
du tout, ou bien accepter les routes invalides, surtout s'il n'y a pas
de routes alternatives.) Concernant spécifiquement le
<wikipedia name="RIPE Network Coordination Centre">RIPE-NCC</wikipedia>, leur politique quant à une éventuelle
révocation de routes est <link
url="http://www.ripe.net/ripe/mail/archives/address-policy-wg/2011-May/005858.html">que
ce n'est pas possible</link>.
</item>
<item>Discussions animées au sein de la communauté quant à l'intérêt
pour le RIR de travailler dans cette direction. En novembre 2011,
celle du <wikipedia>RIPE</wikipedia> a voté pour la poursuite du
projet (voir les articles <link
url="https://publicaffairs.linx.net/news/?p=6118">de Malcolm</link> et
<link url="http://www.circleid.com/posts/20111103_ripe_members_vote_to_continue_rpki_work/">de Michele Neylon</link>).</item>
</enum></p>
<p>Pour le fonctionnement concret du système RPKI+ROA, et des
exemples, voir <link local="rpki-tests">mon autre
article</link>.</p>
<p>Dans le futur, des travaux auront lieu pour valider le
<emphasis>chemin</emphasis> et non plus seulement
l'<emphasis>origine</emphasis> comme le fait notre nouveau
système (le cahier des charges de ce projet a été publié dans le <rfc num="7353" local="true"/>). Après des propositions comme <link
url="http://blog.ioshints.info/2010/03/secure-bgp.html">Secure
BGP</link>, le futur protocole se nommera probablement <link url="http://tools.ietf.org/html/draft-ietf-sidr-bgpsec-overview">BGPSEC</link> car,
contrairement au système qui vient d'être normalisé, il sera une
modification de BGP. <wikipedia name="Vin de Champagne" anchor="Types_de_vins">Humour</wikipedia> par <link url="https://twitter.com/huguei">Hugo Salgado</link> : si l'actuel BGP, sans sécurité, est
<emphasis>BGPbrut</emphasis>, RPKI+ROA est un <emphasis>BGPdemisec</emphasis> - à moitié sécurisé - et le futur
protocole sera, logiquement, <emphasis>BGPsec</emphasis>...</p>
<p>Quelques articles intéressants :
<enum>
<item>Une <link url="http://www.apnic.net/services/services-apnic-provides/resource-certification/RPKI">introduction pour grands débutants</link> par l'<wikipedia name="Asia-Pacific Network Information Center">APNIC</wikipedia>.</item>
<item>Un <link url="http://www.ietf.org/proceedings/75/slides/sidr-7.pdf">court résumé technique</link> qui avait été fait à l'<wikipedia name="Internet Engineering Task Force">IETF</wikipedia>.</item>
<item>Un <link
url="http://ripe63.ripe.net/presentations/32-RIPE63-RPKI-Session.pdf">tutoriel
RIPE</link>, rappelant l'effort du <wikipedia name="RIPE Network Coordination Centre">RIPE-NCC</wikipedia>.</item>
<item>Une proposition alternative, où on ne valide pas les routes mais
où on ne les adopte que prudemment, <link
url="http://www.cs.unm.edu/~karlinjf/pgbgp/">Pretty Good
BGP</link>.</item>
<item>Mes <link local="rpki-frnog">transparents à FRnog19 sur la RPKI</link>,</item>
<item>Une autre alternative à RPKI+ROA, plus simple, <link local="rover-bgp">ROVER</link>,</item>
<item>Un <link url="http://www.potaroo.net/ispcol/2011-07/bgpsec.pdf">
très bon article général</link>, très détaillé, sur RPKI+ROA puis le passage à BGPsec.
</item>
</enum></p>
</content>
</entry>

