Teknikaj detaloj pri la lastatempa malfunkciigo de aldonaĵoj en Firefox

Notu tradukisto: por komforto de legantoj, datoj estas donitaj en la moskva tempo

Ni lastatempe maltrafis la eksvalidiĝon de unu el la atestiloj uzataj por subskribi aldonaĵojn. Ĉi tio rezultigis aldonaĵojn malŝaltitajn por uzantoj. Nun kiam la problemo estis plejparte riparita, mi ŝatus konigi la detalojn pri tio, kio okazis kaj la laboro farita.

Fono: aldonoj kaj subskriboj

Kvankam multaj homoj uzas la retumilon el la skatolo, Fajrovulpo subtenas etendaĵojn nomitajn "aldonaĵoj". Kun ilia helpo, uzantoj aldonas diversajn funkciojn al la retumilo. Estas pli ol 15 mil aldonaĵoj: de reklamblokado por administri centojn da langetoj.

Instalitaj aldonaĵoj devas havi cifereca subskribo, kiu protektas uzantojn de malicaj aldonaĵoj kaj postulas minimuman revizion de aldonaĵoj fare de Mozilla-kunlaborantaro. Ni enkondukis ĉi tiun postulon en 2015 ĉar ni spertis seriozaj problemoj kun malicaj aldonaĵoj.

Kiel ĝi funkcias: Ĉiu kopio de Fajrovulpo enhavas "radikan atestilon". La ŝlosilo de ĉi tiu "radiko" estas konservita en Aparataro Sekureca Modulo (HSM)sen retaliro. Ĉiujn kelkajn jarojn, nova "meza atestilo" estas subskribita per ĉi tiu ŝlosilo, kiu estas uzata dum subskribado de aldonaĵoj. Kiam programisto sendas aldonaĵon, ni kreas provizoran "finan atestilon" kaj subskribas ĝin per meza atestilo. La aldonaĵo mem tiam estas subskribita kun la fina atestilo. Skeme ĝi aspektas tiel.

Bonvolu noti, ke ĉiu atestilo havas "subjekton" (al kiu la atestilo estis elsendita) kaj "eldonanto" (kiu eldonis la atestilon). En la kazo de radika atestilo, "subjekto" = "eldonanto", sed por aliaj atestiloj, la emisianto de la atestilo estas la temo de la gepatra atestilo per kiu ĝi estas subskribita.

Grava punkto: ĉiu aldonaĵo estas subskribita per unika fin-atestilo, sed preskaŭ ĉiam tiuj fin-atestiloj estas subskribitaj per la sama meza atestilo.

Noto de la aŭtoro: La escepto estas tre malnovaj aldonoj. En tiu tempo, diversaj mezaj atestiloj estis uzitaj.

Ĉi tiu meza atestilo kaŭzis problemojn: ĉiu atestilo validas por certa periodo. Antaŭ aŭ post ĉi tiu periodo, la atestilo estas nevalida kaj la retumilo ne uzos aldonaĵojn subskribitajn de ĉi tiu atestilo. Bedaŭrinde, la meza atestilo eksvalidiĝis la 4-an de majo je la 4-a matene.

La sekvoj ne tuj aperis. Fajrovulpo ne konstante kontrolas la subskribojn de instalitaj aldonaĵoj, sed proksimume unufoje ĉiujn 24 horojn, kaj la kontrola tempo estas individua por ĉiu uzanto. Kiel rezulto, kelkaj homoj spertis problemojn tuj, dum aliaj spertis problemojn multe poste. Ni unue ekkonsciis pri la problemo ĉirkaŭ la tempo kiam la atestilo eksvalidiĝis kaj tuj komencis serĉi solvon.

Reduktante damaĝon

Post kiam ni komprenis, kio okazis, ni provis malhelpi la situacion plimalboniĝi.

Unue, ili ĉesis akcepti kaj subskribi novajn aldonojn. Ne utilas uzi eksvalidiĝintan atestilon por ĉi tio. Rerigardante, mi dirus, ke ni povus lasi ĉion kiel ĝi estis. Ni nun rekomencis akcepti suplementojn.

Due, ili tuj sendis solvon, kiu malhelpis subskribojn esti kontrolitaj ĉiutage. Tiel ni savis tiujn uzantojn, kies retumilo ankoraŭ ne havis tempon kontroli la aldonaĵojn en la lastaj XNUMX horoj. Ĉi tiu riparo nun estis retirita kaj ne plu bezonas.

Paralela operacio

En teorio, la solvo de la problemo aspektas simpla: kreu novan validan mezan atestilon kaj resubskribu ĉiun aldonaĵon. Bedaŭrinde ĉi tio ne funkcios:

  • ni ne povas rapide resubskribi 15 mil aldonaĵojn samtempe, la sistemo ne estas desegnita por tia ŝarĝo
  • Post kiam ni subskribas la aldonojn, la ĝisdatigitaj versioj devas esti liveritaj al uzantoj. Plej multaj aldonaĵoj estas instalitaj de Mozilla-serviloj, do Firefox trovos ĝisdatigojn ene de la venontaj XNUMX horoj, sed kelkaj programistoj distribuas subskribitajn aldonaĵojn per triaj kanaloj, do uzantoj devus ĝisdatigi tiajn aldonaĵojn permane.

Anstataŭe, ni provis evoluigi solvon, kiu atingus ĉiujn uzantojn sen postuli multan aŭ neniun agon de ilia flanko.

Sufiĉe rapide ni venis al du ĉefaj strategioj, kiujn ni uzis paralele:

  • Ĝisdatigu Firefox por ŝanĝi la validecperiodon de atestilo. Ĉi tio igos ekzistantajn aldonaĵojn magie denove funkcii, sed postulos liberigi kaj sendi novan konstruaĵon de Firefox
  • Generu validan atestilon kaj iel konvinku Fajrovulpon akcepti ĝin anstataŭ la ekzistantan eksvalidiĝintan

Ni decidis unue uzi la unuan opcion, kiu aspektis sufiĉe realigebla. Fine de la tago, ili publikigis duan solvon (novan atestilon), pri kiu ni parolos poste.

Anstataŭigi atestilon

Kiel mi menciis supre, ĝi estis postulata:

  • krei novan validan atestilon
  • instalu ĝin malproksime en Firefox

Por kompreni kial ĉi tio funkcias, ni rigardu pli detale la aldonan kontrolan procezon. La aldonaĵo mem venas kiel aro de dosieroj, inkluzive de ĉeno de atestiloj uzataj por subskribado. Kiel rezulto, la aldonaĵo povas esti kontrolita se la retumilo konas la radikan atestilon, kiu estas enkonstruita en Fajrovulpo ĉe konstrua tempo. Tamen, kiel ni jam scias, la meza atestilo eksvalidiĝis, do ne eblas kontroli la aldonaĵon.

Kiam Fajrovulpo provas kontroli aldonaĵon, ĝi ne estas limigita al uzado de la atestiloj enhavitaj ene de la aldonaĵo mem. Anstataŭe, la retumilo provas krei validan atestilĉenon, komencante per la fina atestilo kaj daŭrante ĝis ĝi atingas la radikon. Ĉe la unua nivelo, ni komencas per la fina atestilo kaj poste trovas la atestilon, kies temo estas la emisianto de la fina atestilo (tio estas la meza atestilo). Tipe ĉi tiu meza atestilo estas provizita kun la aldonaĵo, sed ajna atestilo el la stokado de la retumilo ankaŭ povas funkcii kiel ĉi tiu meza atestilo. Se ni povas malproksime aldoni novan validan atestilon al la atestilo, Firefox provos uzi ĝin. La situacio antaŭ kaj post instalo de nova atestilo.

Post instalo de la nova atestilo, Fajrovulpo havos du eblojn kiam validigas la atestilĉenon: uzu la malnovan nevalidan atestilon (kiu ne funkcios) aŭ la novan validan atestilon (kiu funkcios). Gravas, ke la nova atestilo enhavas la saman subjektan nomon kaj publikan ŝlosilon kiel la malnova atestilo, do ĝia subskribo sur la fina atestilo estos valida. Fajrovulpo estas sufiĉe inteligenta por provi ambaŭ opciojn ĝis ĝi trovas unu kiu funkcias, do la aldonaĵoj denove estas provitaj. Notu, ke ĉi tio estas la sama logiko, kiun ni uzas por validigi TLS-atestilojn.

Noto de Aŭtoro: Legantoj konataj kun WebPKI rimarkos, ke kruc-atestiloj funkcias precize same.

La bonega afero pri ĉi tiu riparo estas, ke ĝi ne postulas, ke vi resubskribi ekzistantajn aldonaĵojn. Tuj kiam la retumilo ricevos la novan atestilon, ĉiuj aldonaĵoj denove funkcios. La restanta defio estas liveri la novan atestilon al uzantoj (aŭtomate kaj malproksime), kaj ankaŭ fari ke Firefox rekontrolu malfunkciigitajn aldonaĵojn.

Normandio kaj la esplorsistemo

Ironie, ĉi tiu problemo estas solvita per speciala aldonaĵo nomata "sistemo". Por fari esploradon, ni evoluigis sistemon nomatan Normandio, kiu liveras esploradon al uzantoj. Ĉi tiuj studoj estas aŭtomate faritaj en la retumilo, kaj havas plibonigitan aliron al la internaj API-oj de Firefox. Esplorado povas aldoni novajn atestilojn al la atestilbutiko.

Noto de la aŭtoro: Ni ne aldonas atestilon kun iuj specialaj privilegioj; ĝi estas subskribita de la radika atestilo, do Firefox fidas ĝin. Ni simple aldonas ĝin al la aro de atestiloj, kiuj povas esti uzataj de la retumilo.

Do la solvo estas krei studon:

  • instalante la novan atestilon, kiun ni kreis por uzantoj
  • devigante la retumilon rekontroli malfunkciigitajn aldonaĵojn por ke ili funkciu denove

"Sed atendu," vi diras, "aldonaĵoj ne funkcias, kiel mi povas lanĉi sisteman aldonaĵon?" Ni subskribu ĝin per nova atestilo!

Kunmeti ĉion... kial ĝi daŭras tiel longe?

Do, la plano: eldonu novan atestilon por anstataŭigi la malnovan, kreu sisteman aldonaĵon kaj instalu ĝin al uzantoj per Normandio. La problemoj, kiel mi diris, komenciĝis la 4-an de majo je la 4:00, kaj jam je la 12:44 de la sama tago, malpli ol 9 horojn poste, ni sendis solvon al Normandio. Necesis ankoraŭ 6-12 horoj por atingi ĉiujn uzantojn. Tute ne malbone, sed homoj en Tvitero demandas kial ni ne povus agi pli rapide.

Unue, necesis tempo por eldoni novan mezan atestilon. Kiel mi menciis supre, la ŝlosilo de la radika atestilo estas konservita eksterrete en la aparatara sekureca modulo. Ĉi tio estas bona el sekureca vidpunkto, ĉar la radiko estas uzata tre malofte kaj devus esti fidinde protektita, sed ĝi estas iomete maloportuna kiam vi bezonas urĝe subskribi novan atestilon. Unu el niaj inĝenieroj devis vojaĝi al la stokejo HSM. Tiam estis malsukcesaj provoj eldoni la ĝustan atestilon, kaj ĉiu provo kostis unu aŭ du horojn pasigitajn testadon.

Due, la disvolviĝo de la sistema aldonaĵo daŭris iom da tempo. Koncipe ĝi estas tre simpla, sed eĉ simplaj programoj postulas zorgon. Ni volis certigi, ke ni ne plimalbonigis la situacion. Esplorado devas esti provita antaŭ ol esti sendita al uzantoj. Krome, la aldonaĵo devas esti subskribita, sed nia aldonaĵa subskribsistemo estis malŝaltita, do ni devis trovi solvon.

Fine, post kiam ni havis la esploron preta por prezento, disfaldiĝo prenis tempon. La retumilo kontrolas Normandiajn ĝisdatigojn ĉiujn 6 horojn. Ne ĉiuj komputiloj estas ĉiam ŝaltitaj kaj konektitaj al Interreto, do necesos tempo por ke la solvo disvastiĝos al uzantoj.

Finaj paŝoj

La esplorado devus ripari la problemon por plej multaj uzantoj, sed ne estas disponebla por ĉiuj. Iuj uzantoj postulas specialan aliron:

  • uzantoj kiuj malfunkciigis esploradon aŭ telemetrion
  • uzantoj de la Android-versio (Fennec), kie esplorado tute ne estas subtenata
  • uzantoj de kutimaj konstruoj de Firefox ESR en entreprenoj kie telemetrio ne povas esti ebligita
  • uzantoj sidantaj malantaŭ MitM-prokuriloj, ĉar nia aldonaĵa instalsistemo uzas klavopindon, kiu ne funkcias kun tiaj prokuriloj.
  • uzantoj de heredaj versioj de Fajrovulpo kiuj ne subtenas esploradon

Ni povas nenion fari pri ĉi tiu lasta kategorio de uzantoj - ili ankoraŭ devus ĝisdatigi al la nova versio de Fajrovulpo, ĉar malmodernaj havas gravajn neflakitajn vundeblecojn. Ni scias, ke kelkaj homoj restas sur pli malnovaj versioj de Fajrovulpo ĉar ili volas ruli malnovajn aldonaĵojn, sed multaj el la malnovaj aldonaĵoj jam estis portitaj al pli novaj versioj de la retumilo. Por aliaj uzantoj, ni evoluigis diakilon, kiu instalos novan atestilon. Ĝi estis liberigita kiel cimkorekta eldono (noto de la tradukinto: Firefox 66.0.5), do homoj ricevos ĝin - plej verŝajne jam ricevis ĝin - per la regula ĝisdatiga kanalo. Se vi uzas kutiman konstruon de Firefox ESR, bonvolu kontakti vian prizorganton.

Ni komprenas, ke ĉi tio ne estas ideala. En iuj kazoj, uzantoj perdis aldonajn datumojn (ekzemple aldonajn datumojn Plurkontaj Ujoj).

Ĉi tiu kromefiko ne povus esti evitita, sed ni kredas, ke baldaŭ ni elektis la plej bonan solvon por la plej multaj uzantoj. Longtempe, ni serĉos aliajn, pli altnivelajn arkitekturajn alirojn.

Lecionoj

Unue, nia teamo faris mirindan laboron krei kaj sendi solvon en malpli ol 12 horoj post kiam la problemo estis malkovrita. Kiel iu, kiu ĉeestis la kunvenojn, mi povas diri, ke en ĉi tiu malfacila situacio oni multe laboris kaj tre malmulte da tempo estis malŝparita.

Evidente, nenio el ĉi tio devus esti okazinta entute. Klare indas alĝustigi niajn procezojn por redukti la verŝajnecon de tiaj okazaĵoj kaj faciligi la solvadon.

Venontsemajne ni publikigos oficialan postmortan kaj liston de ŝanĝoj, kiujn ni intencas fari. Nuntempe, mi dividos miajn pensojn. Unue, devas esti pli bona maniero kontroli la staton de kio estas ebla horloĝbombo. Ni devas esti certaj, ke ni ne trovas nin en situacio, kie unu el ili subite funkcias. Ni ankoraŭ prilaboras la detalojn, sed minimume necesas konsideri ĉiujn tiajn aferojn.

Due, ni bezonas mekanismon por rapide liveri ĝisdatigojn al uzantoj, eĉ kiam—precipe kiam—ĉio alia malsukcesas. Estis bonege, ke ni povis uzi la "esploran" sistemon, sed ĝi estas neperfekta ilo kaj havas kelkajn nedeziratajn kromefikojn. Precipe ni scias, ke multaj uzantoj havas aŭtomatajn ĝisdatigojn ŝaltitaj, sed preferus ne partopreni en esplorado (mi konfesas, ankaŭ mi havas ilin malŝaltitaj!). Samtempe, ni bezonas manieron sendi ĝisdatigojn al uzantoj, sed kia ajn estas la interna teknika efektivigo, uzantoj devus povi aboni ĝisdatigojn (inkluzive de varmaj korektoj) sed elekti for de ĉio alia. Aldone, la ĝisdatiga kanalo devus esti pli respondema ol nun. Eĉ la 6-an de majo ankoraŭ estis uzantoj, kiuj ne profitis nek la riparadon nek la novan version. Ĉi tiu problemo jam estis prilaborita, sed kio okazis montris kiom grava ĝi estas.

Fine, ni rigardos pli detale la sekurecan arkitekturon de la aldonaĵo por certigi, ke ĝi provizas la ĝustan nivelon de sekureco kun minimuma risko rompi ion ajn.

Venontsemajne ni rigardos la rezultojn de pli profunda analizo de kio okazis, sed intertempe mi volonte respondos demandojn retpoŝte: [retpoŝte protektita]

fonto: linux.org.ru

Aldoni komenton