Technické podrobnosti o nedávnom zakázaní doplnkov vo Firefoxe

Poznámka prekladateľ: pre pohodlie čitateľov sú dátumy uvedené v moskovskom čase

Nedávno sme zmeškali vypršanie platnosti jedného z certifikátov používaných na podpisovanie doplnkov. To viedlo k zakázaniu doplnkov pre používateľov. Teraz, keď je problém z väčšej časti vyriešený, rád by som sa podelil o podrobnosti o tom, čo sa stalo, ao vykonanej práci.

Pozadie: dodatky a podpisy

Hoci veľa ľudí používa prehliadač hneď po vybalení, Firefox podporuje rozšírenia nazývané „doplnky“. S ich pomocou používatelia pridávajú do prehliadača rôzne funkcie. Existuje viac ako 15 tisíc doplnkov: od blokovanie reklamy na spravovať stovky kariet.

Nainštalované doplnky musia mať digitálny podpis, ktorý chráni používateľov pred škodlivými doplnkami a vyžaduje minimálnu kontrolu doplnkov zamestnancami Mozilly. Túto požiadavku sme zaviedli v roku 2015, pretože sme to zažívali vážne problémy so škodlivými doplnkami.

Ako to funguje: Každá kópia Firefoxu obsahuje „koreňový certifikát“. Kľúč k tomuto „koreňu“ je uložený v Hardvérový bezpečnostný modul (HSM)bez prístupu k sieti. Každých pár rokov sa týmto kľúčom podpíše nový „medzicertifikát“, ktorý sa používa pri podpisovaní doplnkov. Keď vývojár odošle doplnok, vytvoríme dočasný „koncový certifikát“ a podpíšeme ho pomocou prechodného certifikátu. Samotný doplnok je potom podpísaný konečným certifikátom. Schematicky vyzerá to takto.

Upozorňujeme, že každý certifikát má „subjekt“ (komu bol certifikát vydaný) a „vydavateľa“ (ktorý certifikát vydal). V prípade koreňového certifikátu je "subjekt" = "vydavateľ", ale pre ostatné certifikáty je vydavateľ certifikátu subjektom nadradeného certifikátu, ktorým je podpísaný.

Dôležitý bod: každý doplnok je podpísaný jedinečným koncovým certifikátom, ale takmer vždy sú tieto koncové certifikáty podpísané rovnakým prechodným certifikátom.

Poznámka autora: Výnimkou sú veľmi staré doplnky. Vtedy sa používali rôzne prechodné certifikáty.

Tento prechodný certifikát spôsobil problémy: každý certifikát je platný na určité obdobie. Pred alebo po tomto období je certifikát neplatný a prehliadač nebude používať doplnky podpísané týmto certifikátom. Žiaľ, prechodný certifikát vypršal 4. mája o 4:XNUMX.

Následky sa nedostavili okamžite. Firefox nekontroluje podpisy nainštalovaných doplnkov neustále, ale približne raz za 24 hodín, pričom čas overenia je u každého používateľa individuálny. V dôsledku toho niektorí ľudia pocítili problémy okamžite, zatiaľ čo iní mali problémy oveľa neskôr. Prvýkrát sme sa o probléme dozvedeli v čase, keď platnosť certifikátu vypršala, a okamžite sme začali hľadať riešenie.

Zníženie poškodenia

Keď sme si uvedomili, čo sa stalo, snažili sme sa zabrániť zhoršeniu situácie.

Po prvé, prestali prijímať a podpisovať nové dodatky. Na to nemá zmysel používať certifikát, ktorého platnosť vypršala. Pri pohľade späť by som povedal, že sme mohli všetko nechať tak. Teraz sme obnovili prijímanie doplnkov.

Po druhé, okamžite rozoslali opravu, ktorá zabránila každodennej kontrole podpisov. Zachránili sme tak tých používateľov, ktorých prehliadač za posledných XNUMX hodín ešte nestihol skontrolovať doplnky. Táto oprava bola stiahnutá a už nie je potrebná.

Paralelná prevádzka

Teoreticky vyzerá riešenie problému jednoducho: vytvorte nový platný prechodný certifikát a znova podpíšte každý doplnok. Bohužiaľ to nebude fungovať:

  • 15 tisíc dodatkov naraz nevieme rýchlo znovu podpísať, systém nie je dimenzovaný na takú záťaž
  • Po podpísaní dodatkov je potrebné používateľom doručiť aktualizované verzie. Väčšina doplnkov je nainštalovaná zo serverov Mozilla, takže Firefox nájde aktualizácie v priebehu nasledujúcich XNUMX hodín, ale niektorí vývojári distribuujú podpísané doplnky prostredníctvom kanálov tretích strán, takže používatelia budú musieť takéto doplnky aktualizovať manuálne.

Namiesto toho sme sa pokúsili vyvinúť opravu, ktorá by sa dostala ku všetkým používateľom bez toho, aby si vyžadovali veľa alebo žiadnu akciu z ich strany.

Pomerne rýchlo sme dospeli k dvom hlavným stratégiám, ktoré sme používali paralelne:

  • Aktualizujte Firefox, aby ste zmenili dobu platnosti certifikátu. Vďaka tomu budú existujúce doplnky opäť magicky fungovať, ale bude si to vyžadovať vydanie a odoslanie novej zostavy Firefoxu
  • Vygenerujte platný certifikát a nejakým spôsobom presvedčte Firefox, aby ho prijal namiesto existujúceho certifikátu, ktorého platnosť vypršala

Najprv sme sa rozhodli použiť prvú možnosť, ktorá vyzerala celkom funkčne. Na konci dňa vydali druhú opravu (nový certifikát), o ktorej si povieme neskôr.

Výmena certifikátu

Ako som uviedol vyššie, bolo potrebné:

  • vytvorte nový platný certifikát
  • nainštalujte ho na diaľku do Firefoxu

Aby sme pochopili, prečo to funguje, pozrime sa bližšie na proces overenia doplnku. Samotný doplnok prichádza ako sada súborov vrátane reťazca certifikátov používaných na podpisovanie. Výsledkom je, že doplnok môže byť overený, ak prehliadač pozná koreňový certifikát, ktorý je zabudovaný do Firefoxu v čase zostavovania. Ako však už vieme, prechodný certifikát vypršal, takže overenie doplnku nie je možné.

Keď sa Firefox pokúsi overiť doplnok, nie je obmedzený na použitie certifikátov obsiahnutých v samotnom doplnku. Namiesto toho sa prehliadač pokúsi vytvoriť platný reťazec certifikátov, počnúc koncovým certifikátom a pokračuje, kým sa nedostane ku koreňu. Na prvej úrovni začneme koncovým certifikátom a potom nájdeme certifikát, ktorého predmetom je vydavateľ koncového certifikátu (teda prechodný certifikát). Tento prechodný certifikát sa zvyčajne dodáva s doplnkom, ale ako tento prechodný certifikát môže slúžiť aj akýkoľvek certifikát z úložiska prehliadača. Ak môžeme vzdialene pridať nový platný certifikát do úložiska certifikátov, Firefox sa ho pokúsi použiť. Situácia pred a po inštalácii nového certifikátu.

Po nainštalovaní nového certifikátu bude mať Firefox pri overovaní reťazca certifikátov dve možnosti: použiť starý neplatný certifikát (ktorý nebude fungovať) alebo nový platný certifikát (ktorý bude fungovať). Je dôležité, aby nový certifikát obsahoval rovnaký názov subjektu a verejný kľúč ako starý certifikát, takže jeho podpis na konečnom certifikáte bude platný. Firefox je dostatočne inteligentný na to, aby vyskúšal obe možnosti, kým nenájde tú, ktorá funguje, takže doplnky sa znova otestujú. Upozorňujeme, že ide o rovnakú logiku, akú používame na overenie certifikátov TLS.

Poznámka autora: Čitatelia, ktorí poznajú WebPKI, si všimnú, že krížové certifikáty fungujú presne rovnakým spôsobom.

Skvelé na tejto oprave je, že nevyžaduje opätovné podpisovanie existujúcich doplnkov. Hneď ako prehliadač dostane nový certifikát, všetky doplnky budú opäť fungovať. Zostávajúcou výzvou je doručiť nový certifikát používateľom (automaticky a na diaľku), ako aj prinútiť Firefox, aby znova skontroloval zakázané doplnky.

Normandia a výskumný systém

Iróniou osudu je tento problém vyriešený špeciálnym doplnkom s názvom „systém“. Na vykonanie výskumu sme vyvinuli systém s názvom Normandy, ktorý používateľom poskytuje výskum. Tieto štúdie sa automaticky vykonávajú v prehliadači a majú vylepšený prístup k interným rozhraniam API Firefoxu. Výskum môže pridať nové certifikáty do skladu certifikátov.

Poznámka autora: Nepridávame certifikát so žiadnymi špeciálnymi oprávneniami; je podpísaný koreňovým certifikátom, takže Firefox mu dôveruje. Jednoducho ho pridáme do skupiny certifikátov, ktoré môže prehliadač použiť.

Riešením je teda vytvorenie štúdie:

  • inštaláciu nového certifikátu, ktorý sme vytvorili pre používateľov
  • prinútiť prehliadač, aby znova skontroloval zakázané doplnky, aby znova fungovali

"Ale počkajte," hovoríte, "doplnky nefungujú, ako môžem spustiť systémový doplnok?" Poďme to podpísať novým certifikátom!

Keď to všetko dáme dokopy... prečo to tak dlho trvá?

Takže plán: vydať nový certifikát, ktorý nahradí starý, vytvoriť systémový doplnok a nainštalovať ho používateľom cez Normandiu. Problémy, ako som povedal, sa začali 4. mája o 4:00 a už o 12:44 toho istého dňa, o necelých 9 hodín neskôr, sme poslali opravu do Normandie. Trvalo ďalších 6-12 hodín, kým sa dostal ku všetkým používateľom. Vôbec to nie je zlé, ale ľudia na Twitteri sa pýtajú, prečo sme nemohli konať rýchlejšie.

Najprv trvalo vydanie nového prechodného certifikátu. Ako som spomenul vyššie, kľúč ku koreňovému certifikátu je uložený offline v module hardvérovej bezpečnosti. Z bezpečnostného hľadiska je to dobré, pretože root sa používa veľmi zriedkavo a mal by byť spoľahlivo chránený, ale je to trochu nepohodlné, keď potrebujete urgentne podpísať nový certifikát. Jeden z našich inžinierov musel cestovať do skladu HSM. Potom nasledovali neúspešné pokusy o vydanie správneho certifikátu a každý pokus stál jednu alebo dve hodiny strávené testovaním.

Po druhé, vývoj systémového doplnku nejaký čas trval. Koncepčne je to veľmi jednoduché, ale aj jednoduché programy vyžadujú starostlivosť. Chceli sme mať istotu, že situáciu nezhoršíme. Výskum je potrebné pred odoslaním používateľom otestovať. Okrem toho musí byť doplnok podpísaný, ale náš systém podpisovania doplnkov bol zakázaný, takže sme museli nájsť riešenie.

Nakoniec, keď sme mali výskum pripravený na odoslanie, nasadenie trvalo nejaký čas. Prehliadač kontroluje aktualizácie Normandie každých 6 hodín. Nie všetky počítače sú vždy zapnuté a pripojené k internetu, takže potrvá, kým sa oprava rozšíri medzi používateľov.

Záverečné kroky

Výskum by mal vyriešiť problém pre väčšinu používateľov, ale nie je dostupný pre každého. Niektorí používatelia vyžadujú špeciálny prístup:

  • používateľov, ktorí deaktivovali výskum alebo telemetriu
  • používatelia verzie Android (Fennec), kde výskum vôbec nie je podporovaný
  • používatelia vlastných verzií Firefoxu ESR v podnikoch, kde nemožno povoliť telemetriu
  • používatelia sediaci za proxy servermi MitM, pretože náš inštalačný systém doplnkov používa pripínanie kľúčov, ktoré s takýmito servermi proxy nefunguje
  • používatelia starších verzií Firefoxu, ktoré nepodporujú výskum

S poslednou kategóriou používateľov nemôžeme nič urobiť – aj tak by mali aktualizovať na novú verziu Firefoxu, pretože tie zastarané majú vážne neopravené zraniteľnosti. Vieme, že niektorí ľudia zostávajú na starších verziách Firefoxu, pretože chcú spúšťať staré doplnky, ale mnohé zo starých doplnkov už boli prenesené na novšie verzie prehliadača. Pre ostatných používateľov sme vyvinuli opravu, ktorá nainštaluje nový certifikát. Bol vydaný ako vydanie opravy chýb (poznámka prekladateľa: Firefox 66.0.5), takže ľudia to dostanú – s najväčšou pravdepodobnosťou to už majú – prostredníctvom bežného aktualizačného kanála. Ak používate vlastnú zostavu Firefox ESR, kontaktujte svojho správcu.

Chápeme, že to nie je ideálne. V niektorých prípadoch používatelia stratili doplnkové údaje (napríklad údaje doplnkov Kontajnery pre viac účtov).

Tomuto vedľajšiemu efektu sa nedalo vyhnúť, ale veríme, že z krátkodobého hľadiska sme pre väčšinu užívateľov vybrali to najlepšie riešenie. Z dlhodobého hľadiska budeme hľadať iné, pokročilejšie architektonické prístupy.

Hodiny

Po prvé, náš tím odviedol úžasnú prácu pri vytváraní a odoslaní opravy za menej ako 12 hodín po zistení problému. Ako osoba, ktorá sa zúčastnila stretnutí, môžem povedať, že v tejto ťažkej situácii ľudia pracovali veľmi tvrdo a premrhali len veľmi málo času.

Je zrejmé, že nič z toho sa nemalo stať. Jednoznačne stojí za to upraviť naše procesy, aby sme znížili pravdepodobnosť takýchto incidentov a uľahčili nápravu.

Budúci týždeň zverejníme oficiálnu pitvu a zoznam zmien, ktoré máme v úmysle urobiť. Zatiaľ sa podelím o svoje myšlienky. Po prvé, musí existovať lepší spôsob monitorovania stavu toho, čo je potenciálnou časovanou bombou. Potrebujeme si byť istí, že sa neocitneme v situácii, keď jeden z nich zrazu funguje. Podrobnosti ešte dolaďujeme, no minimálne je potrebné počítať so všetkými podobnými vecami.

Po druhé, potrebujeme mechanizmus na rýchle poskytovanie aktualizácií používateľom, aj keď – najmä keď – všetko ostatné zlyhá. Bolo skvelé, že sme mohli použiť systém „výskumu“, ale je to nedokonalý nástroj a má niektoré nežiaduce vedľajšie účinky. Vieme najmä to, že mnohí používatelia majú zapnuté automatické aktualizácie, no radšej by sa výskumu nezúčastňovali (priznám sa, aj ja ich mám vypnuté!). Zároveň potrebujeme spôsob odosielania aktualizácií používateľom, ale bez ohľadu na internú technickú implementáciu by používatelia mali mať možnosť prihlásiť sa na odber aktualizácií (vrátane rýchlych opráv), ale odhlásiť sa zo všetkého ostatného. Okrem toho by aktualizačný kanál mal byť pohotovejší ako teraz. Aj 6. mája sa stále našli používatelia, ktorí nevyužili ani opravu, ani novú verziu. Na tomto probléme sa už pracovalo, ale to, čo sa stalo, ukázalo, aký je dôležitý.

Nakoniec sa bližšie pozrieme na bezpečnostnú architektúru doplnku, aby sme sa uistili, že poskytuje správnu úroveň zabezpečenia s minimálnym rizikom rozbitia čohokoľvek.

Budúci týždeň sa pozrieme na výsledky dôkladnejšieho rozboru toho, čo sa stalo, no zatiaľ vám rád odpoviem na otázky e-mailom: [chránené e-mailom]

Zdroj: linux.org.ru

Pridať komentár