Wéi sécherzestellen, datt d'ZÀit per se net lÀit, wann Dir eng Millioun grouss a kleng Apparater hutt, déi iwwer TCP / IP kommunizéieren? No all, all vun hinnen huet eng Auer, an der ZÀit muss fir all vun hinnen richteg sinn. Dëse Problem kann net ouni ntp ëmgoen.
Loosst eis fir eng Minutt virstellen, datt an engem Segment vun der industrieller IT Infrastruktur Schwieregkeeten sinn mat Synchroniséierung Servicer iwwer ZÀit. Direkt fÀnkt de Cluster Stack vun der Enterprise Software un ze falen, DomÀnen zerfallen, Masters a Standby Noden streiden ouni Erfolleg de Status Quo ze restauréieren.
Et ass och méiglech datt en UgrÀifer bewosst probéiert d'ZÀit duerch e MiTM oder DDOS Attack ze stéieren. An esou enger Situatioun kann alles geschéien:
- Benotzerkont Passwierder wÀerten oflafen;
- X.509 Certificaten wÀert oflafen;
- TOTP Zwee-Faktor Authentifikatioun wÀert ophalen ze schaffen;
- D'Backups ginn al ginn an de System lÀscht se;
- DNSSec wÀert briechen.
Et ass kloer datt all IT Departement un der zouverlÀsseg Operatioun vun ZÀitsynchroniséierungsservicer interesséiert ass, an et wier flott wann se zouverlÀsseg a sécher an der industrieller Operatioun wieren.
Break NTP a 25 Minutten
Netzwierkprotokoller - Millennials hunn eng Besonderheet, si waren a si fir nÀischt méi gutt, mee se ersetzen ass net sou einfach och wann eng kritesch Mass vun Enthusiaster a Finanzéierung cumuléiert ass.
D'Haaptrei Plainte iwwer klassesch NTP ass de Mangel u zouverlĂ€sseg Mechanismen fir gĂ©int Attacke vun Intruder ze schĂŒtzen. Verschidde Versuche goufen gemaach fir dĂ«se Problem ze lĂ©isen. Fir dĂ«st z'erreechen, hu mir als Ă©ischt e Pre-Shared Key (PSK) Mechanismus implementĂ©iert fir symmetresch SchlĂ«sselen auszetauschen.
Leider huet dës Method aus engem einfache Grond net bezuelt - et ass net gutt. Manuell Konfiguratioun ass op der Client SÀit erfuerderlech ofhÀngeg vum Server. Dëst bedeit datt Dir einfach net en anere Client esou einfach kënnt derbÀisetzen. Wann eppes um NTP-Server Ànnert, mussen all Clienten nei konfiguréiert ginn.
Duerno koumen se mat AutoKey, awer si hunn direkt eng Rei vu schlëmme SchwÀchen am Design vum Algorithmus selwer entdeckt a si hu missen opginn. D'Saach ass datt d'Somen nëmmen 32-Bit enthÀlt, et ass ze kleng an enthÀlt net genuch computational Komplexitéit fir e frontalen Attack.
- Schlëssel ID - symmetresch 32-bëssen Schlëssel;
- MAC (Message Authentifikatiounscode) - NTP Paketchecksum;
Autokey gëtt wéi follegt berechent.
Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)Wou H () eng kryptographesch Hashfunktioun ass.
Déi selwecht Funktioun gëtt benotzt fir d'Kontrollsum vu Pakete ze berechnen.
MAC=H(Autokey||NTP packet)Et stellt sech eraus datt d'ganz Integritéit vu Packagechecken op der Authentizitéit vun de Cookien hÀnkt. Wann Dir se hutt, kënnt Dir den Autokey restauréieren an dann de MAC spoofen. Wéi och ëmmer, den NTP Server benotzt e Som wann se se generéieren. Dëst ass wou de Fang lÀit.
Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))D'MSB_32 Funktioun schneit déi 5 bedeitendste Bits aus dem md32 Hash Berechnungsresultat of. De Client Cookie Ànnert sech net soulaang d'Serverparameter onverÀnnert bleiwen. Da kann den UgrÀifer nëmmen déi initial Zuel restauréieren a kënnen onofhÀngeg Cookien generéieren.
Als éischt musst Dir mam NTP-Server als Client verbannen a Cookien kréien. Duerno, mat enger brute Force Method, restauréiert den UgrÀifer déi initial Zuel no engem einfachen Algorithmus.
Algorithmus fir d'Berechnung vun der initialer Zuel z'attackéieren mat der brute-force Method.
for i=0:2^32 â 1 do
Ci=H(Server-IP||Client-IP||0||i)
if Ci=Cookie then
return i
end if
end forD'IP Adresse si bekannt, also alles wat bleift ass 2^32 Hashes ze kreéieren bis de erstallte Cookie mat deem vum NTP-Server entsprécht. Op enger regulÀrer Heemstatioun mat Intel Core i5 wÀert dëst 25 Minutten daueren.
NTS - nei Autokey
Et war onméiglech mat esou SécherheetslÀcher am Autokey opzemaachen, an 2012 ass et erschéngt Protokoll. Fir den Numm ze kompromittéieren, hu se décidéiert fir nei ze markéieren, sou datt Autokey v.2 Network Time Security genannt gouf.
Den NTS Protokoll ass eng Ausdehnung vun der NTP Sécherheet an ënnerstëtzt de Moment nëmmen den Unicast Modus. Et bitt e staarke kryptographesche Schutz géint Paketmanipulatioun, verhënnert Snooping, skaléiert gutt, ass resistent géint Netzwierkpaketverloscht, a resultéiert am mannsten PrÀzisiounsverloscht wÀrend der Verbindungssécherheet.
Eng NTS Verbindung besteet aus zwou Etappen dĂ©i mĂ©i niddereg Schichtprotokoller benotzen. Op Ă©ischt Op dĂ«ser Etapp sinn de Client an de Server sech iwwer verschidde Verbindungsparameter eens an austauschen Cookien mat SchlĂ«sselen mat all de begleedenden Dateset. Op dĂ©i zweet Op dĂ«ser Etapp fĂ«nnt dĂ©i aktuell geschĂŒtzt NTS Sessioun tĂ«scht dem Client an dem NTP Server statt.

NTS besteet aus zwee ënneschten Layer Protokoller: Network Time Security Key Exchange (NTS-KE), déi eng sécher Verbindung iwwer TLS initiéiert, an NTPv4, déi lescht Inkarnatioun vum NTP Protokoll. E bësse méi iwwer dëst ënnert.
Ăischt Etapp - NTS KE
Op dëser Etapp initiéiert den NTP Client eng TLS 1.2/1.3 Sessioun iwwer eng separat TCP Verbindung mam NTS KE Server. WÀrend dëser Sessioun geschitt déi folgend.
- D'Parteien bestëmmen d'Parameteren Algorithmus fir déi zweet Stuf.
- D'Parteien definéieren en zweeten ënneschten Layer Protokoll, awer am Moment gëtt nëmmen NTPv4 ënnerstëtzt.
- D'Parteien bestëmmen d'IP Adress an den Hafen vum NTP Server.
- NTS KE Server stellt Cookien ënner NTPv4 eraus.
- D'Parteien extrahéieren e Paar symmetresche Schlësselen (C2S an S2C) aus dem Cookiematerial.
DĂ«s Approche huet de grousse Virdeel datt d'ganz Belaaschtung fir geheim Informatioun iwwer Verbindungsparameter ze vermĂ«ttelen op de bewĂ€hrten an zouverlĂ©issege TLS Protokoll fĂ€llt. DĂ«st eliminĂ©iert de Besoin fir Ăr eege Rad fir eng sĂ©cher NTP Handshake nei ze erfannen.
Zweet Stuf - NTP ënner NTS Schutz
Am zweete Schrëtt synchroniséiert de Client sécher d'ZÀit mam NTP-Server. Fir dësen Zweck iwwerdréit et véier speziell Extensiounen (Extensiounsfelder) an der NTPv4 Paketstruktur.
- D'Unique Identifier Extension enthÀlt eng zoufÀlleg Nonce fir Replay Attacken ze vermeiden.
- NTS Cookie Extension enthĂ€lt ee vun den NTP Cookien, dĂ©i dem Client verfĂŒgbar sinn. Well nĂ«mmen de Client d'C2S an S2C symmetresch AAED SchlĂ«sselen huet, muss den NTP Server se aus dem Cookie Material extrahĂ©ieren.
- NTS Cookie Placeholder Extension ass e Wee fir e Client fir zousĂ€tzlech Cookien vum Server ze froen. DĂ«s Extensioun ass nĂ©ideg fir sĂ©cherzestellen datt d'NTP Server Ăntwert net vill mĂ©i laang ass wĂ©i d'Ufro. DĂ«st hĂ«lleft amplification Attacken verhĂ«nneren.
- NTS Authenticator a Verschlësselte Extensioun Felder Extensioun enthÀlt den AAED Chiffer mam C2S Schlëssel, NTP Header, ZÀitstempel, an déi uewe genannten EF als Begleedungsdaten. Ouni dës Extensioun ass et méiglech ZÀitstempel ze spoofen.

Wann Dir eng Ufro vun engem Client kritt, verifizéiert de Server d'Authentizitéit vum NTP-Paket. Fir dëst ze maachen, muss hien d'Cookien entschlësselen, den AAED Algorithmus a Schlësselen extrahéieren. Nodeems Dir den NTP-Paket fir d'Gëltegkeet erfollegrÀich iwwerpréift huet, reagéiert de Server op de Client am folgende Format.
- Eenzegaarteg Identifizéierer Extensioun ass eng Spigelkopie vun der Client Ufro, eng Moossnam géint Replay Attacken.
- NTS Cookie Extension méi Cookien fir d'Sessioun weiderzemaachen.
- NTS Authenticator a verschlësselte Extensioun Felder Extensioun enthÀlt den AEAD Chiffer mat engem S2C Schlëssel.
DĂ©i zweet Handshake kann vill Mol widderholl ginn, den Ă©ischte SchrĂ«tt Ă«mgoen, well all Ufro an Ăntwert dem Client zousĂ€tzlech Cookien gĂ«tt. DĂ«st huet de Virdeel datt dĂ©i relativ ressourceintensiv TLS Operatioune vu Rechen a PKI Daten iwwerdroe ginn duerch d'Zuel vun widderholl Ufroen gedeelt. DĂ«st ass besonnesch praktesch fir spezialisĂ©iert FPGA Timekeepers, wann all d'Haaptfunktioune kĂ«nnen a verschidde Funktiounen aus dem Feld vun der symmetrescher Kryptografie verpackt ginn, de ganze TLS Stack op en aneren Apparat transferĂ©iert.
NTPSec
Wat ass speziell un NTP? Trotz der Tatsaach, datt den Auteur vum Projet, Dave Mills, probĂ©iert sĂ€i Code sou gutt wĂ©i mĂ©iglech ze dokumentĂ©ieren, ass et e rare ProgrammĂ©ierer, deen d'Intricacies vun ZĂ€itsynchronisĂ©ierungsalgorithmen verstoen kann, dĂ©i 35 Joer al sinn. E puer vum Code gouf virun der POSIX Ăra geschriwwe, an d'Unix API war dann ganz anescht wĂ©i dat wat haut benotzt gĂ«tt. ZousĂ€tzlech ass WĂ«ssen iwwer Statistike gebraucht fir d'Signal vu StĂ©ierungen op KamĂ©idi Linnen ze lĂ€schen.
NTS war net den Ă©ischte Versuch fir NTP ze fixĂ©ieren. Eemol UgrĂ€ifer gelĂ©iert hunn NTP Schwachstelle auszenotzen fir DDoS Attacken ze verstĂ€erken, gouf et kloer datt radikal Ănnerunge gebraucht goufen. A wĂ€rend d'NTS-Entworf virbereet a finalisĂ©iert goufen, huet d'US National Science Foundation Enn 2014 drĂ©ngend e Subventioun fir d'ModernisĂ©ierung vum NTP verdeelt.
Den Aarbechtsgrupp gouf gefouert net vu jidderengem, mÀ - ee vun de Grënner a Piliere vun der Open Source Gemeinschaft an Auteur vum Buch . Déi éischt Saach, déi den Eric a seng Frënn probéiert hunn, war den NTP Code vun der BitKeeper Plattform op Git ze réckelen, awer et huet net esou geklappt. De Projet Leader Harlan Stenn war géint dës Decisioun an d'Verhandlunge stoungen. Dunn gouf decidéiert de Projet Code ze Gabel, an NTPSec war gebuer.
Solid Erfahrung, inklusiv Aarbecht op GPSD, e mathemateschen Hannergrond an déi magesch FÀegkeet vum antike Code ze liesen - den Eric Raymond war genau den Hacker deen esou e Projet konnt zéien. D'Team huet e Code Migratioun Spezialist fonnt an an nëmmen 10 Wochen NTP op GitLab. D'Aarbechte ware voll amgaang.
D'Equipe vum Eric Raymond huet d'Aufgab genee esou ugeholl wéi den Auguste Rodin mat engem Steenblock. Andeems se 175 KLOC vum alen Code erofhuelen, konnten se d'AttackflÀch wesentlech reduzéieren andeems se vill SécherheetslÀcher zoumaachen.
Hei ass eng onkomplett Lëscht vun deenen, déi an der Verdeelung abegraff sinn:
- Ondokumentéiert, veroudert, veroudert oder gebrach Refclock.
- Onbenotzt ICS Bibliothéik.
- libopts/autogen.
- Al Code fir Windows.
- ntpdc.
- Autokey.
- Den ntpq C Code gouf am Python nei geschriwwe ginn.
- De sntp/ntpdig C Code gouf am Python nei geschriwwe ginn.
ZousÀtzlech fir de Code ze botzen, hat de Projet aner Aufgaben. Hei ass eng deelweis Lëscht vun Leeschtungen:
- Code Schutz géint Puffer Iwwerschwemmung gouf wesentlech verbessert. Fir Puffer Iwwerschwemmungen ze vermeiden, goufen all onsécher Stringfunktiounen (strcpy/strcat/strtok/sprintf/vsprintf/gets) mat séchere Versiounen ersat, déi Puffergréisstlimiten ëmsetzen.
- NTS ĂnnerstĂ«tzung dobĂ€igesat.
- Verbesserte ZÀitschrëttgenauegkeet zéngfalt andeems physesch Hardware verbënnt. Dëst ass wéinst der Tatsaach datt modern Computeruhren vill méi genee ginn wéi déi wann NTP gebuer gouf. Déi gréisste Beneficer vun dëser waren GPSDO an engagéierten ZÀit Radios.
- D'Zuel vun de Programméierungssprooche gouf op zwee reduzéiert. Amplaz vu Perl, awk a souguer S Scripten, ass et elo alles Python. Wéinst dësem ginn et méi Méiglechkeete fir Code Wiederverwendung.
- Amplaz Nuddelen vun Autotools Scripten, huet de Projet ugefaang e Software Build System ze benotzen .
- Aktualiséiert a reorganiséiert Projet Dokumentatioun. Aus enger widderspréchlecher an heiansdo archaescher Sammlung vun Dokumenter hu si eng ganz passabel Dokumentatioun erstallt. All Kommandozeilschalter an all Konfiguratiounsentitéit huet elo eng eenzeg Versioun vun der Wourecht. ZousÀtzlech ginn Mann SÀiten a Webdokumentatioun elo aus de selwechte KÀrdateien erstallt.
NTPSec ass verfĂŒgbar fir eng Rei vu Linux Verdeelungen. Am Moment ass dĂ©i lescht stabil Versioun 1.1.8, fir Gentoo Linux ass et dĂ©i lescht lescht.
(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]
Chronie
Et gouf en anere Versuch den alen NTP duerch eng mĂ©i sĂ©cher Alternativ ze ersetzen. Chrony, am GĂ©igesaz zu NTPSec, ass aus dem Buedem geschriwwe ginn an ass entwĂ©ckelt fir zouverlĂ€sseg Ă«nner enger breeder Palette vu Konditiounen ze bedreiwen, dorĂ«nner onbestĂ€nneg Netzwierkverbindungen, deelweis NetzwierkverfĂŒgbarkeet oder Stau, an TemperaturĂ€nnerungen. ZousĂ€tzlech huet Chronie aner Virdeeler:
- chrony kann d'System Auer méi séier mat méi Genauegkeet synchroniséieren;
- chrony ass méi kleng, verbraucht manner Erënnerung, an Zougang zu der CPU nëmmen wann néideg. Dëst ass e grousse Plus fir Ressourcen an Energie ze spueren;
- chrony ënnerstëtzt Hardware ZÀitstempel op Linux, erlaabt extrem korrekt Synchroniséierung op lokalen Netzwierker.
Wéi och ëmmer, Chrony fehlt e puer vun de Funktiounen vum alen NTP, wéi Broadcast a Multicast Client / Server. ZousÀtzlech ënnerstëtzt klassesch NTP eng méi grouss Zuel vu Betribssystemer a Plattformen.
Fir d'Funktionalitéit vum Server an NTP-Ufroen un de Chronyd-Prozess auszeschalten, schreift just den Hafen 0 an der chrony.conf Datei. Dëst gëtt gemaach a FÀll wou et net néideg ass ZÀit fir NTP Clienten oder Peer z'erhalen. Zënter Versioun 2.0 ass den NTP-Serverport nëmmen op wann den Zougang erlaabt ass duerch eng erlaabt Direktiv oder e passende Kommando, oder en NTP Peer konfiguréiert ass, oder eng Emissiounsdirektiv benotzt gëtt.
De Programm besteet aus zwee Moduler.
- chronyd ass e Service deen am Hannergrond leeft. Et kritt Informatioun iwwer den Ănnerscheed tĂ«scht der Systemuhr an dem externen ZĂ€itserver a passt d'lokal ZĂ€it un. Et implementĂ©iert och den NTP Protokoll a kann als Client oder Server handelen.
- chronyc ass e Kommandozeil Utility fir Programm Iwwerwaachung a Kontroll. Benotzt fir verschidde Serviceparameter ze feinjustéieren, zum Beispill erlaabt Iech NTP-Server ze addéieren oder ze lÀschen wÀrend Chronyd weider leeft.
ZĂ«nter Versioun 7 vu RedHat Linux chrony als ZĂ€itsynchronisĂ©ierungsservice. De Package ass och verfĂŒgbar fir aner Linux Verdeelungen. DĂ©i lescht stabil Versioun ass 3.5, bereet sech op d'VerĂ«ffentlechung vu v4.0 vir.
(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]
WĂ©i Dir Ăren eegene Remote Chrony Server um Internet opstellt fir ZĂ€it op engem BĂŒronetz ze synchronisĂ©ieren. DrĂ«nner ass e Beispill fir e VPS opzestellen.
Beispill fir Chrony op RHEL / CentOS op VPS opzestellen
Loosst eis elo e bĂ«ssen ĂŒben an eisen eegenen NTP Server op engem VPS opsetzen. Et ass ganz einfach, wielt just de passenden Tarif op der RuVDS WebsĂ€it, kritt e fĂ€erdege Server a gitt eng Dosen einfache Kommandoen. Fir eis Zwecker ass dĂ«s Optioun ganz gĂ«eegent.

Loosst eis weidergoen fir de Service opzestellen an als éischt de Chrony Package z'installéieren.
[root@server ~]$ yum install chronyRHEL 8 / CentOS 8 benotzt en anere Package Manager.
[root@server ~]$ dnf install chronyNodeems Dir Chrony installéiert hutt, musst Dir de Service starten an aktivéieren.
[root@server ~]$ systemctl enable chrony --nowWann Dir wĂ«llt, kĂ«nnt Dir Ănnerungen op /etc/chrony.conf maachen, NPT-Server mat den nooste lokalen ersetzen fir d'ĂntwertzĂ€it ze reduzĂ©ieren.
# 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
Als nÀchst setzen mir d'Synchroniséierung vum NTP-Server mat Noden aus dem spezifizéierte Pool.
[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service
Et ass och néideg fir den NTP Hafen no baussen opzemaachen, soss blockéiert d'Firewall erakommen Verbindunge vu Clientnoden.
[root@server ~]$ firewall-cmd --add-service=ntp --permanent
[root@server ~]$ firewall-cmd --reload
Op der Client SĂ€it ass et genuch fir d'ZĂ€itzone richteg ze setzen.
[root@client ~]$ timedatectl set-timezone Europe/MoscowD' /etc/chrony.conf Datei spezifizéiert den IP oder den Hostnumm vun eisem VPS Server deen NTP Server chrony leeft.
server my.vps.serverAn endlech, Start ZÀit Synchroniséierung op de Client.
[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true
D'nÀchst Kéier wÀert ech Iech soen wéi eng Optiounen et gi fir ZÀit ouni Internet ze synchroniséieren.
Source: will.com
