Ako zabezpečiť, aby čas ako taký neklamal, ak máte milión veľkých a malých zariadení komunikujúcich cez TCP/IP? Koniec koncov, každý z nich má hodiny a čas musí byť pre všetky správny. Tento problém sa nedá obísť bez ntp.
Predstavme si na chvíľu, že v jednom segmente priemyselnej IT infraštruktúry sú problémy so synchronizáciou služieb v priebehu času. Okamžite začne klastrový zásobník podnikového softvéru zlyhávať, domény sa rozpadnú, mastery a pohotovostné uzly sa neúspešne snažia obnoviť status quo.
Je tiež možné, že sa útočník úmyselne pokúsi narušiť čas prostredníctvom útoku MiTM alebo DDOS. V takejto situácii sa môže stať čokoľvek:
- Platnosť hesiel používateľských účtov vyprší;
- platnosť certifikátov X.509 vyprší;
- Dvojfaktorová autentifikácia TOTP prestane fungovať;
- zálohy budú zastarané a systém ich vymaže;
- DNSSec sa preruší.
Je jasné, že každé IT oddelenie má záujem o spoľahlivú prevádzku služieb časovej synchronizácie a bolo by fajn, keby boli spoľahlivé a bezpečné v priemyselnej prevádzke.
Prerušte NTP za 25 minút
Sieťové protokoly – mileniáli majú jednu zvláštnosť, boli a už nie sú na nič dobré, ale nahradiť ich nie je také jednoduché, aj keď sa nahromadí kritické množstvo nadšencov a financií.
Hlavnou sťažnosťou na klasický NTP je nedostatok spoľahlivých mechanizmov na ochranu pred útokmi votrelcov. Na vyriešenie tohto problému boli urobené rôzne pokusy. Aby sme to dosiahli, najprv sme implementovali mechanizmus predzdieľaného kľúča (PSK) na výmenu symetrických kľúčov.
Žiaľ, tento spôsob sa nevyplatil z jednoduchého dôvodu – zle sa šupinkuje. Manuálna konfigurácia sa vyžaduje na strane klienta v závislosti od servera. To znamená, že ďalšieho klienta si len tak pridať nemôžete. Ak sa na serveri NTP niečo zmení, musia sa prekonfigurovať všetci klienti.
Potom prišli s AutoKey, no okamžite objavili množstvo vážnych nedostatkov v návrhu samotného algoritmu a museli ho opustiť. Ide o to, že seed obsahuje iba 32 bitov, je príliš malý a neobsahuje dostatočnú výpočtovú náročnosť na frontálny útok.
- Key ID - symetrický 32-bitový kľúč;
- MAC (overovací kód správy) - kontrolný súčet paketov NTP;
Autokey sa vypočíta nasledovne.
Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)Kde H() je kryptografická hašovacia funkcia.
Rovnaká funkcia sa používa na výpočet kontrolného súčtu paketov.
MAC=H(Autokey||NTP packet)Ukazuje sa, že celá integrita kontrol balíkov závisí od pravosti súborov cookie. Keď ich budete mať, môžete obnoviť autokey a potom sfalšovať MAC. NTP server však pri ich generovaní používa seed. V tom spočíva háčik.
Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))Funkcia MSB_32 odreže 5 najvýznamnejších bitov z výsledku výpočtu hash md32. Klientsky súbor cookie sa nezmení, pokiaľ parametre servera zostanú nezmenené. Potom môže útočník iba obnoviť počiatočné číslo a byť schopný nezávisle generovať súbory cookie.
Najprv sa musíte pripojiť k serveru NTP ako klient a prijímať súbory cookie. Potom útočník pomocou metódy hrubej sily obnoví počiatočné číslo podľa jednoduchého algoritmu.
Algoritmus na napadnutie výpočtu počiatočného čísla metódou hrubej sily.
for i=0:2^32 − 1 do
Ci=H(Server-IP||Client-IP||0||i)
if Ci=Cookie then
return i
end if
end forIP adresy sú známe, takže zostáva len vytvoriť 2^32 hash, kým sa vytvorený súbor cookie nezhoduje so súborom prijatým z NTP servera. Na bežnej domácej stanici s Intel Core i5 to bude trvať 25 minút.
NTS - nový Autokey
S takýmito bezpečnostnými dierami v Autokey sa nedalo vyrovnať a v roku 2012 sa to objavilo protokol. Aby skompromitovali názov, rozhodli sa zmeniť značku, takže Autokey v.2 dostal názov Network Time Security.
Protokol NTS je rozšírením zabezpečenia NTP a v súčasnosti podporuje iba režim unicast. Poskytuje silnú kryptografickú ochranu proti manipulácii s paketmi, zabraňuje snoopingu, dobre sa škáluje, je odolný voči stratám sieťových paketov a má za následok najmenšiu stratu presnosti spôsobenú počas zabezpečenia pripojenia.
Pripojenie NTS pozostáva z dvoch stupňov, ktoré používajú protokoly nižšej vrstvy. Zapnuté prvý V tejto fáze sa klient a server dohodnú na rôznych parametroch pripojenia a vymenia si súbory cookie obsahujúce kľúče so všetkými sprievodnými súbormi údajov. Zapnuté druhý V tejto fáze prebieha skutočná chránená relácia NTS medzi klientom a serverom NTP.

NTS pozostáva z dvoch protokolov nižšej vrstvy: Network Time Security Key Exchange (NTS-KE), ktorý iniciuje zabezpečené pripojenie cez TLS, a NTPv4, najnovšia inkarnácia protokolu NTP. Trochu viac o tom nižšie.
Prvá etapa - NTS KE
V tejto fáze klient NTP iniciuje reláciu TLS 1.2/1.3 cez samostatné TCP spojenie so serverom NTS KE. Počas tejto relácie sa stane nasledovné.
- Strany určujú parametre algoritmus pre druhú fázu.
- Strany definujú druhý protokol nižšej vrstvy, ale v súčasnosti je podporovaný iba NTPv4.
- Strany určujú IP adresu a port NTP servera.
- Server NTS KE vydáva cookies pod NTPv4.
- Strany extrahujú pár symetrických kľúčov (C2S a S2C) z materiálu cookie.
Tento prístup má veľkú výhodu v tom, že celé bremeno prenosu tajných informácií týkajúcich sa parametrov pripojenia padá na overený a spoľahlivý protokol TLS. To eliminuje potrebu znovu vynájsť svoje vlastné koleso na bezpečné podanie ruky NTP.
Druhý stupeň - NTP pod ochranou NTS
V druhom kroku klient bezpečne synchronizuje čas s NTP serverom. Na tento účel prenáša štyri špeciálne rozšírenia (polia rozšírenia) v štruktúre paketov NTPv4.
- Rozšírenie Unique Identifier obsahuje náhodné nonce, aby sa zabránilo opakovaným útokom.
- NTS Cookie Extension obsahuje jeden zo súborov cookie NTP, ktoré má klient k dispozícii. Keďže symetrické kľúče AAED C2S a S2C má iba klient, server NTP ich musí extrahovať z materiálu cookie.
- NTS Cookie Placeholder Extension je spôsob, ako môže klient požiadať server o ďalšie súbory cookie. Toto rozšírenie je potrebné na zabezpečenie toho, aby odpoveď servera NTP nebola oveľa dlhšia ako požiadavka. To pomáha predchádzať útokom zosilnenia.
- Rozšírenie polí NTS Authenticator a Encrypted Extension obsahuje šifru AAED s kľúčom C2S, hlavičkou NTP, časovými značkami a vyššie uvedeným EF ako sprievodnými údajmi. Bez tohto rozšírenia je možné sfalšovať časové pečiatky.

Po prijatí požiadavky od klienta server overí pravosť paketu NTP. Aby to urobil, musí dešifrovať súbory cookie, extrahovať algoritmus AAED a kľúče. Po úspešnej kontrole platnosti paketu NTP server odpovie klientovi v nasledujúcom formáte.
- Unique Identifier Extension je zrkadlová kópia požiadavky klienta, opatrenie proti opakovaným útokom.
- NTS Cookie Extension ďalšie súbory cookie na pokračovanie relácie.
- Rozšírenie NTS Authenticator a Encrypted Extension Fields obsahuje šifru AEAD s kľúčom S2C.
Druhé podanie ruky sa môže opakovať mnohokrát, čím sa obíde prvý krok, pretože každá požiadavka a odpoveď poskytuje klientovi ďalšie súbory cookie. To má výhodu v tom, že operácie TLS pri výpočte a prenose údajov PKI, ktoré sú relatívne náročné na zdroje, sú rozdelené počtom opakovaných požiadaviek. To je obzvlášť výhodné pre špecializované časomerače FPGA, keď je možné všetky hlavné funkcie zbaliť do niekoľkých funkcií z oblasti symetrickej kryptografie, preniesť celý zásobník TLS na iné zariadenie.
NTPSec
Čo je špeciálne na NTP? Napriek tomu, že sa autor projektu, Dave Mills, snažil zdokumentovať svoj kód čo najlepšie, ide o vzácneho programátora, ktorý bude schopný porozumieť zložitosti algoritmov synchronizácie času, ktoré sú staré 35 rokov. Časť kódu bola napísaná pred érou POSIX a Unix API bolo vtedy veľmi odlišné od toho, čo sa používa dnes. Okrem toho je potrebná znalosť štatistík na vyčistenie signálu od rušenia na zašumených vedeniach.
NTS nebol prvý pokus opraviť NTP. Keď sa útočníci naučili využívať zraniteľnosti NTP na zosilnenie DDoS útokov, bolo jasné, že sú potrebné radikálne zmeny. A zatiaľ čo sa pripravovali a dokončovali návrhy NTS, Americká národná vedecká nadácia koncom roka 2014 urýchlene pridelila grant na modernizáciu NTP.
Na čele pracovnej skupiny nestál len tak hocikto, ale - jeden zo zakladateľov a pilierov komunity Open Source a autor knihy . Prvá vec, o ktorú sa Eric a jeho priatelia pokúsili, bolo presunúť kód NTP z platformy BitKeeper do git, ale nefungovalo to tak. Vedúci projektu Harlan Stenn bol proti tomuto rozhodnutiu a rokovania sa zastavili. Potom bolo rozhodnuté rozvetviť kód projektu a zrodil sa NTPSec.
Solídne skúsenosti vrátane práce na GPSD, matematického zázemia a magickej zručnosti čítania starovekého kódu – Eric Raymond bol presne ten hacker, ktorý dokázal takýto projekt zrealizovať. Tím našiel špecialistu na migráciu kódu a len za 10 týždňov NTP na GitLab. Práca bola v plnom prúde.
Tím Erica Raymonda sa úlohy zhostil rovnakým spôsobom ako Auguste Rodin s blokom kameňa. Odstránením 175 KLOC starého kódu dokázali výrazne zmenšiť plochu útoku zatvorením mnohých bezpečnostných dier.
Tu je neúplný zoznam tých, ktoré sú súčasťou distribúcie:
- Nezdokumentované, zastarané, zastarané alebo pokazené refclock.
- Nepoužitá knižnica ICS.
- libots/autogén.
- Starý kód pre Windows.
- ntpdc.
- Autokey.
- Kód ntpq C bol prepísaný v Pythone.
- Kód C sntp/ntpdig bol prepísaný v Pythone.
Okrem čistenia kódu mal projekt aj ďalšie úlohy. Tu je čiastočný zoznam úspechov:
- Ochrana kódu proti pretečeniu vyrovnávacej pamäte bola výrazne vylepšená. Aby sa zabránilo pretečeniu vyrovnávacej pamäte, všetky nebezpečné funkcie reťazcov (strcpy/strcat/strtok/sprintf/vsprintf/gets) boli nahradené bezpečnými verziami, ktoré implementujú limity veľkosti vyrovnávacej pamäte.
- Pridaná podpora NTS.
- Desaťnásobne lepšia presnosť časového kroku prepojením fyzického hardvéru. Je to spôsobené tým, že moderné počítačové hodiny sa stali oveľa presnejšie ako tie, keď sa zrodil NTP. Najväčší úžitok z toho mali GPSDO a rádiá na vyhradený čas.
- Počet programovacích jazykov sa znížil na dva. Namiesto skriptov Perl, awk a dokonca aj S je to teraz všetko Python. Vďaka tomu existuje viac príležitostí na opätovné použitie kódu.
- Namiesto rezancov skriptov autotools začal projekt používať systém zostavovania softvéru .
- Aktualizovaná a reorganizovaná projektová dokumentácia. Z rozporuplnej a miestami archaickej zbierky listín vytvorili celkom slušnú dokumentáciu. Každý prepínač príkazového riadka a každá konfiguračná entita má teraz jednu verziu pravdy. Navyše, manuálové stránky a webová dokumentácia sú teraz vytvorené z rovnakých základných súborov.
NTPSec je k dispozícii pre množstvo distribúcií Linuxu. Momentálne je najnovšia stabilná verzia 1.1.8, pre Gentoo Linux je to predposledná.
(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]
Chrony
Uskutočnil sa ďalší pokus nahradiť staré NTP bezpečnejšou alternatívou. Chrony, na rozdiel od NTPSec, je napísaný od základov a je navrhnutý tak, aby spoľahlivo fungoval v širokom rozsahu podmienok, vrátane nestabilných sieťových pripojení, čiastočnej dostupnosti alebo preťaženia siete a teplotných zmien. Okrem toho má chrony ďalšie výhody:
- chrony dokáže synchronizovať systémové hodiny rýchlejšie s väčšou presnosťou;
- chrony je menšia, spotrebováva menej pamäte a pristupuje k CPU iba v prípade potreby. To je veľké plus pre úsporu zdrojov a energie;
- chrony podporuje hardvérové časové pečiatky v systéme Linux, čo umožňuje mimoriadne presnú synchronizáciu v miestnych sieťach.
Chrony však postrádajú niektoré funkcie starého NTP, ako je broadcast a multicast klient/server. Klasické NTP navyše podporuje väčšie množstvo operačných systémov a platforiem.
Ak chcete deaktivovať funkčnosť servera a požiadaviek NTP na proces chronyd, stačí napísať port 0 do súboru chrony.conf. Robí sa to v prípadoch, keď nie je potrebné udržiavať čas pre klientov NTP alebo rovesníkov. Od verzie 2.0 je port servera NTP otvorený iba vtedy, keď je prístup povolený direktívou allow alebo príslušným príkazom, alebo ak je nakonfigurovaný partner NTP alebo sa používa direktíva vysielania.
Program pozostáva z dvoch modulov.
- chronyd je služba, ktorá beží na pozadí. Prijíma informácie o rozdiele medzi systémovými hodinami a externým časovým serverom a upravuje miestny čas. Implementuje tiež protokol NTP a môže fungovať ako klient alebo server.
- chronyc je nástroj príkazového riadka na monitorovanie a ovládanie programu. Používa sa na jemné doladenie rôznych parametrov služieb, napríklad vám umožňuje pridávať alebo odstraňovať servery NTP, zatiaľ čo chronyd beží.
Od verzie 7 RedHat Linuxu chrony ako službu synchronizácie času. Balík je dostupný aj pre iné distribúcie Linuxu. Najnovšia stabilná verzia je 3.5 a pripravuje sa na vydanie 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]
Ako nastaviť svoj vlastný vzdialený chrony server na internete na synchronizáciu času v kancelárskej sieti. Nižšie je uvedený príklad nastavenia VPS.
Príklad nastavenia Chrony na RHEL / CentOS na VPS
Poďme si teraz trochu zacvičiť a nastaviť si vlastný NTP server na VPS. Je to veľmi jednoduché, stačí si vybrať vhodnú tarifu na webovej stránke RuVDS, získať hotový server a zadať tucet jednoduchých príkazov. Pre naše účely je táto možnosť celkom vhodná.

Prejdime k nastaveniu služby a najprv si nainštalujte balík chrony.
[root@server ~]$ yum install chronyRHEL 8 / CentOS 8 používajú iného správcu balíkov.
[root@server ~]$ dnf install chronyPo inštalácii chrony je potrebné spustiť a aktivovať službu.
[root@server ~]$ systemctl enable chrony --nowAk chcete, môžete vykonať zmeny v súbore /etc/chrony.conf a nahradiť servery NPT najbližšími lokálnymi, aby ste skrátili čas odozvy.
# 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
Ďalej nastavíme synchronizáciu NTP servera s uzlami zo zadanej oblasti.
[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service
Je tiež potrebné otvoriť port NTP smerom von, inak bude firewall blokovať prichádzajúce spojenia z klientskych uzlov.
[root@server ~]$ firewall-cmd --add-service=ntp --permanent
[root@server ~]$ firewall-cmd --reload
Na strane klienta stačí správne nastaviť časové pásmo.
[root@client ~]$ timedatectl set-timezone Europe/MoscowSúbor /etc/chrony.conf špecifikuje IP alebo názov hostiteľa nášho VPS servera, na ktorom beží NTP server chrony.
server my.vps.serverA nakoniec spustenie synchronizácie času na klientovi.
[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true
Nabudúce vám poviem, aké sú možnosti synchronizácie času bez internetu.
Zdroj: hab.com
