Technické podrobnosti o nedávném zakázání doplňků ve Firefoxu

Poznámka překladatel: pro pohodlí čtenářů jsou data uvedena v moskevském čase

Nedávno jsme propásli expiraci jednoho z certifikátů používaných k podepisování doplňků. To vedlo k deaktivaci doplňků pro uživatele. Nyní, když je problém z větší části vyřešen, bych se rád podělil o podrobnosti o tom, co se stalo, ao práci, která byla provedena.

Pozadí: dodatky a podpisy

Ačkoli mnoho lidí používá prohlížeč ihned po vybalení, Firefox podporuje rozšíření nazývaná „doplňky“. S jejich pomocí uživatelé přidávají do prohlížeče různé funkce. Existuje více než 15 tisíc doplňků: od blokování reklam na spravovat stovky karet.

Nainstalované doplňky musí mít digitální podpis, který chrání uživatele před škodlivými doplňky a vyžaduje minimální kontrolu doplňků pracovníky Mozilly. Tento požadavek jsme zavedli v roce 2015, protože jsme to zažívali vážné problémy se škodlivými doplňky.

Jak to funguje: Každá kopie Firefoxu obsahuje „kořenový certifikát“. Klíč k tomuto „kořenu“ je uložen v Hardwarový bezpečnostní modul (HSM)bez přístupu k síti. Každých pár let je tímto klíčem podepsán nový „zprostředkující certifikát“, který se používá při podepisování doplňků. Když vývojář odešle doplněk, vytvoříme dočasný „koncový certifikát“ a podepíšeme jej pomocí zprostředkujícího certifikátu. Samotný doplněk je pak podepsán finálním certifikátem. Schematicky vypadá to takhle.

Upozorňujeme, že každý certifikát má „subjekt“ (komu byl certifikát vydán) a „vydavatele“ (který certifikát vydal). V případě kořenového certifikátu "předmět" = "vydavatel", ale u ostatních certifikátů je vydavatel certifikátu subjektem nadřazeného certifikátu, kterým je podepsán.

Důležitý bod: každý doplněk je podepsán jedinečným koncovým certifikátem, ale téměř vždy jsou tyto koncové certifikáty podepsány stejným zprostředkujícím certifikátem.

Poznámka autora: Výjimkou jsou velmi staré doplňky. V té době se používaly různé mezicertifikáty.

Tento přechodný certifikát způsobil problémy: každý certifikát je platný po určitou dobu. Před nebo po této lhůtě je certifikát neplatný a prohlížeč nebude používat doplňky podepsané tímto certifikátem. Bohužel platnost mezicertifikátu vypršela 4. května ve 4 hodiny ráno.

Následky se nedostavily hned. Firefox nekontroluje podpisy nainstalovaných doplňků neustále, ale přibližně jednou za 24 hodin, přičemž doba ověření je u každého uživatele individuální. V důsledku toho někteří lidé zažili problémy okamžitě, zatímco jiní měli problémy mnohem později. Poprvé jsme se o problému dozvěděli přibližně v době, kdy platnost certifikátu vypršela, a okamžitě jsme začali hledat řešení.

Snížení poškození

Jakmile jsme si uvědomili, co se stalo, snažili jsme se zabránit zhoršení situace.

Za prvé přestali přijímat a podepisovat nové přírůstky. K tomu nemá smysl používat prošlý certifikát. Když se ohlédnu zpět, řekl bych, že jsme mohli všechno nechat tak, jak to bylo. Nyní jsme obnovili přijímání doplňků.

Za druhé, okamžitě rozeslali opravu, která zabránila každodenní kontrole podpisů. Ušetřili jsme tak uživatele, jejichž prohlížeč za posledních XNUMX hodin ještě nestihl doplňky zkontrolovat. Tato oprava byla nyní stažena a již není potřeba.

Paralelní provoz

Teoreticky vypadá řešení problému jednoduše: vytvořte nový platný přechodný certifikát a znovu podepište každý doplněk. Bohužel to nebude fungovat:

  • nemůžeme rychle znovu podepsat 15 tisíc dodatků najednou, systém není dimenzován na takovou zátěž
  • Poté, co podepíšeme dodatky, je třeba uživatelům doručit aktualizované verze. Většina doplňků je nainstalována ze serverů Mozilla, takže Firefox najde aktualizace během příštích XNUMX hodin, ale někteří vývojáři distribuují podepsané doplňky prostřednictvím kanálů třetích stran, takže uživatelé budou muset takové doplňky aktualizovat ručně.

Místo toho jsme se pokusili vyvinout opravu, která by se dostala ke všem uživatelům, aniž by od nich vyžadovala mnoho nebo žádnou akci.

Poměrně rychle jsme došli ke dvěma hlavním strategiím, které jsme používali paralelně:

  • Aktualizujte Firefox a změňte dobu platnosti certifikátu. Díky tomu budou stávající doplňky opět magicky fungovat, ale bude to vyžadovat vydání a dodání nového sestavení Firefoxu
  • Vygenerujte platný certifikát a nějakým způsobem přesvědčte Firefox, aby jej přijal místo stávajícího, jehož platnost vypršela

Rozhodli jsme se použít nejprve první možnost, která vypadala docela funkční. Na konci dne vydali druhou opravu (nový certifikát), o které si povíme později.

Výměna certifikátu

Jak jsem uvedl výše, bylo vyžadováno:

  • vytvořit nový platný certifikát
  • nainstalovat vzdáleně do Firefoxu

Abychom pochopili, proč to funguje, podívejme se blíže na proces ověření doplňku. Samotný doplněk přichází jako sada souborů, včetně řetězce certifikátů používaných k podepisování. Díky tomu lze doplněk ověřit, pokud prohlížeč zná kořenový certifikát, který je ve Firefoxu zabudován v době sestavení. Jak však již víme, platnost mezicertifikátu vypršela, takže není možné doplněk ověřit.

Když se Firefox pokusí ověřit doplněk, není omezen na použití certifikátů obsažených v samotném doplňku. Místo toho se prohlížeč pokusí vytvořit platný řetězec certifikátů, počínaje koncovým certifikátem a pokračovat, dokud se nedostane do kořenového adresáře. Na první úrovni začneme koncovým certifikátem a poté najdeme certifikát, jehož předmětem je vydavatel koncového certifikátu (tedy prostředního certifikátu). Obvykle je tento zprostředkující certifikát dodáván s doplňkem, ale jako zprostředkující certifikát může sloužit také jakýkoli certifikát z úložiště prohlížeče. Pokud můžeme vzdáleně přidat nový platný certifikát do úložiště certifikátů, Firefox se jej pokusí použít. Situace před a po instalaci nového certifikátu.

Po instalaci nového certifikátu bude mít Firefox při ověřování řetězce certifikátů dvě možnosti: použít starý neplatný certifikát (který nebude fungovat) nebo nový platný certifikát (který bude fungovat). Je důležité, aby nový certifikát obsahoval stejné jméno subjektu a veřejný klíč jako starý certifikát, takže jeho podpis na finálním certifikátu bude platný. Firefox je dostatečně chytrý na to, aby vyzkoušel obě možnosti, dokud nenajde tu, která funguje, takže se doplňky znovu otestují. Všimněte si, že se jedná o stejnou logiku, kterou používáme k ověřování certifikátů TLS.

Poznámka autora: Čtenáři obeznámení s WebPKI si všimnou, že křížové certifikáty fungují úplně stejným způsobem.

Skvělá věc na této opravě je, že nevyžaduje opětovné podepisování existujících doplňků. Jakmile prohlížeč obdrží nový certifikát, všechny doplňky budou opět fungovat. Zbývající výzvou je doručit nový certifikát uživatelům (automaticky a vzdáleně) a také přimět Firefox, aby znovu zkontroloval zakázané doplňky.

Normandie a výzkumný systém

Je ironií, že tento problém řeší speciální doplněk nazvaný „systém“. Pro provádění výzkumu jsme vyvinuli systém nazvaný Normandie, který uživatelům poskytuje výzkum. Tyto studie se automaticky provádějí v prohlížeči a mají rozšířený přístup k interním rozhraním API Firefoxu. Výzkum může přidávat nové certifikáty do úložiště certifikátů.

Poznámka autora: Nepřidáváme certifikát se žádnými zvláštními oprávněními; je podepsán kořenovým certifikátem, takže mu Firefox důvěřuje. Jednoduše jej přidáme do fondu certifikátů, které může prohlížeč používat.

Řešením je tedy vytvoření studie:

  • instalaci nového certifikátu, který jsme pro uživatele vytvořili
  • nutit prohlížeč znovu zkontrolovat zakázané doplňky, aby znovu fungovaly

"Ale počkej," říkáš, "doplňky nefungují, jak mohu spustit systémový doplněk?" Pojďme to podepsat novým certifikátem!

Když to dáme dohromady... proč to trvá tak dlouho?

Takže plán: vydat nový certifikát, který nahradí starý, vytvořit systémový doplněk a nainstalovat jej uživatelům přes Normandii. Problémy, jak jsem řekl, začaly 4. května ve 4:00 a již ve 12:44 téhož dne, o necelých 9 hodin později, jsme poslali opravu do Normandie. Trvalo dalších 6–12 hodin, než se dostal ke všem uživatelům. Není to vůbec špatné, ale lidé na Twitteru se ptají, proč jsme nemohli jednat rychleji.

Nejprve trvalo vydání nového přechodného certifikátu. Jak jsem uvedl výše, klíč ke kořenovému certifikátu je uložen offline v modulu zabezpečení hardwaru. To je dobré z hlediska zabezpečení, protože root se používá velmi zřídka a měl by být spolehlivě chráněn, ale je to trochu nepohodlné, když potřebujete naléhavě podepsat nový certifikát. Jeden z našich inženýrů musel cestovat do skladu HSM. Poté došlo k neúspěšným pokusům o vydání správného certifikátu a každý pokus stál jednu až dvě hodiny strávené testováním.

Za druhé, vývoj systémového doplňku nějakou dobu trval. Koncepčně je to velmi jednoduché, ale i jednoduché programy vyžadují péči. Chtěli jsme mít jistotu, že situaci nezhoršíme. Výzkum je třeba před odesláním uživatelům otestovat. Kromě toho musí být doplněk podepsán, ale náš systém podepisování doplňků byl deaktivován, takže jsme museli najít řešení.

Nakonec, jakmile jsme měli výzkum připravený k odeslání, nasazení trvalo nějakou dobu. Prohlížeč kontroluje aktualizace Normandie každých 6 hodin. Ne všechny počítače jsou vždy zapnuté a připojené k internetu, takže bude nějakou dobu trvat, než se oprava rozšíří mezi uživatele.

Závěrečné kroky

Výzkum by měl problém vyřešit pro většinu uživatelů, ale není dostupný pro každého. Někteří uživatelé vyžadují speciální přístup:

  • uživatelé, kteří deaktivovali výzkum nebo telemetrii
  • uživatelé verze Android (Fennec), kde výzkum není podporován vůbec
  • uživatelé vlastních sestavení Firefoxu ESR v podnicích, kde nelze povolit telemetrii
  • uživatelé sedící za proxy servery MitM, protože náš instalační systém doplňků používá připínání klíčů, které s takovými proxy nefunguje
  • uživatelé starších verzí Firefoxu, které nepodporují výzkum

S posledně jmenovanou kategorií uživatelů nemůžeme nic dělat – měli by stále aktualizovat na novou verzi Firefoxu, protože ty zastaralé mají vážné neopravené zranitelnosti. Víme, že někteří lidé zůstávají na starších verzích Firefoxu, protože chtějí spouštět staré doplňky, ale mnoho starých doplňků již bylo přeneseno na novější verze prohlížeče. Pro ostatní uživatele jsme vyvinuli opravu, která nainstaluje nový certifikát. Bylo vydáno jako vydání opravy chyb (poznámka překladatele: Firefox 66.0.5), takže to lidé získají – s největší pravděpodobností už to mají – prostřednictvím běžného aktualizačního kanálu. Pokud používáte vlastní sestavení Firefoxu ESR, kontaktujte svého správce.

Chápeme, že to není ideální. V některých případech uživatelé přišli o doplňková data (například doplňková data Kontejnery pro více účtů).

Tomuto vedlejšímu efektu se nedalo vyhnout, ale věříme, že z krátkodobého hlediska jsme pro většinu uživatelů vybrali to nejlepší řešení. V dlouhodobém horizontu budeme hledat jiné, pokročilejší architektonické přístupy.

Lekce

Za prvé, náš tým odvedl úžasnou práci, když vytvořil a odeslal opravu za méně než 12 hodin od zjištění problému. Jako člověk, který se těchto setkání účastnil, mohu říci, že v této složité situaci lidé pracovali velmi tvrdě a zbytečně se ztrácelo jen velmi málo času.

Je zřejmé, že nic z toho se vůbec nemělo stát. Jednoznačně stojí za to upravit naše procesy, abychom snížili pravděpodobnost takových incidentů a usnadnili nápravu.

Příští týden zveřejníme oficiální pitvu a seznam změn, které hodláme provést. Prozatím se podělím o své myšlenky. Za prvé, musí existovat lepší způsob, jak monitorovat stav toho, co je potenciální časovanou bombou. Potřebujeme mít jistotu, že se neocitneme v situaci, kdy jeden z nich najednou funguje. Podrobnosti ještě dolaďujeme, ale minimálně je potřeba se všemi takovými věcmi počítat.

Za druhé, potřebujeme mechanismus, který uživatelům rychle doručí aktualizace, i když – zvláště když – vše ostatní selže. Bylo skvělé, že jsme mohli použít systém „výzkumu“, ale je to nedokonalý nástroj a má některé nežádoucí vedlejší účinky. Zejména víme, že mnoho uživatelů má zapnuté automatické aktualizace, ale raději by se výzkumu neúčastnili (přiznám se, že je mám také vypnuté!). Zároveň potřebujeme způsob, jak uživatelům posílat aktualizace, ale bez ohledu na interní technickou implementaci by uživatelé měli mít možnost přihlásit se k odběru aktualizací (včetně oprav hotfix), ale odhlásit se ze všeho ostatního. Kromě toho by aktualizační kanál měl být citlivější než nyní. I 6. května se stále našli uživatelé, kteří nevyužili výhody ani opravy, ani nové verze. Na tomto problému se již pracovalo, ale to, co se stalo, ukázalo, jak je důležitý.

Nakonec se blíže podíváme na architekturu zabezpečení doplňku, abychom se ujistili, že poskytuje správnou úroveň zabezpečení s minimálním rizikem prolomení čehokoli.

Příští týden se podíváme na výsledky důkladnějšího rozboru toho, co se stalo, ale zatím rád zodpovím dotazy e-mailem: [chráněno e-mailem]

Zdroj: linux.org.ru

Přidat komentář