Cara penyegerakan masa menjadi selamat

Cara penyegerakan masa menjadi selamat
Bagaimana untuk memastikan bahawa masa per se tidak berbohong jika anda mempunyai sejuta peranti besar dan kecil yang berkomunikasi melalui TCP/IP? Lagipun, setiap daripada mereka mempunyai jam, dan masa mesti tepat untuk mereka semua. Masalah ini tidak boleh dielakkan tanpa ntp.

Mari kita bayangkan sebentar bahawa dalam satu segmen infrastruktur IT perindustrian terdapat kesukaran dengan menyegerakkan perkhidmatan dari semasa ke semasa. Serta-merta susunan kluster perisian Perusahaan mula gagal, domain hancur, induk dan nod Tunggu Sedia tidak berjaya berusaha untuk memulihkan status quo.

Ia juga mungkin bahawa penyerang sengaja cuba mengganggu masa melalui serangan MiTM atau DDOS. Dalam keadaan sedemikian, apa-apa boleh berlaku:

  • Kata laluan akaun pengguna akan tamat tempoh;
  • Sijil X.509 akan tamat tempoh;
  • Pengesahan dua faktor TOTP akan berhenti berfungsi;
  • sandaran akan menjadi lapuk dan sistem akan memadamkannya;
  • DNSSec akan rosak.

Jelas sekali bahawa setiap jabatan IT berminat dengan pengendalian perkhidmatan penyegerakan masa yang boleh dipercayai, dan alangkah baiknya jika ia boleh dipercayai dan selamat dalam operasi perindustrian.

Pecah NTP dalam 25 minit

Protokol rangkaian - milenium mempunyai satu keanehan, mereka telah ketinggalan zaman dan tidak lagi bagus untuk apa-apa, tetapi menggantikannya tidaklah begitu mudah walaupun ramai peminat dan pembiayaan terkumpul.

Aduan utama mengenai NTP klasik adalah kekurangan mekanisme yang boleh dipercayai untuk melindungi daripada serangan oleh penceroboh. Pelbagai usaha telah dilakukan untuk menyelesaikan masalah ini. Untuk mencapai matlamat ini, kami mula-mula melaksanakan mekanisme kunci prakongsi (PSK) untuk menukar kunci simetri.

Malangnya, kaedah ini tidak membuahkan hasil untuk alasan yang mudah - ia tidak berskala dengan baik. Konfigurasi manual diperlukan pada bahagian klien bergantung pada pelayan. Ini bermakna anda tidak boleh menambah pelanggan lain begitu sahaja. Jika sesuatu berubah pada pelayan NTP, semua pelanggan mesti dikonfigurasikan semula.

Kemudian mereka datang dengan AutoKey, tetapi mereka segera menemui beberapa kelemahan serius dalam reka bentuk algoritma itu sendiri dan mereka terpaksa meninggalkannya. Masalahnya ialah benih hanya mengandungi 32-bit, ia terlalu kecil dan tidak mengandungi kerumitan pengiraan yang mencukupi untuk serangan hadapan.

  • ID Kekunci - kunci 32-bit simetri;
  • MAC (kod pengesahan mesej) - NTP paket checksum;

Autokey dikira seperti berikut.

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

Di mana H() ialah fungsi cincang kriptografi.

Fungsi yang sama digunakan untuk mengira jumlah semak paket.

MAC=H(Autokey||NTP packet)

Ternyata keseluruhan integriti semakan pakej bergantung pada ketulenan kuki. Sebaik sahaja anda memilikinya, anda boleh memulihkan autokey dan kemudian menipu MAC. Walau bagaimanapun, pelayan NTP menggunakan benih semasa menjananya. Di sinilah letaknya tangkapan.

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

Fungsi MSB_32 memotong 5 bit paling ketara daripada hasil pengiraan cincang md32. Kuki pelanggan tidak berubah selagi parameter pelayan kekal tidak berubah. Kemudian penyerang hanya boleh memulihkan nombor awal dan dapat menjana kuki secara bebas.

Pertama, anda perlu menyambung ke pelayan NTP sebagai pelanggan dan menerima kuki. Selepas ini, menggunakan kaedah kekerasan, penyerang memulihkan nombor awal mengikut algoritma mudah.

Algoritma untuk menyerang pengiraan nombor awal menggunakan kaedah 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 diketahui, jadi yang tinggal hanyalah mencipta 2^32 cincang sehingga kuki yang dibuat sepadan dengan kuki yang diterima daripada pelayan NTP. Pada stesen rumah biasa dengan Intel Core i5, ini akan mengambil masa 25 minit.

NTS - Autokey baharu

Adalah mustahil untuk menghadapi lubang keselamatan sedemikian di Autokey, dan pada tahun 2012 ia muncul versi baru protokol. Untuk menjejaskan nama itu, mereka memutuskan untuk menjenamakan semula, jadi Autokey v.2 digelar Network Time Security.

Protokol NTS ialah lanjutan daripada keselamatan NTP dan pada masa ini hanya menyokong mod unicast. Ia menyediakan perlindungan kriptografi yang kuat terhadap manipulasi paket, menghalang pengintipan, skala dengan baik, berdaya tahan terhadap kehilangan paket rangkaian, dan menghasilkan kehilangan ketepatan paling sedikit semasa keselamatan sambungan.

Sambungan NTS terdiri daripada dua peringkat yang menggunakan protokol lapisan bawah. hidup yang pertama Pada peringkat ini, pelanggan dan pelayan bersetuju dengan pelbagai parameter sambungan dan bertukar kuki yang mengandungi kunci dengan semua set data yang disertakan. hidup kedua Pada peringkat ini, sesi NTS yang dilindungi sebenar berlaku antara klien dan pelayan NTP.

Cara penyegerakan masa menjadi selamat

NTS terdiri daripada dua protokol lapisan bawah: Pertukaran Kunci Keselamatan Masa Rangkaian (NTS-KE), yang memulakan sambungan selamat melalui TLS dan NTPv4, penjelmaan terkini protokol NTP. Sedikit lagi mengenai perkara ini di bawah.

Peringkat pertama - NTS KE

Pada peringkat ini, klien NTP memulakan sesi TLS 1.2/1.3 melalui sambungan TCP yang berasingan dengan pelayan NTS KE. Semasa sesi ini perkara berikut berlaku.

  • Pihak menentukan parameter AeAD algoritma untuk peringkat kedua.
  • Pihak-pihak menentukan protokol lapisan bawah kedua, tetapi pada masa ini hanya NTPv4 disokong.
  • Pihak menentukan alamat IP dan port pelayan NTP.
  • Pelayan NTS KE mengeluarkan kuki di bawah NTPv4.
  • Pihak tersebut mengekstrak sepasang kunci simetri (C2S dan S2C) daripada bahan kuki.

Pendekatan ini mempunyai kelebihan besar bahawa keseluruhan beban penghantaran maklumat rahsia mengenai parameter sambungan jatuh pada protokol TLS yang terbukti dan boleh dipercayai. Ini menghapuskan keperluan untuk mencipta semula roda anda sendiri untuk jabat tangan NTP yang selamat.

Peringkat kedua - NTP di bawah perlindungan NTS

Dalam langkah kedua, pelanggan menyegerakkan masa dengan selamat dengan pelayan NTP. Untuk tujuan ini, ia menghantar empat sambungan khas (medan sambungan) dalam struktur paket NTPv4.

  • Sambungan Pengecam Unik mengandungi nonce rawak untuk mengelakkan serangan ulangan.
  • Sambungan Kuki NTS mengandungi salah satu kuki NTP yang tersedia untuk pelanggan. Memandangkan hanya pelanggan yang mempunyai kekunci AAED C2S dan S2C simetri, pelayan NTP mesti mengekstraknya daripada bahan kuki.
  • Sambungan Pemegang Tempat Kuki NTS ialah satu cara untuk pelanggan meminta kuki tambahan daripada pelayan. Sambungan ini diperlukan untuk memastikan bahawa respons pelayan NTP tidak lebih lama daripada permintaan. Ini membantu mengelakkan serangan amplifikasi.
  • Pengesah NTS dan Sambungan Medan Sambungan Disulitkan mengandungi sifir AAED dengan kunci C2S, pengepala NTP, cap masa dan EF di atas sebagai data yang disertakan. Tanpa sambungan ini adalah mungkin untuk memalsukan cap masa.

Cara penyegerakan masa menjadi selamat

Setelah menerima permintaan daripada pelanggan, pelayan mengesahkan ketulenan paket NTP. Untuk melakukan ini, dia mesti menyahsulit kuki, mengekstrak algoritma dan kunci AAED. Selepas berjaya menyemak paket NTP untuk kesahihan, pelayan bertindak balas kepada klien dalam format berikut.

  • Sambungan Pengecam Unik ialah salinan cermin permintaan pelanggan, ukuran terhadap serangan ulang tayang.
  • Sambungan Kuki NTS lebih banyak kuki untuk meneruskan sesi.
  • Pengesah NTS dan Sambungan Medan Sambungan Disulitkan mengandungi sifir AEAD dengan kunci S2C.

Jabat tangan kedua boleh diulang berkali-kali, memintas langkah pertama, kerana setiap permintaan dan respons memberikan kuki tambahan kepada pelanggan. Ini mempunyai kelebihan bahawa operasi TLS yang agak intensif sumber bagi pengkomputeran dan penghantaran data PKI dibahagikan dengan bilangan permintaan berulang. Ini amat sesuai untuk penjaga masa FPGA khusus, apabila semua fungsi utama boleh dibungkus ke dalam beberapa fungsi daripada bidang kriptografi simetri, memindahkan keseluruhan tindanan TLS ke peranti lain.

NTPSec

Apakah keistimewaan NTP? Walaupun pengarang projek itu, Dave Mills, cuba mendokumentasikan kodnya sebaik mungkin, ia adalah pengaturcara yang jarang berlaku yang akan dapat memahami selok-belok algoritma penyegerakan masa yang berusia 35 tahun. Beberapa kod telah ditulis sebelum era POSIX, dan API Unix pada masa itu sangat berbeza daripada apa yang digunakan hari ini. Di samping itu, pengetahuan tentang statistik diperlukan untuk membersihkan isyarat daripada gangguan pada talian yang bising.

NTS bukanlah percubaan pertama untuk membetulkan NTP. Setelah penyerang belajar untuk mengeksploitasi kelemahan NTP untuk menguatkan serangan DDoS, menjadi jelas bahawa perubahan radikal diperlukan. Dan sementara draf NTS sedang disediakan dan dimuktamadkan, Yayasan Sains Kebangsaan AS pada penghujung tahun 2014 dengan segera memperuntukkan geran untuk pemodenan NTP.

Kumpulan kerja itu diketuai bukan oleh sesiapa sahaja, tetapi Eric Steven Raymond - salah seorang pengasas dan tonggak komuniti Sumber Terbuka dan pengarang buku Katedral dan Bazar. Perkara pertama yang cuba dilakukan oleh Eric dan rakannya ialah mengalihkan kod NTP dari platform BitKeeper ke git, tetapi ia tidak berjaya seperti itu. Ketua projek Harlan Stenn menentang keputusan ini dan rundingan terhenti. Kemudian diputuskan untuk memotong kod projek, dan NTPSec dilahirkan.

Pengalaman yang mantap, termasuk kerja pada GPSD, latar belakang matematik dan kemahiran ajaib membaca kod purba - Eric Raymond adalah penggodam yang boleh melakukan projek sedemikian. Pasukan itu menemui pakar pemindahan kod dan hanya dalam 10 minggu NTP menetappada GitLab. Kerja sedang rancak.

Pasukan Eric Raymond memikul tugas dengan cara yang sama seperti yang dilakukan Auguste Rodin dengan bongkah batu. Dengan mengalih keluar 175 KLOC kod lama, mereka dapat mengurangkan permukaan serangan dengan ketara dengan menutup banyak lubang keselamatan.

Berikut ialah senarai yang tidak lengkap bagi mereka yang termasuk dalam pengedaran:

  • Jam refleks tidak berdokumen, lapuk, lapuk atau rosak.
  • Pustaka ICS yang tidak digunakan.
  • libopts/autogen.
  • Kod lama untuk Windows.
  • ntpdc.
  • Autokey.
  • Kod ntpq C telah ditulis semula dalam Python.
  • Kod sntp/ntpdig C telah ditulis semula dalam Python.

Selain membersihkan kod, projek itu mempunyai tugas lain. Berikut ialah senarai separa pencapaian:

  • Perlindungan kod terhadap limpahan penimbal telah dipertingkatkan dengan ketara. Untuk mengelakkan limpahan penimbal, semua fungsi rentetan yang tidak selamat (strcpy/strcat/strtok/sprintf/vsprintf/gets) telah digantikan dengan versi selamat yang melaksanakan had saiz penimbal.
  • Menambah sokongan NTS.
  • Ketepatan langkah masa dipertingkat sepuluh kali ganda dengan memautkan perkakasan fizikal. Ini disebabkan oleh fakta bahawa jam komputer moden telah menjadi lebih tepat berbanding ketika NTP dilahirkan. Penerima manfaat terbesar ini ialah GPSDO dan radio masa khusus.
  • Bilangan bahasa pengaturcaraan telah dikurangkan kepada dua. Daripada skrip Perl, awk dan juga S, kini semuanya adalah Python. Disebabkan ini, terdapat lebih banyak peluang untuk penggunaan semula kod.
  • Daripada mi skrip autotools, projek itu mula menggunakan sistem binaan perisian WAF.
  • Dokumentasi projek dikemas kini dan disusun semula. Daripada koleksi dokumen yang bercanggah dan kadangkala kuno, mereka mencipta dokumentasi yang agak boleh dilalui. Setiap suis baris arahan dan setiap entiti konfigurasi kini mempunyai satu versi kebenaran. Selain itu, halaman manual dan dokumentasi web kini dicipta daripada fail teras yang sama.

NTPSec tersedia untuk beberapa pengedaran Linux. Pada masa ini, versi stabil terkini ialah 1.1.8, untuk Gentoo Linux ia adalah versi kedua dari belakang.

(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

Terdapat satu lagi percubaan untuk menggantikan NTP lama dengan alternatif yang lebih selamat. Chrony, tidak seperti NTPSec, ditulis dari bawah ke atas dan direka bentuk untuk beroperasi dengan pasti di bawah pelbagai keadaan, termasuk sambungan rangkaian yang tidak stabil, ketersediaan rangkaian separa atau kesesakan dan perubahan suhu. Di samping itu, chrony mempunyai kelebihan lain:

  • chrony boleh menyegerakkan jam sistem dengan lebih pantas dengan ketepatan yang lebih tinggi;
  • chrony lebih kecil, menggunakan lebih sedikit memori dan mengakses CPU hanya apabila diperlukan. Ini adalah kelebihan besar untuk menjimatkan sumber dan tenaga;
  • chrony menyokong cap masa perkakasan pada Linux, membenarkan penyegerakan yang sangat tepat pada rangkaian tempatan.

Walau bagaimanapun, chrony tidak mempunyai beberapa ciri NTP lama, seperti klien/pelayan siaran dan multicast. Selain itu, NTP klasik menyokong lebih banyak sistem pengendalian dan platform.

Untuk melumpuhkan kefungsian pelayan dan permintaan NTP kepada proses chronyd, cuma tulis port 0 dalam fail chrony.conf. Ini dilakukan dalam kes di mana tidak perlu mengekalkan masa untuk pelanggan NTP atau rakan sebaya. Sejak versi 2.0, port pelayan NTP dibuka hanya apabila akses dibenarkan oleh arahan membenarkan atau arahan yang sesuai, atau rakan NTP dikonfigurasikan, atau arahan penyiaran digunakan.

Program ini terdiri daripada dua modul.

  • chronyd ialah perkhidmatan yang berjalan di latar belakang. Ia menerima maklumat tentang perbezaan antara jam sistem dan pelayan masa luaran dan melaraskan waktu tempatan. Ia juga melaksanakan protokol NTP dan boleh bertindak sebagai pelanggan atau pelayan.
  • chronyc ialah utiliti baris arahan untuk pemantauan dan kawalan program. Digunakan untuk memperhalusi pelbagai parameter perkhidmatan, contohnya membenarkan anda menambah atau mengalih keluar pelayan NTP semasa chronyd terus berjalan.

Sejak versi 7 RedHat Linux kegunaan kroni sebagai perkhidmatan penyegerakan masa. Pakej ini juga tersedia untuk pengedaran Linux yang lain. Versi stabil terkini ialah 3.5, bersedia untuk keluaran 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]

Bagaimana untuk menyediakan pelayan kroni jauh anda sendiri di Internet untuk menyegerakkan masa pada rangkaian pejabat. Di bawah ialah contoh penyediaan VPS.

Contoh menyediakan Chrony pada RHEL / CentOS pada VPS

Sekarang mari kita berlatih sedikit dan sediakan pelayan NTP kita sendiri pada VPS. Ia sangat mudah, hanya pilih tarif yang sesuai di laman web RuVDS, dapatkan pelayan siap sedia dan taip sedozen arahan mudah. Untuk tujuan kami, pilihan ini agak sesuai.

Cara penyegerakan masa menjadi selamat

Mari kita teruskan untuk menyediakan perkhidmatan dan mula-mula pasang pakej kroni.

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 menggunakan pengurus pakej yang berbeza.

[root@server ~]$ dnf install chrony

Selepas memasang chrony, anda perlu memulakan dan mengaktifkan perkhidmatan.

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

Jika mahu, anda boleh membuat perubahan pada /etc/chrony.conf, menggantikan pelayan NPT dengan pelayan tempatan terdekat untuk mengurangkan masa tindak balas.

# 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

Seterusnya, kami menyediakan penyegerakan pelayan NTP dengan nod dari kumpulan yang ditentukan.

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

Ia juga perlu untuk membuka port NTP ke luar, jika tidak, tembok api akan menyekat sambungan masuk dari nod klien.

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

Di sisi pelanggan, sudah cukup untuk menetapkan zon waktu dengan betul.

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

Fail /etc/chrony.conf menentukan IP atau nama hos pelayan VPS kami yang menjalankan kroni pelayan NTP.

server my.vps.server

Dan akhirnya, memulakan penyegerakan masa pada klien.

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

Lain kali saya akan memberitahu anda pilihan yang ada untuk menyegerakkan masa tanpa Internet.

Cara penyegerakan masa menjadi selamat

Cara penyegerakan masa menjadi selamat

Sumber: www.habr.com

Tambah komen