Убакытты синхрондоштуруу кантип коопсуз болуп калды

Убакытты синхрондоштуруу кантип коопсуз болуп калды
TCP/IP аркылуу байланышып турган миллиондогон чоң-кичине түзмөктөрүңүз болсо, убакыт калп эмес экенине кантип ынануу керек? Анткени, алардын ар биринин сааты бар, алардын бардыгына убакыт туура болушу керек. Бул көйгөйдү ntpсиз айланып өтүү мүмкүн эмес.

Келгиле, бир мүнөткө элестетип көрөлү, өнөр жай IT инфраструктурасынын бир сегментинде убакыттын өтүшү менен кызматтарды синхрондоштурууда кыйынчылыктар бар. Ошол замат Enterprise программалык камсыздоонун кластердик стекти иштен чыга баштайт, домендер ыдырайт, мастерлер жана күтүү түйүндөрү статус-квону калыбына келтирүүгө ийгиликсиз умтулушат.

Ошондой эле чабуулчу атайылап MiTM же DDOS чабуулу аркылуу убакытты бузууга аракет кылышы мүмкүн. Мындай кырдаалда баары болушу мүмкүн:

  • Колдонуучунун аккаунтунун сырсөздөрүнүн мөөнөтү бүтөт;
  • X.509 сертификаттарынын мөөнөтү бүтөт;
  • TOTP эки факторлуу аутентификация иштебей калат;
  • камдык көчүрмөлөр эскирип, система аларды жок кылат;
  • DNSSec бузулат.

Ар бир IT бөлүмү убакытты синхрондоштуруу кызматтарынын ишенимдүү иштешине кызыкдар экендиги түшүнүктүү жана алар өнөр жайлык эксплуатацияда ишенимдүү жана коопсуз болсо жакшы болмок.

25 мүнөттө NTP сындырыңыз

Тармактык протоколдор - millennials бир өзгөчөлүгү бар, алар болгон эскирген жана мындан ары эч нерсеге жарабайт, бирок энтузиасттардын жана каржылоонун критикалык массасы топтолгондо да аларды алмаштыруу оңой эмес.

Классикалык НТПнын негизги даттануусу - бузукулардын чабуулдарынан коргоо үчүн ишенимдүү механизмдердин жоктугу. Бул маселени чечүү үчүн ар кандай аракеттер көрүлдү. Буга жетишүү үчүн биз алгач симметриялык ачкычтарды алмашуу үчүн алдын ала бөлүшүлгөн ачкыч (PSK) механизмин ишке ашырдык.

Тилекке каршы, бул ыкма жөнөкөй себептерден улам өзүн актаган жок - ал жакшы масштабда эмес. Кол менен конфигурациялоо серверге жараша кардар тарабынан талап кылынат. Бул сиз жөн эле башка кардарды кошо албайсыз дегенди билдирет. Эгер NTP серверинде бир нерсе өзгөрсө, бардык кардарлар кайра конфигурацияланышы керек.

Андан кийин алар AutoKey менен келишти, бирок алар дароо эле алгоритмдин дизайнында бир катар олуттуу кемчиликтерди таап, андан баш тартууга туура келди. Кеп нерсе, урук 32-битти гана камтыйт, ал өтө кичинекей жана фронталдык чабуул үчүн жетиштүү эсептөө татаалдыгын камтыбайт.

  • Ачкычтын идентификатору - симметриялык 32-бит ачкыч;
  • MAC (билдирүүнүн аутентификация коду) - NTP пакетинин текшерүү суммасы;

Автоачкыч төмөнкүчө эсептелет.

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

Бул жерде H() - криптографиялык хэш-функция.

Ушул эле функция пакеттердин контролдук суммасын эсептөө үчүн колдонулат.

MAC=H(Autokey||NTP packet)

Көрсө, пакетти текшерүүнүн бүтүндүгү кукилердин аныктыгына таянат. Аларга ээ болгондон кийин, сиз автоачкычты калыбына келтирип, андан кийин MACти бурмалай аласыз. Бирок, аларды генерациялоодо NTP сервери үрөндү колдонот. Бул жерде кармалып турат.

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

MSB_32 функциясы md5 хэш эсептөө жыйынтыгынан 32 эң маанилүү битти кесип салат. Сервердин параметрлери өзгөрүүсүз калганда кардар куки өзгөрбөйт. Андан кийин чабуулчу баштапкы номерди гана калыбына келтирип, кукилерди өз алдынча түзө алат.

Биринчиден, сиз NTP серверине кардар катары туташып, кукилерди алышыңыз керек. Андан кийин катаал күч ыкмасын колдонуп, чабуулчу жөнөкөй алгоритм боюнча баштапкы санды калыбына келтирет.

Оор күч ыкмасын колдонуу менен баштапкы санды эсептөөгө чабуул коюунун алгоритми.

   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

IP даректери белгилүү, андыктан түзүлгөн куки NTP серверинен алынганга дал келгенге чейин 2^32 хэшти түзүү гана калды. Intel Core i5 менен кадимки үй станциясында бул 25 мүнөттү талап кылат.

НТС - жаңы Autokey

Autokeyде мындай коопсуздук тешиктерине чыдай албай, 2012-жылы пайда болгон жаңы версия протокол. Атын бузуу үчүн алар ребрендинг жүргүзүүнү чечишти, ошондуктан Autokey v.2 Network Time Security деп аталды.

NTS протоколу NTP коопсуздук кеңейтүүсү болуп саналат жана учурда бир гана unicast режимин колдойт. Ал пакеттик манипуляциядан күчтүү криптографиялык коргоону камсыздайт, аңдып калуудан сактайт, жакшы масштабдалат, тармак пакетинин жоголушуна туруктуу жана туташуу коопсуздугу учурунда эң аз өлчөмдө тактык жоготууга алып келет.

НТС байланышы төмөнкү катмардын протоколдорун колдонгон эки этаптан турат. Күйүк биринчи Бул этапта кардар менен сервер ар кандай туташуу параметрлери боюнча макулдашат жана бардык коштолгон маалымат топтому менен ачкычтарды камтыган кукилерди алмашат. Күйүк экинчи Бул этапта чыныгы корголгон NTS сеансы кардар менен NTP серверинин ортосунда өтөт.

Убакытты синхрондоштуруу кантип коопсуз болуп калды

NTS төмөнкү деңгээлдеги эки протоколдон турат: Network Time Security Key Exchange (NTS-KE), ал TLS аркылуу коопсуз туташууну демилгелейт жана NTPv4, NTP протоколунун эң акыркы инкарнациясы. Бул тууралуу төмөндө бир аз көбүрөөк.

Биринчи этап - НТС КЕ

Бул этапта NTP кардары NTS KE сервери менен өзүнчө TCP байланышы аркылуу TLS 1.2/1.3 сеансын баштайт. Бул сессиянын жүрүшүндө төмөнкүлөр болот.

  • Параметрлерди тараптар аныкташат AEAD экинчи этап үчүн алгоритм.
  • Тараптар экинчи төмөнкү деңгээлдеги протоколду аныкташат, бирок учурда NTPv4 гана колдоого алынат.
  • Тараптар NTP серверинин IP дарегин жана портун аныкташат.
  • NTS KE сервери NTPv4 астында кукилерди чыгарат.
  • Тараптар куки материалынан бир жуп симметриялык ачкычтарды (C2S жана S2C) чыгарышат.

Бул ыкманын чоң артыкчылыгы бар, бул туташуу параметрлери боюнча жашыруун маалыматты берүүнүн бардык түйшүгү далилденген жана ишенимдүү TLS протоколуна туура келет. Бул коопсуз NTP кол алышуу үчүн өз дөңгөлөкүңүздү кайра ойлоп табуу зарылдыгын жок кылат.

Экинчи этап - НТС коргоосунда НТП

Экинчи этапта кардар NTP сервери менен убакытты коопсуз синхрондошот. Бул максатта, ал NTPv4 пакет структурасында төрт атайын кеңейтүүнү (кеңейтүү талааларын) өткөрүп берет.

  • Уникалдуу Идентификатор Кеңейтүүсү кайталанма чабуулдардын алдын алуу үчүн кокустуктарды камтыйт.
  • NTS Cookie кеңейтүүсү кардар үчүн жеткиликтүү NTP кукилеринин бирин камтыйт. Кардардын гана симметриялуу AAED C2S жана S2C ачкычтары болгондуктан, NTP сервери аларды куки материалынан чыгарып алышы керек.
  • NTS Cookie Placeholder Extension - бул кардар үчүн серверден кошумча кукилерди талап кылуу жолу. Бул кеңейтүү NTP серверинин жообу суроо-талаптан узак эмес экенин камсыз кылуу үчүн зарыл. Бул күчөтүү чабуулдарын алдын алууга жардам берет.
  • NTS Authenticator жана Encrypted Extension Fields Extension C2S ачкычы менен AAED шифрин, NTP башын, убакыт белгилерин жана коштоочу маалыматтар катары жогорудагы EFди камтыйт. Бул кеңейтүүсүз убакыт белгилерин бурмалоого болот.

Убакытты синхрондоштуруу кантип коопсуз болуп калды

Кардардын суроо-талабын алгандан кийин, сервер NTP пакетинин аныктыгын текшерет. Бул үчүн, ал кукилерди чечмелеп, AAED алгоритмин жана ачкычтарын чыгарып алышы керек. NTP пакетинин жарактуулугун ийгиликтүү текшергенден кийин сервер кардарга төмөнкү форматта жооп берет.

  • Unique Identifier Extension - бул кардардын суроо-талабынын күзгү көчүрмөсү, кайталоо чабуулдарына каршы чара.
  • Сеансты улантуу үчүн NTS Cookie кеңейтүүсү.
  • NTS Authenticator жана Encrypted Extension Fields Extension S2C ачкычы менен AEAD шифрин камтыйт.

Экинчи кол алышууну биринчи кадамды айланып өтүү менен көп жолу кайталаса болот, анткени ар бир суроо жана жооп кардарга кошумча кукилерди берет. Мунун артыкчылыгы PKI маалыматтарын эсептөө жана берүү боюнча салыштырмалуу ресурсту көп талап кылган TLS операциялары кайталанган суроо-талаптардын санына бөлүнөт. Бул өзгөчө FPGA таймкеперлери үчүн өзгөчө ыңгайлуу, анткени бардык негизги функциялар симметриялык криптография тармагынан бир нече функцияларга топтолуп, бүт TLS стектерин башка түзүлүшкө өткөрүп берет.

NTPSec

NTP өзгөчөлүгү эмнеде? Долбоордун автору Дэйв Миллс өзүнүн кодун мүмкүн болушунча документтештирүүгө аракет кылганына карабастан, бул сейрек программист, ал 35 жылдан бери убакытты синхрондоштуруу алгоритмдеринин татаалдыктарын түшүнө алат. Коддун кээ бирлери POSIX дооруна чейин жазылган, ал эми Unix API анда бүгүнкү күндө колдонулгандан такыр башкача болгон. Мындан тышкары, ызы-чуулуу линиялардагы тоскоолдуктардан сигналды тазалоо үчүн статистиканы билүү керек.

НТС НТПны оңдоонун биринчи аракети болгон жок. Чабуулчулар DDoS чабуулдарын күчөтүү үчүн NTP кемчиликтерин колдонууну үйрөнгөндөн кийин, радикалдуу өзгөртүүлөр зарыл экени айкын болду. Ал эми НТСтин долбоорлору даярдалып, жыйынтыкталып жатканда АКШнын Улуттук Илим Фонду 2014-жылдын аягында НТСти модернизациялоого шашылыш түрдө грант бөлгөн.

Жумушчу топту кимдир бирөө эле эмес, башкарган Эрик Стивен Рэймонд - Open Source коомчулугунун негиздөөчүлөрүнүн жана түркүктөрүнүн бири жана китептин автору Собор жана базар. Эрик жана анын достору аракет кылган биринчи нерсе NTP кодун BitKeeper платформасынан gitке жылдыруу болду, бирок андай болгон жок. Долбоордун жетекчиси Харлан Стенн бул чечимге каршы болуп, сүйлөшүүлөр токтоп калган. Андан кийин долбоордун кодун өзгөртүү чечими кабыл алынып, NTPSec пайда болду.

Катуу тажрыйба, анын ичинде GPSD боюнча иштөө, математикалык фон жана байыркы кодду окуунун сыйкырдуу чеберчилиги - Эрик Рэймонд дал ушундай долбоорду ишке ашыра алган хакер болгон. команда коду миграция боюнча адисти жана 10 жуманын ичинде NTP тапты отурукташканGitLab боюнча. Жумуш кызуу жүрүп жаткан.

Эрик Раймонддун командасы бул тапшырманы Огюст Родин таш блок менен аткаргандай эле алды. 175 KLOC эски кодду алып салуу менен, алар көптөгөн коопсуздук тешиктерин жабуу менен чабуулдун бетин бир топ кыскарта алышты.

Бул жерде бөлүштүрүүгө киргендердин толук эмес тизмеси:

  • Документи жок, эскирген, эскирген же бузулган refclock.
  • Колдонулбаган ICS китепканасы.
  • libopts/autogen.
  • Windows үчүн эски код.
  • ntpdc.
  • Автоачкыч.
  • ntpq C коду Pythonдо кайра жазылган.
  • sntp/ntpdig C коду Pythonдо кайра жазылган.

Кодду тазалоодон тышкары, долбоордун башка милдеттери болгон. Бул жерде жетишкендиктердин жарым-жартылай тизмеси:

  • Буфердин толуп кетишинен кодду коргоо кыйла жакшырды. Буфердин ашып кетишинин алдын алуу үчүн, бардык кооптуу сап функциялары (strcpy/strcat/strtok/sprintf/vsprintf/gets) буфер өлчөмүн чектөөнү ишке ашырган коопсуз версиялар менен алмаштырылды.
  • НТСтин колдоосу кошулду.
  • Физикалык жабдыктарды байланыштыруу аркылуу убакыт кадамынын тактыгы он эсе жакшыртылды. Бул заманбап компьютердик сааттар NTP жаралгандагыга караганда алда канча так болуп калгандыгына байланыштуу. Мунун эң чоң бенефициарлары GPSDO жана атайын убакыт радиолору болгон.
  • Программалоо тилдеринин саны экиге чейин кыскарган. Perl, awk жана атүгүл S скрипттеринин ордуна азыр баары Python. Ушундан улам, кодду кайра колдонуу үчүн көбүрөөк мүмкүнчүлүктөр бар.
  • Autotools скрипттеринин кесмелеринин ордуна, долбоор программалык камсыздоону куруу системасын колдоно баштады ваф.
  • Жаңыланган жана кайра уюштурулган долбоордук документтер. Бир-бирине карама-каршы келген, кээде архаикалык документтердин жыйнагынан алар бир топ өтүүчү документтерди түзүшкөн. Ар бир буйрук сабынын которуштуруусунда жана ар бир конфигурация объектисинде азыр чындыктын бир версиясы бар. Кошумчалай кетсек, адам баракчалары жана веб-документтер азыр бир эле негизги файлдардан түзүлөт.

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]

Chrony

Эски НТПны коопсузураак альтернативага алмаштыруу аракети дагы болду. Chrony, NTPSecтен айырмаланып, башынан баштап жазылган жана туруктуу эмес тармактык байланыштарды, тармактын жарым-жартылай жеткиликтүүлүгүн же тыгындарын жана температуранын өзгөрүшүн камтыган кеңири шарттарда ишенимдүү иштөө үчүн иштелип чыккан. Мындан тышкары, chrony башка артыкчылыктарга ээ:

  • 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 орнотуунун мисалы

Келгиле, азыр бир аз көнүгүү жасап көрөлү жана өзүбүздүн NTP серверибизди VPSге орнотуп алалы. Бул абдан жөнөкөй, жөн гана RuVDS сайтынан ылайыктуу тарифти тандап, даяр серверди алыңыз жана ондогон жөнөкөй буйруктарды териңиз. Биздин максаттар үчүн, бул параметр абдан ылайыктуу болуп саналат.

Убакытты синхрондоштуруу кантип коопсуз болуп калды

Кызматты орнотууга өтүп, адегенде chrony пакетин орнотобуз.

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 башка пакет менеджерин колдонушат.

[root@server ~]$ dnf install chrony

chrony орноткондон кийин, сиз кызматты баштап, жандырышыңыз керек.

[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

Кийинки жолу мен сизге интернетсиз убакытты синхрондоштуруунун кандай варианттары бар экенин айтып берем.

Убакытты синхрондоштуруу кантип коопсуз болуп калды

Убакытты синхрондоштуруу кантип коопсуз болуп калды

Source: www.habr.com

Комментарий кошуу