TCP/IP orqali muloqot qiladigan millionlab katta va kichik qurilmalaringiz bo'lsa, vaqt yolg'on emasligiga qanday ishonch hosil qilish mumkin? Axir, ularning har birining soati bor va ularning barchasi uchun vaqt to'g'ri bo'lishi kerak. Bu muammoni ntpsiz chetlab bo'lmaydi.
Tasavvur qilaylik, sanoat IT infratuzilmasining bir segmentida vaqt o'tishi bilan xizmatlarni sinxronlashtirishda qiyinchiliklar mavjud. Darhol Enterprise dasturiy ta'minotining klaster to'plami ishlamay boshlaydi, domenlar parchalanadi, masterlar va kutish tugunlari status-kvoni tiklashga muvaffaqiyatsiz intilishadi.
Bundan tashqari, tajovuzkor MiTM yoki DDOS hujumi orqali vaqtni ataylab buzishga harakat qilishi ham mumkin. Bunday vaziyatda hamma narsa sodir bo'lishi mumkin:
- Foydalanuvchi hisobi parollarining amal qilish muddati tugaydi;
- X.509 sertifikatlarining amal qilish muddati tugaydi;
- TOTP ikki faktorli autentifikatsiya ishlamay qoladi;
- zaxira nusxalari eskiradi va tizim ularni o'chiradi;
- DNSSec buziladi.
Har bir IT-bo'limi vaqtni sinxronlashtirish xizmatlarining ishonchli ishlashidan manfaatdor ekanligi aniq va ular sanoatda ishlashda ishonchli va xavfsiz bo'lsa yaxshi bo'lardi.
25 daqiqada NTPni buzing
Tarmoq protokollari - millenniallarning bitta o'ziga xos xususiyati bor, ular shunday bo'lgan va endi hech narsa uchun yaxshi emas, lekin ularni almashtirish juda muhim ishqibozlar va mablag'lar to'plangan bo'lsa ham oson emas.
Klassik NTP haqida asosiy shikoyat buzg'unchilar tomonidan hujumlardan himoya qilish uchun ishonchli mexanizmlarning yo'qligi. Ushbu muammoni hal qilish uchun turli xil urinishlar qilingan. Bunga erishish uchun biz birinchi navbatda simmetrik kalitlarni almashish uchun oldindan umumiy kalit (PSK) mexanizmini joriy qildik.
Afsuski, bu usul oddiy sababga ko'ra o'z samarasini bermadi - u yaxshi miqyosda emas. Serverga qarab mijoz tomonidan qo'lda konfiguratsiya talab qilinadi. Bu shuni anglatadiki, siz boshqa mijozni xuddi shunday qo'sha olmaysiz. Agar NTP serverida biror narsa o'zgarsa, barcha mijozlar qayta konfiguratsiya qilinishi kerak.
Keyin ular AutoKey bilan kelishdi, lekin ular darhol algoritmning o'zi dizaynida bir qator jiddiy zaifliklarni aniqladilar va ular undan voz kechishga majbur bo'ldilar. Gap shundaki, urug' faqat 32 bitni o'z ichiga oladi, u juda kichik va frontal hujum uchun etarli hisoblash murakkabligini o'z ichiga olmaydi.
- Kalit identifikatori - simmetrik 32 bitli kalit;
- MAC (xabar autentifikatsiya kodi) - NTP paketini tekshirish summasi;
Autokey quyidagi tarzda hisoblanadi.
Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)Bu yerda H() kriptografik xesh funksiyasi.
Xuddi shu funktsiya paketlarning nazorat summasini hisoblash uchun ishlatiladi.
MAC=H(Autokey||NTP packet)Ma'lum bo'lishicha, paketlarni tekshirishning butun yaxlitligi cookie-fayllarning haqiqiyligiga bog'liq. Ularga ega bo'lganingizdan so'ng, siz avtomatik kalitni qayta tiklashingiz va keyin MACni aldashingiz mumkin. Biroq, NTP serveri ularni yaratishda urug'dan foydalanadi. Qo‘lga olish shu yerda.
Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))MSB_32 funktsiyasi md5 xesh hisoblash natijasidan 32 ta eng muhim bitni kesib tashlaydi. Server parametrlari o'zgarishsiz qolar ekan, mijoz cookie fayli o'zgarmaydi. Keyin tajovuzkor faqat dastlabki raqamni tiklashi va mustaqil ravishda cookie-fayllarni yaratishi mumkin.
Birinchidan, NTP serveriga mijoz sifatida ulanishingiz va cookie-fayllarni olishingiz kerak. Shundan so'ng, qo'pol kuch usulidan foydalanib, tajovuzkor oddiy algoritmga rioya qilgan holda dastlabki raqamni tiklaydi.
Qo'pol kuch usuli yordamida dastlabki sonni hisoblashga hujum qilish algoritmi.
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 manzillar ma'lum, shuning uchun yaratilgan cookie NTP serveridan olinganiga mos kelguncha 2^32 xesh yaratish qoladi. Intel Core i5 bilan oddiy uy stantsiyasida bu 25 daqiqa davom etadi.
NTS - yangi avtomatik kalit
Autokey-da bunday xavfsizlik teshiklariga dosh berishning iloji yo'q edi va 2012 yilda u paydo bo'ldi protokol. Nomni buzish uchun ular rebrend qilishga qaror qilishdi, shuning uchun Autokey v.2 Network Time Security deb nomlandi.
NTS protokoli NTP xavfsizligining kengaytmasi bo'lib, hozirda faqat unicast rejimini qo'llab-quvvatlaydi. U paketli manipulyatsiyaga qarshi kuchli kriptografik himoyani ta'minlaydi, snoopingni oldini oladi, yaxshi o'lchaydi, tarmoq paketlarini yo'qotishga chidamli bo'ladi va ulanish xavfsizligi vaqtida eng kam aniqlik yo'qotilishiga olib keladi.
NTS ulanishi quyi qatlam protokollaridan foydalanadigan ikki bosqichdan iborat. Yoniq birinchisi Ushbu bosqichda mijoz va server turli xil ulanish parametrlari bo'yicha kelishib oladilar va barcha ma'lumotlar to'plami bilan kalitlarni o'z ichiga olgan cookie-fayllarni almashadilar. Yoniq ikkinchi Ushbu bosqichda haqiqiy himoyalangan NTS seansi mijoz va NTP server o'rtasida sodir bo'ladi.

NTS ikkita quyi qatlamli protokollardan iborat: TLS orqali xavfsiz ulanishni boshlaydigan Network Time Security Key Exchange (NTS-KE) va NTP protokolining eng soʻnggi timsoli NTPv4. Quyida bu haqda bir oz ko'proq.
Birinchi bosqich - NTS KE
Ushbu bosqichda NTP mijozi NTS KE serveri bilan alohida TCP ulanishi orqali TLS 1.2/1.3 seansini boshlaydi. Ushbu sessiya davomida quyidagilar sodir bo'ladi.
- Parametrlarni tomonlar belgilaydi Ikkinchi bosqich uchun algoritm.
- Tomonlar ikkinchi quyi qatlam protokolini belgilaydilar, ammo hozircha faqat NTPv4 qo'llab-quvvatlanadi.
- Tomonlar NTP serverining IP-manzilini va portini aniqlaydilar.
- NTS KE serveri NTPv4 ostida cookie fayllarini chiqaradi.
- Tomonlar cookie faylidan bir juft simmetrik kalitlarni (C2S va S2C) ajratib olishadi.
Ushbu yondashuvning katta afzalligi shundaki, ulanish parametrlari bo'yicha maxfiy ma'lumotlarni uzatishning barcha yuki tasdiqlangan va ishonchli TLS protokoliga to'g'ri keladi. Bu xavfsiz NTP bilan qo'l siqish uchun o'z g'ildiragini qayta ixtiro qilish zaruratini yo'q qiladi.
Ikkinchi bosqich - NTS himoyasi ostida NTP
Ikkinchi bosqichda mijoz vaqtni NTP serveri bilan xavfsiz sinxronlashtiradi. Shu maqsadda u NTPv4 paket strukturasida to'rtta maxsus kengaytmani (kengaytma maydonlarini) uzatadi.
- Noyob identifikator kengaytmasi takroriy hujumlarning oldini olish uchun tasodifiy nonceni o'z ichiga oladi.
- NTS Cookie kengaytmasi mijoz uchun mavjud bo'lgan NTP cookie-fayllaridan birini o'z ichiga oladi. Faqat mijoz nosimmetrik AAED C2S va S2C kalitlariga ega bo'lganligi sababli, NTP serveri ularni cookie faylidan ajratib olishi kerak.
- NTS Cookie to'ldiruvchi kengaytmasi mijoz uchun serverdan qo'shimcha cookie-fayllarni so'rash usulidir. Ushbu kengaytma NTP serverining javobi so'rovdan uzoqroq bo'lmasligini ta'minlash uchun zarur. Bu kuchaytirish hujumlarining oldini olishga yordam beradi.
- NTS Authenticator va shifrlangan kengaytma maydonlari kengaytmasi qo'shimcha ma'lumotlar sifatida C2S kaliti, NTP sarlavhasi, vaqt belgilari va yuqoridagi EF bilan AAED shifrini o'z ichiga oladi. Ushbu kengaytmasiz vaqt belgilarini aldash mumkin.

Mijozdan so'rov olgach, server NTP paketining haqiqiyligini tekshiradi. Buning uchun u cookie-fayllarni shifrini ochishi, AAED algoritmi va kalitlarini chiqarishi kerak. NTP paketining haqiqiyligini muvaffaqiyatli tekshirgandan so'ng, server mijozga quyidagi formatda javob beradi.
- Noyob identifikator kengaytmasi - bu mijoz so'rovining ko'zgu nusxasi, takroriy hujumlarga qarshi chora.
- Seansni davom ettirish uchun NTS Cookie kengaytmasi ko'proq cookie fayllari.
- NTS Authenticator va shifrlangan kengaytma maydonlari kengaytmasi S2C kaliti bilan AEAD shifrini o'z ichiga oladi.
Ikkinchi qo'l siqish birinchi bosqichni chetlab o'tib, ko'p marta takrorlanishi mumkin, chunki har bir so'rov va javob mijozga qo'shimcha cookie fayllarini beradi. Buning afzalligi shundaki, PKI ma'lumotlarini hisoblash va uzatishning nisbatan resurs talab qiladigan TLS operatsiyalari takroriy so'rovlar soniga bo'linadi. Bu, ayniqsa, ixtisoslashgan FPGA vaqt hisoblagichlari uchun qulaydir, chunki barcha asosiy funktsiyalar nosimmetrik kriptografiya sohasidan bir nechta funktsiyalarga to'planib, butun TLS stekini boshqa qurilmaga o'tkazishi mumkin.
NTPSec
NTPning o'ziga xos xususiyati nimada? Loyiha muallifi Deyv Mills o'z kodini iloji boricha hujjatlashtirishga harakat qilganiga qaramay, bu 35 yoshda bo'lgan vaqtni sinxronlashtirish algoritmlarining nozik tomonlarini tushuna oladigan noyob dasturchi. Kodning ba'zilari POSIX davridan oldin yozilgan va Unix API o'sha paytdagidan juda farq qilar edi. Bundan tashqari, shovqinli chiziqlardagi shovqinlardan signalni tozalash uchun statistikani bilish kerak.
NTS NTPni tuzatishga birinchi urinish emas edi. Buzg'unchilar DDoS hujumlarini kuchaytirish uchun NTP zaifliklaridan foydalanishni o'rganganlaridan so'ng, tub o'zgarishlar zarurligi ayon bo'ldi. Va NTS loyihalari tayyorlanayotgan va yakunlanayotgan bir paytda, 2014 yil oxirida AQSh Milliy Fan Jamg'armasi zudlik bilan NTPni modernizatsiya qilish uchun grant ajratdi.
Ishchi guruhni faqat kimdir emas, balki boshqargan - Open Source hamjamiyatining asoschilari va ustunlaridan biri va kitob muallifi . Erik va uning do'stlari birinchi bo'lib NTP kodini BitKeeper platformasidan git-ga ko'chirishga harakat qilishdi, ammo bu amalga oshmadi. Loyiha rahbari Xarlan Stenn bu qarorga qarshi chiqdi va muzokaralar to'xtab qoldi. Keyin loyiha kodini almashtirishga qaror qilindi va NTPSec paydo bo'ldi.
Kuchli tajriba, jumladan GPSD ustida ishlash, matematik fon va qadimiy kodni o'qishning sehrli mahorati - Erik Raymond aynan shunday loyihani amalga oshira oladigan xaker edi. Jamoa kod migratsiya bo'yicha mutaxassisni topdi va atigi 10 hafta ichida NTP GitLab-da. Ish qizg'in ketayotgan edi.
Erik Raymond jamoasi vazifani xuddi Auguste Rodin tosh blok bilan bajargandek o'z zimmasiga oldi. Eski kodning 175 KLOC-ni olib tashlash orqali ular ko'plab xavfsizlik teshiklarini yopish orqali hujum yuzasini sezilarli darajada kamaytirishga muvaffaq bo'lishdi.
Bu tarqatish tarkibiga kiritilganlarning to'liq bo'lmagan ro'yxati:
- Hujjatsiz, eskirgan, eskirgan yoki buzilgan refclock.
- Foydalanilmayotgan ICS kutubxonasi.
- libopts/avtojen.
- Windows uchun eski kod.
- ntpdc.
- Avtomatik kalit.
- Ntpq C kodi Pythonda qayta yozilgan.
- Sntp/ntpdig C kodi Pythonda qayta yozilgan.
Kodni tozalashdan tashqari, loyihada boshqa vazifalar ham bor edi. Bu erda yutuqlarning qisman ro'yxati:
- Bufer to'lib ketishidan kod himoyasi sezilarli darajada yaxshilandi. Bufer to'lib ketishining oldini olish uchun barcha xavfli string funktsiyalari (strcpy/strcat/strtok/sprintf/vsprintf/gets) bufer hajmi chegaralarini qo'llaydigan xavfsiz versiyalar bilan almashtirildi.
- NTS qo'llab-quvvatlashi qo'shildi.
- Jismoniy qurilmalarni ulash orqali vaqt qadamining aniqligi o'n baravar yaxshilandi. Buning sababi shundaki, zamonaviy kompyuter soatlari NTP paydo bo'lgan vaqtga qaraganda ancha aniqroq bo'ldi. Buning eng katta benefitsiarlari GPSDO va maxsus vaqt radiolari edi.
- Dasturlash tillari soni ikkiga qisqardi. Perl, awk va hatto S skriptlari o'rniga, endi hammasi Python. Shu sababli, kodni qayta ishlatish uchun ko'proq imkoniyatlar mavjud.
- Loyihada autotools skriptlari o'rniga dasturiy ta'minotni yaratish tizimi qo'llanila boshlandi .
- Yangilangan va qayta tashkil etilgan loyiha hujjatlari. Qarama-qarshi va ba'zan arxaik hujjatlar to'plamidan ular juda qulay hujjatlarni yaratdilar. Har bir buyruq qatori kaliti va har bir konfiguratsiya ob'ekti endi haqiqatning yagona versiyasiga ega. Bundan tashqari, man sahifalari va veb-hujjatlari endi bir xil asosiy fayllardan yaratilgan.
NTPSec bir qator Linux distributivlari uchun mavjud. Hozirgi vaqtda eng so'nggi barqaror versiya 1.1.8, Gentoo Linux uchun bu oxirgidan oldingi versiya.
(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]
Xronika
Eski NTPni xavfsizroq muqobil bilan almashtirishga yana bir urinish bo'ldi. Chrony, NTPSec-dan farqli o'laroq, boshidan boshlab yozilgan va beqaror tarmoq ulanishlari, tarmoqning qisman mavjudligi yoki tiqilib qolishi va harorat o'zgarishi kabi keng sharoitlarda ishonchli ishlash uchun mo'ljallangan. Bundan tashqari, chrony boshqa afzalliklarga ega:
- chrony tizim soatini kattaroq aniqlik bilan tezroq sinxronlashtirishi mumkin;
- chrony kichikroq, kamroq xotira iste'mol qiladi va faqat kerak bo'lganda protsessorga kiradi. Bu resurslar va energiyani tejash uchun katta ortiqcha;
- chrony Linux-da apparat vaqt belgilarini qo'llab-quvvatlaydi, bu mahalliy tarmoqlarda juda aniq sinxronizatsiya qilish imkonini beradi.
Biroq, chrony-da eski NTP ning ba'zi xususiyatlari, masalan, translyatsiya va multicast mijoz/server yo'q. Bundan tashqari, klassik NTP ko'proq operatsion tizimlar va platformalarni qo'llab-quvvatlaydi.
Serverning funksiyalarini va chronyd jarayoniga NTP so'rovlarini o'chirish uchun chrony.conf fayliga 0 portini yozish kifoya. Bu NTP mijozlari yoki tengdoshlari uchun vaqtni saqlab qolishning hojati bo'lmagan hollarda amalga oshiriladi. 2.0 versiyasidan boshlab, NTP server porti faqat ruxsat berish direktivasi yoki tegishli buyruq bilan ruxsat berilganda yoki NTP tengdoshi sozlanganda yoki translyatsiya direktivasi ishlatilganda ochiq bo'ladi.
Dastur ikkita moduldan iborat.
- chronyd - bu fonda ishlaydigan xizmat. U tizim soati va tashqi vaqt serveri o'rtasidagi farq haqida ma'lumot oladi va mahalliy vaqtni moslashtiradi. Shuningdek, u NTP protokolini amalga oshiradi va mijoz yoki server sifatida harakat qilishi mumkin.
- chronyc - bu dasturlarni kuzatish va boshqarish uchun buyruq qatori yordam dasturi. Turli xil xizmat parametrlarini nozik sozlash uchun ishlatiladi, masalan, chronyd ishlashda davom etayotganda NTP serverlarini qo'shish yoki o'chirish imkonini beradi.
RedHat Linux-ning 7-versiyasidan beri chrony vaqtni sinxronlashtirish xizmati sifatida. Paket boshqa Linux distributivlari uchun ham mavjud. Eng so'nggi barqaror versiya 3.5, v4.0 versiyasini chiqarishga tayyorlanmoqda.
(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]
Ofis tarmog'ida vaqtni sinxronlashtirish uchun Internetda o'zingizning uzoq chrony serveringizni qanday o'rnatishingiz mumkin. Quyida VPS o'rnatish misoli keltirilgan.
VPS-da RHEL / CentOS-da Chrony-ni sozlash misoli
Keling, biroz mashq qilaylik va VPS-da o'z NTP serverimizni o'rnatamiz. Bu juda oddiy, faqat RuVDS veb-saytida tegishli tarifni tanlang, tayyor serverni oling va o'nlab oddiy buyruqlarni kiriting. Bizning maqsadlarimiz uchun bu variant juda mos keladi.

Keling, xizmatni sozlashga o'tamiz va birinchi navbatda chrony paketini o'rnatamiz.
[root@server ~]$ yum install chronyRHEL 8 / CentOS 8 boshqa paket menejeridan foydalanadi.
[root@server ~]$ dnf install chronyChrony-ni o'rnatganingizdan so'ng siz xizmatni ishga tushirishingiz va faollashtirishingiz kerak.
[root@server ~]$ systemctl enable chrony --nowAgar xohlasangiz, javob vaqtini qisqartirish uchun NPT serverlarini eng yaqin mahalliy serverlar bilan almashtirib, /etc/chrony.conf ga o'zgartirishlar kiritishingiz mumkin.
# 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
Keyinchalik, biz NTP serverini ko'rsatilgan hovuz tugunlari bilan sinxronlashni o'rnatdik.
[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service
Shuningdek, NTP portini tashqariga ochish kerak, aks holda xavfsizlik devori mijoz tugunlaridan kiruvchi ulanishlarni bloklaydi.
[root@server ~]$ firewall-cmd --add-service=ntp --permanent
[root@server ~]$ firewall-cmd --reload
Mijoz tomonida vaqt mintaqasini to'g'ri belgilash kifoya.
[root@client ~]$ timedatectl set-timezone Europe/Moscow/etc/chrony.conf fayli NTP server chrony bilan ishlaydigan VPS serverimizning IP yoki xost nomini belgilaydi.
server my.vps.serverVa nihoyat, mijozda vaqtni sinxronlashni boshlash.
[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true
Keyingi safar men sizga Internetsiz vaqtni sinxronlashtirish uchun qanday imkoniyatlar borligini aytib beraman.
Manba: www.habr.com
