Protocol de timp în rețea - Network Time Protocol

Network Time Protocol ( NTP ) este un protocol de rețea pentru sincronizarea ceasului între sistemele informatice prin comutare de pachete , variabilă de latență rețele de date. În funcțiune dinainte de 1985, NTP este unul dintre cele mai vechi protocoale de Internet utilizate în prezent. NTP a fost proiectat de David L. Mills de la Universitatea din Delaware .

NTP este destinat să sincronizeze toate computerele participante la câteva milisecunde de Timp Universal Coordonat (UTC). Folosește algoritmul de intersecție , o versiune modificată a algoritmului lui Marzullo , pentru a selecta servere de timp precise și este conceput pentru a atenua efectele latenței variabile a rețelei . NTP poate menține, de obicei, timp de zeci de milisecunde pe internetul public și poate obține o precizie mai bună de o milisecundă în rețelele locale în condiții ideale. Rutele asimetrice și congestia rețelei pot provoca erori de 100 ms sau mai mult.

Protocolul este de obicei descris în termenii unui model client-server , dar poate fi la fel de ușor de utilizat în relațiile de la egal la egal în care ambii colegi îl consideră pe celălalt ca fiind o sursă de timp potențială. Implementările trimit și primesc ștampile de timp folosind User Datagram Protocol (UDP) de pe portul 123. Ele pot utiliza, de asemenea, difuzarea sau difuzarea multiplă , unde clienții ascultă pasiv actualizările de timp după un schimb inițial de calibrare dus-întors. NTP furnizează un avertisment cu privire la orice ajustare iminentă a secundei de salt , dar nu sunt transmise informații despre fusurile orare locale sau ora de vară .

Protocolul actual este versiunea 4 (NTPv4), care este un standard propus după cum este documentat în RFC  5905 . Este compatibil cu versiunea 3, specificată în RFC  1305 .

Network Time Security (NTS), o versiune securizată a NTP cu TLS și AEAD este în prezent un standard propus și documentat în RFC  8915 .

Istorie

NTP a fost proiectat de David L. Mills .

În 1979, tehnologia de sincronizare a rețelei de timp a fost utilizată în ceea ce a fost probabil prima demonstrație publică a serviciilor de internet care rulează printr-o rețea de satelit transatlantică, la Conferința Națională de Calculatoare de la New York. Tehnologia a fost descrisă mai târziu în Internet Engineering Note (IEN) 173 din 1981 și a fost dezvoltat un protocol public care a fost documentat în RFC  778 . Tehnologia a fost implementată pentru prima dată într-o rețea locală ca parte a protocolului de rutare Hello și implementată în routerul Fuzzball , un sistem de operare experimental folosit în prototiparea rețelei, unde a funcționat mulți ani.

Alte instrumente de rețea conexe erau disponibile atât atunci, cât și acum. Acestea includ protocoalele Daytime și Time pentru înregistrarea orei evenimentelor, precum și a mesajelor ICMP Timestamp și a opțiunii IP Timestamp ( RFC  781 ). Sistemele de sincronizare mai complete, deși lipsește analiza datelor NTP și algoritmii de disciplinare a ceasului, includ demonul Unix timed , care folosește un algoritm electoral pentru a numi un server pentru toți clienții; și Digital Time Synchronization Service (DTSS), care utilizează o ierarhie de servere similară cu modelul stratului NTP.

În 1985, versiunea NTP 0 (NTPv0) a fost implementată atât în ​​Fuzzball, cât și în Unix, iar antetul pachetului NTP și calculele de întârziere și decalaj dus-întors, care au persistat în NTPv4, au fost documentate în RFC  958 . În ciuda calculatoarelor și a rețelelor relativ lente disponibile la acea vreme, precizia de peste 100 de milisecunde a fost obținută de obicei pe legăturile de întindere din Atlantic, cu precizie de zeci de milisecunde pe rețelele Ethernet .

În 1988, o specificație mult mai completă a protocolului NTPv1, cu algoritmi asociați, a fost publicată în RFC  1059 . S-a bazat pe rezultatele experimentale și algoritmul de filtrare a ceasului documentat în RFC  956 și a fost prima versiune care a descris modurile client-server și peer-to-peer . În 1991, arhitectura, protocolul și algoritmii NTPv1 au fost aduși în atenția unei comunități inginerești mai largi prin publicarea unui articol de David L. Mills în IEEE Transactions on Communications .

În 1989, RFC  1119 a fost publicat definind NTPv2 prin intermediul unei mașini de stat , cu pseudocod pentru a descrie funcționarea sa. A introdus un protocol de management și o schemă de autentificare criptografică care au supraviețuit în NTPv4, împreună cu cea mai mare parte a algoritmului. Cu toate acestea, proiectarea NTPv2 a fost criticată pentru lipsa corectitudinii formale de către comunitatea DTSS, iar procedura de selecție a ceasului a fost modificată pentru a încorpora algoritmul lui Marzullo pentru NTPv3 în continuare.

În 1992, RFC  1305 a definit NTPv3. RFC a inclus o analiză a tuturor surselor de eroare, de la ceasul de referință până la clientul final, care a permis calcularea unei valori care ajută la alegerea celui mai bun server în care mai mulți candidați par să nu fie de acord. A fost introdus modul de difuzare.

În anii următori, pe măsură ce au fost adăugate noi funcții și s-au făcut îmbunătățiri algoritmice, a devenit evident că era necesară o nouă versiune de protocol. În 2010, RFC  5905 a fost publicat conținând o specificație propusă pentru NTPv4. Protocolul a continuat semnificativ de atunci și, începând cu 2014, încă nu a fost publicat un RFC actualizat. După retragerea Mills de la Universitatea din Delaware , implementarea de referință este menținută în prezent ca un proiect open source condus de Harlan Stenn.

Straturi de ceas

SUA Observatorul Naval alternativ Maestru Ceas la Schriever AFB (Colorado) este o sursă de strat 0 pentru NTP
Săgețile galbene indică o conexiune directă; săgețile roșii indică o conexiune la rețea.

NTP utilizează un sistem ierarhic, semi-stratificat de surse de timp. Fiecare nivel al acestei ierarhii este denumit strat și i se atribuie un număr începând cu zero pentru ceasul de referință din partea de sus. Un server sincronizat cu un strat n server rulează la stratul n + 1. Numărul reprezintă distanța față de ceasul de referință și este utilizat pentru a preveni dependențele ciclice din ierarhie. Stratul nu este întotdeauna o indicație a calității sau fiabilității; este obișnuit să se găsească surse de timp de strat 3 care sunt de calitate superioară față de alte surse de timp de strat 2. O scurtă descriere a straturilor 0, 1, 2 și 3 este furnizată mai jos.

Stratul 0
Acestea sunt dispozitive de măsurare a timpului de înaltă precizie, cum ar fi ceasurile atomice , GPS sau alte ceasuri radio . Acestea generează un semnal de impuls pe secundă foarte precis care declanșează o întrerupere și un timestamp pe un computer conectat. Dispozitivele Stratum 0 sunt, de asemenea, cunoscute sub numele de ceasuri de referință. Serverele NTP nu se pot face publicitate ca strat 0. Un câmp de strat setat la 0 în pachetul NTP indică un strat nespecificat.
Stratul 1
Acestea sunt computere a căror durată de sistem este sincronizată la câteva microsecunde de dispozitivele lor atașate de strat 0. Serverele Stratum 1 pot colabora cu alte servere stratum 1 pentru verificarea sănătății și backup. Acestea sunt, de asemenea, denumite servere de timp primare.
Stratul 2
Acestea sunt computere care sunt sincronizate printr-o rețea la serverele stratum 1. Adesea un computer stratum 2 interogă mai multe servere stratum 1. Calculatoarele Stratum 2 pot, de asemenea, să se asocieze cu alte computere din strat 2 pentru a oferi un timp mai stabil și mai robust pentru toate dispozitivele din grupul de peer.
Stratul 3
Acestea sunt computere care sunt sincronizate cu serverele stratum 2. Folosesc aceiași algoritmi pentru peering și eșantionare de date ca stratul 2 și pot acționa ei înșiși ca servere pentru computerele stratului 4 și așa mai departe.

Limita superioară pentru strat este de 15; stratul 16 este utilizat pentru a indica faptul că un dispozitiv este nesincronizat. Algoritmii NTP de pe fiecare computer interacționează pentru a construi un arbore care se întinde pe cea mai scurtă cale Bellman-Ford , pentru a reduce la minimum întârzierea acumulată dus-întors la serverele stratului 1 pentru toți clienții.

În plus față de strat, protocolul este capabil să identifice sursa de sincronizare pentru fiecare server în ceea ce privește un identificator de referință (refid).

Coduri comune de identificare a timpului de referință (refid)
Refid Sursa ceasului
GOES Satelit de mediu orbită geosincronă
GPS Sistem de poziționare globală
FATĂ Sistem de poziționare Galileo
PPS Impuls generic pe secundă
IRIG Grupul de Instrumentare Inter-Range
WWVB LF Radio WWVB Fort Collins, Colorado 60 kHz
DCF LF Radio DCF77 Mainflingen, DE 77,5 kHz
HBG LF Radio HBG Prangins, HB 75 kHz (funcționare oprită)
MSF LF Radio MSF Anthorn, Marea Britanie 60 kHz
JJY LF Radio JJY Fukushima, JP 40 kHz, Saga, JP 60 kHz
LORC Stația MF Radio Loran-C , 100
TDF MF Radio Allouis, FR 162 kHz
CHU HF Radio CHU Ottawa, Ontario
WWV HF Radio WWV Fort Collins, Colorado
WWVH HF Radio WWVH Kauai, Hawaii
NIST Modem telefonic NIST
ACTE Modem telefonic NIST
USNO Modem telefonic USNO
PTB Modem telefonic german standard PTB
D-NA Surse de referință multiple
XFAC Asocierea inter-față a fost modificată (adresa IP a fost schimbată sau pierdută)
ETAPA Schimbarea timpului pasului, decalajul este mai mic decât pragul de panică (1000 s), dar mai mare decât pragul pasului (125 ms)

Marcaje de timp

Marcajele de timp pe 64 de biți utilizate de NTP constau dintr-o parte de 32 de biți pentru secunde și o parte de 32 de biți pentru secțiunea fracționată, oferind o scală de timp care se rotește la fiecare 2 32 de secunde (136 de ani) și o rezoluție teoretică de 2-32 secunde (233 picosecunde). NTP folosește o epocă de 1 ianuarie 1900. Prin urmare, primul răsturnare are loc pe 7 februarie 2036.

NTPv4 introduce un format de dată pe 128 de biți: 64 de biți pentru al doilea și 64 de biți pentru secțiunea fracțională. Cel mai semnificativ 32 de biți ai acestui format este Era Number, care rezolvă ambiguitatea răsturnării în majoritatea cazurilor. Potrivit lui Mills, „valoarea pe 64 de biți a fracției este suficientă pentru a rezolva timpul necesar unui foton pentru a trece un electron la viteza luminii. universul devine slab ".

Algoritm de sincronizare a ceasului

Timp de întârziere dus-întors δ

Un client NTP tipic sondează în mod regulat unul sau mai multe servere NTP. Clientul trebuie să calculeze compensarea timpului și întârzierea dus-întors . Time offset θ, diferența de timp absolut între cele două ceasuri, este definită de

și întârzierea dus-întors δ de
Unde
  • t 0 este marca de timp a clientului pentru transmiterea pachetului de cerere,
  • t 1 este marcajul de timp al serverului pentru recepția pachetului de solicitare,
  • t 2 este marcajul de timp al serverului pentru transmiterea pachetului de răspuns și
  • t 3 este marcajul de timp al clientului pentru recepția pachetului de răspuns.

Pentru a obține expresia pentru offset, rețineți că pentru pachetul de cerere,

și pentru pachetul de răspuns,
Rezolvarea pentru θ dă definiția compensării timpului.

Valorile pentru θ și δ sunt trecute prin filtre și supuse analizei statistice. Valorile aberante sunt eliminate și o estimare a decalajului de timp este derivată de la cei mai buni trei candidați rămași. Frecvența ceasului este apoi ajustată pentru a reduce decalajul treptat, creând o buclă de feedback .

Sincronizarea precisă se realizează atunci când atât rutele de intrare, cât și cele de ieșire dintre client și server au întârziere nominală simetrică. Dacă rutele nu au o întârziere nominală comună, există o prejudecată sistematică de jumătate din diferența dintre timpii de deplasare înainte și înapoi.

Implementări software

Utilitarul protocolului de gestionare NTP ntpq utilizat pentru interogarea stării unui server stratum 2.

Implementare referință

Implementarea de referință NTP , împreună cu protocolul, a fost dezvoltată continuu de peste 20 de ani. Compatibilitatea înapoi a fost menținută pe măsură ce au fost adăugate noi funcții. Conține mai mulți algoritmi sensibili, în special pentru a disciplina ceasul, care se pot comporta greșit atunci când sunt sincronizați cu servere care utilizează algoritmi diferiți. Software-ul a fost portat pe aproape orice platformă de calcul, inclusiv pe computerele personale. Funcționează ca un demon denumit ntpd sub Unix sau ca serviciu sub Windows. Ceasurile de referință sunt acceptate, iar compensările lor sunt filtrate și analizate în același mod ca serverele la distanță, deși sunt de obicei interogate mai frecvent. Această implementare a fost auditată în 2017, găsind numeroase probleme potențiale de securitate.

SNTP

Simple Network Time Protocol ( SNTP ) este o implementare mai puțin complexă a NTP, utilizând același protocol, dar fără a necesita stocarea stării pe perioade lungi de timp. Este utilizat în unele sisteme încorporate și în aplicații în care nu este necesară capacitatea NTP completă.

Windows Time

Toate versiunile Microsoft Windows de la Windows 2000 includ serviciul Windows Time (W32Time), care are capacitatea de a sincroniza ceasul computerului cu un server NTP.

W32Time a fost implementat inițial în scopul protocolului de autentificare Kerberos versiunea 5, care a necesitat timp pentru a se afla la 5 minute de valoarea corectă pentru a preveni atacurile de reluare . Versiunea din Windows 2000 și Windows XP implementează doar SNTP și încalcă mai multe aspecte ale standardului NTP versiunea 3.

Începând cu Windows Server 2003 și Windows Vista , W32Time a devenit compatibil cu un subset semnificativ de NTPv3. Microsoft afirmă că W32Time nu poate menține în mod fiabil sincronizarea timpului cu o precizie de o secundă. Dacă se dorește o precizie mai mare, Microsoft recomandă utilizarea unei versiuni mai noi de Windows sau a unei implementări NTP diferite.

Începând cu Windows 10 versiunea 1607 și Windows Server 2016 , W32Time poate fi configurat pentru a atinge o precizie de timp de 1 s, 50 ms sau 1 ms în anumite condiții de operare specificate.

OpenNTPD

În 2004, Henning Brauer a prezentat OpenNTPD , o implementare NTP cu accent pe securitate și care cuprinde un design separat de privilegii. Deși este orientat mai îndeaproape la nevoile generice mai simple ale utilizatorilor OpenBSD , acesta include și unele îmbunătățiri ale securității protocolului, fiind în același timp compatibil cu serverele NTP existente. O versiune portabilă este disponibilă în depozitele de pachete Linux.

Ntimed

Un nou client NTP, ntimed , a fost inițiat de Poul-Henning Kamp în 2014 și abandonat în 2015. Noua implementare a fost sponsorizată de Linux Foundation ca înlocuitor pentru implementarea de referință, deoarece s-a stabilit că este mai ușor să scrieți o nouă implementare de la zero decât pentru a reduce dimensiunea implementării de referință. Deși nu a fost lansat oficial, ntimed poate sincroniza ceasurile în mod fiabil.

NTPsec

NTPsec este o bifurcație a implementării de referință care a fost întărită sistematic de securitate . Punctul de furcă a fost în iunie 2015 și a răspuns ca o erupție de compromisuri în 2014. Prima versiune de producție a fost livrată în octombrie 2017. Între eliminarea caracteristicilor nesigure, eliminarea suportului pentru hardware învechit și eliminarea suportului pentru variantele Unix învechite, NTPsec a reușit să separe 75% din baza de cod originală, făcând restul mai audibil. Un audit din 2017 al codului a arătat opt ​​probleme de securitate, inclusiv două care nu erau prezente în implementarea de referință inițială, dar NTPsec nu a suferit de alte opt probleme care au rămas în implementarea de referință.

cronică

cronică, afișând surse și informații despre activitate. Fereastra terminalului sub Arch Linux

chrony vine în mod implicit în distribuțiile Red Hat și este disponibil în depozitele Ubuntu . chrony se adresează computerelor obișnuite, care sunt instabile, intră în modul de repaus sau au conexiune intermitentă la Internet. chrony este conceput și pentru mașini virtuale, un mediu mult mai instabil. Se caracterizează printr-un consum redus de resurse (cost) și acceptă hardware-ul Precision Time Protocol pentru o precizie mai mare a marcajului de timp. Are două componente principale: chronyd, un daemon care se execută la pornirea computerului și chronyc, o interfață de linie de comandă pentru utilizator pentru configurarea sa. A fost evaluat ca fiind foarte sigur și cu doar câteva incidente, avantajul său este versatilitatea codului său, scris de la zero pentru a evita complexitatea inutilă. Suport pentru Network Time Security (NTS) a fost adăugat la versiunea 4.0. chrony este disponibil sub licența GNU General Public License versiunea 2 , a fost creat de Richard Curnow în 1997 și este în prezent întreținut de Miroslav Lichvar .

Secunde de salt

În ziua unui al doilea eveniment salt , ntpd primește notificări fie de la un fișier de configurare, fie de la un ceas de referință atașat, fie de la un server de la distanță. Deși ceasul NTP este într-adevăr oprit în timpul evenimentului, din cauza cerinței ca timpul să pară a fi strict în creștere , orice procese care interogă timpul sistemului determină creșterea acestuia cu o cantitate mică, păstrând ordinea evenimentelor. Dacă ar trebui să devină necesară o secundă de salt negativă, aceasta va fi ștearsă cu secvența 23:59:58, 00:00:00, trecând peste 23:59:59.

O implementare alternativă, numită frotire salt, constă în introducerea saltului secundar în mod incremental într-o perioadă de 24 de ore, de la prânz până la prânz în ora UTC. Această implementare este utilizată de Google (atât intern, cât și pe serverele lor publice NTP) și de Amazon AWS.

Preocupările legate de securitate

Doar câteva alte probleme de securitate au fost identificate în implementarea de referință a bazei de cod NTP, dar cele care au apărut în 2009 au cauzat îngrijorări semnificative. Protocolul a fost revizuit și revizuit de-a lungul întregii sale istorii. Baza de cod pentru implementarea de referință a fost supusă auditurilor de securitate din mai multe surse de câțiva ani.

O exploatare de depășire a bufferului stivei a fost descoperită și corecționată în 2014. Apple a fost suficient de îngrijorat de această vulnerabilitate încât a folosit pentru prima dată capacitatea sa de actualizare automată. Unele erori de implementare sunt de bază, cum ar fi o instrucțiune de returnare lipsă într-o rutină, care poate duce la acces nelimitat la sistemele care rulează unele versiuni de NTP în demonul rădăcină. Sistemele care nu utilizează demonul rădăcină, cum ar fi BSD, nu sunt supuse acestui defect.

Un audit de securitate din 2017 a trei implementări NTP, efectuat în numele Inițiativei de infrastructură de bază a Fundației Linux, a sugerat că atât NTP, cât și NTPsec au fost mai problematice decât Chrony din punct de vedere al securității.

Serverele NTP pot fi susceptibile la atacuri man-in-the-middle, cu excepția cazului în care pachetele sunt semnate criptografic pentru autentificare. Cheltuielile de calcul implicate pot face acest lucru impracticabil pe serverele ocupate, în special în timpul atacurilor de refuz de serviciu . Parodarea mesajelor NTP de la un atac de tip „om în mijloc” poate fi utilizată pentru a muta ceasurile pe computerele client și a permite o serie de atacuri bazate pe ocolirea expirării cheii criptografice. Unele dintre serviciile afectate de mesajele NTP false identificate sunt TLS , DNSSEC , diverse scheme de cache (cum ar fi cache-ul DNS), BGP, Bitcoin și o serie de scheme de conectare persistente.

NTP a fost utilizat în atacuri de negare distribuită a serviciului . O mică interogare este trimisă către un server NTP cu adresa de returnare falsificată pentru a fi adresa țintă. Similar atacului de amplificare DNS , serverul răspunde cu un răspuns mult mai mare care permite unui atacator să crească substanțial cantitatea de date trimise către țintă. Pentru a evita participarea la un atac, software-ul serverului NTP poate fi actualizat sau serverele pot fi configurate pentru a ignora interogările externe.

Pentru a îmbunătăți securitatea NTP, a fost dezvoltată o versiune sigură numită Network Time Security (NTS), care este în prezent susținută de mai multe servere de timp.

Vezi si

Note

Referințe

Lecturi suplimentare

linkuri externe