Hostnamen en landsvlaggen lijken feiten over een server, en geen van beide is dat. Een naam wijst naar adressen die kunnen veranderen, en de woorden erin zijn gekozen door wie hem heeft geregistreerd. Protocol, uitgangslocatie en loggedrag hebben elk hun eigen bewijs nodig. Begin met waar de naam werkelijk naar resolveert, en bepaal daarna wat nog onbekend is.

De naam resolveert, en verder staat niets vast

Een hostnaam is een verwijzing in DNS, en de records erachter kunnen verschillen per resolver, per tijdstip van de dag en per adresfamilie die de client verkiest. Twee mensen die dezelfde directoryvermelding lezen, kunnen legitiem op verschillende machines uitkomen. De naam zegt wat je moet vragen, niet wat er antwoordt.

Ook opzoekresultaten veranderen zonder aankondiging, wat telt wanneer een profiel een adres vastzet in plaats van de naam. Een profiel met het oude adres hardgecodeerd blijft falen nadat de operator de dienst verplaatst, en de fout lijkt op een geblokkeerde poort. Bewaar de opgeloste adressen naast het profiel, zodat een latere vergelijking een basislijn heeft. Niets daarvan zegt iets over wie de andere kant beheert.

dig +short vpn.example.net A
dig +short vpn.example.net AAAA
dig +short vpn.example.net A @1.1.1.1

Transport en identiteit zijn aparte vragen

Een open webpagina op de hostnaam test één luisteraar op één poort. OpenVPN, IPsec en SSTP luisteren elders, op hun eigen poorten en protocollen, dus een bereikbare webserver zegt niets over hen.

De directoryvermelding en het profiel moeten het eens zijn over transport, poort en inloggegevens. Identiteit wordt geverifieerd met de certificaatketen of de vingerafdruk van de peersleutel waarmee de client is geconfigureerd, niet met de spelling van de hostnaam. Een naam met een bekend projectwoord bewijst alleen dat iemand hem heeft geregistreerd. Lees het certificaat dat de dienst presenteert en vergelijk uitgever en onderwerp met wat het profiel verwacht.

openssl s_client -connect vpn.example.net:443 -servername vpn.example.net </dev/null 2>/dev/null |
  openssl x509 -noout -subject -issuer -dates

Landwoorden zijn geen locatie-audit

Een label als jp of de in een directory is een registratie, en IP-geolocatiedatabases verschillen vaak genoeg van mening dat geen van beide als absolute waarheid mag gelden. Gedeelde hosting, anycast en simpele verkeerde configuratie verschuiven allemaal de waargenomen locatie weg van het label.

De praktische test is het eigen pad van de applicatie: welk adres hij bereikt, en wat een uitgangsadrescontrole van binnenuit de sessie laat zien. Een waargenomen uitgangsadres is een eigenschap van de route op dat moment, geen garantie die aan de naam hangt. Vrijwilligersdirectories voegen nog een laag toe, omdat wie een vermelding registreerde niet degene hoeft te zijn die de machine beheert. Schrijf op wat je hebt gemeten en wanneer, in plaats van wat de vermelding beloofde.

Controleer de aangeboden dienst, dan de operator

Zodra transport en identiteit zijn vastgesteld, is de resterende vraag het gedrag van de operator, en dat vereist documentair bewijs in plaats van gevolgtrekkingen. Een privacybeleid, een gepubliceerd contact en een transparantieverklaring zijn bewijs van intentie; geen ervan bewijst de praktijk, en het ontbreken van alle drie is ook informatie.

Voor een openbaar of door vrijwilligers beheerd knooppunt moet je aannemen dat de uitgang gedeeld is en dat wie hem beheert kan zien wat erdoorheen gaat. Die aanname, niet de hostnaam, zou moeten bepalen wat je door de tunnel stuurt.

curl -sSI https://vpn.example.net/ | head -n 5
whois 203.0.113.25 | grep -i -E 'orgname|netname'

Houd de naam voor waar hij goed in is: een eindpunt vinden en ermee verbinden. Al het andere moet apart worden getest, op de dag dat het ertoe doet.

Gerelateerde artikelen