NTP server: di cosa stiamo parlando?

Quando due o più sistemi comunicano, il ruolo svolto dalle marcature temporali è particolarmente rilevante ai fini del funzionamento dei processi. In questo contesto, l'eventuale presenza di un orologio asincrono rappresenta un problema non di poco conto. Per prevenire malfunzionamenti e gestire in tutta sicurezza i processi comunicativi tra sistemi sincronizzando gli orologi di rete, nel 1985 è stato pubblicato il protocollo noto come NTP server(Network Time Protocol).
Che protocollo utilizza il Time Server NTP?
L’NTP time server fornisce meccanismi di protocollo fondamentali, necessari per sincronizzare l’ora di diversi sistemi con una precisione esatta al nanosecondo. Questo protocollo contiene anche dettagli sull’accuratezza e sulle probabili fonti d’errore dell'ora del sistema locale, oltre che sulle proprietà dell'orologio di riferimento. Tuttavia, il protocollo delinea solo il tipo di rappresentazione dei dati e dei formati dei messaggi senza fornire algoritmi di sincronizzazione e di filtraggio.
Come funziona? Manuale per l’uso di NTP server
Per sincronizzare gli orologi dei computer con una precisione al nanosecondo, il Network Time Protocol utilizza il tempo coordinato universale (UTC, da Coordinated Universal Time), valido dal 1972 e determinato in vari modi, attraverso sistemi radio o satellitari. Servizi importanti come il Global Positioning System (GPS) sono dotati di speciali ricevitori per ricevere i segnali corrispondenti. Poiché non sarebbe né economico né fattibile dotare ogni singolo computer di tali ricevitori, esistono i cosiddetti Primary Time Server, che dispongono appunto di un ricevitore UTC. Attraverso protocolli come NTP, questi server sincronizzano gli orologi dei computer nella loro rete.
In questo processo di sincronizzazione ci sono diversi livelli gerarchici di distanza dall’UTC sorgente, noti anche come strata (termine latino per "strati"). Tutti i dispositivi tecnici come gli orologi atomici o radiocontrollati, che ottengono il proprio orario da un Primary Time Server o da un sistema di navigazione satellitare, sono classificati nella categoria strato 0. Un computer che ottiene l'UTC da un orologio atomico o da uno radiocontrollato corrisponde allo strato 1 e così via. Ogni sistema è client dello strato precedente e al contempo server per i sistemi dello strato successivo (almeno potenzialmente).
Le variazioni temporali a breve termine e locali nella sincronizzazione NTP server sono affrontate da vari algoritmi: ad esempio, i metodi di misura del tempo di trasmissione dei pacchetti compensano le deviazioni locali basandosi sull’algoritmo Berkeley, a differenza dell'algoritmo Marzullo che è usato per la risoluzione dei problemi nell'area del processore.
I punti di forza di NTP server
Le caratteristiche fondamentali del Network Time Protocol, attualmente disponibile nella quarta versione (NTPv4), si possono elencare in 5 punti:
- NTP server fornisce un orologio di riferimento che funge da punto fisso per tutti i processi di sincronizzazione. Tutti gli orologi del sistema quindi si allineano a questo orologio. Dalle prime applicazioni, immediatamente è stato utilizzato a tal fine il Coordinated Universal Time (UTC), riconosciuto come orologio mondiale universale.
- NTP è un protocollo che compensa gli errori provvedendo automaticamente alle fonti migliori per la sincronizzazione, eventualmente combinando e incrociando tra di loro le migliori. Laddove sia possibile, il Network Time Protocol rileva e ignora le fonti che forniscono valori fortemente divergenti nel breve e nel lungo termine.
- NTP è altamente scalabile, ecco perché possono esserci più orologi di riferimento in ogni rete di sincronizzazione. Inoltre, ogni nodo di rete è in grado di trasmettere informazioni temporali in una struttura gerarchica bidirezionale o unidirezionale.
- NTP ha un forte grado di accuratezza. Grazie alla possibilità di selezionare il miglior candidato per la sincronizzazione, è possibile ottenere una risoluzione in un intervallo di nanosecondi (cioè un valore pari a 2-32secondi).
- NTP è in grado di superare i problemi di connessione di rete temporanei: in questo caso il protocollo si serve di dati del passato per determinare l'ora attuale o le deviazioni.
I sistemi operativi che supportano l’NTP server
Originariamente il Network Time Protocol NTP server è stato sviluppato appositamente per i sistemi UNIX, nei quali ancora oggi è implementato sotto forma di processo in background ntpd. Questo funge tanto da client, perché sincronizza il sistema locale, quanto da time server per altri sistemi. Per molto tempo il servizio è stato anche la prima scelta per il sistema operativo Linux. Per la sincronizzazione temporale invece, le versioni più recenti di Linux utilizzano sempre più spesso l'applicazione client timesyncd, che fa parte del System Manager systemd. Sistemi operativi come macOS e Windows invece utilizzano il Network Time Protocol per ottenere l'UTC con processi di sistema semplici e senza software aggiuntivi via Internet.
NTP server e altre soluzioni di sincronizzazione
Sebbene NTP sia considerato in tutto il mondo come lo standard di sincronizzazione temporale, non è infallibile, specialmente in termini di sicurezza. Poiché si basa sul protocollo UDP senza connessione, un aggressore potrebbe, per esempio, inviare pacchetti con un indirizzo del mittente falsificato (IP spoofing) a un NTP server.
L'indirizzo del mittente è l'indirizzo del sistema da attaccare. Il time server invia la sua risposta, che è molto più grande della richiesta inviata dall'aggressore, al presunto mittente (sistema degli attacchi). Se l'aggressore procede in questo modo su larga scala, inviando una moltitudine di richieste manipolate, può sovraccaricare il sistema di destinazione. Si veda in merito il nostro articolo su DoS e DDoS: schemi di attacco in sintesi.
Di conseguenza sono stati portati avanti diversi progetti per lo sviluppo di soluzioni alternative più sicure, utilizzabili al posto delle soluzioni comuni di client e server NTP:
- tlsdate: tlsdate è stato sviluppato nel 2012 da Jacob Appelbaum e pubblicato su GitHub. Al posto di UDP, tlsdate utilizza il protocollo TCP per il trasferimento dati. Il servizio cripta la configurazione della connessione tramite TLS per impedire la manipolazione dei pacchetti di dati. Inoltre tlsdate utilizza le funzioni TLS "ServerHello" e "ClientHello" per sincronizzare l'ora. L'alternativa a NTP funziona unicamente con TLS 1.1 e 1.2.
- Ntimed: Ntimed è un'implementazione di NTP che si concentra specificamente sulla sicurezza e sulle prestazioni. Per questo scopo il codice di programmazione di ntpd, su cui si basa Ntimed, è stato “semplificato” e ottimizzato. Il pacchetto software, che comprende client, server e file master, è a libera disposizione nella directory ufficiale Ntimed di GitHub .
- NTPsec: NTPsec è sempre una variante del servizio ntpd tradizionale. Ciononostante sono state risparmiate oltre 175.000 righe di codice rispetto all'originale. Inoltre il team di sviluppo ha sostituito una serie di operazioni sulle stringhe non sicure come "strcpy", "sprintf" o "gets" con equivalenti sicure. Queste e altre differenze possono essere viste in maniera più dettagliata sul sito ufficiale del progetto open source.
Oltre alle alternative al software, c'è anche il Precision Time Protocol(PTP). A differenza del Network Time Protocol NTP server, questo protocollo di rete per i sistemi Linux si concentra esplicitamente su una precisione di sincronizzazione particolarmente elevata. In PTP quest’ultima si realizza in un intervallo di microsecondi, rivelandosi superiore alla precisione di NTP. Inoltre il protocollo richiede requisiti minimi per quanto riguarda le prestazioni del processore e la larghezza di banda di rete, rendendolo ideale per dispositivi semplici ed economici.