Carane sinkronisasi wektu dadi aman

Carane sinkronisasi wektu dadi aman
Carane nggawe manawa wektu saben se ora ngapusi yen sampeyan duwe yuta gedhe lan cilik piranti komunikasi liwat TCP / IP? Sawise kabeh, saben wong duwe jam, lan wektune kudu bener kanggo kabeh. Masalah iki ora bisa diatasi tanpa ntp.

Ayo mbayangno sedhela yen ing salah sawijining segmen infrastruktur IT industri ana kangelan karo layanan sinkronisasi liwat wektu. Sanalika tumpukan kluster piranti lunak Enterprise wiwit gagal, domain disintegrasi, master lan simpul Standby ora kasil ngupaya mulihake status quo.

Bisa uga panyerang kanthi sengaja nyoba ngganggu wektu liwat serangan MiTM utawa DDOS. Ing kahanan kaya mengkono, apa wae bisa kedadeyan:

  • Tembung sandhi akun pangguna bakal kadaluwarsa;
  • Sertifikat X.509 bakal kadaluwarsa;
  • Otentikasi rong faktor TOTP bakal mandheg;
  • serep bakal dadi outdated lan sistem bakal mbusak mau;
  • DNSSec bakal rusak.

Cetha sing saben departemen IT kasengsem ing operasi dipercaya layanan sinkronisasi wektu, lan iku bakal becik yen padha dipercaya lan aman ing operasi industri.

Break NTP ing 25 menit

Protokol jaringan - millennials duwe siji keanehan, padha wis kuna lan ora ana maneh apik kanggo apa-apa, nanging ngganti ora supaya gampang sanajan massa kritis pecandu lan pendanaan wis nambah.

Keluhan utama babagan NTP klasik yaiku kekurangan mekanisme sing dipercaya kanggo nglindhungi serangan saka penyusup. Macem-macem upaya wis ditindakake kanggo ngatasi masalah iki. Kanggo nggayuh iki, pisanan kita ngleksanakake mekanisme pre-shared key (PSK) kanggo ijol-ijolan kunci simetris.

Sayange, cara iki ora mbayar kanthi alasan sing gampang - ora ukurane apik. Konfigurasi manual dibutuhake ing sisih klien gumantung saka server. Iki tegese sampeyan ora bisa nambah klien liyane kaya ngono. Yen ana owah-owahan ing server NTP, kabeh klien kudu dikonfigurasi maneh.

Banjur padha teka karo AutoKey, nanging langsung nemokake sawetara kerentanan serius ing desain algoritma kasebut lan kudu ditinggal. Bab kasebut yaiku wiji mung ngemot 32-bit, cilik banget lan ora ngemot kerumitan komputasi sing cukup kanggo serangan frontal.

  • ID kunci - kunci simetris 32-bit;
  • MAC (kode otentikasi pesen) - checksum paket NTP;

Autokey diitung kaya ing ngisor iki.

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

Ngendi H () minangka fungsi hash kriptografi.

Fungsi sing padha digunakake kanggo ngetung checksum saka paket.

MAC=H(Autokey||NTP packet)

Pranyata kabeh integritas mriksa paket gumantung ing keaslian cookie. Sawise sampeyan duwe, sampeyan bisa mulihake autokey lan banjur spoof MAC. Nanging, server NTP nggunakake wiji nalika ngasilake. Iki ngendi nyekel dumunung.

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

Fungsi MSB_32 ngethok 5 bit paling penting saka asil pitungan hash md32. Cookie klien ora owah anggere paramèter server tetep ora owah. Banjur panyerang mung bisa mulihake nomer dhisikan lan bisa ngasilake cookie kanthi mandiri.

Pisanan, sampeyan kudu nyambung menyang server NTP minangka klien lan nampa cookie. Sawise iki, nggunakake metode brute force, panyerang mulihake nomer dhisikan sawise algoritma prasaja.

Algoritma kanggo nyerang pitungan nomer awal nggunakake metode 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

Alamat IP kasebut dikenal, dadi sing isih ana yaiku nggawe 2^32 hash nganti cookie sing digawe cocog karo sing ditampa saka server NTP. Ing stasiun ngarep biasa karo Intel Core i5, iki bakal njupuk 25 menit.

NTS - Autokey anyar

Iku mokal kanggo sijine munggah karo bolongan keamanan kuwi ing Autokey, lan ing 2012 katon versi anyar protokol. Kanggo kompromi jeneng, padha mutusaké kanggo rebrand, supaya Autokey v.2 dijuluki Network Time Security.

Protokol NTS minangka tambahan saka keamanan NTP lan saiki mung ndhukung mode unicast. Nyedhiyakake proteksi kriptografi sing kuwat marang manipulasi paket, nyegah snooping, timbangan kanthi apik, tahan kanggo mundhut paket jaringan, lan nyebabake kerugian presisi paling sithik sajrone keamanan sambungan.

Sambungan NTS kasusun saka rong tahapan sing nggunakake protokol lapisan ngisor. On sing pisanan Ing tahap iki, klien lan server setuju karo macem-macem parameter sambungan lan ijol-ijolan cookie sing ngemot kunci karo kabeh set data sing ana. On kapindho Ing tahap iki, sesi NTS sing dilindhungi nyata dumadi ing antarane klien lan server NTP.

Carane sinkronisasi wektu dadi aman

NTS kasusun saka rong protokol lapisan ngisor: Network Time Security Key Exchange (NTS-KE), sing miwiti sambungan aman liwat TLS, lan NTPv4, inkarnasi paling anyar saka protokol NTP. A sethitik liyane babagan iki ing ngisor iki.

Tahap pisanan - NTS KE

Ing tahap iki, klien NTP miwiti sesi TLS 1.2/1.3 liwat sambungan TCP sing kapisah karo server NTS KE. Sajrone sesi iki kedadeyan ing ngisor iki.

  • Para pihak nemtokake paramèter AeAD algoritma kanggo tahap kapindho.
  • Pihak kasebut nemtokake protokol lapisan ngisor kapindho, nanging saiki mung NTPv4 sing didhukung.
  • Pihak kasebut nemtokake alamat IP lan port server NTP.
  • Server NTS KE ngetokake cookie ing NTPv4.
  • Pihak kasebut ngekstrak sepasang kunci simetris (C2S lan S2C) saka bahan cookie.

Pendekatan iki nduweni kauntungan gedhe yen kabeh beban ngirim informasi rahasia babagan paramèter sambungan ana ing protokol TLS sing wis bukti lan dipercaya. Iki ngilangake perlu kanggo reinvent dhewe wheel kanggo salaman NTP aman.

Tahap kapindho - NTP ing proteksi NTS

Ing langkah kapindho, klien nyinkronake wektu kanthi aman karo server NTP. Kanggo tujuan iki, ngirimake papat ekstensi khusus (kolom ekstensi) ing struktur paket NTPv4.

  • Ekstensi Identifier Unik ngemot nonce acak kanggo nyegah serangan muter maneh.
  • NTS Cookie Extension ngemot salah sawijining cookie NTP sing kasedhiya kanggo klien. Amarga mung klien sing nduweni kunci simetris AAED C2S lan S2C, server NTP kudu ngekstrak saka materi cookie.
  • NTS Cookie Placeholder Extension minangka cara kanggo klien njaluk cookie tambahan saka server. Ekstensi iki perlu kanggo mesthekake yen respon server NTP ora luwih suwe tinimbang panjaluk kasebut. Iki mbantu nyegah serangan amplifikasi.
  • NTS Authenticator and Encrypted Extension Fields Extension ngemot cipher AAED kanthi kunci C2S, header NTP, cap wektu, lan EF ing ndhuwur minangka data sing ngiringi. Tanpa extension iki bisa spoof cap wektu.

Carane sinkronisasi wektu dadi aman

Sawise nampa panjalukan saka klien, server verifikasi keaslian paket NTP. Kanggo nindakake iki, dheweke kudu dekripsi cookie, ekstrak algoritma lan kunci AAED. Sawise kasil mriksa paket NTP kanggo validitas, server nanggapi klien ing format ing ngisor iki.

  • Ekstensi Identifier Unik minangka salinan pangilon saka panyuwunan klien, ukuran nglawan serangan muter maneh.
  • NTS Cookie Extension liyane cookie kanggo nerusake sesi.
  • NTS Authenticator and Encrypted Extension Fields Extension ngemot cipher AEAD kanthi kunci S2C.

Jabat tangan kapindho bisa diulang kaping pirang-pirang, ngliwati langkah pisanan, amarga saben panyuwunan lan respon menehi cookie tambahan kanggo klien. Iki nduweni kaluwihan yen operasi TLS sing relatif intensif sumber daya komputasi lan ngirim data PKI dibagi karo jumlah panjalukan sing bola-bali. Iki luwih trep kanggo timekeepers FPGA khusus, nalika kabeh fungsi utama bisa dikemas dadi sawetara fungsi saka bidang kriptografi simetris, nransfer kabeh tumpukan TLS menyang piranti liyane.

NTPSec

Apa khusus babagan NTP? Senadyan kasunyatan manawa penulis proyek kasebut, Dave Mills, nyoba ndokumentasikake kode kasebut kanthi paling apik, iku programmer langka sing bakal bisa ngerti kerumitan algoritma sinkronisasi wektu sing umure 35 taun. Sawetara kode kasebut ditulis sadurunge jaman POSIX, lan Unix API banjur beda banget karo sing digunakake saiki. Kajaba iku, kawruh statistik dibutuhake kanggo mbusak sinyal saka gangguan ing garis rame.

NTS dudu upaya pertama kanggo ndandani NTP. Sawise panyerang sinau kanggo ngeksploitasi kerentanan NTP kanggo nggedhekake serangan DDoS, dadi jelas yen owah-owahan radikal dibutuhake. Lan nalika draf NTS lagi disiapake lan dirampungake, Yayasan Ilmu Nasional AS ing pungkasan taun 2014 kanthi cepet menehi dana kanggo modernisasi NTP.

Kelompok kerja dipimpin ora mung sapa wae, nanging Eric Steven Raymond - salah sawijining pendiri lan pilar komunitas Open Source lan penulis buku kasebut Katedral lan Bazaar. Babagan pisanan sing ditindakake Eric lan kanca-kancane yaiku mindhah kode NTP saka platform BitKeeper menyang git, nanging ora bisa ditindakake. Pimpinan proyek Harlan Stenn nglawan keputusan kasebut lan negosiasi mandheg. Banjur diputusake kanggo nggawe kode proyek, lan NTPSec lair.

Pengalaman sing padhet, kalebu karya ing GPSD, latar mburi matematika lan katrampilan magis maca kode kuno - Eric Raymond minangka peretas sing bisa narik proyek kasebut. Tim kasebut nemokake spesialis migrasi kode lan mung 10 minggu NTP mapaning GitLab. Pagaweyane ana ing ayunan.

Tim Eric Raymond nindakake tugas kasebut kanthi cara sing padha karo Auguste Rodin kanthi blok watu. Kanthi njabut 175 KLOC kode lawas, padha bisa Ngartekno nyuda lumahing serangan dening nutup akeh bolongan keamanan.

Iki minangka dhaptar sing ora lengkap sing kalebu ing distribusi:

  • Refclock sing ora didokumentasikan, ketinggalan jaman, ketinggalan jaman utawa rusak.
  • Perpustakaan ICS sing ora digunakake.
  • libopts / autogen.
  • Kode lawas kanggo Windows.
  • ntpdc.
  • Autokey.
  • Kode ntpq C wis ditulis maneh ing Python.
  • Kode sntp/ntpdig C wis ditulis maneh ing Python.

Saliyane ngresiki kode kasebut, proyek kasebut duwe tugas liyane. Ing ngisor iki minangka dhaptar sebagean prestasi:

  • Proteksi kode marang kebanjiran buffer wis ditingkatake kanthi signifikan. Kanggo nyegah overflows buffer, kabeh fungsi string sing ora aman (strcpy/strcat/strtok/sprintf/vsprintf/gets) wis diganti karo versi aman sing ngleksanakake watesan ukuran buffer.
  • Dhukungan NTS ditambahake.
  • Ngapikake akurasi langkah wektu kaping sepuluh kanthi ngubungake hardware fisik. Iki amarga kasunyatan manawa jam komputer modern wis dadi luwih akurat tinimbang nalika NTP lair. Penerima paling gedhe iki yaiku GPSDO lan radio wektu khusus.
  • Jumlah basa pamrograman wis suda dadi loro. Tinimbang Perl, awk lan malah S skrip, saiki kabeh Python. Amarga iki, ana luwih akeh kesempatan kanggo nggunakake maneh kode.
  • Tinimbang mie skrip autotools, proyek kasebut wiwit nggunakake sistem mbangun piranti lunak waf.
  • Dokumentasi proyek sing dianyari lan diatur maneh. Saka koleksi dokumen sing kontradiktif lan kadhangkala kuno, dheweke nggawe dokumentasi sing bisa ditrapake. Saben saklar baris perintah lan saben entitas konfigurasi saiki duwe versi siji bebener. Kajaba iku, kaca manual lan dokumentasi web saiki digawe saka file inti sing padha.

NTPSec kasedhiya kanggo sawetara distribusi Linux. Saiki, versi stabil paling anyar yaiku 1.1.8, kanggo Gentoo Linux minangka penultimate.

(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]

Kroni

Ana upaya liyane kanggo ngganti NTP lawas karo alternatif sing luwih aman. Chrony, ora kaya NTPSec, ditulis saka wiwitan lan dirancang supaya bisa digunakake kanthi andal ing macem-macem kahanan, kalebu sambungan jaringan sing ora stabil, kasedhiyan jaringan utawa kemacetan parsial, lan owah-owahan suhu. Kajaba iku, chrony duwe kaluwihan liyane:

  • chrony bisa nyinkronake jam sistem luwih cepet kanthi akurasi sing luwih gedhe;
  • chrony luwih cilik, nggunakake memori kurang, lan ngakses CPU mung yen perlu. Iki minangka plus gedhe kanggo ngirit sumber daya lan energi;
  • Chrony ndhukung cap wektu hardware ing Linux, ngidini sinkronisasi sing akurat banget ing jaringan lokal.

Nanging, chrony ora duwe sawetara fitur NTP lawas, kayata klien / server siaran lan multicast. Kajaba iku, NTP klasik ndhukung luwih akeh sistem operasi lan platform.

Kanggo mateni fungsi saka server lan NTP panjalukan kanggo proses chronyd, mung nulis port 0 ing file chrony.conf. Iki ditindakake ing kasus sing ora perlu njaga wektu kanggo klien NTP utawa kanca-kanca. Wiwit versi 2.0, port server NTP mung mbukak nalika akses diijini dening arahan ijin utawa prentah sing cocog, utawa NTP peer dikonfigurasi, utawa arahan siaran digunakake.

Program iki kasusun saka rong modul.

  • chronyd minangka layanan sing mlaku ing latar mburi. Nampa informasi babagan prabédan antarane jam sistem lan server wektu eksternal lan nyetel wektu lokal. Uga ngetrapake protokol NTP lan bisa tumindak minangka klien utawa server.
  • chronyc minangka sarana baris perintah kanggo ngawasi lan ngontrol program. Digunakake kanggo nyetel macem-macem paramèter layanan, contone ngidini sampeyan nambah utawa mbusak server NTP nalika chronyd terus mlaku.

Wiwit versi 7 saka RedHat Linux nggunakake kroni minangka layanan sinkronisasi wektu. Paket kasebut uga kasedhiya kanggo distribusi Linux liyane. Versi stabil paling anyar yaiku 3.5, nyiapake release 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]

Carane nyiyapake server chrony remot dhewe ing Internet kanggo nyinkronake wektu ing jaringan kantor. Ing ngisor iki conto nyetel VPS.

Conto nyetel Chrony ing RHEL / CentOS ing VPS

Ayo saiki latihan sethithik lan nyiyapake server NTP dhewe ing VPS. Iku banget prasaja, mung milih tariff cocok ing situs web RuVDS, njaluk server siap lan ketik rolas printah prasaja. Kanggo tujuan kita, pilihan iki cukup cocok.

Carane sinkronisasi wektu dadi aman

Ayo pindhah menyang nyiyapake layanan lan nginstal paket chrony dhisik.

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 nggunakake manajer paket sing beda.

[root@server ~]$ dnf install chrony

Sawise nginstal chrony, sampeyan kudu miwiti lan ngaktifake layanan kasebut.

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

Yen dikarepake, sampeyan bisa ngowahi /etc/chrony.conf, ngganti server NPT karo sing lokal sing paling cedhak kanggo nyuda wektu nanggepi.

# 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

Sabanjure, kita nyiyapake sinkronisasi server NTP karo simpul saka blumbang sing ditemtokake.

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

Sampeyan uga perlu kanggo mbukak port NTP menyang njaba, yen firewall bakal mblokir sambungan mlebu saka kelenjar klien.

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

Ing sisih klien, cukup nyetel zona wektu kanthi bener.

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

File /etc/chrony.conf nemtokake IP utawa jeneng host server VPS kita sing nganggo chrony server NTP.

server my.vps.server

Lan pungkasanipun, miwiti sinkronisasi wektu ing klien.

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

Sabanjure aku bakal pitutur marang kowe opsi apa sing ana kanggo nyinkronake wektu tanpa Internet.

Carane sinkronisasi wektu dadi aman

Carane sinkronisasi wektu dadi aman

Source: www.habr.com

Add a comment