News

Autenticazione NTP

Autenticazione NTP

I pacchetti di rete normalmente scambiati tra client e server NTP non contengono solo l'ora corrente. Quindi la politica degli sviluppatori del progetto NTP non è stata di crittografare l'intero pacchetto NTP, ma solo di aggiungere una firma crittografica a ciascun pacchetto di rete, in modo che il client NTP possa essere sicuro che il pacchetto NTP che riceve sia realmente inviato dal server NTP e non sia stato modificato da un attacco man-in-the-middle.

NTP v4 ha introdotto una funzione autokey che utilizza coppie di chiavi private / pubbliche per l'autenticazione. Tuttavia, qualche tempo fa è emerso che le firme autokey non forniscono un livello di protezione elevato come previsto, quindi attualmente c'è un gruppo di lavoro IETF che lavora al successore di autokey, chiamato Network Time Security "(NTS), attualmente in fase di implementazione.

Se la crittografia è realmente necessaria per un'applicazione, è possibile configurare un tunnel crittografato (VPN) tra il client e il server NTP, attraverso il quale è possibile scambiare i pacchetti NTP non crittografati. Tuttavia, ciò influisce anche sul ritardo della rete e quindi riduce la precisione che può essere raggiunta.

Network Time Security (NTS)

Network Time Security sostituirà le Simmetric key e l'Autokey nelle prossime versioni del software di sincronizzazione come NTP.

Vedi Network Time Security per il Network Time Protocol: https://datatracker.ietf.org/doc/draft-ietf-ntp-using-nts-for-ntp/

Attuali progetti di implementazione NTS:

https://gitlab.com/MLanger/nts (Martin Langer)

https://github.com/Netnod/nts-poc-python (Daniel Franke)

https://github.com/wbl/nts-rust (Watson Ladd)

https://github.com/dfoxfranke/nts (Daniel Franke)

 

Compatibilità dei campi di estensione dei pacchetti

A un potenziale problema è richiesta la retro compatibilità dei campi di estensione dei pacchetti NTP utilizzati per aggiungere hash crittografici per chiavi automatiche o simmetriche.

Vedi Campi di estensione Network Time Protocol versione 4 (NTPv4) (Tal Mizrahi, Danny Mayer): https://www.rfc-editor.org/info/rfc7822

Campo di estensione dell'estensione delle informazioni del protocollo di tempo sulla rete (Harlan Stenn): https://datatracker.ietf.org/doc/draft-stenn-ntp-extended-information/

 

Autenticazione chiave pubblica (autokey)

Oltre alle chiavi simmetriche, NTPv4 supporta anche autokey, che si basa su coppie di certificati pubblici / privati. Si è scoperto che l'autokey è molto meno sicuro di quanto inizialmente previsto e non facile da configurare.

Ecco alcuni suggerimenti: http://support.ntp.org/bin/view/Support/ConfiguringAutokey

Ecco il rapporto iniziale che dice che l'autokey è debole: https://lists.ntp.org/pipermail/ntpwg/2011-August/001714.html

 

Autenticazione Symmetric Key

L'autenticazione con chiave simmetrica è già stata introdotta in NTP v3, e ancora supportata nelle attuali versioni NTP v4 dell'implementazione di riferimento NTP. Lo svantaggio delle chiavi simmetriche è che una chiave segreta deve essere scambiata in modo sicuro tra server e client, mentre con schemi di autenticazione a chiave pubblica solo una chiave pubblica deve essere copiata sui client. Attuali implementazioni di ntpd supportano MD5 e SHA1. In teoria anche altri algoritmi forniti da openSSL dovrebbero essere supportati, ma ci sono problemi di compatibilità con il layout dei campi di estensione del pacchetto.

Per configurare le chiavi simmetriche dobbiamo fondamentalmente creare un file di chiavi, cioè un file di testo contenente le chiavi, quindi in ntp.conf specificare:

il percorso del file di chiavi

quale delle chiavi dovrebbe essere usata per quale scopo

sul client NTP: quali chiavi devono essere utilizzate per quale server

Quindi, per prima cosa è necessario creare un file di testo che contenga una o più chiavi crittografiche, una chiave per riga. Per esempio:

1 M f294fa0 # MD5

2 MD5 BtdW/<gj2*2M;!'~QAIN # MD5

3 SHA1 094c533b614d9e4bcb6e18a97a7b0e4d459025bd # SHA1

La prima colonna è un numero ID chiave univoco nell'intervallo 1..65535. La seconda colonna indica il tipo di chiave, che può essere "M" o "MD5" per MD5 key, o "SHA1" e la terza colonna la stringa di chiavi. Opzionalmente è possibile aggiungere un commento, iniziando con un carattere '#'.

Nome e posizione standard di questo file sono: 

- Linux: /etc/ntp.keys

- Windows: C:\Program Files\NTP\etc\ntp.keys

 

Utilizzo Symmetric Key

Il percorso del file delle chiavi e lo scopo delle chiavi da utilizzare devono essere specificati nel file ntp.conf.

Categorie

I più letti