Detaglii tecnichi di a recente disattivazione di add-ons in Firefox

Nota traduttore: per a comodità di i lettori, e date sò date in u tempu di Mosca

Recentemente avemu mancatu a scadenza di unu di i certificati utilizati per firmà add-ons. Questu hà risultatu in i add-ons disattivati ​​per l'utilizatori. Avà chì u prublema hè stata risolta soprattuttu, vogliu sparte i dettagli di ciò chì hè accadutu è u travagliu chì hè statu fattu.

Sfondate : aggiunte è firme

Ancu se parechje persone utilizanu u navigatore fora di a scatula, Firefox supporta estensioni chjamate "add-ons". Cù u so aiutu, l'utilizatori aghjunghjenu diverse funziunalità à u navigatore. Ci sò più di 15 mila add-ons: da bloccu di annunci à gestisce centinaie di tabulature.

Add-ons installati deve avè firma digitale, chì prutegge l'utilizatori da add-ons maliziusi è esige una revisione minima di add-ons da u persunale di Mozilla. Avemu introduttu stu requisitu in 2015 perchè avemu avutu prublemi seri cù add-ons maliziusi.

Cumu funziona: Ogni copia di Firefox cuntene un "certificatu root". A chjave di sta "radica" hè guardata in Modulu di Sicurezza Hardware (HSM)senza accessu à a rete. Ogni pochi anni, un novu "certificatu intermediu" hè firmatu cù sta chjave, chì hè utilizata quandu si firmanu add-ons. Quandu un sviluppatore sottumette un add-on, creemu un "certificatu di fine" temporale è u firmamu cù un certificatu intermediu. L'add-on stessu hè tandu firmatu cù u certificatu finali. Schematically pare cusì.

Per piacè nutate chì ogni certificatu hà un "sugettu" (à quale u certificatu hè statu emessu) è un "emittente" (chì hà emessu u certificatu). In u casu di un certificatu root, "sugettu" = "emittente", ma per altri certificati, l'emittente di u certificatu hè u sughjettu di u certificatu parent da quale hè firmatu.

Un puntu impurtante: ogni add-on hè firmatu da un certificatu finale unicu, ma quasi sempre sti certificati finali sò firmati da u stessu certificatu intermediu.

Nota di l'autore: L'eccezzioni hè assai vechji additivi. À quellu tempu, diversi certificati intermedi sò stati utilizati.

Stu certificatu intermediu hà causatu prublemi: ogni certificatu hè validu per un certu periodu. Prima o dopu à stu periodu, u certificatu ùn hè micca validu è u navigatore ùn hà micca aduprà add-ons firmati da stu certificatu. Sfurtunatamente, u certificatu intermediu scadutu u 4 di maghju à 4 am.

I cunsiquenzi ùn sò micca apparsu immediatamente. Firefox ùn cuntrolla micca a firma di l'add-ons installati constantemente, ma circa una volta ogni 24 ore, è u tempu di verificazione hè individuale per ogni utilizatore. In u risultatu, certi persone anu avutu prublemi immediatamente, mentri àutri anu avutu prublemi assai più tardi. Avemu avutu prima cunuscenza di u prublema intornu à u tempu chì u certificatu hè scadutu è immediatamente cuminciamu à circà una suluzione.

Riduzzione di danni

Una volta chì avemu capitu ciò chì era accadutu, avemu pruvatu à impedisce a situazione di peghju.

Prima, anu cessatu di accettà è di firmà novi aghjunte. Ùn ci hè nunda di usà un certificatu scadutu per questu. Fighjendu in daretu, diceraghju chì pudemu avè lasciatu tuttu cum'è era. Avemu ripresu avà à accettà supplementi.

Siconda, anu immediatamente mandatu una correzione chì impedisce à e firme di esse verificate ogni ghjornu. Cusì, avemu salvatu quelli utilizatori chì u so navigatore ùn avia ancu avutu u tempu di verificà l'add-ons in l'ultime XNUMX ore. Questa correzione hè stata ritirata è ùn hè più necessariu.

Funzionamentu parallelu

In teoria, a suluzione à u prublema pare simplice: crea un novu certificatu intermediu validu è rifirmate ogni add-on. Sfortunatamente, questu ùn funziona micca:

  • ùn pudemu micca firmà rapidamente 15 mila add-ons à una volta, u sistema ùn hè micca pensatu per una tale carica
  • Dopu chì avemu firmatu l'aghjunghjini, e versioni aghjurnate anu da esse furnite à l'utilizatori. A maiò parte di add-ons sò stallati da i servitori Mozilla, cusì Firefox truverà aghjurnamenti in e prossime XNUMX ore, ma alcuni sviluppatori distribuiscenu add-ons firmati attraversu canali di terzu, cusì l'utilizatori anu da aghjurnà tali add-ons manualmente.

Invece, avemu pruvatu à sviluppà una correzione chì ghjunghje à tutti l'utilizatori senza avè bisognu di assai o nisuna azzione da a so parte.

Piuttostu prestu avemu ghjuntu à duie strategie principali, chì avemu usatu in parallelu:

  • Aghjurnate Firefox per cambià u periodu di validità di u certificatu. Questu farà chì i add-ons esistenti funzionanu magicamente di novu, ma richiederà a liberazione è a spedizione di una nova versione di Firefox
  • Generate un certificatu validu è in qualchì manera cunvince Firefox per accettà invece di quellu esistente chì hè scadutu

Avemu decisu di utilizà a prima opzione prima, chì pareva abbastanza praticabile. À a fine di u ghjornu, anu liberatu una seconda correzione (un novu certificatu), chì avemu da parlà dopu.

Sustituitu un certificatu

Cumu l'aghju dettu sopra, era necessariu:

  • creà un novu certificatu validu
  • stallà lu remotamente in Firefox

Per capisce perchè questu funziona, andemu à un ochju più vicinu à u prucessu di verificazione add-on. L'add-on stessu vene cum'è un inseme di schedari, cumprese una catena di certificati utilizati per a firma. In u risultatu, l'add-on pò esse verificatu se u navigatore cunnosci u certificatu root, chì hè custruitu in Firefox à u tempu di creazione. Tuttavia, cum'è sapemu digià, u certificatu intermediu hè scadutu, cusì hè impussibile di verificà l'add-on.

Quandu Firefox prova di verificà un add-on, ùn hè micca limitatu à utilizà i certificati cuntenuti in l'add-on stessu. Invece, u navigatore prova di creà una catena di certificatu validu, cuminciendu cù u certificatu finale è cuntinuendu finu à chì ghjunghje à a radica. À u primu livellu, cuminciamu cù u certificatu finale è dopu truvà u certificatu chì u sughjettu hè l'emittente di u certificatu finale (vale à dì, u certificatu intermediu). Di genere, stu certificatu intermediu hè furnitu cù l'add-on, ma qualsiasi certificatu da u almacenamentu di u navigatore pò ancu serve cum'è stu certificatu intermediu. Se pudemu aghjunghje remotamente un novu certificatu validu à u magazzinu di certificati, Firefox pruverà à aduprà. A situazione prima è dopu à stallà un novu certificatu.

Dopu a stallazione di u novu certificatu, Firefox averà duie opzioni quandu validà a catena di certificati: utilizate u vechju certificatu invalidu (chì ùn funziona micca) o u novu certificatu validu (chì funzionerà). Hè impurtante chì u novu certificatu cuntene u listessu nome di sughjettu è chjave publica cum'è u vechju certificatu, cusì a so firma nantu à u certificatu finali serà validu. Firefox hè abbastanza intelligente per pruvà e duie opzioni finu à truvà una chì funziona, cusì i add-ons tornanu à pruvà. Nota chì questu hè a stessa logica chì avemu usatu per cunvalidà i certificati TLS.

Nota di l'autore: I lettori familiarizati cù WebPKI notaranu chì i certificati incruciati funzionanu esattamente in u listessu modu.

A grande cosa di sta correzione hè chì ùn hè micca bisognu di firmà novu add-ons esistenti. Appena u navigatore riceve u novu certificatu, tutti i add-ons funzionanu di novu. A sfida restante hè di furnisce u novu certificatu à l'utilizatori (in autumàticu è remotamente), è ancu di ottene Firefox per verificà i add-ons disabilitati.

Normandia è u sistema di ricerca

Irnicamenti, stu prublema hè risolta da un add-on speciale chjamatu "sistema". Per fà ricerche, avemu sviluppatu un sistema chjamatu Normandia chì furnisce a ricerca à l'utilizatori. Questi studii sò realizati automaticamente in u navigatore, è anu un accessu rinfurzatu à l'API interni di Firefox. A ricerca pò aghjunghje novi certificati à u magazinu di certificati.

Nota di l'autore: Ùn aghjuntemu micca un certificatu cù alcun privilegiu speciale; hè firmatu da u certificatu root, cusì Firefox si fida. Avemu solu aghjunghje à a piscina di certificati chì ponu esse utilizati da u navigatore.

Allora a suluzione hè di creà un studiu:

  • installendu u novu certificatu chì avemu creatu per l'utilizatori
  • furzà u navigatore à ricuperà l'add-ons disattivati ​​in modu chì funzionanu di novu

"Ma aspetta", dite, "i add-ons ùn funzionanu micca, cumu possu lancià un add-on di sistema?" Firmemu cù un novu certificatu !

Mettite tuttu inseme... perchè dura tantu ?

Allora, u pianu: emette un novu certificatu per rimpiazzà u vechju, crea un add-on di sistema è installate à l'utilizatori via Normandia. I prublemi, cum'è aghju dettu, cuminciaru u 4 di maghju à 4:00, è digià à 12:44 di u stessu ghjornu, menu di 9 ore dopu, avemu mandatu una correzione in Normandia. Pigliò altre 6-12 ore per ghjunghje à tutti l'utilizatori. Ùn hè micca male, ma a ghjente in Twitter si dumanda perchè ùn pudemu micca agitu più veloce.

Prima, hà pigliatu u tempu per issuà un novu certificatu intermediu. Cumu l'aghju citatu sopra, a chjave per u certificatu radice hè almacenata offline in u modulu di sicurità di hardware. Questu hè bonu da un puntu di vista di sicurità, postu chì a radica hè usata assai raramente è deve esse prutetta in modu affidabile, ma hè pocu inconveniente quandu avete bisognu di firmà urgente un novu certificatu. Unu di i nostri ingegneri avia da viaghjà à a stallazione di almacenamiento HSM. Allora ci sò stati tentativi falluti per issuà u certificatu currettu, è ogni tentativu custa una o duie ore passate a prova.

Siconda, u sviluppu di u sistema add-on hà pigliatu un pocu di tempu. Conceptually hè assai simplice, ma ancu i prugrammi simplici necessitanu cura. Vulemu assicurà chì ùn avemu micca peghju a situazione. A ricerca deve esse pruvata prima di esse mandata à l'utilizatori. Inoltre, l'add-on deve esse firmatu, ma u nostru sistema di firmamentu add-on era disattivatu, cusì avemu avutu à truvà una soluzione.

Infine, una volta avemu avutu a ricerca pronta per a sottumissione, a implementazione hà pigliatu u tempu. U navigatore verifica l'aghjurnamenti di Normandia ogni 6 ore. Micca tutti l'urdinatori sò sempre accesi è cunnessi à l'Internet, per quessa, ci vole u tempu per a correzione per sparghje à l'utilizatori.

Passi finali

A ricerca deve risolve u prublema per a maiò parte di l'utilizatori, ma ùn hè micca dispunibule per tutti. Certi utilizatori necessitanu un accostu speciale:

  • utilizatori chì anu disattivatu a ricerca o a telemetria
  • utilizatori di a versione Android (Fennec), induve a ricerca ùn hè micca supportatu à tutti
  • utilizatori di custruzzioni persunalizati di Firefox ESR in imprese induve a telemetria ùn pò micca esse attivata
  • utilizatori seduti daretu à i proxy MitM, postu chì u nostru sistema di installazione add-on usa pinning chjave, chì ùn funziona micca cù tali proxy.
  • utilizatori di versioni legacy di Firefox chì ùn sustene micca a ricerca

Ùn pudemu micca fà nunda di l'ultima categuria d'utilizatori - anu da sempre aghjurnà à a nova versione di Firefox, perchè quelli obsoleti anu serii vulnerabili senza parche. Sapemu chì certi persone fermanu in versioni più vechje di Firefox perchè volenu eseguisce vechji add-ons, ma assai di i vechji add-ons sò digià purtati à versioni più recenti di u navigatore. Per altri utilizatori, avemu sviluppatu un patch chì installerà un novu certificatu. Hè stata liberata cum'è una versione di bugfix (nota di u traduttore: Firefox 66.0.5), cusì a ghjente l'avete - più probabilmente l'avete digià - attraversu u canali di aghjurnamentu regulare. Sè vo aduprate una custruzzione persunalizata di Firefox ESR, cuntattate u vostru manutentore.

Capemu chì questu ùn hè micca ideale. In certi casi, l'utilizatori anu persu dati add-on (per esempiu, add-on data Contenitori Multi-Conti).

Stu effettu latu ùn pudia esse evitata, ma credemu chì in u cortu termini avemu sceltu u megliu suluzione per a maiò parte di l'utilizatori. À longu andà, circheremu altri approcci architecturali più avanzati.

E lezioni

Prima, a nostra squadra hà fattu un travagliu maravigghiusu creendu è spedite una correzione in menu di 12 ore dopu chì u prublema hè stata scuperta. Cum'è qualchissia chì hà assistitu à e riunioni, possu dì chì in questa situazione difficili a ghjente hà travagliatu assai duru è pocu tempu hè stata persa.

Ovviamente, nunda di questu duverebbe accadutu. Hè chjaramente vale a pena di aghjustà i nostri prucessi per riduce a probabilità di tali incidenti è fà a rimediazione più faciule.

A settimana prossima publicheremu un post-mortem ufficiale è una lista di cambiamenti chì intendemu fà. Per avà, sparteraghju i mo pinsamenti. Prima, deve esse un modu megliu per monitorà u statutu di ciò chì hè una bomba di tempu potenziale. Avemu bisognu di esse sicuru chì ùn ci truvamu micca in una situazione induve unu di elli travaglia di colpu. Avemu sempre travagliatu i dettagli, ma à u minimu, hè necessariu di piglià in contu tutte e cose.

Siconda, avemu bisognu di un mecanismu per furnisce rapidamente l'aghjurnamenti à l'utilizatori, ancu quandu - soprattuttu quandu - tuttu u restu falla. Hè stata fantastica chì pudemu usà u sistema di "ricerca", ma hè un strumentu imperfettu è hà qualchì effetti secundari indesiderati. In particulare, sapemu chì parechji utilizatori anu attivatu l'aghjurnamenti automatichi, ma preferiscenu micca participà à a ricerca (admete, l'aghju ancu disattivatu!). À u listessu tempu, avemu bisognu di un modu per mandà l'aghjurnamenti à l'utilizatori, ma qualunque sia l'implementazione tecnica interna, l'utilizatori anu da esse capace di subscribe à l'aghjurnamenti (inclusi l'aghjurnamenti caldi) ma ottu di tuttu u restu. Inoltre, u canali di l'aghjurnamentu deve esse più responsive chè avà. Ancu u 6 di maghju, ci era sempre utilizatori chì ùn anu micca apprufittatu nè di a correzione nè di a nova versione. Stu prublema hè digià statu travagliatu, ma ciò chì hè accadutu hà dimustratu quantu hè impurtante.

Infine, daremu un sguardu più attentu à l'architettura di sicurezza di l'add-on per assicurà chì furnisce u livellu ghjustu di sicurità cù u minimu risicu di rompe qualcosa.

A settimana prossima fighjeremu i risultati di una analisi più approfondita di ciò chì hè accadutu, ma intantu seraghju felice di risponde à e dumande per email: [email prutettu]

Source: linux.org.ru

Add a comment