Tekniska detaljer om den senaste inaktiveringen av tillÀgg i Firefox

Obs. av översÀttaren: för bekvÀmlighetens skull anges datumen i Moskvatid.

Nyligen missade vi tidsfristen för en av de certifikat som anvÀnds för att signera tillÀgg. Det ledde till att tillÀggen stÀngdes av för anvÀndare. Nu nÀr problemet till stor del har ÄtgÀrdats, skulle jag vilja berÀtta om de detaljer som intrÀffade och det arbete som utförts.

Bakgrund: tillÀgg och signaturer

Även om mĂ„nga anvĂ€nder webblĂ€saren "som den Ă€r", stödjer Firefox tillĂ€gg, kallade "extensions". Med deras hjĂ€lp kan anvĂ€ndare lĂ€gga till olika funktioner i webblĂ€saren. Det finns över 15 000 tillĂ€gg: frĂ„n annonsblockering till hantering av hundratals flikar.

Installerade tillÀgg mÄste ha digital signatur, som skyddar anvÀndare frÄn skadliga tillÀgg och krÀver en minimal kontroll av tillÀgg av Mozilla-anstÀllda. Vi införde detta krav 2015 eftersom vi upplevde allvarliga problem med skadliga tillÀgg.

Hur det fungerar: varje kopia av Firefox innehÄller ett "rotcertifikat". Nyckeln till detta "rot" förvaras i en hÄrdvarusÀkerhetsmodul (HSM), som inte har nÀtverksÄtkomst. Vart flera Är signeras ett nytt "intermediÀrt certifikat" med denna nyckel, som anvÀnds vid signering av tillÀgg. NÀr en utvecklare skickar ett tillÀgg skapar vi ett temporÀrt "slutcertifikat" och signerar det med det intermediÀra certifikatet. Detta slutcertifikat signerar sedan sjÀlva tillÀgget. Schematisk ser det ut sÄ hÀr.

Observera: varje certifikat har ett "subjekt" (till vem certifikatet utfÀrdats) och en "utfÀrdare" (vem som utfÀrdat certifikatet). I fallet med ett rotcertifikat Àr "subjekt" = "utfÀrdare", men för andra certifikat Àr utfÀrdaren av certifikatet subjektet av det överordnade certifikatet som det har signerats av.

En viktig punkt: varje tillÀgg Àr signerat med ett unikt slutcertifikat, men nÀstan alltid Àr dessa slutcertifikat signerade med samma intermediÀra certifikat.

Författarens anmÀrkning: undantaget Àr mycket gamla tillÀgg. DÄ anvÀndes olika intermediÀra certifikat.

Det hÀr mellanliggande certifikat orsakade problem: varje certifikat Àr giltigt under en viss period. Innan eller efter denna period Àr certifikatet ogiltigt, och webblÀsaren kommer inte att anvÀnda tillÀgg signerade med detta certifikat. TyvÀrr gick giltighetstiden för det mellanliggande certifikatet ut den 4 maj klockan 04:00.

Konsekvenserna visade sig inte genast. Firefox kontrollerar signaturer av installerade tillÀgg inte kontinuerligt, utan ungefÀr var 24:e timme, dÀr kontrolltidpunkten Àr individuell för varje anvÀndare. Som ett resultat uppstod problem för vissa mÀnniskor omedelbart, medan andra drabbades mycket senare. Vi fick kÀnnedom om problemet ungefÀr nÀr certifikatets giltighetstid gick ut och började genast leta efter en lösning.

Minska skadorna

SÄ snart vi insÄg vad som hÀnt försökte vi förhindra att situationen försÀmrades.

För det första slutade vi att ta emot och signera nya tillÀgg. Det Àr meningslöst att anvÀnda ett utgÄnget certifikat för detta ÀndamÄl. I efterhand skulle jag sÀga att vi kunde ha lÄtit allt förbli som det var. Nu har vi Äterupptagit mottagningen av tillÀgg.

För det andra skickade vi omedelbart ut en ÄtgÀrd som förhindrade den dagliga signaturkontrollen. PÄ sÄ sÀtt rÀddade vi de anvÀndare vars webblÀsare inte hade hunnit kontrollera tillÀggen under de senaste 24 timmarna. Denna ÄtgÀrd har nu dragits tillbaka, eftersom den inte lÀngre Àr nödvÀndig.

Parallell drift

Teoretiskt sett verkar lösningen enkel: vi skapar ett nytt giltigt mellanliggande certifikat och omsignerar varje tillÀgg. TyvÀrr fungerar inte det:

  • vi kan inte snabbt omsignera 15 000 tillĂ€gg pĂ„ en gĂ„ng, systemet Ă€r inte byggt för en sĂ„dan belastning
  • efter att vi signerat tillĂ€ggen mĂ„ste de uppdaterade versionerna levereras till anvĂ€ndarna. De flesta tillĂ€gg installeras frĂ„n Mozillas servrar, sĂ„ under de kommande 24 timmarna kommer Firefox att hitta uppdateringar, men vissa utvecklare distribuerar signerade tillĂ€gg via externa kanaler, vilket innebĂ€r att anvĂ€ndarna skulle behöva uppdatera sĂ„dana tillĂ€gg manuellt

IstÀllet försökte vi utveckla en ÄtgÀrd som skulle nÄ alla anvÀndare utan att krÀva (eller nÀstan inte krÀva) nÄgra ÄtgÀrder frÄn deras sida.

Vi kom ganska snabbt fram till tvÄ huvudstrategier som vi anvÀnde parallellt:

  • Uppdatera Firefox för att Ă€ndra giltighetstiden för certifikatet. Detta kommer att fĂ„ befintliga tillĂ€gg att magiskt fungera igen, men krĂ€ver att en ny version av Firefox slĂ€pps och distribueras.
  • Skapa ett giltigt certifikat och pĂ„ nĂ„got sĂ€tt övertyga Firefox att acceptera det istĂ€llet för det befintliga, vars giltighetstid har gĂ„tt ut.

Vi beslutade att först anvÀnda det första alternativet, vilket verkade vara fullt fungerande. I slutet av dagen slÀppte vi ocksÄ den andra fixen (det nya certifikatet), som vi kommer att diskutera senare.

Byt certifikat

Som jag nÀmnde tidigare, krÀvdes det:

  • att skapa ett nytt giltigt certifikat
  • att installera det pĂ„ distans i Firefox

För att förstÄ varför detta kommer att fungera, lÄt oss ta en nÀrmare titt pÄ processen för att verifiera ett tillÀgg. SjÀlva tillÀgget levereras som en uppsÀttning filer, inklusive certifikatkedjan som anvÀnds för signering. DÀrför kan tillÀgget verifieras om webblÀsaren kÀnner till rotcertifikatet, som byggs in i Firefox under bygget. Men som vi redan vet Àr det mellanliggande certifikatet utgÄnget, sÄ det Àr omöjligt att verifiera tillÀgget.

NÀr Firefox försöker verifiera ett tillÀgg begrÀnsar den sig inte till certifikaten som finns inuti tillÀgget sjÀlvt. IstÀllet försöker webblÀsaren skapa en giltig certifikatkedja, som börjar med det slutliga certifikatet och fortsÀtter tills den nÄr roten. PÄ första nivÄn börjar vi med det slutliga certifikatet och hittar sedan certifikatet vars subjekt Àr utgivaren av det slutliga certifikatet (dvs. det mellanliggande certifikatet). Oftast levereras detta mellanliggande certifikat tillsammans med tillÀgget, men vilken certifikat frÄn webblÀsarens lagring kan ocksÄ fungera i denna roll. Om vi kan lÀgga till ett nytt giltigt certifikat i certifikats förvar pÄ distans, kommer Firefox att försöka anvÀnda det. Situationen före och efter installationen av det nya certifikatet.

Efter installationen av det nya certifikatet kommer Firefox att ha tvÄ alternativ vid verifiering av certifikatkedjan: att anvÀnda det gamla ogiltiga certifikatet (som inte fungerar) eller det nya giltiga certifikatet (som fungerar). Det Àr viktigt att det nya certifikatet innehÄller samma Àmnesnamn och den offentliga nyckeln som det gamla certifikatet, sÄ dess signatur pÄ det slutliga certifikatet kommer att vara giltig. Firefox Àr tillrÀckligt smart för att försöka bÄda alternativen tills det hittar en fungerande, sÄ tillÀgg kommer att bli verifierade igen. Observera att detta Àr samma logik som vi anvÀnder för att verifiera TLS-certifikat.

Författarens anmÀrkning: lÀsare med kunskap om WebPKI kommer att mÀrka att korscertifikat fungerar pÄ exakt samma sÀtt.

Det mest fantastiska med denna lösning Àr att det inte krÀver omsignering av befintliga tillÀgg. SÄ snart webblÀsaren fÄr det nya certifikatet, kommer alla tillÀgg att fungera igen. Det ÄterstÄr en utmaning att distribuera det nya certifikatet till anvÀndarna (automatiskt och pÄ distans) samt att fÄ Firefox att verifiera de inaktiverade tillÀggen igen.

Normandy och forskningssystemet

Ironiskt nog löses detta problem av ett speciellt tillÀgg, kallat "systemtillÀgget". För att genomföra studier har vi utvecklat ett system som heter Normandy, som levererar studier till anvÀndarna. Dessa studier genomförs automatiskt i webblÀsaren och har utökat tillgÄng till interna API:er i Firefox. Studier kan lÀgga till nya certifikat i certifikatförrÄdet.

Författarens anmÀrkning: vi lÀgger inte till certifikatet med nÄgra speciella privilegier; det Àr signerat av ett rotcertifikat, sÄ Firefox litar pÄ det. Vi lÀgger helt enkelt till det i poolen av certifikat som kan anvÀndas av webblÀsaren.

Lösningen Àr alltsÄ att skapa en undersökning:

  • som installerar det nya certifikatet vi har skapat för anvĂ€ndarna
  • som fĂ„r webblĂ€saren att verifiera de inaktiverade tillĂ€ggen sĂ„ att de fungerar igen

"Men vÀnta", sÀger du, "tillÀggen fungerar ju inte, hur ska vi starta ett systemtillÀgg?". LÄt oss signera det med ett nytt certifikat!

LÄt oss samla allt... varför tar det sÄ lÄng tid?

SÄ planen Àr att lansera ett nytt certifikat för att ersÀtta det gamla, skapa ett systemtillÀgg och installera det för anvÀndarna via Normandy. Problemen, som jag nÀmnde, började den 4 maj klockan 04:00, och redan klockan 12:44 samma dag, mindre Àn 9 timmar senare, skickade vi en lösning till Normandy. Det tog ytterligare 6-12 timmar för det att nÄ alla anvÀndare. Redan ganska bra, men anvÀndare pÄ Twitter undrar varför vi inte kunde agera snabbare.

För det första tog det tid att utfÀrda ett nytt internt certifikat. Som jag nÀmnde tidigare förvaras nyckeln till det rotcertifikatet offline i en hÄrdvarusÀkerhetsmodul. Detta Àr bra ur sÀkerhetssynpunkt, eftersom roten anvÀnds mycket sÀllan och mÄste skyddas ordentligt, men det Àr lite besvÀrligt nÀr man plötsligt behöver signera ett nytt certifikat. En av vÄra ingenjörer behövde Äka till HSM-lagret. Sedan var det flera misslyckade försök att utfÀrda det korrekta certifikatet, och varje försök tog en till tvÄ timmar som gick Ät till testning.

För det andra tog det tid att utveckla systemtillÀgget. Konceptuellt Àr det mycket enkelt, men Àven enkla program krÀver noggrannhet. Vi ville försÀkra oss om att vi inte skulle göra situationen vÀrre. Forskningen behövde testas innan den skickades till anvÀndarna. Dessutom mÄste tillÀgget signeras, men vÄrt system för att signera tillÀgg var avstÀngt, sÄ vi var tvungna att hitta en alternativ lösning.

Slutligen, efter att vi hade förberett forskningen för utskick, krÀvdes det tid för distribution. WebblÀsaren kontrollerar för uppdateringar av Normandy var sjÀtte timme. Inte alla datorer Àr stÀndigt pÄslagna och anslutna till internet, sÄ det krÀvs tid för lösningen att sprida sig bland anvÀndarna.

Sista stegen

Forskningen bör rÀtta till problemet för de flesta anvÀndare, men den Àr inte tillgÀnglig för alla. Vissa anvÀndare krÀver en speciell ÄtgÀrd:

  • anvĂ€ndare som har inaktiverat forskning eller telemetri
  • anvĂ€ndare av Android-versionen (Fennec), dĂ€r forskning inte stöds överhuvudtaget
  • anvĂ€ndare av anpassade versioner av Firefox ESR pĂ„ företag dĂ€r telemetri inte kan aktiveras
  • anvĂ€ndare som sitter bakom en MitM-proxy, eftersom vĂ„rt tillĂ€ggsinstallationssystem anvĂ€nder nyckelbindning (key pinning), som inte fungerar med sĂ„dana proxy
  • anvĂ€ndare av förĂ„ldrade versioner av Firefox som inte stödjer forskning

Vi kan inte göra nĂ„gonting Ă„t den sista kategorin anvĂ€ndare — de bör Ă€ndĂ„ uppdatera till den nya versionen av Firefox, eftersom de förĂ„ldrade har allvarliga oĂ„tgĂ€rdade sĂ„rbarheter. Vi vet att vissa mĂ€nniskor stannar kvar pĂ„ gamla versioner av Firefox eftersom de vill köra gamla tillĂ€gg, men mĂ„nga av de gamla tillĂ€ggen har redan portats till nya versioner av webblĂ€saren. För andra anvĂ€ndare har vi utvecklat en patch som kommer att installera ett nytt certifikat. Det har slĂ€ppts som en buggfixrelease (översĂ€ttarens kommentar: Firefox 66.0.5), sĂ„ mĂ€nniskor kommer att fĂ„ det — troligtvis redan fĂ„tt det — via den vanliga uppdateringskanalen. Om du anvĂ€nder en anpassad version av Firefox ESR, kontakta din huvudansvarige.

Vi förstÄr att allt detta inte Àr perfekt. I vissa fall har anvÀndare förlorat tillÀggens data (t.ex. tillÀggens data Multi-Account Containers).

Detta bieffekt kunde inte undvikas, men vi anser att vi pÄ kort sikt valde den bÀsta lösningen för de flesta anvÀndare. PÄ lÄng sikt kommer vi att söka efter andra, mer avancerade arkitektoniska tillvÀgagÄngssÀtt.

Lektioner

För det första, vÄrt team gjorde ett fantastiskt jobb med att skapa och skicka en fix mindre Àn 12 timmar efter att problemet upptÀcktes. Som nÄgon som var nÀrvarande vid mötena kan jag sÀga att i den hÀr svÄra situationen arbetade folk mycket hÄrt och nÀstan ingen tid gick till spillo.

Det Àr uppenbart att allt detta överhuvudtaget inte borde ha intrÀffat. Det Àr uppenbart vÀrt att justera vÄra processer för att minska sannolikheten för liknande incidenter och underlÀtta korrigering av konsekvenserna.

NÀsta vecka kommer vi att publicera en officiell post-mortem och en lista över Àndringar som vi planerar att göra. Tills dess delar jag gÀrna med mig av mina tankar. För det första behöver vi ett bÀttre sÀtt att spÄra tillstÄndet av vad som kan vara en potentiell tickande bomb. Vi mÄste vara sÀkra pÄ att vi inte hamnar i en situation dÀr nÄgon av dem plötsligt slÄr till. Vi arbetar fortfarande pÄ detaljerna, men minst sagt krÀvs en inventering av alla sÄdana saker.

För det andra behövs en mekanism för snabb leverans av uppdateringar till anvĂ€ndarna, Ă€ven nĂ€r - sĂ€rskilt nĂ€r - allt annat gĂ„r ner. Det var fantastiskt att vi kunde anvĂ€nda forskningssystemet, men det Ă€r ett ofullkomligt verktyg och har vissa oönskade biverkningar. Vi vet till exempel att mĂ„nga anvĂ€ndare har automatiska uppdateringar aktiverade, men de skulle föredra att inte delta i forskningen (jag mĂ„ste erkĂ€nna att jag ocksĂ„ har stĂ€ngt av det!). Samtidigt behöver vi ett sĂ€tt att skicka uppdateringar till anvĂ€ndarna, men oavsett hur den interna tekniska implementationen Ă€r, mĂ„ste anvĂ€ndarna kunna prenumerera pĂ„ uppdateringar (inklusive akuta korrigeringar) men avstĂ„ frĂ„n allt annat. Dessutom mĂ„ste uppdateringskanalen vara mer responsiv Ă€n vad den Ă€r nu. Även den 6 maj fanns det fortfarande anvĂ€ndare som inte hade utnyttjat vare sig korrigeringen eller den nya versionen. Det har redan arbetats med detta problem, men det som hĂ€nt har visat hur viktigt det Ă€r.

Till sist kommer vi att se över sÀkerhetsarkitekturen för tillÀgg för att sÀkerstÀlla att den erbjuder en adekvat sÀkerhetsnivÄ med minimal risk för att nÄgot gÄr sönder.

NÀsta vecka kommer vi att granska resultaten av en mer grundlig analys av hÀndelsen, men tills dess Àr jag glad att svara pÄ frÄgor via e-post: ekr-blog@mozilla.com

KĂ€lla: linux.org.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster