L'avenir du VPN passe par WireGuard

le 02/01/2020, par Lucian Constantin, CSO (adapté par Jean Elyan), Sécurité, 1956 mots

Le VPN WireGuard offre de meilleures performances et une approche plus simple et plus efficace du chiffrement. Mais comment fonctionne ce VPN ? Et, est-il prêt pour l'entreprise ?

L'avenir du VPN passe par WireGuard

WireGuard est un réseau privé virtuel (VPN) axé sur la sécurité. Il est reconnu pour sa simplicité et sa facilité d'utilisation. WireGuard utilise des protocoles et des algorithmes de chiffrement éprouvés pour protéger les données. Développé à l'origine pour le noyau Linux, il est désormais déployable sur Windows, macOS, BSD, iOS et Android. Les réseaux privés virtuels (VPN) sont indispensables aux entreprises : grâce aux VPN, elles peuvent relier les succursales de leurs bureaux distants à leur réseau principal, leurs employés itinérants peuvent utiliser les applications internes, et les serveurs cloud se trouvent dans le même réseau que les serveurs sur site. La plupart des solutions VPN actuelles ont été conçues il y a longtemps. Elles sont donc en général assez lentes et trop techniques. Ce qui n'est pas le cas du projet WireGuard, qui mise autant sur la sécurité que sur la simplicité d'usage.

C'est en 2017 que le chercheur en sécurité et développeur de kernel Jason Donenfeld a eu l'idée de créer WireGuard. À l'époque, il avait besoin d'une solution de tunnel de trafic furtif pour des tests de pénétration. Plus il examinait les options existantes, plus il réalisait que les tunnels VPN comme IPsec et OpenVPN ne fonctionnaient pas bien et qu'ils étaient difficiles à configurer et à gérer correctement. Il a donc entrepris de créer un tout nouveau protocole VPN et une implémentation qui permettrait d'éviter certains choix de conception qui ont transformé d'autres technologies de tunnelage en projets monstrueux, avec d'énormes bases de code et d'innombrables boutons et interrupteurs.

Chiffrement de WireGuard

D'une part, le protocole WireGuard se passe du concept d'agilité cryptographique qui offre le choix entre différents algorithmes de chiffrement, d'échange de clés et de hachage, mais qui est à l'origine de déploiements non sécurisés avec d'autres technologies. À la place, le protocole WireGuard utilise une sélection de primitives cryptographiques modernes, testées et révisées par des pairs, qui impliquent des choix cryptographiques par défaut forts que les utilisateurs ne pourront ni modifier, ni mal configurer. Au cas où une grave vulnérabilité est découverte dans les primitives cryptographiques utilisées, une nouvelle version du protocole est publiée et un mécanisme de négociation de la version du protocole entre pairs est exécuté.

WireGuard utilise ChaCha20 pour le chiffrement symétrique et Poly1305 pour l'authentification des messages. Cette combinaison est plus efficace que l'AES des architectures CPU embarquées sans accélération matérielle cryptographique. Le protocole utilise aussi Curve25519 pour l'échange de clé Diffie-Hellman à courbe elliptique (ECDH) ; BLAKE2s pour le hachage, plus rapide que le SHA-3 ; et un handshake 1.5 Round Trip Time (1.5-RTT) basé sur le framework Noise qui garantit une confidentialité persistante. Il comprend également une protection intégrée contre l'usurpation d'identité de la clé, les attaques par déni de service et par replay, ainsi qu'une certaine résistance cryptographique post-quantique.

Routage par crypto-clef

Dans le protocole WireGuard, chaque pair est identifié aux autres par des clés publiques courtes, à la manière dont fonctionne l'authentification par clé dans OpenSSH. Les clés publiques sont également utilisées pour établir quelles adresses IP sont attribuées à chaque pair à l'intérieur du tunnel. Les développeurs de WireGuard appellent ce concept routage par crypto-clef. Le protocole est également furtif, car il ne répond à aucun paquet provenant de pairs qu'il ne reconnaît pas, de sorte qu'un scan réseau ne révélera pas que WireGuard fonctionne sur une machine. De plus, la connexion entre pairs, qui peuvent agir à la fois comme clients et serveurs, devient silencieuse lorsqu'il n'y a pas d'échange de données. Le protocole WireGuard a été examiné par plusieurs équipes de chercheurs en sécurité du secteur privé et du monde universitaire et il a été officiellement vérifié dans différents modèles informatiques.

La principale implémentation de WireGuard est destinée à Linux et se présente sous forme d'un module de kernel. Le code est conçu pour être facilement vérifiable : Jason Donenfeld affirme qu'il peut être lu en une après-midi. Comparé à OpenVPN qui comporte plus de 100 000 lignes de code et dépend d'OpenSSL, autre énorme base de code, le module de kernel de WireGuard compte environ 4 000 lignes de code, code de cryptage intégré inclus. Cela signifie qu'il a une plus petite surface d'attaque comparé aux autres projets VPN et, puisqu'il ne répond pas aux paquets non authentifiés, il est beaucoup plus difficile à attaquer.

Performance de WireGuard

Sous Linux, WireGuard fonctionne exclusivement dans l'espace du kernel. Ses performances sont donc bien meilleures que celles d'OpenVPN, qui s'exécute dans l'espace utilisateur et utilise un pilote d'interface de réseau virtuel. De nombreux benchmarks de WireGuard, dont certains sont présentés sur le site web du projet, montrent que les performances et les vitesses de connexion du protocole sont jusqu'à quatre fois supérieures à celles d'OpenVPN et que, sur un même hardware, ses vitesses sont supérieures à celles de VPN basés sur IPsec. Cependant, les implémentations de WireGuard pour Android, iOS, macOS, OpenBSD et Windows sont écrites dans le langage de programmation Go, qui offre une gestion sécurisée de la mémoire. À part quelques projets de firmware Android, supportés par la communauté, qui ont intégré le module du noyau WireGuard, les implémentations WireGuard non-Linux fonctionnent dans l'espace utilisateur et ne bénéficient pas des mêmes performances que l'implémentation du kernel. Cela dit, dans la plupart des cas, elles parviennent toujours à égaler ou à surpasser OpenVPN.

Intégration au noyau Linux

Le module du kernel WireGuard est disponible dans les référentiels de paquets de toutes les distributions Linux majeures, et même de certaines distributions spécialisées. Cependant, depuis l'année dernière, Jason Donenfeld prépare une intégration directe au noyau Linux principal. Les progrès ont pris du temps, car la fusion nécessite des changements significatifs à la fois dans l'API cryptographique du noyau Linux et dans la pile réseau. Mais le développeur a reçu un avis favorable de Linus Torvalds. « Je vois que Jason a fait la demande d'extraction pour que WireGuard soit inclus dans le noyau », avait déclaré il y a un an le créateur de Linux sur la liste de diffusion du noyau Linux. « Je voudrais dire une fois encore à quel point ce projet me tient à coeur et j'espère que la fusion aura lieu bientôt. Le code n'est peut-être pas parfait, mais je l'ai parcouru, et comparé aux horreurs que sont OpenVPN et IPSec, c'est une oeuvre d'art », avait-il ajouté.

Les projets de Jason Donenfeld impliquaient la fusion d'une API cryptographique plus simple au noyau Linux qu'il a appelé Zinc. Selon lui, comparée à l'API cryptographique existante du noyau, trop complexe pour la plupart des cas d'usage, Zinc devait permettre aux développeurs de réaliser plus facilement des opérations cryptographiques dans leurs applications. Dans une présentation sur Zinc, il qualifie l'API de cryptage de Linux d'« API d'entreprise complétement dingue, très sujette à l'échec et très difficile à utiliser ». Mais ses tentatives de fusion d'une seconde API de crypto ont reçu des réponses mitigées de la part d'autres développeurs du kernel. Ces derniers ont se sont dits préoccupés par la duplication des fonctionnalités et se sont demandés si elle était nécessaire, plutôt que de résoudre les problèmes de l'API existante.

Intégrer au noyau Linux 5.6

La discussion sur la liste de diffusion concernant la soumission du correctif Zinc s'est arrêtée en avril, mais un autre développeur du kernel a récemment pris en charge la tâche d'intégrer la plupart des fonctionnalités de Zinc dans l'API de chiffrement existante et les changements ont été fusionnés dans le noyau en novembre. Jason Donenfeld a accepté ce compromis et il est, en grande partie, satisfait du résultat. « L'API ne s'appelle plus Zinc, et certains choix de conception que j'aimais bien ont disparu, mais je pense que l'essentiel de ce que nous recherchions est là, et il devrait être possible d'ajouter d'autres morceaux de code en amont, un par un », a-t-il déclaré dans un message posté sur la liste de diffusion du projet WireGuard. Cette étape importante a débloqué le processus d'intégration de WireGuard en amont dans le sous-système réseau de Linux. L'opération pourrait également prendre un certain temps, mais une fois l'intégration réalisée, WireGuard fera son chemin dans un très grand nombre de périphériques à mesure qu'ils seront mis à jour pour utiliser les nouvelles versions du noyau.

Si tout se passe comme prévu, WireGuard sera inclus dans le kernel Linux 5.6, attendu pour le mois d'avril. « WireGuard est probablement en grande partie abouti, mais je prévois toujours une révision avec beaucoup de commentaires à incorporer, car désormais, il y a de bonnes raisons pour que les gens prennent la soumission de correctifs au sérieux », a encore déclaré Jason Donenfeld. Cette intégration au noyau Linux lui-même ne signifie pas que WireGuard sera omniprésent immédiatement, car l'adoption des nouvelles versions du noyau, par les périphériques embarqués en particulier, est souvent très lente. Cependant, WireGuard est déjà disponible dans le firmware de la communauté OpenWRT pour les routeurs et autres périphériques embarqués, et EdgeOS, utilisé sur les périphériques réseau Ubiquiti.

Nouveau pilote TUN pour Windows

Pour améliorer les performances de WireGuard sous Windows, Jason Donenfeld et les autres développeurs de WireGuard ont créé un nouveau pilote TUN open source, plus simple, qu'ils ont appelé Wintun. Windows ne fournit pas de périphérique virtuel TUN natif, et même si certains pilotes existant permettent d'y parvenir à partir de projets comme OpenVPN ou SoftEther, ils ont été écrits il y a longtemps et présentent divers problèmes. « Ces projets ont été écrits à une époque différente, à l'ère de NDIS5, puis portés plus tard sur NDIS6 », a écrit Jason Donenfeld dans un courriel envoyé en mars pour annoncer le projet. « Cela signifie qu'ils n'ont pas bénéficié d'évolutions comme le NdisMediumIP de Windows 7, qui permet le tunnelage natif de la couche Layer 3, sans avoir à faire d'émulation de la couche Layer 2.

Les pilotes comme les tap-windows6 d'OpenVPN font aussi des choses un peu désagréables, comme émuler le DHCP depuis le noyau pour la configuration du réseau. Ce code est ancien et compliqué. Comme d'habitude, je voulais plutôt quelque chose de restreint et de stupide, facile à maîtriser, capable de faire les choses d'une manière « correcte » et « fastidieuse » pour un cas d'usage plus étroit : la couche Layer 3 TUN ». Comme Zinc et WireGuard lui-même, Wintun semble avoir été développé avec le même souci de simplicité, d'auditabilité et de sécurité. Les développeurs du projet OpenVPN travaillent également sur l'ajout du support d'OpenVPN pour l'utiliser comme alternative à leur ancien pilote.



L'intégration du protocole WireGuard dans le logiciel NordVPN a commencé avec le projet NordLynx. (Crédit NordVPN)

Bientôt prêt pour l'entreprise ?

Même si WireGuard n'a pas encore atteint officiellement le statut de version stable, il est déjà utilisé en production. Certains fournisseurs de services VPN commerciaux proposent des serveurs WireGuard et des efforts continus sont entrepris pour construire des outils de réseau mesh autour du projet. NordVPN assure déjà une implémentation de Wireguard avec son projet NordLynx, disponible pour Linux uniquement. WireGuard n'est pas encore « prêt pour l'entreprise » et il est difficile de dire si ce sera le cas un jour, car ses développeurs hésitent à ajouter de nouvelles fonctionnalités qui ne serviront qu'à un ensemble restreints d'utilisateurs ou à couvrir des cas limites. C'est comme cela que d'autres projets sont devenus trop complexes. Cependant, WireGuard pourrait servir de base pour créer des solutions plus complexes. Par exemple, les entreprises doivent déployer et configurer de nouveaux logiciels sur un grand nombre d'ordinateurs de manière automatisée. Mais la distribution des clés publiques entre pairs et la gestion des clés n'étant pas couverte par le projet WireGuard lui-même, il faudra un outil distinct pour implémenter ces fonctions. 

Cisco alerte sur des failles dans IOS XE

Cisco a émis une alerte concernant une vulnérabilité critique au niveau de l'interface utilisateur web de son système d'exploitation d'interconnexion réseau IOS XE. Aucun patch n'est pour l'instant disponible...

le 17/10/2023, par Dominique Filippone, 506 mots

Emergency Responder et d'autres produits de Cisco vulnérables

Les dernières vulnérabilités corrigées par Cisco pourraient donner aux attaquants un accès root, permettre un déni de service ou une escalade des privilèges. En fin de semaine dernière, Cisco a corrigé des...

le 10/10/2023, par Lucian Constantin, IDG NS (adaptation Jean Elyan), 593 mots

IBM lance un service de connectivité multicloud basé sur le DNS

Le service NS1 Connect proposé par IBM peut prendre des décisions dynamiques sur l'endroit où envoyer des requêtes Internet pour assurer les meilleures connexions dans des environnements réseau complexes et...

le 27/09/2023, par Michael Cooney, IDG NS (adapté par Jean Elyan), 989 mots

Dernier dossier

Les white-box sont-elles l'avenir de la commutation réseau ?

Et si vous pouviez gérer vos commutateurs de centres de données et vos routeurs de la même façon que vos serveurs et ainsi réduire les coûts des dépenses en capital ? C'est la promesse des white-box qui amènent des systèmes d'exploitation réseau open source fonctionnant sur du matériel courant.Pour en avoir le coeur net, nous avons testé Cumulus...

Dernier entretien

Céline Polo

DRH du groupe iliad

"Nous recrutons dans des métiers en tension, en particulier sur l'infrastructure réseau, pour lesquels il y a...