Kako je vremenska sinhronizacija postala sigurna

Kako je vremenska sinhronizacija postala sigurna
Kako osigurati da vrijeme samo po sebi ne laže ako imate milion velikih i malih uređaja koji komuniciraju putem TCP/IP-a? Uostalom, svaki od njih ima sat, a vrijeme mora biti tačno za sve njih. Ovaj problem se ne može zaobići bez ntp-a.

Zamislimo na trenutak da u jednom segmentu industrijske IT infrastrukture postoje poteškoće sa sinhronizacijom usluga tokom vremena. Odmah klasterski stog Enterprise softvera počinje da propada, domeni se raspadaju, master i standby čvorovi bezuspješno nastoje vratiti status quo.

Također je moguće da napadač namjerno pokušava poremetiti vrijeme putem MiTM ili DDOS napada. U takvoj situaciji može se desiti svašta:

  • Lozinke korisničkih naloga će isteći;
  • X.509 certifikati će isteći;
  • TOTP dvofaktorska autentifikacija više neće raditi;
  • sigurnosne kopije će postati zastarjele i sistem će ih izbrisati;
  • DNSSec će se prekinuti.

Jasno je da je svako IT odjeljenje zainteresirano za pouzdan rad servisa vremenske sinhronizacije i bilo bi lijepo da su pouzdani i sigurni u industrijskom radu.

Prekinite NTP za 25 minuta

Mrežni protokoli - milenijalci imaju jednu posebnost, oni su bili zastarjelo i više nisu dobre ni za šta, ali njihova zamjena nije tako laka čak ni kada se nakupi kritična masa entuzijasta i sredstava.

Glavna zamjerka klasičnom NTP-u je nedostatak pouzdanih mehanizama za zaštitu od napada uljeza. Učinjeni su različiti pokušaji da se ovaj problem riješi. Da bismo to postigli, prvo smo implementirali mehanizam pre-dijeljenog ključa (PSK) za razmjenu simetričnih ključeva.

Nažalost, ova metoda se nije isplatila iz jednostavnog razloga - nije dobro skalirana. Potrebna je ručna konfiguracija na strani klijenta u zavisnosti od servera. To znači da jednostavno ne možete dodati drugog klijenta tek tako. Ako se nešto promijeni na NTP serveru, svi klijenti moraju biti rekonfigurisani.

Zatim su smislili AutoKey, ali su odmah otkrili brojne ozbiljne propuste u dizajnu samog algoritma i morali su ga napustiti. Stvar je u tome što seed sadrži samo 32 bita, premalen je i ne sadrži dovoljno računske složenosti za frontalni napad.

  • ID ključa - simetrični 32-bitni ključ;
  • MAC (kod za autentifikaciju poruke) - kontrolna suma NTP paketa;

Autokey se izračunava na sljedeći način.

Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)

Gdje je H() kriptografska hash funkcija.

Ista funkcija se koristi za izračunavanje kontrolne sume paketa.

MAC=H(Autokey||NTP packet)

Ispostavilo se da cijeli integritet provjera paketa počiva na autentičnosti kolačića. Kada ih dobijete, možete vratiti autoključ, a zatim lažirati MAC. Međutim, NTP server koristi seed kada ih generiše. Tu leži kvaka.

Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))

Funkcija MSB_32 odsijeca 5 najznačajnija bita iz rezultata izračunavanja md32 heša. Kolačić klijenta se ne mijenja sve dok parametri servera ostaju nepromijenjeni. Tada napadač može vratiti samo početni broj i moći samostalno generirati kolačiće.

Prvo se morate povezati na NTP server kao klijent i primiti kolačiće. Nakon toga, koristeći metodu grube sile, napadač vraća početni broj prema jednostavnom algoritmu.

Algoritam za napad na izračunavanje početnog broja metodom brute-force.

   for i=0:2^32 − 1 do
        Ci=H(Server-IP||Client-IP||0||i)
        if Ci=Cookie then
            return i
        end if 
    end for

IP adrese su poznate, tako da ostaje samo da kreirate 2^32 heša dok se kreirani kolačić ne poklopi sa onim primljenim od NTP servera. Na običnoj kućnoj stanici sa Intel Core i5, ovo će trajati 25 minuta.

NTS - novi Autokey

Bilo je nemoguće podnijeti takve sigurnosne rupe u Autokeyu, a pojavile su se 2012. godine nova verzija protokol. Kako bi ugrozili ime, odlučili su se za rebrendiranje, pa je Autokey v.2 nazvan Network Time Security.

NTS protokol je proširenje NTP sigurnosti i trenutno podržava samo jednostruki način rada. Pruža snažnu kriptografsku zaštitu od manipulacije paketima, sprječava njuškanje, dobro se mjeri, otporan je na gubitak mrežnih paketa i rezultira najmanjim gubitkom preciznosti tokom sigurnosti veze.

NTS veza se sastoji od dvije faze koje koriste protokole nižeg sloja. On prvi U ovoj fazi, klijent i server se dogovaraju o različitim parametrima povezivanja i razmjenjuju kolačiće koji sadrže ključeve sa svim pratećim skupom podataka. On drugo U ovoj fazi, stvarna zaštićena NTS sesija se odvija između klijenta i NTP servera.

Kako je vremenska sinhronizacija postala sigurna

NTS se sastoji od dva protokola nižeg sloja: Network Time Security Key Exchange (NTS-KE), koji pokreće sigurnu vezu preko TLS-a, i NTPv4, najnovije inkarnacije NTP protokola. Nešto više o ovome u nastavku.

Prva faza - NTS KE

U ovoj fazi, NTP klijent pokreće TLS 1.2/1.3 sesiju preko zasebne TCP veze sa NTS KE serverom. Tokom ove sesije dešava se sljedeće.

  • Stranke određuju parametre AEAD algoritam za drugu fazu.
  • Strane definišu drugi protokol nižeg sloja, ali trenutno je podržan samo NTPv4.
  • Strane određuju IP adresu i port NTP servera.
  • NTS KE server izdaje kolačiće pod NTPv4.
  • Strane izvlače par simetričnih ključeva (C2S i S2C) iz materijala kolačića.

Ovaj pristup ima veliku prednost u tome što cijeli teret prenošenja tajnih informacija o parametrima veze pada na dokazani i pouzdani TLS protokol. Ovo eliminiše potrebu da ponovo izmislite svoj točak za siguran NTP rukovanje.

Druga faza - NTP pod NTS zaštitom

U drugom koraku, klijent bezbedno sinhronizuje vreme sa NTP serverom. U tu svrhu prenosi četiri posebna proširenja (polja ekstenzije) u strukturi NTPv4 paketa.

  • Ekstenzija jedinstvenog identifikatora sadrži nasumični jednokratni unos za sprečavanje napada ponavljanja.
  • NTS Cookie Extension sadrži jedan od NTP kolačića dostupnih klijentu. Pošto samo klijent ima simetrične AAED C2S i S2C ključeve, NTP server ih mora izdvojiti iz materijala kolačića.
  • NTS Cookie Placeholder Extension je način da klijent zatraži dodatne kolačiće od servera. Ovo proširenje je neophodno kako bi se osiguralo da odgovor NTP servera nije mnogo duži od zahtjeva. Ovo pomaže u sprječavanju napada pojačanja.
  • NTS Authenticator i Encrypted Extension Fields Extension sadrži AAED šifru sa C2S ključem, NTP zaglavljem, vremenskim oznakama i gornjim EF-om kao pratećim podacima. Bez ovog proširenja moguće je lažirati vremenske oznake.

Kako je vremenska sinhronizacija postala sigurna

Po prijemu zahtjeva od klijenta, server provjerava autentičnost NTP paketa. Da bi to učinio, mora dešifrirati kolačiće, izdvojiti AAED algoritam i ključeve. Nakon uspješne provjere ispravnosti NTP paketa, server odgovara klijentu u sljedećem formatu.

  • Unique Identifier Extension je zrcalna kopija klijentskog zahtjeva, mjera protiv napada ponovne reprodukcije.
  • NTS Cookie Extension više kolačića za nastavak sesije.
  • NTS Authenticator i Encrypted Extension Fields Extension sadrži AEAD šifru sa S2C ključem.

Drugo rukovanje se može ponoviti mnogo puta, zaobilazeći prvi korak, jer svaki zahtjev i odgovor klijentu daju dodatne kolačiće. Ovo ima prednost u tome što su relativno intenzivne TLS operacije računanja i prenosa PKI podataka podijeljene brojem ponovljenih zahtjeva. Ovo je posebno pogodno za specijalizirane FPGA mjeritelje vremena, kada se sva glavna funkcionalnost može upakovati u nekoliko funkcija iz područja simetrične kriptografije, prenoseći cijeli TLS stek na drugi uređaj.

NTPSec

Šta je posebno kod NTP-a? Unatoč činjenici da je autor projekta, Dave Mills, pokušao što bolje dokumentirati svoj kod, rijedak je programer koji će moći razumjeti zamršenost algoritama vremenske sinhronizacije koji su stari 35 godina. Neki od koda su napisani prije POSIX ere, a Unix API je tada bio veoma različit od onoga što se danas koristi. Osim toga, potrebno je poznavanje statistike da bi se signal očistio od smetnji na šumnim linijama.

NTS nije bio prvi pokušaj da se popravi NTP. Kada su napadači naučili da iskoriste ranjivosti NTP-a da pojačaju DDoS napade, postalo je jasno da su potrebne radikalne promjene. I dok su se nacrti NTS-a pripremali i finalizirali, Nacionalna naučna fondacija SAD-a je krajem 2014. hitno dodijelila grant za modernizaciju NTP-a.

Radnu grupu je vodio ne bilo ko, već Eric Stephen Raymond - jedan od osnivača i stubova zajednice otvorenog koda i autor knjige Katedrala i bazar. Prva stvar koju su Eric i njegovi prijatelji pokušali da urade je da premjeste NTP kod sa BitKeeper platforme na git, ali nije išlo na taj način. Vođa projekta Harlan Stenn bio je protiv ove odluke i pregovori su zaustavljeni. Tada je odlučeno da se projektni kod račva i NTPSec je rođen.

Solidno iskustvo, uključujući rad na GPSD-u, matematičku pozadinu i magičnu vještinu čitanja drevnog koda - Eric Raymond je bio upravo haker koji je mogao izvesti takav projekat. Tim je pronašao stručnjaka za migraciju koda i za samo 10 sedmica NTP namirenona GitLabu. Radovi su bili u punom jeku.

Tim Erica Raymonda preuzeo je zadatak na isti način na koji je Auguste Rodin uradio s kamenim blokom. Uklanjanjem 175 KLOC starog koda, uspjeli su značajno smanjiti površinu napada zatvaranjem mnogih sigurnosnih rupa.

Evo nepotpune liste onih koji su uključeni u distribuciju:

  • Nedokumentovan, zastareo, zastareo ili pokvaren refclock.
  • Nekorištena ICS biblioteka.
  • libopts/autogen.
  • Stari kod za Windows.
  • ntpdc.
  • Autokey.
  • ntpq C kod je prepisan u Python-u.
  • Sntp/ntpdig C kod je prepisan u Python-u.

Osim čišćenja koda, projekat je imao i druge zadatke. Evo djelimične liste dostignuća:

  • Zaštita koda od prelivanja bafera je značajno poboljšana. Da bi se spriječilo prekoračenje međuspremnika, sve nesigurne string funkcije (strcpy/strcat/strtok/sprintf/vsprintf/gets) zamijenjene su sigurnim verzijama koje implementiraju ograničenja veličine bafera.
  • Dodata podrška za NTS.
  • Povećana preciznost vremenskog koraka deset puta povezivanjem fizičkog hardvera. To je zbog činjenice da su savremeni kompjuterski satovi postali mnogo tačniji od onih kada je NTP rođen. Najveće koristi od toga imali su GPSDO i namjenski radio uređaji.
  • Broj programskih jezika smanjen je na dva. Umjesto Perl, awk, pa čak i S skripti, sada je sve Python. Zbog toga postoji više mogućnosti za ponovnu upotrebu koda.
  • Umjesto rezanaca autotools skripti, projekat je počeo da koristi sistem za izradu softvera waf.
  • Ažurirana i reorganizovana projektna dokumentacija. Iz kontradiktorne, a ponekad i arhaične zbirke dokumenata, stvorili su prilično prohodnu dokumentaciju. Svaki prekidač komandne linije i svaki konfiguracioni entitet sada imaju jednu verziju istine. Osim toga, stranice priručnika i web dokumentacija sada se kreiraju iz istih osnovnih datoteka.

NTPSec je dostupan za brojne Linux distribucije. Trenutno je najnovija stabilna verzija 1.1.8, za Gentoo Linux pretposljednja.

(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

Postojao je još jedan pokušaj da se stari NTP zamijeni sigurnijom alternativom. Chrony, za razliku od NTPSec-a, napisan je iz temelja i dizajniran je da pouzdano radi u širokom rasponu uslova, uključujući nestabilne mrežne veze, djelomičnu dostupnost ili zagušenje mreže i promjene temperature. Osim toga, chrony ima i druge prednosti:

  • chrony može sinhronizovati sistemski sat brže sa većom preciznošću;
  • chrony je manji, troši manje memorije i pristupa CPU-u samo kada je to potrebno. Ovo je veliki plus za uštedu resursa i energije;
  • chrony podržava hardverske vremenske oznake na Linuxu, omogućavajući izuzetno preciznu sinhronizaciju na lokalnim mrežama.

Međutim, chronyju nedostaju neke od karakteristika starog NTP-a, kao što su emitiranje i multicast klijent/server. Pored toga, klasični NTP podržava veći broj operativnih sistema i platformi.

Da biste onemogućili funkcionalnost servera i NTP zahtjeve za chronyd proces, samo upišite port 0 u datoteku chrony.conf. Ovo se radi u slučajevima kada nema potrebe za održavanjem vremena za NTP klijente ili kolege. Od verzije 2.0, port NTP servera je otvoren samo kada je pristup dozvoljen direktivom dozvoli ili odgovarajućom komandom, ili je konfigurisan NTP peer ili se koristi direktiva emitovanja.

Program se sastoji od dva modula.

  • chronyd je usluga koja radi u pozadini. Prima informacije o razlici između sistemskog sata i vanjskog poslužitelja vremena i prilagođava lokalno vrijeme. Također implementira NTP protokol i može djelovati kao klijent ili server.
  • chronyc je uslužni program komandne linije za praćenje i kontrolu programa. Koristi se za fino podešavanje različitih parametara usluge, na primjer omogućavajući vam da dodate ili uklonite NTP servere dok chronyd nastavlja da radi.

Od verzije 7 RedHat Linuxa koristi chrony kao usluga sinhronizacije vremena. Paket je dostupan i za druge Linux distribucije. Najnovija stabilna verzija je 3.5, koja se priprema za izdavanje 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]

Kako postaviti vlastiti udaljeni chrony server na Internetu za sinhronizaciju vremena na kancelarijskoj mreži. Ispod je primjer postavljanja VPS-a.

Primjer postavljanja Chrony na RHEL / CentOS na VPS

Hajdemo sada malo vježbati i postaviti vlastiti NTP server na VPS. Vrlo je jednostavno, samo odaberite odgovarajuću tarifu na web stranici RuVDS, nabavite gotov server i unesite desetak jednostavnih naredbi. Za naše potrebe ova opcija je sasvim prikladna.

Kako je vremenska sinhronizacija postala sigurna

Pređimo na podešavanje servisa i prvo instaliramo chrony paket.

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 koriste drugi menadžer paketa.

[root@server ~]$ dnf install chrony

Nakon instaliranja chrony-a potrebno je da pokrenete i aktivirate uslugu.

[root@server ~]$ systemctl enable chrony --now

Ako želite, možete napraviti promjene u /etc/chrony.conf, zamjenjujući NPT servere najbližim lokalnim kako biste smanjili vrijeme odgovora.

# 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

Zatim postavljamo sinhronizaciju NTP servera sa čvorovima iz navedenog bazena.

[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service

Također je potrebno otvoriti NTP port prema van, inače će firewall blokirati dolazne veze sa klijentskih čvorova.

[root@server ~]$ firewall-cmd --add-service=ntp --permanent 
[root@server ~]$ firewall-cmd --reload

Na strani klijenta dovoljno je ispravno podesiti vremensku zonu.

[root@client ~]$ timedatectl set-timezone Europe/Moscow

Datoteka /etc/chrony.conf specificira IP ili ime hosta našeg VPS servera koji koristi NTP server chrony.

server my.vps.server

I konačno, početak sinkronizacije vremena na klijentu.

[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true

Sljedeći put ću vam reći koje opcije postoje za usklađivanje vremena bez interneta.

Kako je vremenska sinhronizacija postala sigurna

Kako je vremenska sinhronizacija postala sigurna

izvor: www.habr.com

Dodajte komentar