NTP-dienst TimeNL uitgebreid met NTS-server

Een beveiligingslaag voor onze NTP-dienst

Close-up van een deel van de wijzerplaat van een horloge

Bij SIDN Labs hebben we onze publieke NTP-dienst uitgebreid met een NTS-server. NTS staat voor ‘Network Time Security’, wat een nieuwe standaard in ontwikkeling is. Er zijn wereldwijd nog maar weinig NTS-systemen beschikbaar. Wij voegen daar nu een experimentele server (https://nts.time.nl) aan toe. Daar gaan we zelf uitgebreid mee testen, maar we nodigen iedereen van harte uit er ook mee aan de slag te gaan. In deze blogpost leggen we graag uit wat NTS is. Hint: let op het verschil tussen NTP en NTS, want de afkortingen lijken nogal op elkaar, maar het zijn echt verschillende dingen.

TimeNL: de duidelijke NTP-dienst van SIDN Labs

Het belang van goede tijdmeting en -synchronisatie

Afgelopen juli schreven we over de lancering van TimeNL, onze publieke NTP-dienst. We legden daar het belang van goede tijdsynchronisatie uit en hoe onze NTP-dienst daaraan kan bijdragen. Maar naast een ‘productieplatform’, dat door iedereen vrij is te gebruiken, is TimeNL ook een onderzoeksproject.

2 zwemmers die strijden om als eerste de kant van het zwembad aan te tikken

In dat kader zijn we gaan kijken naar de nieuwe beveiligingsuitbreiding NTS, want het huidige NTP (we zitten nu op versie 4 van dit uit 1981 stammende protocol), kent enkele tekortkomingen op het gebied van beveiliging. NTP is een vraag-/antwoordspel tussen een cliënt en een server dat zich afspeelt over UDP. Hiervan is bekend dat het misbruikt kan worden. Zo kunnen de afzenderadressen in UDP-pakketten vrij gemakkelijk worden vervalst. En ook kan de inhoud van zo’n pakket, door middel van een ‘man-in-the-middle‘ (MitM) aanval relatief eenvoudig worden gemanipuleerd, zodat de informatie niet meer correct is. De NTP-werkgroep binnen de IETF was zich daarvan bewust en heeft in de loop der tijd o.a. uitbreidingen op het gebied van authenticatie toegevoegd aan de standaard. Het gaat hier om authenticatie op basis van symmetrische sleutels en om de Autokey-functionaliteit, die is gebaseerd op publiek/private certificaatparen. Authenticatie met symmetrische sleutels is weliswaar veilig, maar ook omslachtig. Het vereist het vooraf, via een apart kanaal, uitwisselen van gedeelde sleutels en zorgt daarmee voor een extra beheerlast. Daarom werd Autokey bedacht. Maar helaas bleek Autokey niet zo veilig als aanvankelijk gehoopt en er wordt afgeraden het nog te gebruiken.

Network Time Security (NTS)

Gebruikersvriendelijkheid en betrouwbaarheid zijn essentieel wanneer een grootschalige toepassing het doel is. Met de bovengenoemde uitbreidingen kon dat doel niet worden bereikt. Daarom heeft de NTP-werkgroep van de IETF de afgelopen jaren hard gewerkt aan een nieuwe uitbreiding die de eerdere twee moet gaan vervangen. De betreffende standaard is feitelijk klaar en wacht op ratificatie. Maar hoe werkt NTS globaal? Simpel gezegd werkt NTS als een tweetrapsraket. Tijdens de eerste stap maakt een cliënt over TCP een verbinding met de NTS-server. Er wordt via de gebruikelijke ‘handshake’ een versleutelde TLS-verbinding tot stand gebracht. Daarover worden vervolgens parameters (in de vorm van zogenaamde NTS-records) uitgewisseld van server naar cliënt. Onder ander wordt via NTS-records afgesproken wat het te gebruiken zogenaamde AEAD-algoritme is, wat de NTP-server moet worden om te gebruiken en de server geeft acht unieke cookies mee aan de cliënt. Die zijn bedoeld als sleutelmateriaal tijdens de tweede fase. Dit alles gebeurt dankzij TLS dus op een veilige manier. Daarna gaat in stap 2 de cliënt op de gangbare wijze via UDP naar de NTP-server (‘stateless’ dus). Met dien verstande dat de integriteit van de NTP-pakketten is gewaarborgd met het afgesproken AEAD-algoritme. Met behulp van de cookies, die eenmalig mogen worden gebruikt, kan de server vaststellen met een legitieme cliënt van doen te hebben. Deze worden uitgewisseld via zogenaamde ‘extension fields’, die zijn toegevoegd aan de NTP-standard. De NTP-server geeft bij het beantwoorden steeds nieuwe cookies mee terug, zodat stap 1 niet steeds herhaald hoeft te worden. Op die manier is er een veilig NTP vraag-/antwoordspel mogelijk geworden. Wil je verder lezen over bovenstaande beknopte uitleg, lees dan de volgende blogposts op Webernetz.net:

NTS in het wild

Hoewel er inmiddels een aantal NTS-software implementaties zijn, vind je op het internet nog niet zoveel werkende NTS-servers. Dat was mede de reden dat wij er eentje opgetuigd hebben. Dit werd in dank aanvaard, onder andere door de makers van een NTS-cliënt in de programmeertaal Go. Deze experimentele server, op basis van NTPsec, stelt ons in staat om de ontwikkelingen van de NTS-standaard beter te begrijpen. En dit leverde meteen al enkele resultaten op. Nadat we de dienst aankondigden op onze mailinglist, reageerde Cloudflare dat de software die zij gebruiken voor time.cloudflare.com, niet werkte met onze NTS-server. Een behoorlijk diepgravend onderzoek door SIDN Labs bracht een interoperabiliteits-probleem aan het licht, dat we fiksten en vervolgens als eenvoudige patch aanboden aan Cloudflare. Hierdoor werkt hun software nu probleemloos met NTPsec.

Probeer het zelf!

Wil je met NTS aan de slag, kijk dan op https://nts.time.nl/.