Bagaimana cara memastikan bahwa waktu itu sendiri tidak berbohong jika Anda memiliki jutaan perangkat besar dan kecil yang berkomunikasi melalui TCP/IP? Bagaimanapun, masing-masing dari mereka memiliki jam, dan waktunya harus tepat untuk semuanya. Masalah ini tidak dapat diatasi tanpa ntp.
Mari kita bayangkan sejenak bahwa di satu segmen infrastruktur TI industri terdapat kesulitan dalam menyinkronkan layanan dari waktu ke waktu. Segera tumpukan cluster perangkat lunak Perusahaan mulai gagal, domain hancur, master dan node Siaga tidak berhasil memulihkan status quo.
Mungkin juga penyerang dengan sengaja mencoba mengganggu waktu melalui serangan MiTM atau DDOS. Dalam situasi seperti ini, apa pun bisa terjadi:
- Kata sandi akun pengguna akan kedaluwarsa;
- Sertifikat X.509 akan kedaluwarsa;
- Otentikasi dua faktor TOTP akan berhenti berfungsi;
- cadangan akan menjadi usang dan sistem akan menghapusnya;
- DNSSec akan rusak.
Jelas bahwa setiap departemen TI tertarik pada pengoperasian layanan sinkronisasi waktu yang andal, dan alangkah baiknya jika layanan tersebut dapat diandalkan dan aman dalam operasi industri.
Hancurkan NTP dalam 25 menit
Protokol jaringan - generasi milenial memiliki satu kekhasan dan tidak lagi berguna untuk apa pun, tetapi menggantinya tidaklah mudah bahkan ketika banyak peminat dan pendanaan telah terkumpul.
Keluhan utama tentang NTP klasik adalah kurangnya mekanisme yang dapat diandalkan untuk melindungi terhadap serangan penyusup. Berbagai upaya telah dilakukan untuk mengatasi masalah ini. Untuk mencapai hal ini, pertama-tama kami menerapkan mekanisme kunci pra-berbagi (PSK) untuk pertukaran kunci simetris.
Sayangnya, metode ini tidak membuahkan hasil karena alasan sederhana - metode ini tidak berkembang dengan baik. Konfigurasi manual diperlukan di sisi klien tergantung pada server. Ini berarti Anda tidak bisa menambahkan klien lain begitu saja. Jika ada perubahan pada server NTP, semua klien harus dikonfigurasi ulang.
Kemudian mereka datang dengan AutoKey, tetapi mereka segera menemukan sejumlah kerentanan serius dalam desain algoritma itu sendiri dan mereka harus meninggalkannya. Masalahnya adalah seed hanya berisi 32-bit, terlalu kecil dan tidak mengandung kompleksitas komputasi yang cukup untuk serangan frontal.
- ID Kunci - kunci 32-bit simetris;
- MAC (kode otentikasi pesan) - checksum paket NTP;
Kunci otomatis dihitung sebagai berikut.
Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)Dimana H() adalah fungsi hash kriptografi.
Fungsi yang sama digunakan untuk menghitung checksum paket.
MAC=H(Autokey||NTP packet)Ternyata seluruh integritas pemeriksaan paket bertumpu pada keaslian cookie. Setelah Anda memilikinya, Anda dapat memulihkan kunci otomatis dan kemudian memalsukan MAC. Namun, server NTP menggunakan seed saat membuatnya. Di sinilah letak tangkapannya.
Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))Fungsi MSB_32 memotong 5 bit paling signifikan dari hasil perhitungan hash md32. Cookie klien tidak berubah selama parameter server tetap tidak berubah. Kemudian penyerang hanya dapat mengembalikan nomor awal dan dapat menghasilkan cookie secara mandiri.
Pertama, Anda perlu terhubung ke server NTP sebagai klien dan menerima cookie. Setelah itu, dengan menggunakan metode brute force, penyerang mengembalikan nomor awal mengikuti algoritma sederhana.
Algoritma penyerangan perhitungan angka awal menggunakan 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 forAlamat IP diketahui, jadi yang tersisa hanyalah membuat 2^32 hash hingga cookie yang dibuat cocok dengan yang diterima dari server NTP. Di stasiun rumah biasa dengan Intel Core i5, ini akan memakan waktu 25 menit.
NTS - Kunci Otomatis baru
Tidak mungkin untuk menerima lubang keamanan seperti itu di Autokey, dan pada tahun 2012 lubang itu muncul protokol. Untuk mengkompromikan namanya, mereka memutuskan untuk mengubah mereknya, sehingga Autokey v.2 dijuluki Network Time Security.
Protokol NTS merupakan perpanjangan dari keamanan NTP dan saat ini hanya mendukung mode unicast. Ini memberikan perlindungan kriptografi yang kuat terhadap manipulasi paket, mencegah pengintaian, melakukan penskalaan dengan baik, tahan terhadap kehilangan paket jaringan, dan menghasilkan kerugian presisi paling sedikit yang terjadi selama keamanan koneksi.
Koneksi NTS terdiri dari dua tahap yang menggunakan protokol lapisan bawah. Pada yang pertama Pada tahap ini, klien dan server menyetujui berbagai parameter koneksi dan bertukar cookie yang berisi kunci dengan semua kumpulan data yang menyertainya. Pada yang kedua Pada tahap ini, sesi NTS yang dilindungi sebenarnya terjadi antara klien dan server NTP.

NTS terdiri dari dua protokol lapisan bawah: Network Time Security Key Exchange (NTS-KE), yang memulai koneksi aman melalui TLS, dan NTPv4, inkarnasi terbaru dari protokol NTP. Sedikit lebih banyak tentang ini di bawah.
Tahap pertama - NTS KE
Pada tahap ini, klien NTP memulai sesi TLS 1.2/1.3 melalui koneksi TCP terpisah dengan server NTS KE. Selama sesi ini hal berikut terjadi.
- Para pihak menentukan parameternya algoritma untuk tahap kedua.
- Para pihak mendefinisikan protokol lapisan bawah kedua, namun saat ini hanya NTPv4 yang didukung.
- Para pihak menentukan alamat IP dan port server NTP.
- Server NTS KE mengeluarkan cookie di bawah NTPv4.
- Para pihak mengekstrak sepasang kunci simetris (C2S dan S2C) dari materi cookie.
Pendekatan ini memiliki keuntungan besar karena seluruh beban transmisi informasi rahasia mengenai parameter koneksi berada pada protokol TLS yang terbukti dan andal. Hal ini menghilangkan kebutuhan untuk menemukan kembali roda Anda sendiri untuk jabat tangan NTP yang aman.
Tahap kedua - NTP di bawah perlindungan NTS
Pada langkah kedua, klien menyinkronkan waktu dengan server NTP secara aman. Untuk tujuan ini, ia mengirimkan empat ekstensi khusus (bidang ekstensi) dalam struktur paket NTPv4.
- Ekstensi Pengidentifikasi Unik berisi nonce acak untuk mencegah serangan berulang.
- Ekstensi Cookie NTS berisi salah satu cookie NTP yang tersedia untuk klien. Karena hanya klien yang memiliki kunci AAED simetris C2S dan S2C, server NTP harus mengekstraknya dari materi cookie.
- Ekstensi Placeholder Cookie NTS adalah cara bagi klien untuk meminta cookie tambahan dari server. Ekstensi ini diperlukan untuk memastikan bahwa respons server NTP tidak lebih lama dari permintaan. Ini membantu mencegah serangan amplifikasi.
- NTS Authenticator dan Bidang Ekstensi Terenkripsi Ekstensi berisi sandi AAED dengan kunci C2S, header NTP, stempel waktu, dan EF di atas sebagai data pendamping. Tanpa ekstensi ini, stempel waktu dapat dipalsukan.

Setelah menerima permintaan dari klien, server memverifikasi keaslian paket NTP. Untuk melakukan ini, dia harus mendekripsi cookie, mengekstrak algoritma dan kunci AAED. Setelah berhasil memeriksa validitas paket NTP, server merespons klien dengan format berikut.
- Ekstensi Pengidentifikasi Unik adalah salinan cermin dari permintaan klien, sebuah tindakan terhadap serangan replay.
- Ekstensi Cookie NTS lebih banyak cookie untuk melanjutkan sesi.
- NTS Authenticator dan Bidang Ekstensi Terenkripsi Ekstensi berisi sandi AEAD dengan kunci S2C.
Jabat tangan kedua dapat diulang berkali-kali, melewati langkah pertama, karena setiap permintaan dan respons memberikan cookie tambahan kepada klien. Keuntungannya adalah operasi TLS komputasi dan transmisi data PKI yang relatif intensif sumber daya dibagi dengan jumlah permintaan berulang. Hal ini sangat berguna bagi pencatat waktu FPGA khusus, ketika semua fungsi utama dapat dikemas menjadi beberapa fungsi dari bidang kriptografi simetris, mentransfer seluruh tumpukan TLS ke perangkat lain.
NTPSec
Apa yang spesial dari NTP? Terlepas dari kenyataan bahwa penulis proyek, Dave Mills, mencoba mendokumentasikan kodenya sebaik mungkin, jarang ada programmer yang mampu memahami seluk-beluk algoritma sinkronisasi waktu yang berusia 35 tahun. Beberapa kode ditulis sebelum era POSIX, dan API Unix pada saat itu sangat berbeda dari yang digunakan saat ini. Selain itu, pengetahuan statistik diperlukan untuk membersihkan sinyal dari interferensi pada jalur yang bising.
NTS bukanlah upaya pertama untuk memperbaiki NTP. Setelah penyerang belajar mengeksploitasi kerentanan NTP untuk memperkuat serangan DDoS, menjadi jelas bahwa diperlukan perubahan radikal. Dan sementara rancangan NTS sedang dipersiapkan dan diselesaikan, US National Science Foundation pada akhir tahun 2014 segera mengalokasikan hibah untuk modernisasi NTP.
Kelompok kerja ini dipimpin bukan oleh sembarang orang, tapi - salah satu pendiri dan pilar komunitas Open Source dan penulis buku . Hal pertama yang coba dilakukan Eric dan teman-temannya adalah memindahkan kode NTP dari platform BitKeeper ke git, tetapi tidak berhasil. Pemimpin proyek Harlan Stenn menentang keputusan ini dan negosiasi terhenti. Kemudian diputuskan untuk membagi kode proyek, dan NTPSec lahir.
Pengalaman yang solid, termasuk mengerjakan GPSD, latar belakang matematika, dan keterampilan ajaib dalam membaca kode kuno - Eric Raymond adalah peretas yang mampu melakukan proyek semacam itu. Tim menemukan spesialis migrasi kode dan hanya dalam 10 minggu NTP di GitLab. Pekerjaan berjalan lancar.
Tim Eric Raymond melakukan tugas tersebut dengan cara yang sama seperti yang dilakukan Auguste Rodin dengan balok batu. Dengan menghapus 175 KLOC kode lama, mereka mampu mengurangi permukaan serangan secara signifikan dengan menutup banyak lubang keamanan.
Berikut adalah daftar lengkap yang termasuk dalam distribusi:
- Refclock tidak terdokumentasi, ketinggalan jaman, ketinggalan jaman, atau rusak.
- Perpustakaan ICS yang tidak digunakan.
- libopts/autogen.
- Kode lama untuk Windows.
- ntpdc.
- Kunci otomatis.
- Kode ntpq C telah ditulis ulang dengan Python.
- Kode sntp/ntpdig C telah ditulis ulang dengan Python.
Selain membersihkan kode, proyek ini memiliki tugas lain. Berikut sebagian daftar pencapaiannya:
- Perlindungan kode terhadap buffer overflow telah ditingkatkan secara signifikan. Untuk mencegah buffer overflows, semua fungsi string yang tidak aman (strcpy/strcat/strtok/sprintf/vsprintf/gets) telah diganti dengan versi aman yang menerapkan batas ukuran buffer.
- Menambahkan dukungan NTS.
- Peningkatan akurasi langkah waktu sepuluh kali lipat dengan menghubungkan perangkat keras fisik. Hal ini disebabkan oleh fakta bahwa jam komputer modern menjadi jauh lebih akurat dibandingkan jam ketika NTP lahir. Penerima manfaat terbesar adalah GPSDO dan radio waktu khusus.
- Jumlah bahasa pemrograman telah dikurangi menjadi dua. Alih-alih skrip Perl, awk, dan bahkan S, sekarang semuanya menggunakan Python. Oleh karena itu, ada lebih banyak peluang untuk penggunaan kembali kode.
- Alih-alih menggunakan skrip autotools, proyek mulai menggunakan sistem pembuatan perangkat lunak .
- Dokumentasi proyek yang diperbarui dan ditata ulang. Dari kumpulan dokumen yang kontradiktif dan terkadang kuno, mereka menciptakan dokumentasi yang cukup lumayan. Setiap saklar baris perintah dan setiap entitas konfigurasi kini memiliki satu versi kebenaran. Selain itu, halaman manual dan dokumentasi web kini dibuat dari file inti yang sama.
NTPSec tersedia untuk sejumlah distribusi Linux. Saat ini, versi stabil terbaru adalah 1.1.8, untuk Gentoo Linux ini 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]
Kroni
Ada upaya lain untuk menggantikan NTP lama dengan alternatif yang lebih aman. Chrony, tidak seperti NTPSec, ditulis dari awal dan dirancang untuk beroperasi dengan andal dalam berbagai kondisi, termasuk koneksi jaringan yang tidak stabil, ketersediaan atau kemacetan jaringan parsial, dan perubahan suhu. Selain itu, chrony memiliki keunggulan lain:
- chrony dapat menyinkronkan jam sistem lebih cepat dan lebih akurat;
- chrony lebih kecil, menggunakan lebih sedikit memori, dan mengakses CPU hanya jika diperlukan. Ini merupakan nilai tambah yang besar dalam menghemat sumber daya dan energi;
- chrony mendukung stempel waktu perangkat keras di Linux, memungkinkan sinkronisasi yang sangat akurat di jaringan lokal.
Namun, chrony tidak memiliki beberapa fitur NTP lama, seperti klien/server siaran dan multicast. Selain itu, NTP klasik mendukung lebih banyak sistem operasi dan platform.
Untuk menonaktifkan fungsionalitas server dan permintaan NTP ke proses chronyd, cukup tulis port 0 di file chrony.conf. Hal ini dilakukan jika tidak perlu menjaga waktu untuk klien atau rekan NTP. Sejak versi 2.0, port server NTP terbuka hanya ketika akses diizinkan oleh direktif izinkan atau perintah yang sesuai, atau rekan NTP dikonfigurasi, atau direktif siaran digunakan.
Program ini terdiri dari dua modul.
- chronyd adalah layanan yang berjalan di latar belakang. Ia menerima informasi tentang perbedaan antara jam sistem dan server waktu eksternal dan menyesuaikan waktu lokal. Itu juga mengimplementasikan protokol NTP dan dapat bertindak sebagai klien atau server.
- chronyc adalah utilitas baris perintah untuk pemantauan dan pengendalian program. Digunakan untuk menyempurnakan berbagai parameter layanan, misalnya memungkinkan Anda menambah atau menghapus server NTP sementara chronyd terus berjalan.
Sejak RedHat Linux versi 7 chrony sebagai layanan sinkronisasi waktu. Paket ini juga tersedia untuk distribusi Linux lainnya. Versi stabil terbaru adalah 3.5, bersiap untuk rilis 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]
Cara mengatur server chrony jarak jauh Anda sendiri di Internet untuk menyinkronkan waktu di jaringan kantor. Di bawah ini adalah contoh pengaturan VPS.
Contoh setting Chrony di RHEL / CentOS di VPS
Sekarang mari kita berlatih sedikit dan mengatur server NTP kita sendiri di VPS. Caranya sangat sederhana, cukup pilih tarif yang sesuai di situs RuVDS, dapatkan server yang sudah jadi dan ketik selusin perintah sederhana. Untuk tujuan kami, opsi ini cukup cocok.

Mari kita lanjutkan ke pengaturan layanan dan instal paket chrony terlebih dahulu.
[root@server ~]$ yum install chronyRHEL 8 / CentOS 8 menggunakan manajer paket yang berbeda.
[root@server ~]$ dnf install chronySetelah menginstal chrony, Anda perlu memulai dan mengaktifkan layanan.
[root@server ~]$ systemctl enable chrony --nowJika diinginkan, Anda dapat melakukan perubahan pada /etc/chrony.conf, mengganti server NPT dengan server lokal terdekat untuk mengurangi waktu respons.
# 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
Selanjutnya, kami mengatur sinkronisasi server NTP dengan node dari kumpulan yang ditentukan.
[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service
Port NTP juga perlu dibuka ke luar, jika tidak, firewall akan memblokir koneksi masuk dari node klien.
[root@server ~]$ firewall-cmd --add-service=ntp --permanent
[root@server ~]$ firewall-cmd --reload
Di sisi klien, cukup mengatur zona waktu dengan benar.
[root@client ~]$ timedatectl set-timezone Europe/MoscowFile /etc/chrony.conf menentukan IP atau nama host server VPS kami yang menjalankan server NTP chrony.
server my.vps.serverDan terakhir, memulai sinkronisasi waktu pada klien.
[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true
Lain kali saya akan memberi tahu Anda opsi apa saja yang tersedia untuk menyinkronkan waktu tanpa Internet.
Sumber: www.habr.com
