Maelezo ya kiufundi ya kulemaza kwa hivi majuzi kwa programu jalizi katika Firefox

Kumbuka mtafsiri: kwa urahisi wa wasomaji, tarehe hutolewa wakati wa Moscow

Hivi majuzi tulikosa kuisha kwa mojawapo ya vyeti vilivyotumika kusaini programu jalizi. Hii ilisababisha programu jalizi kuzimwa kwa watumiaji. Sasa kwa kuwa tatizo limerekebishwa zaidi, ningependa kushiriki maelezo ya kile kilichotokea na kazi iliyofanywa.

Asili: nyongeza na saini

Ingawa watu wengi hutumia kivinjari nje ya kisanduku, Firefox inasaidia viendelezi vinavyoitwa "nyongeza." Kwa msaada wao, watumiaji huongeza vipengele mbalimbali kwenye kivinjari. Kuna nyongeza zaidi ya elfu 15: kutoka kuzuia matangazo kwa dhibiti mamia ya vichupo.

Programu jalizi zilizosakinishwa lazima ziwe nazo saini ya kidijitali, ambayo hulinda watumiaji dhidi ya programu jalizi hasidi na inahitaji ukaguzi mdogo wa programu jalizi na wafanyakazi wa Mozilla. Tulianzisha hitaji hili mwaka wa 2015 kwa sababu tulikuwa tunapitia matatizo makubwa na viongezi viovu.

Jinsi inavyofanya kazi: Kila nakala ya Firefox ina "cheti cha mizizi". Ufunguo wa "mzizi" huu umehifadhiwa ndani Moduli ya Usalama ya Vifaa (HSM)bila ufikiaji wa mtandao. Kila baada ya miaka michache, "cheti cha kati" kipya kinasainiwa na ufunguo huu, ambao hutumiwa wakati wa kusaini nyongeza. Msanidi programu anapowasilisha programu jalizi, tunaunda "cheti cha mwisho" cha muda na kukitia sahihi kwa kutumia cheti cha kati. Programu-jalizi yenyewe basi hutiwa saini na cheti cha mwisho. Kwa utaratibu inaonekana hivi.

Tafadhali kumbuka kuwa kila cheti kina "somo" (ambaye cheti kilitolewa) na "mtoaji" (aliyetoa cheti). Katika kesi ya cheti cha mizizi, "somo" = "mtoa", lakini kwa vyeti vingine, mtoaji wa cheti ndiye somo la cheti cha mzazi ambacho kinasainiwa.

Jambo muhimu: kila nyongeza imesainiwa na cheti cha mwisho cha kipekee, lakini karibu kila mara vyeti hivi vya mwisho hutiwa saini na cheti sawa cha kati.

Ujumbe wa mwandishi: Isipokuwa ni nyongeza za zamani sana. Wakati huo, vyeti mbalimbali vya kati vilitumiwa.

Cheti hiki cha kati kilisababisha matatizo: kila cheti ni halali kwa kipindi fulani. Kabla au baada ya kipindi hiki, cheti ni batili na kivinjari hakitatumia programu jalizi zilizotiwa saini na cheti hiki. Kwa bahati mbaya, cheti cha kati kiliisha muda wake Mei 4 saa 4 asubuhi.

Matokeo hayakuonekana mara moja. Firefox haiangalii saini za programu jalizi zilizosakinishwa kila mara, lakini takriban mara moja kila baada ya saa 24, na muda wa uthibitishaji ni wa mtu binafsi kwa kila mtumiaji. Kwa hiyo, baadhi ya watu walipata matatizo mara moja, wengine baadaye sana. Kwanza tulifahamu tatizo hilo wakati cheti kilipoisha na mara moja tukaanza kutafuta suluhu.

Kupunguza uharibifu

Mara tulipotambua kilichotokea, tulijaribu kuzuia hali isizidi kuwa mbaya.

Kwanza, waliacha kukubali na kusaini nyongeza mpya. Hakuna maana katika kutumia cheti ambacho muda wake umeisha kwa hili. Nikitazama nyuma, ningesema kwamba tungeweza kuacha kila kitu kama kilivyokuwa. Sasa tumeanza tena kukubali virutubisho.

Pili, mara moja walituma marekebisho ambayo yalizuia saini kukaguliwa kila siku. Kwa hivyo, tuliokoa watumiaji ambao kivinjari kilikuwa hakijapata muda wa kuangalia programu jalizi katika saa XNUMX zilizopita. Urekebishaji huu sasa umeondolewa na hauhitajiki tena.

Uendeshaji sambamba

Kinadharia, suluhu la tatizo linaonekana rahisi: tengeneza cheti kipya halali cha kati na utie sahihi tena kila kiongezi. Kwa bahati mbaya hii haitafanya kazi:

  • hatuwezi kusaini haraka nyongeza elfu 15 mara moja, mfumo haujaundwa kwa mzigo kama huo
  • Baada ya kusaini nyongeza, matoleo yaliyosasishwa yanahitaji kuwasilishwa kwa watumiaji. Nyingi za programu jalizi husakinishwa kutoka kwa seva za Mozilla, kwa hivyo Firefox itapata masasisho ndani ya saa XNUMX zijazo, lakini watengenezaji wengine husambaza nyongeza zilizosainiwa kupitia chaneli za wahusika wengine, kwa hivyo watumiaji watalazimika kusasisha programu jalizi kama hizo wenyewe.

Badala yake, tulijaribu kutengeneza urekebishaji ambao ungewafikia watumiaji wote bila kuhitaji hatua nyingi au kutofanya chochote kwa upande wao.

Haraka sana tulifikia mikakati miwili kuu, ambayo tulitumia sambamba:

  • Sasisha Firefox ili kubadilisha kipindi cha uhalali wa cheti. Hii itafanya nyongeza zilizopo kufanya kazi tena kichawi, lakini itahitaji kutolewa na kusafirisha muundo mpya wa Firefox.
  • Tengeneza cheti halali na ushawishi kwa namna fulani Firefox kukikubali badala ya kile kilichopo ambacho muda wake wa matumizi umeisha

Tuliamua kutumia chaguo la kwanza kwanza, ambalo lilionekana kuwa la kufanya kazi kabisa. Mwishoni mwa siku, walitoa marekebisho ya pili (cheti kipya), ambacho tutazungumzia baadaye.

Kubadilisha cheti

Kama nilivyosema hapo juu, ilihitajika:

  • unda cheti kipya halali
  • isakinishe kwa mbali katika Firefox

Ili kuelewa ni kwa nini hii inafanya kazi, acheni tuangalie kwa karibu mchakato wa uthibitishaji wa nyongeza. Programu jalizi yenyewe huja kama seti ya faili, ikijumuisha msururu wa vyeti vinavyotumika kutia saini. Matokeo yake, programu-jalizi inaweza kuthibitishwa ikiwa kivinjari kinajua cheti cha mizizi, ambacho kimejengwa kwenye Firefox wakati wa kujenga. Hata hivyo, kama tunavyojua tayari, cheti cha kati kimeisha muda, kwa hivyo haiwezekani kuthibitisha programu jalizi.

Wakati Firefox inapojaribu kuthibitisha programu jalizi, haizuiliwi kutumia vyeti vilivyomo ndani ya programu jalizi yenyewe. Badala yake, kivinjari hujaribu kuunda msururu wa cheti halali, kuanzia cheti cha mwisho na kuendelea hadi kifikie mzizi. Katika ngazi ya kwanza, tunaanza na cheti cha mwisho na kisha kupata cheti ambacho somo lake ni mtoaji wa cheti cha mwisho (yaani, cheti cha kati). Kwa kawaida cheti hiki cha kati hutolewa pamoja na programu jalizi, lakini cheti chochote kutoka kwa hifadhi ya kivinjari kinaweza kutumika kama cheti hiki cha kati. Ikiwa tunaweza kuongeza cheti kipya halali kwa hifadhi ya cheti kwa mbali, Firefox itajaribu kukitumia. Hali kabla na baada ya kufunga cheti kipya.

Baada ya kusakinisha cheti kipya, Firefox itakuwa na chaguo mbili wakati wa kuthibitisha msururu wa cheti: tumia cheti cha zamani kisicho sahihi (ambacho hakitafanya kazi) au cheti kipya halali (kitakachofanya kazi). Ni muhimu cheti kipya kiwe na jina la somo sawa na ufunguo wa umma kama cheti cha zamani, kwa hivyo saini yake kwenye cheti cha mwisho itakuwa halali. Firefox ni smart vya kutosha kujaribu chaguo zote mbili hadi ipate moja ambayo inafanya kazi, kwa hivyo programu jalizi hujaribiwa tena. Kumbuka kuwa hii ni mantiki sawa tunayotumia kuthibitisha vyeti vya TLS.

Dokezo la Mwandishi: Wasomaji wanaofahamu WebPKI watatambua kuwa vyeti mtambuka hufanya kazi kwa njia sawa kabisa.

Jambo kuu kuhusu marekebisho haya ni kwamba hauhitaji kutia sahihi tena viongezi vilivyopo. Mara tu kivinjari kinapopokea cheti kipya, programu jalizi zote zitafanya kazi tena. Changamoto iliyosalia ni kuwasilisha cheti kipya kwa watumiaji (moja kwa moja na kwa mbali), na pia kupata Firefox kuangalia tena viongezi vilivyozimwa.

Normandy na mfumo wa utafiti

Kwa kushangaza, tatizo hili linatatuliwa na nyongeza maalum inayoitwa "mfumo". Ili kufanya utafiti, tulitengeneza mfumo unaoitwa Normandy ambao hutoa utafiti kwa watumiaji. Masomo haya yanafanywa kiotomatiki katika kivinjari, na yameboresha ufikiaji wa API za ndani za Firefox. Utafiti unaweza kuongeza vyeti vipya kwenye duka la cheti.

Ujumbe wa mwandishi: Hatuongezi cheti chenye mapendeleo yoyote maalum; imetiwa saini na cheti cha mizizi, kwa hivyo Firefox inaiamini. Tunaiongeza tu kwenye kundi la vyeti vinavyoweza kutumiwa na kivinjari.

Kwa hivyo suluhisho ni kuunda utafiti:

  • kusakinisha cheti kipya tulichounda kwa watumiaji
  • kulazimisha kivinjari kukagua tena programu jalizi zilizozimwa ili zifanye kazi tena

"Lakini subiri," unasema, "programu-jalizi hazifanyi kazi, ninawezaje kuzindua programu jalizi ya mfumo?" Hebu tutie saini kwa cheti kipya!

Kuweka kila kitu pamoja ... kwa nini inachukua muda mrefu?

Kwa hivyo, mpango: toa cheti kipya kuchukua nafasi ya zamani, unda programu-nyongeza ya mfumo na usakinishe kwa watumiaji kupitia Normandy. Shida, kama nilivyosema, zilianza Mei 4 saa 4:00, na tayari saa 12:44 ya siku hiyo hiyo, chini ya masaa 9 baadaye, tulituma suluhisho kwa Normandy. Ilichukua masaa mengine 6-12 kufikia watumiaji wote. Sio mbaya hata kidogo, lakini watu kwenye Twitter wanauliza kwa nini hatukuweza kuchukua hatua haraka.

Kwanza, ilichukua muda kutoa cheti kipya cha kati. Kama nilivyotaja hapo juu, ufunguo wa cheti cha mizizi huhifadhiwa nje ya mtandao kwenye moduli ya usalama ya maunzi. Hii ni nzuri kutoka kwa mtazamo wa usalama, kwa kuwa mzizi hutumiwa mara chache sana na unapaswa kulindwa kwa uaminifu, lakini ni ngumu kidogo wakati unahitaji kusaini cheti kipya haraka. Mmoja wa wahandisi wetu alilazimika kusafiri hadi kituo cha kuhifadhi HSM. Kisha kulikuwa na majaribio yasiyofanikiwa ya kutoa cheti sahihi, na kila jaribio liligharimu saa moja au mbili zilizotumika kupima.

Pili, uundaji wa programu jalizi ya mfumo ulichukua muda. Conceptually ni rahisi sana, lakini hata programu rahisi zinahitaji huduma. Tulitaka kuhakikisha kuwa hatufanyi hali kuwa mbaya zaidi. Utafiti unahitaji kufanyiwa majaribio kabla ya kutumwa kwa watumiaji. Zaidi ya hayo, ni lazima programu jalizi itiwe saini, lakini mfumo wetu wa kuambatisha programu-jalizi umezimwa, kwa hivyo ilitubidi kutafuta suluhu.

Hatimaye, mara tu tulipokuwa na utafiti tayari kwa ajili ya kuwasilisha, kupelekwa kulichukua muda. Kivinjari hukagua visasisho vya Normandy kila baada ya saa 6. Sio kompyuta zote zimewashwa na kuunganishwa kwenye Mtandao kila wakati, kwa hivyo itachukua muda kwa urekebishaji kuenea kwa watumiaji.

Hatua za mwisho

Utafiti unapaswa kurekebisha tatizo kwa watumiaji wengi, lakini haupatikani kwa kila mtu. Watumiaji wengine wanahitaji mbinu maalum:

  • watumiaji ambao wamezima utafiti au telemetry
  • watumiaji wa toleo la Android (Fennec), ambapo utafiti hauhimiliwi hata kidogo
  • watumiaji wa miundo maalum ya Firefox ESR katika biashara ambapo telemetry haiwezi kuwashwa
  • watumiaji walioketi nyuma ya proksi za MitM, kwa kuwa mfumo wetu wa usakinishaji wa programu-jalizi hutumia kubandika vitufe, ambavyo havifanyi kazi na proksi kama hizo.
  • watumiaji wa matoleo ya awali ya Firefox ambayo hayatumii utafiti

Hatuwezi kufanya lolote kuhusu aina ya mwisho ya watumiaji - bado wanapaswa kusasisha hadi toleo jipya la Firefox, kwa sababu zilizopitwa na wakati zina udhaifu mkubwa ambao haujawekewa vibandiko. Tunajua kwamba baadhi ya watu husalia kwenye matoleo ya zamani ya Firefox kwa sababu wanataka kutekeleza programu jalizi za zamani, lakini programu jalizi nyingi za zamani tayari zimetumwa kwa matoleo mapya zaidi ya kivinjari. Kwa watumiaji wengine, tumeunda kiraka ambacho kitasakinisha cheti kipya. Ilitolewa kama toleo la kurekebisha mdudu (dokezo la mtafsiri: Firefox 66.0.5), kwa hivyo watu wataipata - kuna uwezekano mkubwa kuwa tayari wameipata - kupitia chaneli ya kawaida ya sasisho. Ikiwa unatumia muundo maalum wa Firefox ESR, tafadhali wasiliana na mtunzaji wako.

Tunaelewa kuwa hii sio bora. Katika baadhi ya matukio, watumiaji walipoteza data ya ziada (kwa mfano, data ya ziada Vyombo vyenye Akaunti nyingi).

Athari hii haikuweza kuepukika, lakini tunaamini kuwa kwa muda mfupi tumechagua suluhisho bora kwa watumiaji wengi. Kwa muda mrefu, tutatafuta mbinu nyingine, za juu zaidi za usanifu.

Masomo

Kwanza, timu yetu ilifanya kazi nzuri kuunda na kusafirisha marekebisho katika muda wa chini ya saa 12 baada ya tatizo kugunduliwa. Kama mtu ambaye alihudhuria mikutano, naweza kusema kwamba katika hali hii ngumu watu walifanya kazi kwa bidii sana na wakati mdogo sana ulipotea.

Ni wazi, hakuna kati ya haya yalipaswa kutokea hata kidogo. Ni wazi kuwa inafaa kurekebisha michakato yetu ili kupunguza uwezekano wa matukio kama haya na kurahisisha urekebishaji.

Wiki ijayo tutachapisha uchunguzi rasmi wa maiti na orodha ya mabadiliko tunayokusudia kufanya. Kwa sasa, nitashiriki mawazo yangu. Kwanza, lazima kuwe na njia bora ya kufuatilia hali ya bomu linalowezekana la wakati. Tunahitaji kuwa na uhakika kwamba hatujipati katika hali ambapo mmoja wao hufanya kazi ghafla. Bado tunashughulikia maelezo, lakini kwa kiwango cha chini, ni muhimu kuzingatia mambo hayo yote.

Pili, tunahitaji utaratibu wa kuwasilisha masasisho kwa watumiaji haraka, hata wakatiβ€”hasa wakatiβ€”kila kitu kingine kitashindwa. Ilikuwa nzuri kwamba tuliweza kutumia mfumo wa "utafiti", lakini ni zana isiyo kamili na ina athari zisizohitajika. Hasa, tunajua kuwa watumiaji wengi wamewasha masasisho ya kiotomatiki, lakini wangependelea kutoshiriki katika utafiti (ninakubali, nimeyazima pia!). Wakati huo huo, tunahitaji njia ya kutuma sasisho kwa watumiaji, lakini bila kujali utekelezaji wa kiufundi wa ndani, watumiaji wanapaswa kuwa na uwezo wa kujiandikisha kwa sasisho (pamoja na marekebisho ya moto) lakini uchague kutoka kwa kila kitu kingine. Zaidi ya hayo, kituo cha sasisho kinapaswa kuitikia zaidi kuliko ilivyo sasa. Hata tarehe 6 Mei, bado kulikuwa na watumiaji ambao hawakuchukua fursa ya kurekebisha au toleo jipya. Tatizo hili tayari limefanyiwa kazi, lakini kilichotokea kilionyesha umuhimu wake.

Hatimaye, tutaangalia kwa karibu usanifu wa usalama wa programu jalizi ili kuhakikisha kwamba inatoa kiwango sahihi cha usalama na hatari ndogo ya kuvunja chochote.

Wiki ijayo tutaangalia matokeo ya uchambuzi wa kina zaidi wa kile kilichotokea, lakini kwa wakati huu nitafurahi kujibu maswali kwa barua pepe: [barua pepe inalindwa]

Chanzo: linux.org.ru

Kuongeza maoni