Cumu assicurà chì u tempu per se ùn menti micca s'ellu avete un milione di dispusitivi grandi è chjuchi chì cumunicanu via TCP / IP? Dopu tuttu, ognunu hà un clock, è u tempu deve esse currettu per tutti. Stu prublemu ùn pò esse eludutu senza ntp.
Imaginemu per un minutu chì in un segmentu di l'infrastruttura industriale di l'informatica ci sò difficultà cù i servizii di sincronizazione cù u tempu. Immediatamente a pila di cluster di u software Enterprise cumencia à fallu, i domini si disintegranu, i maestri è i nodi Standby si sforzanu senza successu per restaurà u statu quo.
Hè ancu pussibule chì un attaccu deliberatamente prova di disturbà u tempu per un attaccu MiTM o DDOS. In una tale situazione, tuttu pò succede:
- I password di u contu d'utilizatori scaduranu;
- I certificati X.509 caduranu;
- L'autentificazione à dui fattori TOTP cesserà di travaglià;
- e copie di salvezza diventeranu obsolete è u sistema li eliminerà;
- DNSSec si romperà.
Hè chjaru chì ogni dipartimentu IT hè interessatu in u funziunamentu affidabile di i servizii di sincronizazione di u tempu, è saria bellu s'ellu era affidabile è sicuru in l'operazione industriale.
Rompe NTP in 25 minuti
Protokolli di rete - millennials anu una peculiarità, sò stati è ùn sò più boni per nunda, ma rimpiazzà elli ùn hè micca cusì faciule ancu quandu una massa critica di entusiasti è finanziamentu hè accumulata.
A lagnanza principale di NTP classicu hè a mancanza di miccanismi affidabili per a prutezzione di l'attacchi di l'intrusi. Diversi tentativi sò stati fatti per risolve stu prublema. Per ottene questu, avemu prima implementatu un mecanismu di chjave pre-spartita (PSK) per u scambiu di chjavi simmetrici.
Sfurtunatamente, stu metudu ùn hà micca pagatu per un mutivu simplice - ùn scala micca bè. A cunfigurazione manuale hè necessaria da u cliente, secondu u servitore. Questu significa chì ùn pudete micca aghjunghje un altru cliente cusì cusì. Se qualcosa cambia in u servitore NTP, tutti i clienti devenu esse reconfigurati.
Allora sò ghjunti cù AutoKey, ma anu scupertu subitu una quantità di vulnerabili serii in u disignu di l'algoritmu stessu è anu da abbandunà. A cosa hè chì a sumente cuntene solu 32-bits, hè troppu chjucu è ùn cuntene abbastanza cumplessità computazionale per un attaccu frontale.
- ID chjave - chjave simmetrica 32-bit;
- MAC (codice d'autentificazione di missaghju) - Packet NTP checksum;
Autokey hè calculatu cum'è seguita.
Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)Induve H() hè una funzione hash criptografica.
A listessa funzione hè aduprata per calculà u checksum di pacchetti.
MAC=H(Autokey||NTP packet)Risulta chì tutta l'integrità di i cuntrolli di u pacchettu si basa nantu à l'autenticità di e cookies. Una volta li avete, pudete risturà l'autokey è dopu spoof u MAC. Tuttavia, u servitore NTP usa una sumente quandu li genera. Questu hè induve si trova a cattura.
Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))A funzione MSB_32 taglia i 5 bits più significativi da u risultatu di calculu md32 hash. A cookie di u cliente ùn cambia micca finu à chì i paràmetri di u servitore restanu invariati. Allora l'attaccante pò solu restaurà u numeru iniziale è puderà generà cookies in modu indipendenti.
Prima, avete bisognu di cunnette cù u servitore NTP cum'è cliente è riceve cookies. Dopu questu, utilizendu un metudu di forza bruta, l'attaccante restaurà u numeru iniziale dopu un algoritmu simplice.
Algoritmu per attaccà u calculu di u numeru iniziale cù u metudu di forza bruta.
for i=0:2^32 − 1 do
Ci=H(Server-IP||Client-IP||0||i)
if Ci=Cookie then
return i
end if
end forL'indirizzi IP sò cunnisciuti, cusì tuttu ciò chì resta hè di creà 2 ^ 32 hashes finu à chì a cookie creata currisponde à quella ricevuta da u servitore NTP. In una stazione di casa regulare cù Intel Core i5, questu duverà 25 minuti.
NTS - novu Autokey
Era impussibile di mette tali buchi di sicurità in Autokey, è in u 2012 apparsu protocolu. Per cumprumette u nome, anu decisu di rebrand, cusì Autokey v.2 hè stata chjamata Network Time Security.
U protocolu NTS hè una estensione di a sicurità NTP è attualmente supporta solu u modu unicast. Fornisce una forte prutezzione criptografica contr'à a manipulazione di pacchetti, impedisce a snooping, scala bè, hè resistente à a perdita di pacchetti di rete, è risulta in u minimu quantità di perdita di precisione incurru durante a sicurità di cunnessione.
Una cunnessione NTS hè custituita da duie tappe chì utilizanu protokolli di capa inferiore. On u primu In questu stadiu, u cliente è u servitore accunsenu nantu à diversi paràmetri di cunnessione è scambià i cookies chì cuntenenu chjavi cù tutti l'insemi di dati accumpagnati. On sicondu In questa fase, a vera sessione NTS prutetta si svolge trà u cliente è u servitore NTP.

NTS hè custituitu da dui protokolli di livellu più bassu: Network Time Security Key Exchange (NTS-KE), chì inizia una cunnessione sicura per TLS, è NTPv4, l'ultima incarnazione di u protocolu NTP. Un pocu più nantu à questu quì sottu.
Prima tappa - NTS KE
In questa fase, u cliente NTP inizia una sessione TLS 1.2/1.3 nantu à una cunnessione TCP separata cù u servitore NTS KE. Duranti sta sessione, a seguita succede.
- I partiti determinanu i paràmetri algoritmu per a seconda tappa.
- I partiti definiscenu un secondu protocolu di u livellu più bassu, ma à u mumentu solu NTPv4 hè supportatu.
- I partiti determinanu l'indirizzu IP è u portu di u servitore NTP.
- U servitore NTS KE emette cookies sottu NTPv4.
- I partiti estrae un paru di chjavi simmetrici (C2S è S2C) da u materiale di cookie.
Stu approcciu hà u grande vantaghju chì tutta a carica di trasmette infurmazione secreta in quantu à i paràmetri di cunnessione cade nantu à u protocolu TLS pruvucatu è affidabile. Questu elimina a necessità di reinventà a vostra propria rota per una stretta di mani NTP sicura.
Second stage - NTP sottu prutezzione NTS
In u sicondu passu, u cliente sincronizza in modu sicuru u tempu cù u servitore NTP. Per questu scopu, trasmette quattru estensioni speciali (campi di estensione) in a struttura di pacchetti NTPv4.
- L'Extension Unique Identifier cuntene un nonce aleatoriu per prevene attacchi di replay.
- NTS Cookie Extension cuntene una di e cookies NTP dispunibili per u cliente. Siccomu solu u cliente hà i chjavi simmetrici AAED C2S è S2C, u servitore NTP deve esse estratti da u materiale di cookie.
- NTS Cookie Placeholder Extension hè un modu per un cliente per dumandà cookies supplementari da u servitore. Questa estensione hè necessariu per assicurà chì a risposta di u servitore NTP ùn hè micca assai più longu di a dumanda. Questu aiuta à prevene l'attacchi di amplificazione.
- NTS Authenticator and Encrypted Extension Fields Extension cuntene u cifru AAED cù a chjave C2S, l'intestazione NTP, timestamps, è l'EF sopra cum'è dati accumpagnati. Senza questa estensione hè pussibule falsificà i timestamps.

Dopu avè ricivutu una dumanda da un cliente, u servitore verifica l'autenticità di u pacchettu NTP. Per fà questu, deve decrypt i cookies, estrae l'algoritmu AAED è e chjave. Dopu avè verificatu cù successu u pacchettu NTP per a validità, u servitore risponde à u cliente in u formatu seguente.
- Unique Identifier Extension hè una copia speculare di a dumanda di u cliente, una misura contra l'attacchi di replay.
- NTS Cookie Extension più cookies per cuntinuà a sessione.
- NTS Authenticator and Encrypted Extension Fields Extension cuntene u cifru AEAD cù una chjave S2C.
A seconda stretta di manu pò esse ripetuta parechje volte, saltendu u primu passu, postu chì ogni dumanda è risposta dà à u cliente cookies supplementari. Questu hà u vantaghju chì l'operazioni TLS relativamente intensive di risorse di l'informatica è a trasmissione di dati PKI sò divisi da u numeru di richieste ripetute. Questu hè sopratuttu cunvene per i cronometristi FPGA specializati, quandu tutte e funziunalità principali ponu esse imballate in parechje funzioni da u campu di a criptografia simmetrica, trasferendu tutta a pila TLS à un altru dispositivu.
NTPSec
Chì ci hè di particulari in NTP? Malgradu u fattu chì l'autore di u prugettu, Dave Mills, hà pruvatu à documentà u so codice u megliu pussibule, hè un programatore raru chì hà da pudè capisce l'intricacies di l'algoritmi di sincronizazione di u tempu chì sò 35 anni. Qualchidunu di u codice hè statu scrittu prima di l'era POSIX, è l'API Unix era allora assai sfarente di ciò chì hè utilizatu oghje. Inoltre, a cunniscenza di e statistiche hè necessariu per sguassà u signale da l'interferenza in e linee rumorosi.
NTS ùn era micca u primu tentativu di riparà NTP. Una volta chì l'attaccanti anu amparatu à sfruttà e vulnerabilità NTP per amplificà l'attacchi DDoS, hè diventatu chjaru chì i cambiamenti radicali eranu necessarii. È mentre chì i bozze di NTS sò stati preparati è finalizzati, a Fundazione Naziunale di Scienza di i Stati Uniti à a fine di u 2014 hà attribuitu urgentemente una cuncessione per a mudernizazione di NTP.
U gruppu di travagliu era guidatu micca solu da qualcunu, ma - unu di i fundatori è pilastri di a cumunità Open Source è autore di u libru . A prima cosa chì Eric è i so amichi anu pruvatu à fà era spustà u codice NTP da a piattaforma BitKeeper à git, ma ùn hà micca travagliatu cusì. U capu di u prugettu Harlan Stenn era contru à sta decisione è e negoziazioni si fermanu. Allora hè statu decisu di fork u codice di u prugettu, è NTPSec hè natu.
Esperienza solida, cumpresu u travagliu nantu à GPSD, un fondo matematicu è l'abilità magica di leghje u codice anticu - Eric Raymond era esattamente u pirate chì puderia riesce un tali prughjettu. A squadra hà truvatu un specialista in migrazione di codice è in solu 10 settimane NTP nantu à GitLab. U travagliu era in piena.
A squadra d'Eric Raymond hà pigliatu u compitu in u listessu modu chì Auguste Rodin hà fattu cù un bloccu di petra. Rimuovendu 175 KLOC di u codice anticu, anu pussutu riduce significativamente a superficia di attaccu chjudendu parechji buchi di sicurità.
Eccu una lista incompleta di quelli inclusi in a distribuzione:
- Refclock senza documenti, obsoleti, obsoleti o rotti.
- Biblioteca ICS inutilizata.
- libopts/autogen.
- Vechju codice per Windows.
- ntpdc.
- Autokey.
- U codice ntpq C hè stata riscritta in Python.
- U codice sntp/ntpdig C hè statu riscritto in Python.
In più di pulizziari u codice, u prugettu avia altre attività. Eccu una lista parziale di rializazioni:
- A prutezzione di codice contr'à u buffer overflow hè stata mejorata significativamente. Per prevene i buffer overflows, tutte e funzioni di stringa insicure (strcpy/strcat/strtok/sprintf/vsprintf/gets) sò state rimpiazzate cù versioni sicure chì implementanu limiti di dimensione di buffer.
- Aggiuntu supportu NTS.
- Precisione di u passu di u tempu migliuratu decu volte liendu hardware fisicu. Questu hè duvuta à u fattu chì l'orologi di l'informatica muderni sò diventati assai più precisi di quelli quandu NTP hè natu. I più grandi beneficiati di questu eranu GPSDO è radios di tempu dedicate.
- U numaru di linguaggi di prugrammazione hè ridutta à dui. Invece di script Perl, awk è ancu S, hè avà tuttu Python. Per via di questu, ci sò più opportunità per a reutilizazione di codice.
- Invece di tagliatelle di script di autotools, u prughjettu hà cuminciatu à utilizà un sistema di custruzzione di software .
- A documentazione di u prugettu aghjurnata è riurganizata. Da una cullizzioni di ducumenti contraddittoria è à volte arcaica, creanu una documentazione abbastanza passabile. Ogni commutatore di linea di cummanda è ogni entità di cunfigurazione hà avà una sola versione di a verità. Inoltre, e pagine man è a documentazione web sò oghji creati da i stessi file core.
NTPSec hè dispunibule per una quantità di distribuzioni Linux. À u mumentu, l'ultima versione stabile hè 1.1.8, per Gentoo Linux hè a penultima.
(1:696)$ sudo emerge -av ntpsec
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] net-misc/ntpsec-1.1.7-r1::gentoo USE="samba seccomp -debug -doc -early -gdb -heat -libbsd -nist -ntpviz -rclock_arbiter -rclock_generic -rclock_gpsd -rclock_hpgps -rclock_jjy -rclock_local -rclock_modem -rclock_neoclock -rclock_nmea -rclock_oncore -rclock_pps -rclock_shm -rclock_spectracom -rclock_trimble -rclock_truetime -rclock_zyfer -smear -tests" PYTHON_TARGETS="python3_6" 0 KiB
Total: 1 package (1 reinstall), Size of downloads: 0 KiB
Would you like to merge these packages? [Yes/No]
Cronia
Ci hè statu un altru tentativu di rimpiazzà u vechju NTP cù una alternativa più sicura. Chrony, à u cuntrariu di NTPSec, hè scrittu da a terra è hè pensatu per operare in modu affidabile in una larga gamma di cundizioni, cumprese cunnessione di rete instabili, dispunibilità parziale di rete o congestione, è cambiamenti di temperatura. Inoltre, a cronia hà altre vantaghji:
- chrony pò sincronizà u clock di u sistema più veloce cù più precisione;
- chrony hè più chjucu, cunsuma menu memoria, è accede à u CPU solu quandu hè necessariu. Questu hè un grande plus per risparmià risorse è energia;
- chrony supporta i timestamps di hardware in Linux, chì permettenu una sincronizazione estremamente precisa in e rete lucali.
In ogni casu, a crona manca alcune di e caratteristiche di u vechju NTP, cum'è broadcast è multicast client / server. Inoltre, u classicu NTP sustene un numeru più grande di sistemi operativi è di piattaforme.
Per disattivà a funziunalità di u servitore è e richieste NTP à u prucessu chronyd, basta à scrive u portu 0 in u schedariu chrony.conf. Questu hè fattu in i casi induve ùn ci hè bisognu di mantene u tempu per i clienti NTP o i pari. Dapoi a versione 2.0, u portu di u servitore NTP hè apertu solu quandu l'accessu hè permessu da una direttiva permessa o un cumandamentu adattatu, o un peer NTP hè cunfiguratu, o una direttiva di trasmissione hè aduprata.
U prugramma hè custituitu da dui moduli.
- chronyd hè un serviziu chì corre in fondo. Riceve infurmazione nantu à a diffarenza trà u clock di u sistema è u servitore di u tempu esternu è aghjusta l'ora locale. Implementa ancu u protocolu NTP è pò agisce cum'è cliente o servitore.
- chronyc hè una utilità di linea di cumanda per u monitoraghju è u cuntrollu di u prugramma. Adupratu per sintonizà diversi paràmetri di serviziu, per esempiu chì vi permette di aghjunghje o sguassate i servitori NTP mentre chronyd cuntinueghja à correre.
Dapoi a versione 7 di RedHat Linux chrony cum'è serviziu di sincronizazione di u tempu. U pacchettu hè ancu dispunibule per altre distribuzioni Linux. L'ultima versione stabile hè 3.5, chì si prepara per a liberazione di v4.0.
(1:712)$ sudo emerge -av chrony
These are the packages that would be merged, in order:
Calculating dependencies... done!
[binary N ] net-misc/chrony-3.5-r2::gentoo USE="adns caps cmdmon ipv6 ntp phc readline refclock rtc seccomp (-html) -libedit -pps (-selinux)" 246 KiB
Total: 1 package (1 new, 1 binary), Size of downloads: 246 KiB
Would you like to merge these packages? [Yes/No]
Cumu cunfigurà u vostru propiu servitore chrony remoto in Internet per sincronizà u tempu in una reta di l'uffiziu. Quì sottu hè un esempiu di creazione di un VPS.
Esempiu di stallà Chrony in RHEL / CentOS in VPS
Pratichemu avà un pocu è cunfigurà u nostru servitore NTP in un VPS. Hè assai simplice, sceglite solu a tarifa adatta in u situ web di RuVDS, uttene un servitore prontu è scrivite una decina di cumandamenti simplici. Per i nostri scopi, sta opzione hè abbastanza adatta.

Passemu à stallà u serviziu è prima stallate u pacchettu chrony.
[root@server ~]$ yum install chronyRHEL 8 / CentOS 8 utilizanu un gestore di pacchetti differenti.
[root@server ~]$ dnf install chronyDopu à stallà chrony, vi tocca à principiatu è attivà u serviziu.
[root@server ~]$ systemctl enable chrony --nowSe vulete, pudete fà cambiamenti à /etc/chrony.conf, rimpiazzà i servitori NPT cù i più vicini lucali per riduce u tempu di risposta.
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.ru.pool.ntp.org iburst
server 1.ru.pool.ntp.org iburst
server 2.ru.pool.ntp.org iburst
server 3.ru.pool.ntp.org iburst
In seguitu, avemu stallatu a sincronizazione di u servitore NTP cù nodi da a piscina specifica.
[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service
Hè ancu necessariu apre u portu NTP à l'esternu, altrimente u firewall bluccà e cunnessione entranti da i nodi di u cliente.
[root@server ~]$ firewall-cmd --add-service=ntp --permanent
[root@server ~]$ firewall-cmd --reload
Da u latu di u cliente, hè abbastanza per stabilisce u fusu orariu currettamente.
[root@client ~]$ timedatectl set-timezone Europe/MoscowU schedariu /etc/chrony.conf specifica l'IP o u nome d'ospitu di u nostru servitore VPS chì eseguisce a crona di u servitore NTP.
server my.vps.serverÈ infine, principià a sincronizazione di u tempu nantu à u cliente.
[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true
A prossima volta vi dicu quali opzioni ci sò per sincronizà u tempu senza Internet.
Source: www.habr.com
