Tehniskā informācija par neseno papildinājumu atspējoÅ”anu pārlÅ«kprogrammā Firefox

Piezīme tulkotājs: lasītāju ērtībām datumi norādīti pēc Maskavas laika

Mēs nesen nokavējām viena sertifikāta derÄ«guma termiņu, kas tika izmantots pievienojumprogrammu parakstÄ«Å”anai. Tā rezultātā lietotājiem tika atspējoti papildinājumi. Tagad, kad problēma lielākoties ir novērsta, vēlos padalÄ«ties ar notikuÅ”o un paveikto darbu.

PriekÅ”vēsture: papildinājumi un paraksti

Lai gan daudzi cilvēki pārlÅ«kprogrammu izmanto jau sākotnēji, Firefox atbalsta paplaÅ”inājumus, ko sauc par ā€œpapildinājumiemā€. Ar viņu palÄ«dzÄ«bu lietotāji pārlÅ«kprogrammai pievieno dažādas funkcijas. Ir vairāk nekā 15 tÅ«kstoÅ”i papildinājumu: no reklāmu bloÄ·Ä“Å”ana lÄ«dz pārvaldÄ«t simtiem ciļņu.

JābÅ«t instalētajiem papildinājumiem Digitālais paraksts, kas aizsargā lietotājus no ļaunprātÄ«gām pievienojumprogrammām un prasa minimālu Mozilla personāla papildinājumu pārskatÄ«Å”anu. Mēs ieviesām Å”o prasÄ«bu 2015. gadā, jo piedzÄ«vojām nopietnas problēmas ar ļaunprātÄ«giem papildinājumiem.

Kā tas darbojas: katrā Firefox eksemplārā ir "saknes sertifikāts". Å Ä«s ā€œsaknesā€ atslēga ir saglabāta AparatÅ«ras droŔības modulis (HSM)bez piekļuves tÄ«klam. Ik pēc dažiem gadiem ar Å”o atslēgu tiek parakstÄ«ts jauns ā€œstarpsertifikātsā€, kas tiek izmantots pievienojumprogrammu parakstÄ«Å”anai. Kad izstrādātājs iesniedz papildinājumu, mēs izveidojam pagaidu ā€œbeigu sertifikātuā€ un parakstām to, izmantojot starpposma sertifikātu. Pēc tam pats papildinājums tiek parakstÄ«ts ar gala sertifikātu. Shematiski tas izskatās Ŕādi.

LÅ«dzu, ņemiet vērā, ka katram sertifikātam ir "subjekts" (kam sertifikāts tika izsniegts) un "izdevējs" (kurÅ” izsniedza sertifikātu). Saknes sertifikāta gadÄ«jumā "subject" = "izdevējs", bet citiem sertifikātiem sertifikāta izsniedzējs ir vecāka sertifikāta subjekts, ar kuru tas ir parakstÄ«ts.

SvarÄ«gs punkts: katrs papildinājums ir parakstÄ«ts ar unikālu beigu sertifikātu, taču gandrÄ«z vienmēr Å”ie beigu sertifikāti ir parakstÄ«ti ar vienu un to paÅ”u starpsertifikātu.

Autora piezīme: Izņēmums ir ļoti veci papildinājumi. Tolaik tika izmantoti dažādi starpsertifikāti.

Å is starpposma sertifikāts radÄ«ja problēmas: katrs sertifikāts ir derÄ«gs noteiktu laiku. Pirms vai pēc Ŕī perioda sertifikāts ir nederÄ«gs, un pārlÅ«kprogramma neizmantos ar Å”o sertifikātu parakstÄ«tus papildinājumus. Diemžēl starpapliecÄ«bas derÄ«guma termiņŔ beidzās 4. maijā pulksten 4 no rÄ«ta.

Sekas neparādÄ«jās uzreiz. Firefox nepārbauda instalēto papildinājumu parakstus pastāvÄ«gi, bet aptuveni reizi 24 stundās, un verifikācijas laiks katram lietotājam ir individuāls. Tā rezultātā dažiem cilvēkiem problēmas radās uzreiz, bet citiem daudz vēlāk. Mēs pirmo reizi uzzinājām par problēmu ap laiku, kad beidzās sertifikāta derÄ«guma termiņŔ, un nekavējoties sākām meklēt risinājumu.

Bojājumu samazināŔana

Kad sapratām, kas noticis, centāmies nepieļaut situācijas pasliktināŔanos.

Pirmkārt, viņi pārtrauca pieņemt un parakstÄ«t jaunus papildinājumus. Å im nolÅ«kam nav jēgas izmantot sertifikātu, kuram beidzies derÄ«guma termiņŔ. Atskatoties uz pagātni, es teiktu, ka varējām atstāt visu, kā bija. Tagad esam atsākuÅ”i uztura bagātinātāju pieņemÅ”anu.

Otrkārt, viņi nekavējoties izsūtīja labojumu, kas neļāva katru dienu pārbaudīt parakstus. Tādējādi mēs saglabājām tos lietotājus, kuru pārlūkprogramma pēdējo XNUMX stundu laikā vēl nebija paspējusi pārbaudīt pievienojumprogrammas. Šis labojums tagad ir atsaukts un vairs nav vajadzīgs.

Paralēlā darbība

Teorētiski problēmas risinājums izskatās vienkārÅ”s: izveidojiet jaunu derÄ«gu starpsertifikātu un atkārtoti parakstiet katru papildinājumu. Diemžēl tas nedarbosies:

  • mēs nevaram ātri pārrakstÄ«t uzreiz 15 tÅ«kstoÅ”us papildinājumu, sistēma nav paredzēta Ŕādai slodzei
  • Kad esam parakstÄ«juÅ”i papildinājumus, atjauninātās versijas ir jāpiegādā lietotājiem. Lielākā daļa papildinājumu tiek instalēti no Mozilla serveriem, tāpēc Firefox atradÄ«s atjauninājumus nākamo XNUMX stundu laikā, taču daži izstrādātāji izplata parakstÄ«tos papildinājumus, izmantojot treÅ”o puÅ”u kanālus, tāpēc lietotājiem Ŕādi papildinājumi bÅ«tu jāatjaunina manuāli.

Tā vietā mēs centāmies izstrādāt labojumu, kas sasniegtu visus lietotājus, neprasot viņiem daudz vai nekādas darbības.

Diezgan ātri mēs nonācām pie divām galvenajām stratēģijām, kuras izmantojām paralēli:

  • Atjauniniet Firefox, lai mainÄ«tu sertifikāta derÄ«guma termiņu. Tādējādi esoÅ”ie papildinājumi atkal maÄ£iski darbosies, taču bÅ«s jāizlaiž un jānosÅ«ta jauna Firefox versija.
  • Ä¢enerējiet derÄ«gu sertifikātu un kaut kādā veidā pārlieciniet Firefox pieņemt to esoŔā sertifikāta vietā, kuram ir beidzies derÄ«guma termiņŔ

Mēs nolēmām vispirms izmantot pirmo iespēju, kas izskatījās diezgan praktiski. Dienas beigās viņi izlaida otru labojumu (jaunu sertifikātu), par kuru mēs runāsim vēlāk.

Sertifikāta aizstāŔana

Kā jau minēju iepriekÅ”, tas bija nepiecieÅ”ams:

  • izveidot jaunu derÄ«gu sertifikātu
  • instalējiet to attālināti pārlÅ«kprogrammā Firefox

Lai saprastu, kāpēc tas darbojas, sÄ«kāk apskatÄ«sim pievienojumprogrammas verifikācijas procesu. Pati pievienojumprogramma ir failu kopa, tostarp parakstÄ«Å”anai izmantoto sertifikātu ķēde. Rezultātā pievienojumprogrammu var pārbaudÄ«t, ja pārlÅ«kprogramma zina saknes sertifikātu, kas ir iebÅ«vēts Firefox izveides laikā. Taču, kā jau zinām, starpposma sertifikātam ir beidzies derÄ«guma termiņŔ, tāpēc nav iespējams pārbaudÄ«t papildinājumu.

Kad Firefox mēģina pārbaudÄ«t pievienojumprogrammu, tas neaprobežojas tikai ar paŔā papildinājumā esoÅ”o sertifikātu izmantoÅ”anu. Tā vietā pārlÅ«kprogramma mēģina izveidot derÄ«gu sertifikātu ķēdi, sākot ar beigu sertifikātu un turpinot, lÄ«dz tas nonāk saknē. Pirmajā lÄ«menÄ« mēs sākam ar beigu sertifikātu un pēc tam atrodam sertifikātu, kura priekÅ”mets ir beigu sertifikāta (tas ir, starpsertifikāta) izsniedzējs. Parasti Å”is starpposma sertifikāts tiek piegādāts kopā ar papildinājumu, taču jebkurÅ” sertifikāts no pārlÅ«kprogrammas krātuves var kalpot arÄ« kā Å”is starpsertifikāts. Ja mēs varam attālināti pievienot jaunu derÄ«gu sertifikātu sertifikātu krātuvei, Firefox mēģinās to izmantot. Situācija pirms un pēc jauna sertifikāta instalÄ“Å”anas.

Pēc jaunā sertifikāta instalÄ“Å”anas pārlÅ«kprogrammai Firefox bÅ«s divas iespējas, pārbaudot sertifikātu ķēdi: izmantot veco nederÄ«go sertifikātu (kas nedarbosies) vai jauno derÄ«go sertifikātu (kas darbosies). Ir svarÄ«gi, lai jaunajā sertifikātā bÅ«tu tāds pats priekÅ”meta nosaukums un publiskā atslēga kā vecajam sertifikātam, tāpēc tā paraksts uz gala sertifikāta bÅ«s derÄ«gs. Firefox ir pietiekami gudrs, lai izmēģinātu abas iespējas, lÄ«dz atrod vienu, kas darbojas, tāpēc pievienojumprogrammas tiek pārbaudÄ«tas vēlreiz. Ņemiet vērā, ka Ŕī ir tā pati loÄ£ika, ko izmantojam TLS sertifikātu apstiprināŔanai.

Autora piezÄ«me. LasÄ«tāji, kas pārzina WebPKI, ievēros, ka savstarpējie sertifikāti darbojas tieÅ”i tāpat.

Lieliskā Ŕī labojuma priekÅ”rocÄ«ba ir tā, ka nav nepiecieÅ”ams atkārtoti parakstÄ«t esoÅ”os papildinājumus. TiklÄ«dz pārlÅ«kprogramma saņems jauno sertifikātu, visi papildinājumi atkal darbosies. AtlikuÅ”ais izaicinājums ir nodroÅ”ināt jauno sertifikātu lietotājiem (automātiski un attālināti), kā arÄ« panākt, lai Firefox atkārtoti pārbaudÄ«tu atspējotos papildinājumus.

Normandija un pētniecības sistēma

Ironiski, ka Å”o problēmu atrisina Ä«paÅ”s papildinājums, ko sauc par ā€œsistēmuā€. Lai veiktu pētÄ«jumus, mēs izstrādājām sistēmu ar nosaukumu Normandija, kas lietotājiem nodroÅ”ina pētÄ«jumus. Å ie pētÄ«jumi tiek automātiski veikti pārlÅ«kprogrammā, un tiem ir uzlabota piekļuve Firefox iekŔējām API. PētÄ«jumi var pievienot jaunus sertifikātus sertifikātu krātuvei.

Autora piezÄ«me: Mēs nepievienojam sertifikātu ar Ä«paŔām privilēģijām; to paraksta saknes sertifikāts, tāpēc Firefox tam uzticas. Mēs vienkārÅ”i pievienojam to sertifikātu kopumam, ko var izmantot pārlÅ«kprogramma.

Tātad risinājums ir izveidot pētījumu:

  • instalējot jauno sertifikātu, ko izveidojām lietotājiem
  • piespiežot pārlÅ«kprogrammu atkārtoti pārbaudÄ«t atspējotos papildinājumus, lai tie atkal darbotos

"Bet pagaidiet," jūs sakāt, "papildinājumi nedarbojas, kā es varu palaist sistēmas papildinājumu?" Parakstīsim to ar jaunu sertifikātu!

Saliekot to visu kopā... kāpēc tas prasa tik ilgu laiku?

Tātad, plāns: izsniedziet jaunu sertifikātu, lai aizstātu veco, izveidojiet sistēmas papildinājumu un instalējiet to lietotājiem caur Normandiju. Problēmas, kā jau teicu, sākās 4. maijā pulksten 4:00, un jau tajā paŔā dienā pulksten 12:44, nepilnas 9 stundas vēlāk, mēs nosÅ«tÄ«jām labojumu uz Normandiju. Pagāja vēl 6ā€“12 stundas, lÄ«dz tas sasniedza visus lietotājus. Nemaz nav slikti, bet cilvēki Twitter jautā, kāpēc mēs nevarējām rÄ«koties ātrāk.

Pirmkārt, pagāja laiks, lai izsniegtu jaunu starpposma sertifikātu. Kā jau minēju iepriekÅ”, saknes sertifikāta atslēga tiek saglabāta bezsaistē aparatÅ«ras droŔības modulÄ«. Tas ir labi no droŔības viedokļa, jo sakne tiek izmantota ļoti reti un tai jābÅ«t droÅ”i aizsargātai, taču tas ir nedaudz neērti, ja jums steidzami jāparaksta jauns sertifikāts. Vienam no mÅ«su inženieriem bija jābrauc uz HSM noliktavu. Pēc tam bija neveiksmÄ«gi mēģinājumi izsniegt pareizo sertifikātu, un katrs mēģinājums maksāja vienu vai divas pārbaudes stundas.

Otrkārt, sistēmas papildinājuma izstrāde prasÄ«ja zināmu laiku. Konceptuāli tas ir ļoti vienkārÅ”i, taču pat vienkārŔām programmām ir nepiecieÅ”ama aprÅ«pe. Mēs vēlējāmies pārliecināties, ka nepasliktināsim situāciju. Pirms nosÅ«tÄ«Å”anas lietotājiem pētÄ«jumi ir jāpārbauda. Turklāt pievienojumprogramma ir jāparaksta, taču mÅ«su papildinājumu parakstÄ«Å”anas sistēma tika atspējota, tāpēc mums bija jāatrod risinājums.

Visbeidzot, kad izpēte bija gatava iesniegÅ”anai, izvietoÅ”ana prasÄ«ja laiku. PārlÅ«kprogramma pārbauda Normandijas atjauninājumus ik pēc 6 stundām. Ne visi datori vienmēr ir ieslēgti un savienoti ar internetu, tāpēc paies laiks, lÄ«dz labojums tiks izplatÄ«ts lietotājiem.

Pēdējie soļi

PētÄ«jumam vajadzētu atrisināt problēmu lielākajai daļai lietotāju, taču tas nav pieejams visiem. Dažiem lietotājiem nepiecieÅ”ama Ä«paÅ”a pieeja:

  • lietotājiem, kuri ir atspējojuÅ”i pētniecÄ«bu vai telemetriju
  • Android versijas (Fennec) lietotāji, kur pētÄ«jumi vispār netiek atbalstÄ«ti
  • Firefox ESR pielāgoto bÅ«vējumu lietotāji uzņēmumos, kuros telemetriju nevar iespējot
  • lietotāji, kas sēž aiz MitM starpniekserveriem, jo ā€‹ā€‹mÅ«su pievienojumprogrammu instalÄ“Å”anas sistēma izmanto atslēgu piesprauÅ”anu, kas nedarbojas ar Ŕādiem starpniekserveriem
  • mantoto Firefox versiju lietotāji, kas neatbalsta izpēti

Ar pēdējo lietotāju kategoriju mēs neko nevaram darÄ«t ā€“ viņiem tomēr vajadzētu atjaunināt uz jauno Firefox versiju, jo novecojuÅ”ajām ir nopietnas neaizlāptas ievainojamÄ«bas. Mēs zinām, ka daži cilvēki izmanto vecākas Firefox versijas, jo vēlas palaist vecus papildinājumus, taču daudzi vecie papildinājumi jau ir pārnesti uz jaunākām pārlÅ«kprogrammas versijām. Citiem lietotājiem esam izstrādājuÅ”i ielāpu, kas instalēs jaunu sertifikātu. Tas tika izlaists kā kļūdu labojuma laidiens (tulkotāja piezÄ«me: Firefox 66.0.5), tāpēc cilvēki to saņems ā€” visticamāk, jau ir ieguvuÅ”i ā€”, izmantojot parasto atjaunināŔanas kanālu. Ja izmantojat pielāgotu Firefox ESR bÅ«vējumu, lÅ«dzu, sazinieties ar savu uzturētāju.

Mēs saprotam, ka tas nav ideāli. Dažos gadījumos lietotāji zaudēja pievienojumprogrammas datus (piemēram, pievienojumprogrammas datus Vairāku kontu konteineri).

No Ŕīs blakusparādÄ«bas nevarēja izvairÄ«ties, taču mēs uzskatām, ka Ä«stermiņā esam izvēlējuÅ”ies labāko risinājumu lielākajai daļai lietotāju. Ilgtermiņā mēs meklēsim citas, progresÄ«vākas arhitektÅ«ras pieejas.

Nodarbības

Pirmkārt, mÅ«su komanda paveica pārsteidzoÅ”u darbu, izveidojot un nosÅ«tot labojumu mazāk nekā 12 stundu laikā pēc problēmas atklāŔanas. Kā cilvēks, kurÅ” apmeklēja sanāksmes, varu teikt, ka Å”ajā sarežģītajā situācijā cilvēki strādāja ļoti smagi un tika iztērēts ļoti maz laika.

AcÄ«mredzot nekam no tā vispār nevajadzēja notikt. Noteikti ir vērts pielāgot mÅ«su procesus, lai samazinātu Ŕādu incidentu iespējamÄ«bu un atvieglotu atlÄ«dzināŔanu.

Nākamnedēļ mēs publicēsim oficiālu pēcnāves ziņojumu un to izmaiņu sarakstu, kuras plānojam veikt. Pagaidām padalÄ«Å”os ar savām domām. Pirmkārt, ir jābÅ«t labākam veidam, kā pārraudzÄ«t potenciālās bumbas ar laika degli. Mums ir jābÅ«t pārliecinātiem, ka nenonākam situācijā, kad kāds no tiem pēkŔņi iedarbojas. Mēs joprojām izstrādājam detaļas, bet vismaz ir jāņem vērā visas Ŕādas lietas.

Otrkārt, mums ir nepiecieÅ”ams mehānisms, lai lietotājiem ātri piegādātu atjauninājumus pat tad, ja ā€” it Ä«paÅ”i, ja viss pārējais neizdodas. Tas bija lieliski, ka varējām izmantot "pētÄ«jumu" sistēmu, taču tas ir nepilnÄ«gs rÄ«ks un tam ir dažas nevēlamas blakusparādÄ«bas. Jo Ä«paÅ”i mēs zinām, ka daudziem lietotājiem ir ieslēgti automātiskie atjauninājumi, taču viņi nevēlētos piedalÄ«ties pētÄ«jumos (atzÄ«stu, ka arÄ« man tie ir izslēgti!). Tajā paŔā laikā mums ir nepiecieÅ”ams veids, kā lietotājiem nosÅ«tÄ«t atjauninājumus, taču neatkarÄ«gi no iekŔējās tehniskās ievieÅ”anas lietotājiem vajadzētu bÅ«t iespējai abonēt atjauninājumus (tostarp karstos labojumus), bet atteikties no visa pārējā. Turklāt atjaunināŔanas kanālam vajadzētu bÅ«t atsaucÄ«gākam nekā paÅ”laik. Pat 6. maijā joprojām bija lietotāji, kuri neizmantoja ne labojuma, ne jaunās versijas priekÅ”rocÄ«bas. Pie Ŕīs problēmas jau ir strādāts, taču notikuÅ”ais parādÄ«ja, cik tā ir svarÄ«ga.

Visbeidzot, mēs sÄ«kāk aplÅ«kosim papildinājuma droŔības arhitektÅ«ru, lai pārliecinātos, ka tas nodroÅ”ina pareizo droŔības lÄ«meni ar minimālu risku kaut ko uzlauzt.

Nākamnedēļ apskatÄ«sim notikuŔā rÅ«pÄ«gākas analÄ«zes rezultātus, bet tikmēr labprāt atbildÄ“Å”u uz jautājumiem pa e-pastu: [e-pasts aizsargāts]

Avots: linux.org.ru

Pievieno komentāru