TCP/IP арқылы байланысатын миллиондаған үлкенді-кішілі құрылғыларыңыз болса, уақыттың өтірік болмайтынына қалай көз жеткізуге болады? Өйткені, олардың әрқайсысының сағаты бар және олардың барлығына уақыт дұрыс болуы керек. Бұл мәселені ntpсіз айналып өту мүмкін емес.
Бір минутқа өнеркәсіптік АТ инфрақұрылымының бір сегментінде уақыт өте келе қызметтерді синхрондау қиындықтары бар екенін елестетіп көрейік. Бірден Enterprise бағдарламалық құралының кластерлік стегі сәтсіздікке ұшырайды, домендер ыдырай бастайды, шеберлер мен күту режиміндегі түйіндер күй-кводы қалпына келтіруге сәтсіз ұмтылады.
Сондай-ақ, шабуылдаушы MiTM немесе DDOS шабуылы арқылы уақытты әдейі бұзуға тырысуы мүмкін. Мұндай жағдайда бәрі болуы мүмкін:
- Пайдаланушы тіркелгісінің құпия сөздерінің мерзімі аяқталады;
- X.509 сертификаттарының мерзімі аяқталады;
- TOTP екі факторлы аутентификация бұдан былай жұмыс істемейді;
- сақтық көшірмелер ескіреді және жүйе оларды жояды;
- DNSSec бұзылады.
Әрбір АТ бөлімшесі уақытты синхрондау қызметтерінің сенімді жұмысына мүдделі екені анық және олар өнеркәсіптік пайдалануда сенімді және қауіпсіз болса жақсы болар еді.
25 минут ішінде NTP үзіңіз
Желілік протоколдар - мыңжылдықтардың бір ерекшелігі бар, олар болды және енді ештеңеге жарамайды, бірақ энтузиастардың және қаржыландырудың сыни массасы жинақталған кезде де оларды ауыстыру оңай емес.
Классикалық NTP туралы негізгі шағым - зиянкестердің шабуылдарынан қорғайтын сенімді механизмдердің болмауы. Бұл мәселені шешу үшін әртүрлі әрекеттер жасалды. Бұған қол жеткізу үшін алдымен симметриялық кілттерді алмасуға арналған алдын ала ортақ кілт (PSK) механизмін енгіздік.
Өкінішке орай, бұл әдіс қарапайым себеппен ақталмады - ол жақсы масштабталмайды. Серверге байланысты клиент жағында қолмен конфигурациялау қажет. Бұл басқа клиентті дәл осылай қосу мүмкін емес дегенді білдіреді. NTP серверінде бірдеңе өзгерсе, барлық клиенттерді қайта конфигурациялау қажет.
Содан кейін олар AutoKey-ді ойлап тапты, бірақ олар бірден алгоритмнің дизайнында бірқатар маңызды осалдықтарды анықтады және олар одан бас тартуға мәжбүр болды. Мәселе мынада, тұқымда тек 32 бит бар, ол тым кішкентай және фронтальды шабуыл үшін жеткілікті есептеу күрделілігін қамтымайды.
- Кілт идентификаторы – симметриялық 32-разрядты кілт;
- MAC (хабарламаның аутентификация коды) – NTP пакетінің бақылау сомасы;
Автоматты кілт келесідей есептеледі.
Autokey=H(Sender-IP||Receiver-IP||KeyID||Cookie)Мұндағы H() – криптографиялық хэш-функция.
Дәл осы функция пакеттердің бақылау сомасын есептеу үшін қолданылады.
MAC=H(Autokey||NTP packet)Пакеттік тексерулердің тұтастығы cookie файлдарының түпнұсқалығына байланысты екені белгілі болды. Оларды алғаннан кейін сіз автокілтті қалпына келтіріп, содан кейін MAC жалғандығын жасай аласыз. Дегенмен, оларды жасау кезінде NTP сервері тұқымды пайдаланады. Бұл жерде аулау жатыр.
Cookie=MSB_32(H(Client IP||Server IP||0||Server Seed))MSB_32 функциясы md5 хэшті есептеу нәтижесінен ең маңызды 32 битті кесіп тастайды. Сервер параметрлері өзгеріссіз қалғанша клиент cookie файлы өзгермейді. Содан кейін шабуылдаушы тек бастапқы нөмірді қалпына келтіре алады және cookie файлдарын дербес жасай алады.
Біріншіден, NTP серверіне клиент ретінде қосылып, cookie файлдарын алуыңыз қажет. Осыдан кейін дөрекі күш әдісін қолдана отырып, шабуылдаушы қарапайым алгоритм бойынша бастапқы нөмірді қалпына келтіреді.
Күш қолдану әдісімен бастапқы санды есептеуге шабуыл жасау алгоритмі.
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 мекенжайлары белгілі, сондықтан жасалған cookie NTP серверінен алынғанға сәйкес келгенше 2^32 хэшті жасау ғана қалады. Intel Core i5 жүйесі бар кәдімгі үй станциясында бұл 25 минутты алады.
NTS - жаңа автокілт
Autokey-де мұндай қауіпсіздік саңылауларына шыдау мүмкін емес еді, ал 2012 жылы ол пайда болды хаттама. Атауын бұзу үшін олар ребрендинг жасауды ұйғарды, сондықтан Autokey v.2 желі уақытының қауіпсіздігі деп аталды.
NTS протоколы NTP қауіпсіздігінің кеңейтімі болып табылады және қазіргі уақытта тек Unicast режимін қолдайды. Ол пакеттік манипуляциядан күшті криптографиялық қорғауды қамтамасыз етеді, аңдуды болдырмайды, жақсы масштабталады, желі пакетінің жоғалуына төзімді және қосылым қауіпсіздігі кезінде келтірілген дәлдік жоғалуының ең аз мөлшеріне әкеледі.
NTS қосылымы төменгі деңгей протоколдарын пайдаланатын екі кезеңнен тұрады. Қосулы бірінші Бұл кезеңде клиент пен сервер әртүрлі қосылым параметрлері бойынша келіседі және барлық ілеспе деректер жиынымен кілттерді қамтитын cookie файлдарымен алмасады. Қосулы екіншіден Бұл кезеңде клиент пен NTP сервері арасында нақты қорғалған NTS сеансы өтеді.

NTS екі төменгі деңгейлі протоколдардан тұрады: TLS арқылы қауіпсіз қосылымды бастайтын Network Time Security Key Exchange (NTS-KE) және NTPv4, NTP протоколының соңғы нұсқасы. Төменде бұл туралы аздап.
Бірінші кезең – НТС КЕ
Бұл кезеңде NTP клиенті NTS KE серверімен бөлек TCP қосылымы арқылы TLS 1.2/1.3 сеансын бастайды. Бұл сеанс кезінде келесі жағдай орын алады.
- Параметрлерді тараптар анықтайды екінші кезеңнің алгоритмі.
- Тараптар екінші төменгі деңгейдегі хаттаманы анықтайды, бірақ қазіргі уақытта тек NTPv4 қолдау көрсетіледі.
- Тараптар NTP серверінің IP мекенжайы мен портын анықтайды.
- NTS KE сервері NTPv4 астында cookie файлдарын шығарады.
- Тараптар cookie материалынан симметриялық кілттердің жұбын (C2S және S2C) шығарады.
Бұл тәсілдің үлкен артықшылығы қосылым параметрлеріне қатысты құпия ақпаратты жіберудің барлық ауыртпалығы дәлелденген және сенімді TLS протоколына түседі. Бұл қауіпсіз NTP қол алысуы үшін өз дөңгелегін қайта ойлап табу қажеттілігін жояды.
Екінші кезең - NTS қорғауындағы NTP
Екінші қадамда клиент уақытты NTP серверімен қауіпсіз синхрондайды. Осы мақсатта ол NTPv4 пакеттік құрылымында төрт арнайы кеңейтімді (кеңейтім өрістерін) жібереді.
- Бірегей идентификатор кеңейтімінде қайталанатын шабуылдардың алдын алу үшін кездейсоқ ретсіздік бар.
- NTS Cookie кеңейтімінде клиентке қолжетімді NTP cookie файлдарының бірі бар. Тек клиентте симметриялы AAED C2S және S2C кілттері болғандықтан, NTP сервері оларды cookie материалынан шығарып алуы керек.
- NTS Cookie толтырғышының кеңейтімі клиентке серверден қосымша cookie файлдарын сұрау тәсілі болып табылады. Бұл кеңейтім NTP серверінің жауабы сұраудан ұзағырақ болмауын қамтамасыз ету үшін қажет. Бұл күшейту шабуылдарының алдын алуға көмектеседі.
- NTS аутентификаторы және шифрланған кеңейтім өрістерінің кеңейтімінде C2S кілті, NTP тақырыбы, уақыт белгілері және ілеспе деректер ретінде жоғарыдағы EF бар AAED шифры бар. Бұл кеңейтімсіз уақыт белгілерін бұрмалауға болады.

Клиенттен сұрауды алғаннан кейін сервер NTP пакетінің түпнұсқалығын тексереді. Ол үшін ол cookie файлдарының шифрын ашуы, AAED алгоритмі мен кілттерін шығаруы керек. NTP пакетінің жарамдылығын сәтті тексергеннен кейін сервер клиентке келесі пішімде жауап береді.
- Бірегей идентификатор кеңейтімі - бұл клиент сұрауының айна көшірмесі, қайталау шабуылдарына қарсы шара.
- NTS Cookie кеңейтімі сеансты жалғастыру үшін қосымша cookie файлдары.
- NTS Authenticator және шифрланған кеңейтім өрістерінің кеңейтімі құрамында S2C кілті бар AEAD шифры бар.
Екінші қол алысуды бірінші қадамды айналып өтіп, бірнеше рет қайталауға болады, өйткені әрбір сұрау мен жауап клиентке қосымша cookie файлдарын береді. Бұл PKI деректерін есептеу және жіберудің салыстырмалы түрде ресурсты қажет ететін TLS операцияларының қайталанатын сұраулар санына бөлінуінің артықшылығы бар. Бұл, әсіресе, барлық негізгі функцияларды симметриялық криптография саласының барлық TLS стегін басқа құрылғыға тасымалдай отырып, бірнеше функцияларға жинақтауға болатын мамандандырылған FPGA хронометрлері үшін өте ыңғайлы.
NTPSec
NTP ерекшелігі неде? Жобаның авторы Дэйв Миллс өзінің кодын мүмкіндігінше құжаттауға тырысқанына қарамастан, бұл 35 жастағы уақытты синхрондау алгоритмдерінің қыр-сырын түсіне алатын сирек бағдарламашы. Кейбір кодтар POSIX дәуіріне дейін жазылған, ал Unix API сол кездегі қазіргіден мүлдем басқаша болды. Сонымен қатар, шулы желілердегі кедергілерден сигналды тазарту үшін статистиканы білу қажет.
NTS NTP түзетудің бірінші әрекеті емес еді. Шабуылшылар DDoS шабуылдарын күшейту үшін NTP осалдықтарын пайдалануды үйренгеннен кейін түбегейлі өзгерістер қажет екені белгілі болды. Ал НТС жобалары дайындалып, пысықталып жатқанда, АҚШ Ұлттық ғылым қоры 2014 жылдың соңында ҰТП-ны жаңғыртуға шұғыл түрде грант бөлді.
Жұмыс тобын біреу ғана емес, басқарды - Open Source қауымдастығының негізін қалаушылардың және тіректерінің бірі және кітаптың авторы . Эрик пен оның достары ең алдымен NTP кодын BitKeeper платформасынан git-ке көшіруге тырысты, бірақ олай болмады. Жоба жетекшісі Харлан Стенн бұл шешімге қарсы болды және келіссөздер тоқтап қалды. Содан кейін жоба кодын айыру туралы шешім қабылданды және NTPSec дүниеге келді.
Қатты тәжірибе, соның ішінде GPSD жұмысы, математикалық фон және ежелгі кодты оқудың сиқырлы дағдысы - Эрик Рэймонд дәл осындай жобаны жүзеге асыра алатын хакер болды. Команда кодты көшіру жөніндегі маманды және бар болғаны 10 аптада NTP тапты GitLab жүйесінде. Жұмыс қызу жүріп жатты.
Эрик Рэймондтың командасы тапсырманы Огюст Роденнің тас блокпен жасағаны сияқты шешті. Ескі кодтың 175 KLOC жою арқылы олар көптеген қауіпсіздік тесіктерін жауып, шабуылдың бетін айтарлықтай азайта алды.
Мұнда дистрибуцияға енгізілгендердің толық емес тізімі берілген:
- Құжатсыз, ескірген, ескірген немесе бұзылған қайта сағат.
- Пайдаланылмаған ICS кітапханасы.
- липопт/автоген.
- Windows жүйесіне арналған ескі код.
- ntpdc.
- Автоматты кілт.
- ntpq C коды Python тілінде қайта жазылды.
- sntp/ntpdig C коды Python тілінде қайта жазылды.
Кодты тазалаудан басқа, жобаның басқа да міндеттері болды. Міне, жетістіктердің ішінара тізімі:
- Аралық толып кетуден кодты қорғау айтарлықтай жақсарды. Буфердің толып кетуін болдырмау үшін барлық қауіпті жол функциялары (strcpy/strcat/strtok/sprintf/vsprintf/gets) буфер өлшемі шектеулерін жүзеге асыратын қауіпсіз нұсқалармен ауыстырылды.
- NTS қолдауы қосылды.
- Физикалық жабдықты байланыстыру арқылы уақыт қадамының дәлдігі он есе жақсарды. Бұл қазіргі заманғы компьютерлік сағаттар NTP пайда болған кездегіден әлдеқайда дәлірек болғанымен байланысты. Мұның ең үлкен бенефициарлары GPSDO және арнайы уақыт радиолары болды.
- Бағдарламалау тілдерінің саны екіге дейін қысқарды. Perl, awk және тіпті S сценарийлерінің орнына қазір бәрі Python. Осыған байланысты кодты қайта пайдалану мүмкіндіктері көбірек.
- Автокөлік сценарийлерінің кеспелерінің орнына жоба бағдарламалық жасақтаманы құрастыру жүйесін қолдана бастады .
- Жаңартылған және қайта ұйымдастырылған жобалық құжаттама. Қарама-қайшы, кейде архаикалық құжаттар жинағынан олар өте қолайлы құжаттаманы жасады. Әрбір пәрмен жолы қосқышында және әрбір конфигурация нысанында енді ақиқаттың жалғыз нұсқасы бар. Сонымен қатар, адам беттері мен веб-құжаттама енді бір негізгі файлдардан жасалған.
NTPSec бірқатар Linux дистрибутивтері үшін қол жетімді. Қазіргі уақытта ең соңғы тұрақты нұсқасы 1.1.8, Gentoo Linux үшін бұл соңғыдан бұрынғы нұсқасы.
(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]
Хроника
Ескі NTP-ті қауіпсіз баламамен ауыстырудың тағы бір әрекеті болды. Chrony, NTPSec-тен айырмашылығы, басынан бастап жазылған және тұрақты емес желілік қосылымдарды, желілік жартылай қолжетімділікті немесе кептелісті және температураның өзгеруін қоса алғанда, кең ауқымды шарттарда сенімді жұмыс істеуге арналған. Сонымен қатар, хронияның басқа да артықшылықтары бар:
- chrony жүйелік сағатты жоғары дәлдікпен жылдамырақ синхрондауы мүмкін;
- chrony кішірек, жадты аз тұтынады және процессорға қажет кезде ғана қол жеткізеді. Бұл ресурстар мен энергияны үнемдеу үшін үлкен плюс;
- chrony жергілікті желілерде өте дәл үндестіруге мүмкіндік беретін Linux жүйесінде аппараттық уақыт белгілерін қолдайды.
Дегенмен, хронияның ескі NTP мүмкіндіктерінің кейбіреулері жоқ, мысалы, тарату және мультикаст клиент/сервер. Сонымен қатар, классикалық NTP операциялық жүйелер мен платформалардың көбірек санын қолдайды.
Сервердің функционалдығын және chronyd процесіне арналған NTP сұрауларын өшіру үшін chrony.conf файлына 0 портын жазыңыз. Бұл NTP клиенттері немесе әріптестері үшін уақытты сақтау қажет болмаған жағдайларда жасалады. 2.0 нұсқасы бойынша NTP серверінің порты рұқсат беру директивасы немесе пәрмені арқылы рұқсат берілгенде немесе NTP теңі конфигурацияланғанда немесе хабар тарату директивасы пайдаланылғанда ғана ашық болады.
Бағдарлама екі модульден тұрады.
- chronyd - фондық режимде жұмыс істейтін қызмет. Ол жүйелік сағат пен сыртқы уақыт сервері арасындағы айырмашылық туралы ақпаратты алады және жергілікті уақытты реттейді. Ол сонымен қатар NTP протоколын жүзеге асырады және клиент немесе сервер ретінде әрекет ете алады.
- chronyc — бағдарламаны бақылауға және басқаруға арналған пәрмен жолы утилитасы. Түрлі қызмет параметрлерін дәл реттеу үшін пайдаланылады, мысалы, chronyd іске қосылуын жалғастырған кезде NTP серверлерін қосуға немесе жоюға мүмкіндік береді.
RedHat Linux 7 нұсқасынан бастап chrony уақытты синхрондау қызметі ретінде. Пакет басқа Linux дистрибутивтері үшін де қол жетімді. Соңғы тұрақты нұсқасы 3.5, 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]
Кеңсе желісінде уақытты синхрондау үшін Интернетте өзіңіздің қашықтағы хроникалық серверіңізді қалай орнатуға болады. Төменде VPS орнатудың мысалы берілген.
VPS жүйесінде RHEL / CentOS жүйесінде Chrony орнату мысалы
Енді біраз жаттығып, VPS-те өз NTP серверімізді орнатайық. Бұл өте қарапайым, RuVDS веб-сайтында сәйкес тарифті таңдап, дайын серверді алыңыз және ондаған қарапайым пәрмендерді теріңіз. Біздің мақсаттарымыз үшін бұл опция өте қолайлы.

Қызметті орнатуға көшейік және алдымен chrony бумасын орнатамыз.
[root@server ~]$ yum install chronyRHEL 8 / CentOS 8 басқа пакет менеджерін пайдаланады.
[root@server ~]$ dnf install chronychrony орнатқаннан кейін қызметті іске қосып, іске қосу керек.
[root@server ~]$ systemctl enable chrony --nowҚажет болса, жауап беру уақытын қысқарту үшін NPT серверлерін ең жақын жергілікті серверлермен ауыстыра отырып, /etc/chrony.conf сайтына өзгерістер енгізуге болады.
# 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
Содан кейін біз NTP серверін көрсетілген пулдың түйіндерімен синхрондауды орнатамыз.
[root@server ~]$ timedatectl set-ntp true
[root@server ~]$ systemctl restart chronyd.service
Сондай-ақ NTP портын сыртқа ашу қажет, әйтпесе брандмауэр клиенттік түйіндерден келетін қосылымдарды блоктайды.
[root@server ~]$ firewall-cmd --add-service=ntp --permanent
[root@server ~]$ firewall-cmd --reload
Клиент жағында уақыт белдеуін дұрыс орнату жеткілікті.
[root@client ~]$ timedatectl set-timezone Europe/Moscow/etc/chrony.conf файлы NTP серверінің хрониясымен жұмыс істейтін VPS серверіміздің IP немесе хост атауын көрсетеді.
server my.vps.serverАқырында, клиентте уақытты синхрондауды бастау.
[root@client ~]$ systemctl enable --now chronyd
[root@client ~]$ timedatectl set-ntp true
Келесі жолы интернетсіз уақытты синхрондау үшін қандай опциялар бар екенін айтамын.
Ақпарат көзі: www.habr.com
