Wat is WireGuard, het nieuwe VPN-protocol?

© PXimport

Wat is WireGuard, het nieuwe VPN-protocol?

Geplaatst: 2 september 2020 - 06:17

Aangepast: 25 november 2022 - 10:31

Koen Vervloesem

Om een vpn-verbinding op te zetten maak je doorgaans gebruik van OpenVPN of IPsec. Maar al enkele jaren is er een nieuw protocol in ontwikkeling, namelijk WireGuard. Wat is WireGuard precies? Het is gebouwd volgens moderne principes en bevat slechts de minimale code die nodig is. Reden te meer om dit nieuwe vpn-protocol eens onder de loep te nemen.

Draai je een vpn-server thuis, bijvoorbeeld op je router, nas of een Raspberry Pi, dan kun je op een veilige manier van overal in de wereld op je thuisnetwerk, of zelfs surfen via je thuisnetwerk zodat je ook buitenshuis gebruikmaakt van de dns-gebaseerde adblocker die je thuis hebt draaien. Een ander interessant scenario is dat je van een vpn-server in een ander land gebruikmaakt, bijvoorbeeld om regioblokkades te omzeilen. En in bedrijfsomgevingen is een vpn essentieel.

Kortom, redenen genoeg om een vpn te gebruiken. Vaak gebeurt dat met het OpenVPN-protocol en de gelijknamige opensource-software. Die is populair en algemeen ondersteund, zowel wanneer je zelf een vpn-server wilt opzetten als wanneer je wilt verbinden met een vpn-server van een vpn-dienst. OpenVPN versleutelt zijn communicatie met tls (Transport Layer Security) en werkt via udp of tcp.

Een ander protocol is IPsec (Internet Protocol Security), wat eigenlijk een hele suite van protocollen is. In tegenstelling tot OpenVPN, dat door zijn gebruik van tls in de applicatielaag van de tcp/ip-suite werkt, doet IPsec zijn werk in de internetlaag, dezelfde laag dus als IP. IPsec wordt vooral in bedrijfsomgevingen gebruikt. Het is een vrij complex protocol en komt in thuisomgevingen dan ook zo goed als niet voor.

Complexiteit is de vijand van veiligheid, en zowel OpenVPN als IPsec slepen over de jaren heen heel wat ballast met zich mee. Daarom begon beveiligingsonderzoeker Jason A. Donenfeld in 2015 met een schone lei: hij wilde een vpn-protocol ontwikkelen volgens moderne standaarden, dat snel is, weinig code heeft en daardoor minder kans op (potentieel uit te buiten) bugs. Het resultaat is WireGuard.

Voordelen van Wireguard

We hebben het al over de hoeveelheid code gehad. Misschien maakt dat je als gebruiker niet uit, maar toch is het belangrijk voor de veiligheid van software. Hoe minder regels code, hoe minder aanvalsoppervlak en hoe eenvoudiger de code te auditen is op beveiligingsproblemen. Volgens Donenfeld moet de code van WireGuard door een individu na te kijken zijn, wat bijvoorbeeld met OpenVPN zo goed als onmogelijk is, zeker aangezien je dan ook de code van OpenSSL dient te bekijken. OpenVPN bevat ruwweg honderd keer zoveel regels code als WireGuard.

WireGuard is ook het resultaat van academisch onderzoek van Donenfeld: hij heeft veel tijd gestoken in het goed uitdenken van het protocol, dat hij bovenop het Noise Protocol Framework heeft gebouwd. Met een bewijsprogramma is zelfs formeel geverifieerd dat het protocol specifieke veiligheidseigenschappen heeft. WireGuard maakt ook gebruik van de allernieuwste cryptografie omdat het geen oude algoritmes hoeft te blijven ondersteunen. Termen als Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24 en HKDF zeggen je misschien niet veel, maar beveiligingsonderzoekers watertanden ervan.

Je bent natuurlijk niets met een superveilig systeem als het niet gebruiksvriendelijk is en vaak is veiligheid omgekeerd evenredig met gebruiksvriendelijkheid. Bij WireGuard is dat anders: het is eigenlijk verrassend eenvoudig om te gebruiken. Je wisselt gewoon publieke sleutels uit en de rest wordt door WireGuard afgehandeld. En zelfs als je van ip-adres verandert, blijft de vpn-verbinding behouden. Dat laatste is heel handig op mobiele toestellen, bijvoorbeeld als je van wifi naar 4G overschakelt.

 

© PXimport

Hoe WireGuard werkt

WireGuard werkt door de ip-pakketjes van je ‘echte’ netwerkverbinding in te kapselen in udp. Daarvoor creëert het een virtuele netwerkinterface (vaak wg0 genoemd), die alle pakketjes versleutelt die door je echte netwerkinterface (bijvoorbeeld wlan0) gaan. Die virtuele netwerkinterface configureer je gewoon met de standaard netwerktools van je besturingssysteem, zoals de tool ip onder Linux.

Elke virtuele netwerkinterface van WireGuard heeft een geheime sleutel en een lijst van ‘peers’ waarmee communicatie mogelijk is. Van elke peer kent WireGuard een publieke sleutel en een lijst met toegestane ip-adressen waarvan de peer mag communiceren.

Dat geldt zowel voor de server als een client: beide types machines hebben een geheime sleutel voor de interface en een lijst met peers met publieke sleutels en toegestane ip-adressen. Alleen zal de client maar één peer hebben: de WireGuard-server.

Deze associatie van publieke sleutels met toegestane ip-adressen heet een ‘cryptokey routing table’. Bij het verzenden van een pakket vergelijkt WireGuard immers het ip-adres van de bestemming met de lijst met toegestane ip-adressen van elke peer, versleutelt het pakket dan met de publieke sleutel van die peer en verzendt het pakket naar het recentste bekende ip-adres van de peer.

Wanneer WireGuard aan de andere kant een pakket ontvangt, ontsleutelt hij het aan de hand van de publieke sleutel van de peer. De lijst met toegestane ip-adressen werkt bij het ontvangen wel als een toegangscontrole.

 

© PXimport

Dit hele mechanisme heeft ook al roaming ingebouwd. De client heeft in zijn configuratie een initieel ip-adres en poortnummer om met de server te verbinden, maar als de server zijn ip-adres tijdens een vpn-verbinding verandert (bijvoorbeeld omdat de internetverbinding van de server uitvalt en de router overschakelt naar 4G), ontdekt de client dit door pakketten die de server daarna naar de client stuurt en de configuratie op de client wordt dan aangepast.

De server kent uiteraard initieel geen ip-adressen van de clients. Maar zodra een client met de server verbindt, kent de server het recentste ip-adres. Als daarna de client van ip-adres verandert (bijvoorbeeld een smartphone die van wifi naar 4G overschakelt) en pakketjes naar de server blijft sturen, ontdekt die het nieuwe ip-adres en houdt dit bij. Dit werkt allemaal automatisch, omdat WireGuard intern niet het concept van een verbinding tussen twee ip-adressen kent, maar via de publieke sleutels van peers werkt.

Nadelen van WireGuard

Je kent het gezegde: there’s no such thing as a free lunch. Een WireGuard-verbinding opzetten gaat bliksemsnel omdat er geen ‘handshake’ nodig is waarbij de client en server overeenkomen welke algoritmes ze gebruiken. Het WireGuard-protocol schrijft immers exact voor welke algoritmes er nodig zijn. Als er in een van deze algoritmes ooit een fundamentele fout wordt gevonden, kun je niet eenvoudig naar een ander algoritme overstappen dat niet kwetsbaar is voor de fout. Het WireGuard-protocol en de software dienen dan aangepast te worden. Bovendien bekommert WireGuard zich niet om het initieel uitwisselen van de sleutels tussen beide kanten van de vpn-verbinding. Enerzijds houdt dat het protocol licht, maar anderzijds is het dan wel je eigen verantwoordelijkheid om dat op een veilige manier te doen.

Strikt gezien is WireGuard nog in ontwikkeling: er is nog geen 1.0-versie (maar die zou niet zo lang meer op zich moeten laten wachten). Toch raden al veel beveiligingsspecialisten WireGuard aan in plaats van OpenVPN en IPsec, met het voorbehoud dat er nog zaken kunnen veranderen. Uiteraard bestaat er een kleine kans dat er nog een beveiligingslek wordt gevonden in WireGuard, omdat het nog maar een jaar of vijf bestaat en nog niet zo uitgebreid getest is als andere protocollen. Daar staat tegenover dat de code zoveel kleiner is dan die van OpenVPN en IPsec-implementaties dat er gewoon minder fouten in kunnen voorkomen. Of je WireGuard voldoende vertrouwt om al te gebruiken, is dus een kwestie van risicoanalyse.

Sommige VPN-aanbieders hebben WireGuard al als optie ingebouwd, de meeste daarentegen nog niet. Lees daar meer over in onze grote VPN-vergelijkingstest.

Deel dit artikel
Voeg toe aan favorieten