Netzwerkzeitprotokoll - Network Time Protocol

Das Network Time Protocol ( NTP ) ist ein Netzwerkprotokoll zur Taktsynchronisation zwischen Computersystemen über paketvermittelte Datennetze mit variabler Latenz . NTP ist seit 1985 in Betrieb und ist eines der ältesten derzeit verwendeten Internetprotokolle. NTP wurde von David L. Mills von der University of Delaware entwickelt .

NTP soll alle beteiligten Computer bis auf wenige Millisekunden auf die koordinierte Weltzeit (UTC) synchronisieren . Es verwendet den Schnittpunktalgorithmus , eine modifizierte Version des Algorithmus von Marzullo , um genaue Zeitserver auszuwählen, und wurde entwickelt, um die Auswirkungen variabler Netzwerklatenzzeiten zu mildern . NTP kann die Zeit über das öffentliche Internet in der Regel innerhalb von zehn Millisekunden halten und kann in lokalen Netzwerken unter idealen Bedingungen eine Genauigkeit von mehr als einer Millisekunde erreichen . Asymmetrische Routen und Netzwerküberlastung können Fehler von 100 ms oder mehr verursachen.

Das Protokoll wird normalerweise in Form eines Client-Server-Modells beschrieben , kann aber genauso gut in Peer-to-Peer- Beziehungen verwendet werden, in denen beide Peers den anderen als potenzielle Zeitquelle betrachten. Implementierungen senden und empfangen Zeitstempel unter Verwendung des User Datagram Protocol (UDP) auf Portnummer 123. Sie können auch Broadcasting oder Multicasting verwenden , bei dem Clients nach einem anfänglichen Roundtrip-Kalibrierungsaustausch passiv auf Zeitaktualisierungen hören. NTP liefert eine Warnung einer bevorstehenden Sprung zweite Einstellung, aber keine Informationen über lokale Zeitzonen oder Sommerzeit übertragen.

Das aktuelle Protokoll ist Version 4 (NTPv4), ein vorgeschlagener Standard, wie in RFC  5905 dokumentiert . Es ist abwärtskompatibel mit Version 3, spezifiziert in RFC  1305 .

Network Time Security (NTS), eine sichere Version von NTP mit TLS und AEAD, ist derzeit ein vorgeschlagener Standard und in RFC  8915 dokumentiert .

Geschichte

NTP wurde von David L. Mills entwickelt .

Im Jahr 1979, Netzwerk - Zeitsynchronisation wurde Technologie in dem, was war vielleicht die erste öffentliche Demonstration von Internet - Dienst über ein Transatlantik-Satelliten - Netzwerk ausgeführt wird , an der National Computer Conference in New York. Die Technologie wurde später in der Internet Engineering Note (IEN) 173 von 1981 beschrieben und daraus ein öffentliches Protokoll entwickelt, das in RFC  778 dokumentiert ist . Die Technologie wurde zuerst in einem lokalen Netzwerk als Teil des Hello-Routing-Protokolls eingesetzt und im Fuzzball-Router implementiert , einem experimentellen Betriebssystem, das im Netzwerk-Prototyping verwendet wird und wo es viele Jahre lang lief.

Andere verwandte Netzwerktools waren damals und heute verfügbar. Dazu gehören die Protokolle Daytime und Time zur Erfassung der Uhrzeit von Ereignissen sowie die ICMP-Timestamp- Meldungen und die IP-Timestamp-Option ( RFC  781 ). Vollständigere Synchronisationssysteme, die zwar die Datenanalyse- und Taktdisziplinierungsalgorithmen von NTP fehlen, umfassen den Unix-Daemon timed , der einen Wahlalgorithmus verwendet, um einen Server für alle Clients zu ernennen; und der Digital Time Synchronization Service (DTSS), der eine Serverhierarchie ähnlich dem NTP-Stratum-Modell verwendet.

1985 wurde die NTP-Version 0 (NTPv0) sowohl in Fuzzball als auch in Unix implementiert, und die NTP-Paket-Header- und Round-Trip-Delay- und Offset-Berechnungen, die in NTPv4 beibehalten wurden, wurden in RFC  958 dokumentiert . Trotz der relativ langsamen Computer und Netzwerke, die zu dieser Zeit verfügbar waren, wurde auf Atlantic-überspannenden Verbindungen normalerweise eine Genauigkeit von besser als 100 Millisekunden erreicht, mit einer Genauigkeit von mehreren zehn Millisekunden in Ethernet- Netzwerken.

1988 wurde in RFC  1059 eine viel vollständigere Spezifikation des NTPv1-Protokolls mit zugehörigen Algorithmen veröffentlicht . Es stützte sich auf die in RFC  956 dokumentierten experimentellen Ergebnisse und den Taktfilteralgorithmus und war die erste Version, die den Client-Server- und Peer-to-Peer- Modus beschrieb. 1991 wurden die NTPv1-Architektur, das Protokoll und die Algorithmen durch die Veröffentlichung eines Artikels von David L. Mills in der IEEE Transactions on Communications einer breiteren Ingenieurgemeinschaft bekannt gemacht .

1989 wurde RFC  1119 veröffentlicht, das NTPv2 mithilfe einer Zustandsmaschine definiert , mit Pseudocode , um seine Funktionsweise zu beschreiben. Es führte ein Verwaltungsprotokoll und ein kryptografisches Authentifizierungsschema ein, die beide zusammen mit dem Großteil des Algorithmus in NTPv4 überlebt haben. Das Design von NTPv2 wurde jedoch von der DTSS-Community wegen mangelnder formaler Korrektheit kritisiert , und das Taktauswahlverfahren wurde modifiziert, um den Algorithmus von Marzullo für NTPv3 aufwärts zu integrieren.

1992 definierte RFC  1305 NTPv3. Der RFC beinhaltete eine Analyse aller Fehlerquellen, von der Referenzuhr bis hin zum Endkunden, was die Berechnung einer Metrik ermöglichte, die bei der Auswahl des besten Servers hilft, wenn mehrere Kandidaten nicht einverstanden zu sein scheinen. Der Broadcast-Modus wurde eingeführt.

In den Folgejahren, als neue Funktionen hinzugefügt und Algorithmen verbessert wurden, wurde offensichtlich, dass eine neue Protokollversion erforderlich war. Im Jahr 2010 wurde RFC  5905 veröffentlicht, das eine vorgeschlagene Spezifikation für NTPv4 enthält. Das Protokoll hat sich seitdem erheblich weiterentwickelt, und ab 2014 muss noch ein aktualisierter RFC veröffentlicht werden. Nach dem Ausscheiden von Mills von der University of Delaware wird die Referenzimplementierung derzeit als Open-Source- Projekt unter der Leitung von Harlan Stenn gepflegt .

Taktschichten

Die Alternate Master Clock des US Naval Observatory auf der Schriever AFB (Colorado) ist eine Stratum 0-Quelle für NTP
Gelbe Pfeile weisen auf eine direkte Verbindung hin; rote Pfeile weisen auf eine Netzwerkverbindung hin.

NTP verwendet ein hierarchisches, halbschichtiges System von Zeitquellen. Jede Ebene dieser Hierarchie wird als Stratum bezeichnet und erhält für die Referenzuhr ganz oben eine mit Null beginnende Nummer. Ein auf einen Stratum n Server synchronisierter Server läuft auf Stratum n + 1. Die Zahl stellt den Abstand zur Referenzuhr dar und dient dazu, zyklische Abhängigkeiten in der Hierarchie zu vermeiden. Stratum ist nicht immer ein Hinweis auf Qualität oder Zuverlässigkeit; Es ist üblich, Stratum-3-Zeitquellen zu finden, die eine höhere Qualität aufweisen als andere Stratum-2-Zeitquellen. Nachfolgend finden Sie eine kurze Beschreibung der Schichten 0, 1, 2 und 3.

Schicht 0
Dies sind hochpräzise Zeitmessgeräte wie Atomuhren , GPS oder andere Funkuhren . Sie erzeugen ein sehr genaues Impuls-pro-Sekunde- Signal, das einen Interrupt und einen Zeitstempel auf einem angeschlossenen Computer auslöst . Stratum 0-Geräte werden auch als Referenzuhren bezeichnet. NTP-Server können sich selbst nicht als Stratum 0 ankündigen. Ein auf 0 gesetztes Stratum-Feld im NTP-Paket weist auf ein nicht spezifiziertes Stratum hin.
Schicht 1
Dies sind Computer, deren Systemzeit auf wenige Mikrosekunden genau mit ihren angeschlossenen Stratum 0-Geräten synchronisiert ist. Stratum 1-Server können mit anderen Stratum 1-Servern für Plausibilitätsprüfungen und Backups Peering betreiben. Sie werden auch als primäre Zeitserver bezeichnet.
Schicht 2
Dies sind Computer, die über ein Netzwerk mit Stratum-1-Servern synchronisiert sind. Häufig fragt ein Stratum-2-Computer mehrere Stratum-1-Server ab. Stratum 2-Computer können auch Peering mit anderen Stratum 2-Computern durchführen, um eine stabilere und robustere Zeit für alle Geräte in der Peer-Gruppe bereitzustellen.
Schicht 3
Dies sind Computer, die mit Stratum 2-Servern synchronisiert sind. Sie verwenden dieselben Algorithmen für Peering und Datenstichproben wie Stratum 2 und können selbst als Server für Stratum-4-Computer usw. fungieren.

Die Obergrenze für Stratum beträgt 15; Stratum 16 wird verwendet, um anzuzeigen, dass ein Gerät nicht synchronisiert ist. Die NTP-Algorithmen auf jedem Computer interagieren, um einen Bellman-Ford- Kurzester-Pfad- Spannbaum zu konstruieren , um die akkumulierte Umlaufverzögerung zu den Stratum-1-Servern für alle Clients zu minimieren.

Neben Stratum ist das Protokoll in der Lage, die Synchronisationsquelle für jeden Server anhand einer Referenzkennung (refid) zu identifizieren.

Gemeinsame Zeitreferenz-Identifikatoren (refid)-Codes
Refid Taktquelle
GOES Geosynchroner Orbit-Umgebungssatellit
Geographisches Positionierungs System Global Positioning System
GAL Galileo- Positionierungssystem
PPS Generische Puls-pro-Sekunde
IRIG Bereichsübergreifende Instrumentierungsgruppe
WWVB LF-Radio WWVB Fort Collins, Colorado 60 kHz
DCF NF-Funk DCF77 Mainflingen, DE 77,5 kHz
HBG NF-Funkgerät HBG Prangins, HB 75 kHz (Betrieb eingestellt)
Ärzte ohne Grenzen LF-Radio MSF Anthorn, UK 60 kHz
JJY LF-Radio JJY Fukushima, JP 40 kHz, Saga, JP 60 kHz
LORC MF-Radio Loran-C- Sender, 100
TDF MF-Radio Allouis, FR 162 kHz
CHU HF-Funk CHU Ottawa, Ontario
WWV HF-Funk WWV Fort Collins, Colorado
WWVH HF-Funk WWVH Kauai, Hawaii
NIST NIST- Telefonmodem
AKTE NIST-Telefonmodem
USNO USNO Telefonmodem
PTB Deutsches PTB-Zeitstandard-Telefonmodem
FRAU Multi-Referenzquellen
XFAC Inter Face Association Changed (IP-Adresse geändert oder verloren)
SCHRITT Schrittzeitänderung, der Offset ist kleiner als die Panikschwelle (1000 s), aber größer als die Schrittschwelle (125 ms)

Zeitstempel

Die von NTP verwendeten 64-Bit-Zeitstempel bestehen aus einem 32-Bit-Teil für Sekunden und einem 32-Bit-Teil für Sekundenbruchteile, was eine Zeitskala ergibt, die alle 2 32 Sekunden (136 Jahre) überläuft und eine theoretische Auflösung von 2 -32 . hat Sekunden (233 Pikosekunden). NTP verwendet eine Epoche vom 1. Januar 1900. Daher erfolgt der erste Rollover am 7. Februar 2036.

NTPv4 führt ein 128-Bit-Datumsformat ein: 64 Bit für die Sekunde und 64 Bit für den Sekundenbruchteil. Die bedeutendsten 32-Bits dieses Formats sind die Era Number, die in den meisten Fällen Rollover-Mehrdeutigkeiten auflöst. Mills sagt: „Der 64-Bit-Wert für den Bruch reicht aus, um die Zeit aufzulösen, die ein Photon braucht, um ein Elektron mit Lichtgeschwindigkeit zu passieren. Der 64-Bit-Sekundenwert reicht aus, um eine eindeutige Zeitdarstellung bis zum Universum wird dunkel."

Taktsynchronisationsalgorithmus

Hin- und Rücklaufzeit δ

Ein typischer NTP-Client fragt regelmäßig einen oder mehrere NTP-Server ab. Der Client muss seinen Zeitversatz und seine Roundtrip -Verzögerung berechnen . Der Zeitversatz θ, die Differenz der absoluten Zeit zwischen den beiden Uhren, wird definiert durch

und die Round-Trip-Delay δ by
wo
  • t 0 ist der Zeitstempel des Clients der Anforderungspaketübertragung,
  • t 1 ist der Zeitstempel des Servers für den Empfang des Anforderungspakets,
  • t 2 ist der Zeitstempel des Servers der Übertragung des Antwortpakets und
  • t 3 ist der Zeitstempel des Clients des Empfangs des Antwortpakets.

Um den Ausdruck für den Offset abzuleiten, beachten Sie, dass für das Anforderungspaket

und für das Antwortpaket,
Auflösen nach θ liefert die Definition des Zeitversatzes.

Die Werte für θ und δ werden durch Filter geleitet und einer statistischen Analyse unterzogen. Ausreißer werden verworfen und eine Schätzung des Zeitversatzes wird aus den besten drei verbleibenden Kandidaten abgeleitet. Die Taktfrequenz wird dann angepasst, um den Offset allmählich zu verringern, wodurch eine Rückkopplungsschleife entsteht .

Eine genaue Synchronisation wird erreicht, wenn sowohl die eingehenden als auch die ausgehenden Routen zwischen dem Client und dem Server eine symmetrische Nennverzögerung aufweisen. Wenn die Routen keine gemeinsame nominelle Verzögerung aufweisen, besteht ein systematischer Bias von der Hälfte der Differenz zwischen den Hin- und Rückfahrzeiten.

Softwareimplementierungen

Das NTP-Verwaltungsprotokoll-Dienstprogramm ntpq wird verwendet, um den Status eines Stratum-2-Servers abzufragen.

Referenzimplementierung

Die NTP- Referenzimplementierung wird zusammen mit dem Protokoll seit über 20 Jahren kontinuierlich weiterentwickelt. Die Abwärtskompatibilität wurde beibehalten, da neue Funktionen hinzugefügt wurden. Es enthält mehrere sensible Algorithmen, insbesondere zur Disziplinierung der Uhr, die sich bei der Synchronisierung mit Servern, die unterschiedliche Algorithmen verwenden, falsch verhalten können. Die Software wurde auf fast jede Computerplattform portiert, einschließlich PCs. Es läuft als Daemon namens ntpd unter Unix oder als Dienst unter Windows. Referenztakte werden unterstützt und ihre Offsets werden wie Remote-Server gefiltert und analysiert, obwohl sie normalerweise häufiger abgefragt werden. Diese Implementierung wurde 2017 geprüft, wobei zahlreiche potenzielle Sicherheitsprobleme festgestellt wurden.

SNTP

Simple Network Time Protocol ( SNTP ) ist eine weniger komplexe Implementierung von NTP, die das gleiche Protokoll verwendet, aber keine Speicherung des Zustands über längere Zeiträume erfordert . Es wird in einigen eingebetteten Systemen und in Anwendungen verwendet, bei denen keine vollständige NTP-Fähigkeit erforderlich ist.

Windows-Zeit

Alle Microsoft Windows- Versionen seit Windows 2000 enthalten den Windows-Zeitdienst (W32Time), der die Fähigkeit besitzt, die Computeruhr mit einem NTP-Server zu synchronisieren.

W32Time wurde ursprünglich für das Authentifizierungsprotokoll Kerberos Version 5 implementiert , bei dem die Zeit innerhalb von 5 Minuten um den korrekten Wert liegen musste, um Replay-Angriffe zu verhindern . Die Version in Windows 2000 und Windows XP implementiert nur SNTP und verstößt gegen mehrere Aspekte des NTP-Standards Version 3.

Ab Windows Server 2003 und Windows Vista wurde W32Time mit einem bedeutenden Teil von NTPv3 kompatibel. Microsoft gibt an, dass W32Time die Zeitsynchronisierung nicht zuverlässig mit einer Genauigkeit von einer Sekunde aufrechterhalten kann. Wenn eine höhere Genauigkeit gewünscht wird, empfiehlt Microsoft, eine neuere Version von Windows oder eine andere NTP-Implementierung zu verwenden.

Ab Windows 10 Version 1607 und Windows Server 2016 kann W32Time so konfiguriert werden, dass unter bestimmten Betriebsbedingungen eine Zeitgenauigkeit von 1 s, 50 ms oder 1 ms erreicht wird.

OpenNTPD

2004 stellte Henning Brauer OpenNTPD vor , eine NTP-Implementierung mit Fokus auf Sicherheit und einem privilegierten Design. Obwohl es eher auf die einfacheren allgemeinen Bedürfnisse von OpenBSD- Benutzern ausgerichtet ist, enthält es auch einige Verbesserungen der Protokollsicherheit, während es immer noch mit bestehenden NTP-Servern kompatibel ist. Eine portable Version ist in Linux-Paket-Repositorys verfügbar.

Ntimed

Ein neuer NTP-Client, ntimed , wurde 2014 von Poul-Henning Kamp gestartet und 2015 eingestellt. Die neue Implementierung wurde von der Linux Foundation als Ersatz für die Referenzimplementierung gesponsert , da festgestellt wurde, dass es einfacher ist, eine neue Implementierung zu schreiben von Grund auf neu, als die Größe der Referenzimplementierung zu reduzieren. Obwohl noch nicht offiziell freigegeben, kann ntimed Uhren zuverlässig synchronisieren.

NTPsec

NTPsec ist eine Abzweigung der Referenzimplementierung, die systematisch sicherheitsgehärtet wurde . Der Gabelungspunkt war im Juni 2015 und war eine Reaktion auf eine Reihe von Kompromissen im Jahr 2014. Die erste Produktionsversion wurde im Oktober 2017 ausgeliefert. Zwischen der Entfernung unsicherer Funktionen, der Entfernung der Unterstützung für veraltete Hardware und der Entfernung der Unterstützung für veraltete Unix-Varianten, NTPsec konnte 75 % der ursprünglichen Codebasis entfernen, wodurch der Rest besser überprüfbar wurde. Ein Audit des Codes im Jahr 2017 ergab acht Sicherheitsprobleme, darunter zwei, die in der ursprünglichen Referenzimplementierung nicht vorhanden waren, aber NTPsec litt nicht unter acht anderen Problemen, die in der Referenzimplementierung verblieben waren.

chrony

chronyc mit Quellen- und Aktivitätsinformationen. Terminalfenster unter Arch Linux

chrony kommt standardmäßig in Red Hat- Distributionen und ist in den Ubuntu- Repositorys verfügbar . chrony richtet sich an gewöhnliche Computer, die instabil sind, in den Energiesparmodus gehen oder zeitweise mit dem Internet verbunden sind. chrony ist auch für virtuelle Maschinen konzipiert, eine viel instabilere Umgebung. Es zeichnet sich durch einen geringen Ressourcenverbrauch (Kosten) aus und unterstützt Precision Time Protocol- Hardware für eine höhere Zeitstempelpräzision. Es besteht aus zwei Hauptkomponenten: chronyd, einem Daemon, der beim Start des Computers ausgeführt wird, und chronyc, einer Befehlszeilenschnittstelle für die Konfiguration des Benutzers. Es wurde als sehr sicher bewertet und hat mit nur wenigen Vorfällen den Vorteil der Vielseitigkeit seines Codes, der von Grund auf neu geschrieben wurde, um unnötige Komplexität zu vermeiden. Unterstützung für Network Time Security (NTS) wurde in Version 4.0 hinzugefügt. chrony steht unter der GNU General Public License Version 2 , wurde 1997 von Richard Curnow erstellt und wird derzeit von Miroslav Lichvar gepflegt .

Schaltsekunden

Am Tag eines Schaltsekunde Ereignis erhält ntpd Benachrichtigung entweder aus einer Konfigurationsdatei, ein angeschlossenen Referenztakt oder einen Remote - Server. Obwohl die NTP-Uhr während des Ereignisses tatsächlich angehalten wird , führen alle Prozesse , die die Systemzeit abfragen , zu einer geringfügigen Erhöhung dieser Zeit, um die Reihenfolge der Ereignisse beizubehalten. Sollte jemals eine negative Schaltsekunde notwendig werden, wird diese mit der Sequenz 23:59:58, 00:00:00, 23:59:59 übersprungen.

Eine alternative Implementierung, die als Leap Smearing bezeichnet wird, besteht darin, die Schaltsekunde während eines Zeitraums von 24 Stunden von Mittag bis Mittag in UTC-Zeit inkrementell einzuführen. Diese Implementierung wird von Google (sowohl intern als auch auf ihren öffentlichen NTP-Servern) und von Amazon AWS verwendet.

Sicherheitsbedenken

In der Referenzimplementierung der NTP-Codebasis wurden nur wenige andere Sicherheitsprobleme identifiziert, aber die im Jahr 2009 aufgetretenen gaben Anlass zu erheblicher Besorgnis. Das Protokoll wurde während seiner gesamten Geschichte überarbeitet und überprüft. Die Codebasis für die Referenzimplementierung wird seit mehreren Jahren Sicherheitsaudits aus verschiedenen Quellen unterzogen.

Im Jahr 2014 wurde ein Stack-Buffer-Overflow- Exploit entdeckt und gepatcht. Apple war über diese Schwachstelle so besorgt, dass es zum ersten Mal seine Auto-Update-Funktion einsetzte. Einige Implementierungsfehler sind grundlegend, wie beispielsweise eine fehlende return-Anweisung in einer Routine, die zu unbegrenztem Zugriff auf Systeme führen kann, auf denen einige Versionen von NTP im Root-Daemon ausgeführt werden. Systeme, die den Root-Daemon nicht verwenden, wie z. B. BSD, unterliegen diesem Fehler nicht.

Ein Sicherheitsaudit von drei NTP-Implementierungen aus dem Jahr 2017, das im Auftrag der Core Infrastructure Initiative der Linux Foundation durchgeführt wurde, ergab, dass sowohl NTP als auch NTPsec aus Sicherheitssicht problematischer waren als Chrony.

NTP-Server können anfällig für Man-in-the-Middle-Angriffe sein, es sei denn, die Pakete werden zur Authentifizierung kryptografisch signiert. Der damit verbundene Rechenaufwand kann dies auf ausgelasteten Servern unpraktisch machen, insbesondere bei Denial-of-Service- Angriffen. NTP-Nachrichten-Spoofing von einem Man-in-the-Middle-Angriff kann verwendet werden, um Uhren auf Client-Computern zu verschieben und eine Reihe von Angriffen zu ermöglichen, die auf der Umgehung des Ablaufs von kryptografischen Schlüsseln basieren. Einige der Dienste, die von identifizierten gefälschten NTP-Nachrichten betroffen sind , sind TLS , DNSSEC , verschiedene Caching-Schemata (wie DNS-Cache), BGP, Bitcoin und eine Reihe von persistenten Login-Schemata.

NTP wurde bei verteilten Denial-of-Service-Angriffen verwendet . Eine kleine Anfrage wird an einen NTP-Server gesendet, wobei die Absenderadresse als Zieladresse gefälscht wird . Ähnlich wie beim DNS-Amplification-Angriff antwortet der Server mit einer viel größeren Antwort, die es einem Angreifer ermöglicht, die an das Ziel gesendete Datenmenge erheblich zu erhöhen. Um die Teilnahme an einem Angriff zu vermeiden, kann die NTP-Serversoftware aktualisiert oder Server so konfiguriert werden, dass sie externe Anfragen ignorieren.

Um die NTP-Sicherheit zu verbessern, wurde eine sichere Version namens Network Time Security (NTS) entwickelt und derzeit von mehreren Zeitservern unterstützt.

Siehe auch

Anmerkungen

Verweise

Weiterlesen

Externe Links