Hvernig tímasamstilling varð örugg

Hvernig tímasamstilling varð örugg
Hvernig á að ganga úr skugga um að tíminn í sjálfu sér lýgur ekki ef þú ert með milljón stór og smá tæki í samskiptum í gegnum TCP/IP? Enda hefur hver þeirra klukku og tíminn verður að vera réttur fyrir þær allar. Þetta vandamál er ekki hægt að sniðganga án ntp.

Við skulum ímynda okkur í eina mínútu að í einum hluta iðnaðar upplýsingatækniinnviða séu erfiðleikar við að samstilla þjónustu með tímanum. Strax byrjar klasastafla Enterprise hugbúnaðar að bila, lén sundrast, meistarar og biðhnútar reyna árangurslaust að endurheimta óbreytt ástand.

Það er líka mögulegt að árásarmaður reyni vísvitandi að trufla tímann með MiTM eða DDOS árás. Í slíkum aðstæðum getur allt gerst:

  • Lykilorð notendareiknings munu renna út;
  • X.509 vottorð munu renna út;
  • TOTP tveggja þátta auðkenning mun hætta að virka;
  • öryggisafrit verða úrelt og kerfið mun eyða þeim;
  • DNSSec mun bila.

Það er ljóst að sérhver upplýsingatæknideild hefur áhuga á áreiðanlegum rekstri tímasamstillingarþjónustu og væri gott ef þær væru áreiðanlegar og öruggar í iðnaðarrekstri.

Brjóttu NTP á 25 mínútum

Netsamskiptareglur - millennials hafa einn sérkenni, þeir hafa verið gamaldags og eru ekki lengur góð fyrir neitt, en það er ekki svo auðvelt að skipta þeim út jafnvel þegar mikilvægur fjöldi áhugamanna og fjármagns er safnað.

Helsta kvörtunin um klassíska NTP er skortur á áreiðanlegum aðferðum til að vernda gegn árásum boðflenna. Ýmsar tilraunir hafa verið gerðar til að leysa þetta vandamál. Til að ná þessu innleiðum við fyrst PSK (pre-shared key) kerfi til að skiptast á samhverfum lyklum.

Því miður borgaði þessi aðferð sig ekki af einfaldri ástæðu - hún mælist ekki vel. Handvirk stilling er nauðsynleg á biðlarahlið, allt eftir netþjóninum. Þetta þýðir að þú getur einfaldlega ekki bætt við öðrum viðskiptavini bara svona. Ef eitthvað breytist á NTP þjóninum verður að endurstilla alla viðskiptavini.

Síðan komu þeir með AutoKey, en þeir uppgötvuðu strax ýmsa alvarlega veikleika í hönnun reikniritsins sjálfs og þeir urðu að hætta við það. Málið er að fræið inniheldur aðeins 32-bita, það er of lítið og inniheldur ekki nægilega reikningsflækju fyrir framanárás.

  • Lykillauðkenni - samhverfur 32-bita lykill;
  • MAC (skilaboðaauðkenningarkóði) - NTP pakkaathugunarsumma;

Sjálfvirkur lykill er reiknaður út sem hér segir.

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

Þar sem H() er dulmáls-kássaaðgerð.

Sama aðgerð er notuð til að reikna út eftirlitsummu pakka.

MAC=H(Autokey||NTP packet)

Það kemur í ljós að allur heilleiki pakkaathugana hvílir á áreiðanleika kökanna. Þegar þú hefur þá geturðu endurheimt sjálfvirka lykilinn og síðan spillt MAC. Hins vegar notar NTP þjónninn fræ þegar hann býr til þau. Þetta er þar sem aflinn liggur.

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

MSB_32 aðgerðin klippir af 5 mikilvægustu bitunum úr md32 kjötkássaútreikningsniðurstöðunni. Biðlarakakan breytist ekki svo lengi sem færibreytur netþjónsins eru óbreyttar. Þá getur árásarmaðurinn aðeins endurheimt upphafsnúmerið og verið fær um að búa til smákökur sjálfstætt.

Fyrst þarftu að tengjast NTP þjóninum sem viðskiptavinur og fá smákökur. Eftir þetta, með því að nota brute force aðferð, endurheimtir árásarmaðurinn upphafsnúmerið eftir einföldum reiknirit.

Reiknirit til að ráðast á útreikning á upphaflegu tölunni með því að nota skepna-kraftsaðferðina.

   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 tölurnar eru þekktar, svo það eina sem er eftir er að búa til 2^32 kjötkássa þar til kexið sem búið er til passar við það sem fékkst frá NTP þjóninum. Á venjulegri heimastöð með Intel Core i5 mun þetta taka 25 mínútur.

NTS - nýr sjálfvirkur lykill

Það var ómögulegt að sætta sig við slík öryggisgöt í Autokey og árið 2012 birtist það ný útgáfa siðareglur. Til þess að skerða nafnið ákváðu þeir að endurmerkja, svo Autokey v.2 var kallaður Network Time Security.

NTS samskiptareglan er framlenging á NTP öryggi og styður sem stendur aðeins unicast ham. Það veitir sterka dulmálsvörn gegn pakkameðferð, kemur í veg fyrir að sníkja, mælist vel, er þola netpakkatap og veldur sem minnstum nákvæmnistapi sem verður við öryggi tenginga.

NTS tenging samanstendur af tveimur þrepum sem nota samskiptareglur fyrir lægri lag. Á fyrsta Á þessu stigi eru viðskiptavinurinn og þjónninn sammála um ýmsar tengibreytur og skiptast á vafrakökum sem innihalda lykla með öllum meðfylgjandi gagnasettum. Á annað Á þessu stigi fer raunveruleg varið NTS lota fram á milli viðskiptavinarins og NTP netþjónsins.

Hvernig tímasamstilling varð örugg

NTS samanstendur af tveimur lægri samskiptareglum: Network Time Security Key Exchange (NTS-KE), sem kemur af stað öruggri tengingu yfir TLS, og NTPv4, nýjasta innlifun NTP samskiptareglunnar. Aðeins meira um þetta hér að neðan.

Fyrsta stig - NTS KE

Á þessu stigi byrjar NTP viðskiptavinurinn TLS 1.2/1.3 lotu yfir sérstaka TCP tengingu við NTS KE netþjóninn. Á þessum fundi gerist eftirfarandi.

  • Aðilar ákveða breytur AEAD reiknirit fyrir annað stig.
  • Aðilar skilgreina annað neðra lag samskiptareglur, en í augnablikinu er aðeins NTPv4 studd.
  • Aðilar ákveða IP tölu og gátt NTP netþjónsins.
  • NTS KE þjónn gefur út vafrakökur undir NTPv4.
  • Aðilar draga par af samhverfum lyklum (C2S og S2C) úr kökuefninu.

Þessi nálgun hefur þann mikla kost að öll byrðin við að senda leynilegar upplýsingar varðandi tengibreytur fellur á hina sannreyndu og áreiðanlegu TLS samskiptareglur. Þetta útilokar þörfina á að finna upp þitt eigið hjól til að tryggja öruggt NTP handaband.

Annað stig - NTP undir NTS vernd

Í öðru stigi samstillir viðskiptavinurinn tímann á öruggan hátt við NTP netþjóninn. Í þessu skyni sendir það fjórar sérstakar viðbætur (framlengingarreitir) í NTPv4 pakkaskipulaginu.

  • The Unique Identifier Extension inniheldur tilviljunarkennd tilviljun til að koma í veg fyrir endurspilunarárásir.
  • NTS Cookie Extension inniheldur eina af NTP vafrakökum sem eru tiltækar fyrir viðskiptavininn. Þar sem aðeins viðskiptavinurinn er með samhverfu AAED C2S og S2C lyklana, verður NTP þjónninn að draga þá úr vafrakökuefninu.
  • NTS Cookie Placeholder Extension er leið fyrir viðskiptavin til að biðja um viðbótarkökur frá þjóninum. Þessi viðbót er nauðsynleg til að tryggja að svar NTP miðlara sé ekki mikið lengra en beiðnin. Þetta hjálpar til við að koma í veg fyrir mögnunarárásir.
  • NTS Authenticator og Encrypted Extension Fields Extension inniheldur AAED dulmálið með C2S lyklinum, NTP haus, tímastimplum og ofangreindum EF sem meðfylgjandi gögnum. Án þessarar framlengingar er hægt að spilla tímastimplum.

Hvernig tímasamstilling varð örugg

Þegar þjónninn berst beiðni frá viðskiptavini, staðfestir áreiðanleika NTP pakkans. Til að gera þetta verður hann að afkóða kökurnar, draga út AAED reikniritið og lyklana. Eftir að hafa athugað hvort NTP pakkinn sé réttmætur, svarar þjónninn viðskiptavininum á eftirfarandi sniði.

  • Unique Identifier Extension er spegilafrit af beiðni viðskiptavinarins, ráðstöfun gegn endurspilunarárásum.
  • NTS Cookie Extension fleiri vafrakökur til að halda lotunni áfram.
  • NTS Authenticator og Encrypted Extension Fields Extension inniheldur AEAD dulmálið með S2C lykli.

Seinni handabandið er hægt að endurtaka mörgum sinnum, framhjá fyrsta skrefinu, þar sem hver beiðni og svar gefur viðskiptavinum viðbótarkökur. Þetta hefur þann kost að tiltölulega auðlindafrekum TLS aðgerðum við að reikna og senda PKI gögn er deilt með fjölda endurtekinna beiðna. Þetta er sérstaklega þægilegt fyrir sérhæfða FPGA tímaverði, þegar hægt er að pakka allri helstu virkni í nokkrar aðgerðir frá sviði samhverfs dulritunar og flytja allan TLS staflan í annað tæki.

NTPSec

Hvað er sérstakt við NTP? Þrátt fyrir að höfundur verkefnisins, Dave Mills, hafi reynt að skjalfesta kóðann sinn eins og best verður á kosið, er það sjaldgæfur forritari sem mun geta skilið ranghala tímasamstillingar reiknirit sem eru 35 ára. Sumt af kóðanum var skrifað fyrir POSIX tímabilið og Unix API þá var mjög frábrugðið því sem er notað í dag. Auk þess þarf þekkingu á tölfræði til að hreinsa merki frá truflunum á háværum línum.

NTS var ekki fyrsta tilraunin til að laga NTP. Þegar árásarmenn lærðu að nýta NTP veikleika til að magna DDoS árásir, varð ljóst að róttækra breytinga var þörf. Og á meðan verið var að undirbúa og ganga frá NTS drögunum, úthlutaði bandaríska þjóðvísindastofnunin í lok árs 2014 brýn styrk til nútímavæðingar NTP.

Starfshópnum var ekki stýrt af hverjum sem er heldur Eric Steven Raymond - einn af stofnendum og stoðum Open Source samfélagsins og höfundur bókarinnar Dómkirkjan og basarinn. Það fyrsta sem Eric og vinir hans reyndu að gera var að færa NTP kóðann frá BitKeeper pallinum yfir á git, en það virkaði ekki þannig. Verkefnastjórinn Harlan Stenn var á móti þessari ákvörðun og samningaviðræður stöðvuðust. Þá var ákveðið að punga verkefniskóðann og NTPSec fæddist.

Sterk reynsla, þar á meðal vinnu við GPSD, stærðfræðilegan bakgrunn og töfrandi færni við að lesa forn kóða - Eric Raymond var einmitt tölvuþrjóturinn sem gat komið slíku verkefni af stað. Teymið fann kóðaflutningssérfræðing og á aðeins 10 vikum NTP settist niðurá GitLab. Vinna var í fullum gangi.

Lið Eric Raymond tók við verkefninu á sama hátt og Auguste Rodin gerði með steinblokk. Með því að fjarlægja 175 KLOC af gömlum kóða gátu þeir dregið verulega úr árásaryfirborðinu með því að loka mörgum öryggisgötum.

Hér er ófullnægjandi listi yfir þá sem eru með í dreifingunni:

  • Óskráð, úrelt, úrelt eða biluð endurklukka.
  • Ónotað ICS bókasafn.
  • libopts/autogen.
  • Gamall kóða fyrir Windows.
  • ntpdc.
  • Sjálfvirk lykill.
  • ntpq C kóðinn hefur verið endurskrifaður í Python.
  • sntp/ntpdig C kóðinn hefur verið endurskrifaður í Python.

Auk þess að þrífa kóðann hafði verkefnið önnur verkefni. Hér er listi yfir afrek að hluta:

  • Kóðavörn gegn yfirfalli biðminni hefur verið verulega bætt. Til að koma í veg fyrir flæði biðminni hefur öllum óöruggum strengjaaðgerðum (strcpy/strcat/strtok/sprintf/vsprintf/gets) verið skipt út fyrir öruggar útgáfur sem innleiða takmarkanir á biðminni.
  • Bætti við NTS stuðningi.
  • Tífaldað nákvæmni tímaþreps með því að tengja líkamlegan vélbúnað. Þetta er vegna þess að nútíma tölvuklukkur eru orðnar mun nákvæmari en þær þegar NTP fæddist. Stærstu notendur þessa voru GPSDO og sérstök tímaútvarp.
  • Forritunarmálum hefur verið fækkað í tvö. Í stað Perl, awk og jafnvel S forskrifta, er þetta nú allt Python. Vegna þessa eru fleiri tækifæri til endurnotkunar kóða.
  • Í stað þess að núðlur af sjálfvirkum verkfærum forskriftum byrjaði verkefnið að nota hugbúnaðarsmíðakerfi vaf.
  • Uppfært og endurskipulagt verkefnisgögn. Úr misvísandi og stundum forneskjulegu skjalasafni bjuggu þeir til nokkuð viðunandi skjöl. Sérhver skipanalínurofi og sérhver stillingareining hefur nú eina útgáfu af sannleika. Að auki eru mansíður og vefskjöl búnar til úr sömu kjarnaskrám.

NTPSec er fáanlegt fyrir fjölda Linux dreifinga. Í augnablikinu er nýjasta stöðuga útgáfan 1.1.8, fyrir Gentoo Linux er það næstsíðasta.

(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

Það var önnur tilraun til að skipta út gamla NTP fyrir öruggari valkost. Chrony, ólíkt NTPSec, er skrifað frá grunni og er hannað til að starfa áreiðanlega við margvíslegar aðstæður, þar á meðal óstöðugar nettengingar, að hluta til netkerfi eða þrengsli og hitabreytingar. Að auki hefur chrony aðra kosti:

  • chrony getur samstillt kerfisklukkuna hraðar með meiri nákvæmni;
  • chrony er minna, eyðir minna minni og opnar örgjörvan aðeins þegar þess er þörf. Þetta er stór plús til að spara auðlindir og orku;
  • chrony styður vélbúnaðartímastimpla á Linux, sem gerir mjög nákvæma samstillingu á staðarnetum kleift.

Hins vegar skortir chrony nokkra eiginleika gamla NTP, svo sem útsendingar og fjölvarpsbiðlara/þjóna. Að auki styður klassískt NTP stærri fjölda stýrikerfa og kerfa.

Til að slökkva á virkni netþjónsins og NTP beiðnir í chronyd ferlinu, skrifaðu bara port 0 í chrony.conf skrána. Þetta er gert í þeim tilvikum þar sem engin þörf er á að halda tíma fyrir NTP viðskiptavini eða jafningja. Þar sem útgáfa 2.0 er NTP netþjónsgáttin aðeins opin þegar aðgangur er leyfður með leyfi tilskipun eða viðeigandi skipun, eða NTP jafningi er stilltur eða útsendingartilskipun er notuð.

Námið samanstendur af tveimur einingum.

  • chronyd er þjónusta sem keyrir í bakgrunni. Það fær upplýsingar um muninn á kerfisklukkunni og ytri tímaþjóninum og stillir staðartímann. Það útfærir einnig NTP samskiptareglur og getur virkað sem viðskiptavinur eða netþjónn.
  • chronyc er skipanalínutól til að fylgjast með og stjórna forritum. Notað til að fínstilla ýmsar þjónustubreytur, til dæmis að leyfa þér að bæta við eða fjarlægja NTP netþjóna á meðan chronyd heldur áfram að keyra.

Frá útgáfu 7 af RedHat Linux notar chrony sem tímasamstillingarþjónusta. Pakkinn er einnig fáanlegur fyrir aðrar Linux dreifingar. Nýjasta stöðuga útgáfan er 3.5, sem undirbýr útgáfu 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]

Hvernig á að setja upp þinn eigin ytri chrony netþjón á internetinu til að samstilla tíma á skrifstofuneti. Hér að neðan er dæmi um uppsetningu VPS.

Dæmi um uppsetningu Chrony á RHEL / CentOS á VPS

Við skulum nú æfa okkur aðeins og setja upp okkar eigin NTP server á VPS. Það er mjög einfalt, veldu bara viðeigandi gjaldskrá á RuVDS vefsíðunni, fáðu þér tilbúinn netþjón og skrifaðu tugi einfaldar skipana. Í okkar tilgangi er þessi valkostur mjög hentugur.

Hvernig tímasamstilling varð örugg

Við skulum halda áfram að setja upp þjónustuna og setja fyrst upp chrony pakkann.

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 nota annan pakkastjóra.

[root@server ~]$ dnf install chrony

Eftir að Chrony hefur verið sett upp þarftu að ræsa og virkja þjónustuna.

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

Ef þess er óskað geturðu gert breytingar á /etc/chrony.conf og skipt út NPT netþjónum fyrir næstu staðbundna til að draga úr viðbragðstíma.

# 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

Næst setjum við upp samstillingu á NTP þjóninum við hnúta úr tilgreindum laug.

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

Það er líka nauðsynlegt að opna NTP tengið að utan, annars mun eldveggurinn loka fyrir komandi tengingar frá viðskiptavinahnútum.

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

Hjá viðskiptavininum er nóg að stilla tímabeltið rétt.

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

/etc/chrony.conf skráin tilgreinir IP eða hýsilheiti VPS netþjónsins okkar sem keyrir NTP netþjón chrony.

server my.vps.server

Og að lokum, byrja tímasamstillingu á viðskiptavininn.

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

Næst mun ég segja þér hvaða möguleikar eru til að samstilla tíma án internetsins.

Hvernig tímasamstilling varð örugg

Hvernig tímasamstilling varð örugg

Heimild: www.habr.com

Bæta við athugasemd