Jinsi maingiliano ya saa yalivyokuwa salama

Jinsi maingiliano ya saa yalivyokuwa salama
Jinsi ya kuhakikisha kuwa wakati kwa se hauongo ikiwa una vifaa milioni kubwa na vidogo vinavyowasiliana kupitia TCP/IP? Baada ya yote, kila mmoja wao ana saa, na wakati lazima iwe sahihi kwa wote. Tatizo hili haliwezi kuzungushwa bila ntp.

Hebu fikiria kwa dakika moja kwamba katika sehemu moja ya miundombinu ya IT ya viwanda kuna matatizo na huduma za kusawazisha kwa muda. Mara moja rundo la nguzo la programu ya Enterprise huanza kushindwa, vikoa hutengana, masters na nodi za Standby bila mafanikio kujitahidi kurejesha hali ilivyo.

Inawezekana pia kwamba mshambuliaji anajaribu kwa makusudi kuharibu wakati kupitia mashambulizi ya MiTM au DDOS. Katika hali kama hiyo, chochote kinaweza kutokea:

  • Nenosiri za akaunti ya mtumiaji zitaisha muda;
  • Vyeti vya X.509 vitaisha muda;
  • Uthibitishaji wa TOTP wa vipengele viwili utaacha kufanya kazi;
  • chelezo zitapitwa na wakati na mfumo utazifuta;
  • DNSSec itavunjika.

Ni wazi kwamba kila idara ya IT ina nia ya uendeshaji wa kuaminika wa huduma za maingiliano ya wakati, na itakuwa nzuri ikiwa walikuwa wa kuaminika na salama katika uendeshaji wa viwanda.

Vunja NTP katika dakika 25

Itifaki za mtandao - milenia zina upekee mmoja, wamekuwa imepitwa na wakati na hazifai tena kwa lolote, lakini kuzibadilisha si rahisi hata wakati kundi kubwa la wakereketwa na ufadhili unapokusanywa.

Malalamiko kuu juu ya NTP ya kawaida ni ukosefu wa njia za kuaminika za kulinda dhidi ya mashambulizi ya wavamizi. Majaribio mbalimbali yamefanywa kutatua tatizo hili. Ili kufanikisha hili, kwanza tulitekeleza utaratibu wa ufunguo ulioshirikiwa awali (PSK) wa kubadilishana vitufe vya ulinganifu.

Kwa bahati mbaya, njia hii haikulipa kwa sababu rahisi - haina kiwango vizuri. Usanidi wa mwongozo unahitajika kwa upande wa mteja kulingana na seva. Hii inamaanisha kuwa huwezi kuongeza mteja mwingine kama hivyo. Ikiwa kitu kitabadilika kwenye seva ya NTP, wateja wote lazima wapangiwe upya.

Kisha wakaja na AutoKey, lakini mara moja waligundua udhaifu mkubwa katika muundo wa algorithm yenyewe na walilazimika kuiacha. Jambo ni kwamba mbegu ina bits 32 tu, ni ndogo sana na haina utata wa kutosha wa computational kwa mashambulizi ya mbele.

  • Kitambulisho muhimu - ufunguo wa ulinganifu wa 32-bit;
  • MAC (msimbo wa uthibitishaji wa ujumbe) - hundi ya pakiti ya NTP;

Ufunguo wa kiotomatiki huhesabiwa kama ifuatavyo.

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

Ambapo H() ni kazi ya kriptografia ya heshi.

Kazi sawa hutumiwa kuhesabu hundi ya pakiti.

MAC=H(Autokey||NTP packet)

Inabadilika kuwa uadilifu wote wa ukaguzi wa kifurushi hutegemea uhalisi wa vidakuzi. Mara tu ukiwa nazo, unaweza kurejesha ufunguo wa kiotomatiki na kisha kuharibu MAC. Walakini, seva ya NTP hutumia mbegu wakati wa kuzizalisha. Hapa ndipo mtego ulipo.

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

Chaguo za kukokotoa za MSB_32 hukata vipande 5 muhimu zaidi kutoka kwa matokeo ya hesabu ya md32 hashi. Kidakuzi cha mteja hakibadiliki mradi tu vigezo vya seva vibaki bila kubadilika. Kisha mshambulizi anaweza tu kurejesha nambari ya awali na kuwa na uwezo wa kujitegemea kuzalisha vidakuzi.

Kwanza, unahitaji kuunganisha kwenye seva ya NTP kama mteja na kupokea vidakuzi. Baada ya hayo, kwa kutumia njia ya nguvu ya brute, mshambuliaji hurejesha nambari ya awali kufuatia algorithm rahisi.

Algorithm ya kushambulia hesabu ya nambari ya kwanza kwa kutumia njia ya nguvu ya brute.

   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

Anwani za IP zinajulikana, kwa hivyo kilichobaki ni kuunda heshi 2^32 hadi kidakuzi kilichoundwa kilingane na kile kilichopokelewa kutoka kwa seva ya NTP. Kwenye kituo cha kawaida cha nyumbani kilicho na Intel Core i5, hii itachukua dakika 25.

NTS - Ufunguo mpya wa Kiotomatiki

Haikuwezekana kuweka mashimo kama haya ya usalama kwenye Autokey, na mnamo 2012 ilionekana toleo jipya itifaki. Ili kuhatarisha jina, waliamua kutengeneza chapa, kwa hivyo Autokey v.2 ilipewa jina la Usalama wa Wakati wa Mtandao.

Itifaki ya NTS ni kiendelezi cha usalama wa NTP na kwa sasa inasaidia hali ya unicast pekee. Inatoa ulinzi dhabiti wa kriptografia dhidi ya upotoshaji wa pakiti, inazuia kuchungulia, inaweka mizani vizuri, inastahimili upotevu wa pakiti za mtandao, na kusababisha hasara ndogo ya usahihi inayopatikana wakati wa usalama wa muunganisho.

Muunganisho wa NTS una hatua mbili zinazotumia itifaki za safu ya chini. Washa kwanza Katika hatua hii, mteja na seva hukubaliana juu ya vigezo mbalimbali vya uunganisho na kubadilishana vidakuzi vyenye funguo na seti zote za data zinazoambatana. Washa pili Katika hatua hii, kipindi halisi cha NTS kilicholindwa hufanyika kati ya mteja na seva ya NTP.

Jinsi maingiliano ya saa yalivyokuwa salama

NTS ina itifaki mbili za safu ya chini: Ubadilishanaji wa Ufunguo wa Usalama wa Wakati wa Mtandao (NTS-KE), ambao huanzisha muunganisho salama kupitia TLS, na NTPv4, upataji mpya zaidi wa itifaki ya NTP. Zaidi kidogo juu ya hii hapa chini.

Hatua ya kwanza - NTS KE

Katika hatua hii, mteja wa NTP huanzisha kipindi cha TLS 1.2/1.3 kupitia muunganisho tofauti wa TCP na seva ya NTS KE. Wakati wa kikao hiki yafuatayo hufanyika.

  • Vyama huamua vigezo AEAD algorithm kwa hatua ya pili.
  • Wahusika hufafanua itifaki ya pili ya safu ya chini, lakini kwa sasa ni NTPv4 pekee inayotumika.
  • Wahusika huamua anwani ya IP na bandari ya seva ya NTP.
  • Seva ya NTS KE inatoa vidakuzi chini ya NTPv4.
  • Wahusika hutoa jozi ya vitufe vya ulinganifu (C2S na S2C) kutoka kwa nyenzo za kuki.

Njia hii ina faida kubwa kwamba mzigo mzima wa kusambaza taarifa za siri kuhusu vigezo vya uunganisho huanguka kwenye itifaki ya TLS iliyothibitishwa na ya kuaminika. Hii inaondoa hitaji la kuunda tena gurudumu lako mwenyewe kwa kupeana mkono kwa usalama kwa NTP.

Hatua ya pili - NTP chini ya ulinzi wa NTS

Katika hatua ya pili, mteja husawazisha kwa usalama wakati na seva ya NTP. Kwa kusudi hili, hupeleka upanuzi wa nne maalum (mashamba ya ugani) katika muundo wa pakiti ya NTPv4.

  • Kiendelezi cha Kitambulishi cha Kipekee kina nonce nasibu ili kuzuia mashambulizi ya kucheza tena.
  • Kiendelezi cha Kidakuzi cha NTS kina mojawapo ya vidakuzi vya NTP vinavyopatikana kwa mteja. Kwa kuwa ni mteja pekee aliye na vitufe vya ulinganifu vya AAED C2S na S2C, seva ya NTP lazima ivitoe kutoka kwa nyenzo za vidakuzi.
  • Kiendelezi cha Kishika Nafasi cha Vidakuzi vya NTS ni njia ya mteja kuomba vidakuzi vya ziada kutoka kwa seva. Kiendelezi hiki ni muhimu ili kuhakikisha kuwa jibu la seva ya NTP si refu zaidi ya ombi. Hii husaidia kuzuia mashambulizi ya amplification.
  • Kithibitishaji cha NTS na Kiendelezi cha Sehemu za Kiendelezi Zilizosimbwa kwa Njia Fiche kina cipher ya AAED yenye ufunguo wa C2S, kichwa cha NTP, mihuri ya muda, na EF iliyo hapo juu kama data inayoambatana. Bila kiendelezi hiki inawezekana kuharibu alama za nyakati.

Jinsi maingiliano ya saa yalivyokuwa salama

Baada ya kupokea ombi kutoka kwa mteja, seva inathibitisha uhalisi wa pakiti ya NTP. Ili kufanya hivyo, lazima apunguze vidakuzi, atoe algorithm ya AAED na funguo. Baada ya kukagua kwa ufanisi pakiti ya NTP kwa uhalali, seva hujibu mteja katika umbizo lifuatalo.

  • Kiendelezi cha Kitambulishi cha Kipekee ni nakala ya kioo ya ombi la mteja, kipimo dhidi ya mashambulizi ya kucheza tena.
  • Kiendelezi cha Vidakuzi vya NTS zaidi ili kuendelea na kipindi.
  • Kithibitishaji cha NTS na Kiendelezi cha Sehemu za Kiendelezi Zilizosimbwa kwa Njia Fiche kina cipher ya AEAD yenye ufunguo wa S2C.

Kushikana mkono kwa pili kunaweza kurudiwa mara nyingi, kupita hatua ya kwanza, kwani kila ombi na jibu humpa mteja vidakuzi vya ziada. Hii ina faida kwamba utendakazi wa TLS unaotumia rasilimali nyingi kiasi cha kukokotoa na kusambaza data ya PKI hugawanywa na idadi ya maombi yanayorudiwa. Hii ni rahisi sana kwa watunza muda maalum wa FPGA, wakati utendakazi wote kuu unaweza kuunganishwa katika vitendaji kadhaa kutoka kwa uga wa kriptografia linganifu, kuhamisha safu nzima ya TLS hadi kifaa kingine.

NTSec

Ni nini maalum kuhusu NTP? Licha ya ukweli kwamba mwandishi wa mradi huo, Dave Mills, alijaribu kuandika nambari yake bora iwezekanavyo, ni programu adimu ambaye ataweza kuelewa ugumu wa algorithms ya maingiliano ya wakati ambayo ni ya miaka 35. Nambari zingine ziliandikwa kabla ya enzi ya POSIX, na Unix API wakati huo ilikuwa tofauti sana na ile inayotumika leo. Kwa kuongeza, ujuzi wa takwimu unahitajika ili kufuta ishara kutoka kwa kuingiliwa kwenye mistari ya kelele.

NTS haikuwa jaribio la kwanza kurekebisha NTP. Mara washambuliaji walipojifunza kutumia udhaifu wa NTP ili kukuza mashambulizi ya DDoS, ilionekana wazi kuwa mabadiliko makubwa yalihitajika. Na wakati rasimu za NTS zilipokuwa zikitayarishwa na kukamilishwa, Wakfu wa Kitaifa wa Sayansi ya Marekani mwishoni mwa 2014 ulitenga kwa haraka ruzuku kwa ajili ya kuboresha NTP.

Kikundi cha kazi kiliongozwa sio na mtu yeyote tu, bali Eric Steven Raymond - mmoja wa waanzilishi na nguzo za jumuiya ya Open Source na mwandishi wa kitabu Kanisa kuu na Bazaar. Jambo la kwanza Eric na marafiki zake walijaribu kufanya ni kuhamisha nambari ya NTP kutoka kwa jukwaa la BitKeeper hadi git, lakini haikufanya kazi kwa njia hiyo. Kiongozi wa mradi Harlan Stenn alikuwa kinyume na uamuzi huu na mazungumzo yalikwama. Kisha ikaamuliwa kuweka msimbo wa mradi, na NTPSec ikazaliwa.

Uzoefu thabiti, ikiwa ni pamoja na kufanya kazi kwenye GPSD, usuli wa hisabati na ustadi wa kichawi wa kusoma msimbo wa zamani - Eric Raymond ndiye mdukuzi haswa aliyeweza kuvuta mradi kama huo. Timu ilipata mtaalamu wa uhamiaji wa msimbo na katika muda wa wiki 10 tu NTP tuliakwenye GitLab. Kazi ilikuwa ikiendelea.

Kikosi cha Eric Raymond kilichukua jukumu kama vile Auguste Rodin alivyofanya kwa kipande cha jiwe. Kwa kuondoa 175 KLOC ya msimbo wa zamani, waliweza kupunguza kwa kiasi kikubwa uso wa mashambulizi kwa kufunga mashimo mengi ya usalama.

Hapa kuna orodha isiyo kamili ya zile zilizojumuishwa katika usambazaji:

  • Reflection isiyo na hati, iliyopitwa na wakati, iliyopitwa na wakati au iliyovunjika.
  • Maktaba ya ICS ambayo haijatumika.
  • libopts/autojeni.
  • Nambari ya zamani ya Windows.
  • ntpdc.
  • Kitufe kiotomatiki.
  • Nambari ya ntpq C imeandikwa tena katika Python.
  • Nambari ya sntp/ntpdig C imeandikwa upya katika Python.

Mbali na kusafisha kanuni, mradi ulikuwa na kazi nyingine. Hapa kuna orodha ndogo ya mafanikio:

  • Ulinzi wa msimbo dhidi ya kufurika kwa akiba umeboreshwa kwa kiasi kikubwa. Ili kuzuia kufurika kwa bafa, vitendakazi vyote vya kamba visivyo salama (strcpy/strcat/strtok/sprintf/vsprintf/gets) vimebadilishwa na matoleo salama yanayotekeleza vikomo vya ukubwa wa bafa.
  • Aliongeza msaada wa NTS.
  • Usahihi wa hatua ya wakati ulioboreshwa mara kumi kwa kuunganisha maunzi halisi. Hii ni kutokana na ukweli kwamba saa za kisasa za kompyuta zimekuwa sahihi zaidi kuliko zile wakati NTP ilizaliwa. Wanufaika wakubwa wa hii walikuwa GPSDO na redio za wakati maalum.
  • Idadi ya lugha za programu imepunguzwa hadi mbili. Badala ya maandishi ya Perl, awk na hata S, sasa yote ni Python. Kutokana na hili, kuna fursa zaidi za kutumia tena msimbo.
  • Badala ya noodles za hati za autotools, mradi ulianza kutumia mfumo wa kuunda programu waf.
  • Nyaraka za mradi zilizosasishwa na kupangwa upya. Kutoka kwa mkusanyiko unaopingana na wakati mwingine wa kizamani wa hati, waliunda nyaraka zinazoweza kupita. Kila swichi ya safu ya amri na kila huluki ya usanidi sasa ina toleo moja la ukweli. Zaidi ya hayo, kurasa za mtu na hati za wavuti sasa zimeundwa kutoka kwa faili sawa za msingi.

NTPSec inapatikana kwa idadi ya usambazaji wa Linux. Kwa sasa, toleo thabiti la hivi punde ni 1.1.8, kwa Gentoo Linux ndilo la mwisho kabisa.

(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

Kulikuwa na jaribio lingine la kubadilisha NTP ya zamani na mbadala salama zaidi. Chrony, tofauti na NTPSec, imeandikwa kutoka chini kwenda juu na imeundwa kufanya kazi kwa uaminifu chini ya hali mbalimbali, ikiwa ni pamoja na miunganisho ya mtandao isiyo imara, upatikanaji wa mtandao au msongamano, na mabadiliko ya joto. Kwa kuongezea, chrony ina faida zingine:

  • chrony inaweza kusawazisha saa ya mfumo kwa kasi zaidi na usahihi zaidi;
  • chrony ni ndogo, hutumia kumbukumbu kidogo, na hufikia CPU inapohitajika tu. Hii ni pamoja na kubwa kwa kuokoa rasilimali na nishati;
  • chrony hutumia mihuri ya muda ya maunzi kwenye Linux, ikiruhusu usawazishaji sahihi kabisa kwenye mitandao ya ndani.

Hata hivyo, chrony inakosa baadhi ya vipengele vya NTP ya zamani, kama vile utangazaji na mteja/seva ya utangazaji anuwai. Kwa kuongeza, NTP ya kawaida inasaidia idadi kubwa ya mifumo ya uendeshaji na majukwaa.

Ili kuzima utendakazi wa seva na maombi ya NTP kwa mchakato wa chronyd, andika tu bandari 0 kwenye faili ya chrony.conf. Hii inafanywa katika hali ambapo hakuna haja ya kudumisha muda kwa wateja wa NTP au wenzao. Kwa kuwa toleo la 2.0, mlango wa seva ya NTP hufunguliwa tu wakati ufikiaji unaruhusiwa na maagizo ya kuruhusu au amri inayofaa, au programu rika ya NTP imesanidiwa, au mwongozo wa utangazaji unatumiwa.

Mpango huo una moduli mbili.

  • chronyd ni huduma inayoendeshwa chinichini. Inapokea taarifa kuhusu tofauti kati ya saa ya mfumo na seva ya saa ya nje na kurekebisha saa ya ndani. Pia hutekeleza itifaki ya NTP na inaweza kufanya kazi kama mteja au seva.
  • chronyc ni matumizi ya mstari wa amri kwa ufuatiliaji na udhibiti wa programu. Inatumika kurekebisha vigezo mbalimbali vya huduma, kwa mfano kukuruhusu kuongeza au kuondoa seva za NTP wakati chronyd inaendelea kufanya kazi.

Tangu toleo la 7 la RedHat Linux hutumia chrony kama huduma ya ulandanishi wa wakati. Kifurushi kinapatikana pia kwa usambazaji mwingine wa Linux. Toleo la hivi karibuni la kudumu ni 3.5, linalotayarisha kutolewa kwa 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]

Jinsi ya kusanidi seva yako ya mbali ya chrony kwenye Mtandao ili kusawazisha wakati kwenye mtandao wa ofisi. Chini ni mfano wa kuanzisha VPS.

Mfano wa kusanidi Chrony kwenye RHEL / CentOS kwenye VPS

Hebu sasa tufanye mazoezi kidogo na kusanidi seva yetu ya NTP kwenye VPS. Ni rahisi sana, chagua tu ushuru unaofaa kwenye tovuti ya RuVDS, pata seva iliyopangwa tayari na uandike amri kadhaa rahisi. Kwa madhumuni yetu, chaguo hili linafaa kabisa.

Jinsi maingiliano ya saa yalivyokuwa salama

Wacha tuendelee kusanidi huduma na kwanza tusakinishe kifurushi cha chrony.

[root@server ~]$ yum install chrony

RHEL 8 / CentOS 8 hutumia kidhibiti tofauti cha kifurushi.

[root@server ~]$ dnf install chrony

Baada ya kufunga chrony, unahitaji kuanza na kuamsha huduma.

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

Ukipenda, unaweza kufanya mabadiliko kwa /etc/chrony.conf, ukibadilisha seva za NPT na za karibu nawe ili kupunguza muda wa kujibu.

# 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

Ifuatayo, tunaanzisha maingiliano ya seva ya NTP na nodi kutoka kwa bwawa maalum.

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

Pia ni muhimu kufungua bandari ya NTP kwa nje, vinginevyo firewall itazuia miunganisho inayoingia kutoka kwa nodes za mteja.

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

Kwa upande wa mteja, inatosha kuweka eneo la wakati kwa usahihi.

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

Faili ya /etc/chrony.conf inabainisha IP au jina la mpangishaji la seva yetu ya VPS inayotumia muda wa seva ya NTP.

server my.vps.server

Na hatimaye, kuanza maingiliano ya wakati kwenye mteja.

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

Wakati ujao nitakuambia ni chaguzi gani za kusawazisha wakati bila Mtandao.

Jinsi maingiliano ya saa yalivyokuwa salama

Jinsi maingiliano ya saa yalivyokuwa salama

Chanzo: mapenzi.com

Kuongeza maoni