Tehnički detalji nedavnog onemogućavanja dodataka u Firefoxu

Bilješka prevoditelj: radi praktičnosti čitatelja, datumi su dati po moskovskom vremenu

Nedavno smo propustili istek jednog od certifikata koji se koriste za potpisivanje dodataka. To je rezultiralo onemogućavanjem dodataka za korisnike. Sada kada je problem uglavnom riješen, želio bih podijeliti pojedinosti o tome što se dogodilo i obavljenom poslu.

Pozadina: dodaci i potpisi

Iako mnogi ljudi koriste preglednik odmah, Firefox podržava proširenja koja se zovu "dodaci". Uz njihovu pomoć, korisnici pregledniku dodaju razne značajke. Postoji preko 15 tisuća dodataka: od blokiranje oglasa na upravljajte stotinama kartica.

Instalirani dodaci moraju imati digitalni potpis, koji štiti korisnike od zlonamjernih dodataka i zahtijeva minimalan pregled dodataka od strane osoblja Mozille. Taj smo zahtjev uveli 2015. jer smo doživljavali ozbiljnih problema sa zlonamjernim dodacima.

Kako radi: Svaka kopija Firefoxa sadrži "korijenski certifikat". Ključ ovog "korijena" pohranjen je u Hardverski sigurnosni modul (HSM)bez pristupa mreži. Ovim se ključem svakih nekoliko godina potpisuje novi “međucertifikat” koji se koristi prilikom potpisivanja dodataka. Kada razvojni programer pošalje dodatak, mi stvaramo privremeni "krajnji certifikat" i potpisujemo ga pomoću srednjeg certifikata. Sam dodatak zatim se potpisuje konačnim certifikatom. Shematski izgleda ovako.

Imajte na umu da svaki certifikat ima "subjekt" (kome je certifikat izdan) i "izdavača" (tko je izdao certifikat). U slučaju korijenskog certifikata, "subject" = "issuer", ali za ostale certifikate, izdavatelj certifikata je subjekt nadređenog certifikata kojim je potpisan.

Važna točka: svaki dodatak je potpisan jedinstvenim krajnjim certifikatom, ali gotovo uvijek su ti krajnji certifikati potpisani istim posrednim certifikatom.

Napomena autora: Iznimka su vrlo stari dodaci. Tada su se koristili razni posredni certifikati.

Ovaj posredni certifikat je uzrokovao probleme: svaki certifikat vrijedi određeno razdoblje. Prije ili nakon tog razdoblja, certifikat je nevažeći i preglednik neće koristiti dodatke potpisane ovim certifikatom. Nažalost, međusvjedodžba je istekla 4. svibnja u 4 sata ujutro.

Posljedice se nisu pokazale odmah. Firefox ne provjerava potpise instaliranih dodataka stalno, već otprilike jednom u 24 sata, a vrijeme provjere je individualno za svakog korisnika. Kao rezultat toga, neki ljudi su iskusili probleme odmah, dok su drugi iskusili probleme mnogo kasnije. Prvi put smo postali svjesni problema otprilike u vrijeme kada je certifikat istekao i odmah smo počeli tražiti rješenje.

Smanjenje štete

Kad smo shvatili što se dogodilo, pokušali smo spriječiti da se situacija pogorša.

Prvo, prestali su prihvaćati i potpisivati ​​prinove. Za to nema smisla koristiti istekli certifikat. Gledajući unatrag, rekao bih da smo mogli ostaviti sve kako je bilo. Sada smo ponovno počeli primati suplemente.

Drugo, odmah su poslali popravak koji je spriječio dnevnu provjeru potpisa. Tako smo spasili one korisnike čiji preglednik još nije stigao provjeriti dodatke u zadnja XNUMX sata. Ovaj popravak je sada povučen i više nije potreban.

Paralelni rad

U teoriji, rješenje problema izgleda jednostavno: izradite novi valjani posredni certifikat i ponovno potpišite svaki dodatak. Nažalost, ovo neće uspjeti:

  • ne možemo brzo prepotpisati 15 tisuća dodataka odjednom, sustav nije predviđen za takvo opterećenje
  • Nakon što potpišemo dodatke, ažurirane verzije potrebno je dostaviti korisnicima. Većina dodataka instalirana je s Mozilla poslužitelja, tako da će Firefox pronaći ažuriranja unutar sljedeća XNUMX sata, ali neki programeri distribuiraju potpisane dodatke putem kanala trećih strana, pa bi korisnici morali ručno ažurirati takve dodatke

Umjesto toga, pokušali smo razviti popravak koji će doprijeti do svih korisnika, a da ne zahtijeva mnogo ili nimalo radnje s njihove strane.

Vrlo brzo smo došli do dvije glavne strategije, koje smo koristili paralelno:

  • Ažurirajte Firefox kako biste promijenili razdoblje valjanosti certifikata. Ovo će učiniti da postojeći dodaci magično ponovno rade, ali će zahtijevati izdavanje i isporuku nove verzije Firefoxa
  • Generirajte važeći certifikat i nekako uvjerite Firefox da ga prihvati umjesto postojećeg koji je istekao

Prvo smo odlučili upotrijebiti prvu opciju, koja je izgledala prilično izvediva. Na kraju dana, objavili su drugi popravak (novi certifikat), o kojem ćemo kasnije.

Zamjena certifikata

Kao što sam već naveo, bilo je potrebno:

  • stvoriti novi važeći certifikat
  • instalirajte ga na daljinu u Firefoxu

Da bismo razumjeli zašto ovo funkcionira, pogledajmo pobliže postupak provjere dodataka. Sam dodatak dolazi kao skup datoteka, uključujući lanac certifikata koji se koriste za potpisivanje. Kao rezultat toga, dodatak se može provjeriti ako preglednik poznaje korijenski certifikat, koji je ugrađen u Firefox tijekom izgradnje. Međutim, kao što već znamo, međucertifikat je istekao, pa je dodatak nemoguće verificirati.

Kada Firefox pokuša provjeriti dodatak, nije ograničen na korištenje certifikata sadržanih u samom dodatku. Umjesto toga, preglednik pokušava stvoriti važeći lanac certifikata, počevši od krajnjeg certifikata i nastavljajući dok ne dođe do korijena. Na prvoj razini počinjemo s krajnjim certifikatom, a zatim pronalazimo certifikat čiji je predmet izdavatelj krajnjeg certifikata (odnosno međucertifikat). Obično se ovaj međucertifikat isporučuje s dodatkom, ali bilo koji certifikat iz pohrane preglednika također može poslužiti kao ovaj međucertifikat. Ako možemo daljinski dodati novi važeći certifikat u pohranu certifikata, Firefox će ga pokušati upotrijebiti. Situacija prije i nakon instaliranja novog certifikata.

Nakon instaliranja novog certifikata, Firefox će imati dvije mogućnosti prilikom provjere lanca certifikata: koristiti stari nevažeći certifikat (koji neće raditi) ili novi valjani certifikat (koji će raditi). Važno je da novi certifikat sadrži isti naziv subjekta i javni ključ kao i stari certifikat, tako da će njegov potpis na konačnom certifikatu biti valjan. Firefox je dovoljno pametan da isproba obje opcije dok ne pronađe onu koja radi, tako da se dodaci ponovno testiraju. Imajte na umu da je ovo ista logika koju koristimo za provjeru TLS certifikata.

Napomena autora: Čitatelji koji su upoznati s WebPKI primijetit će da unakrsni certifikati rade na potpuno isti način.

Sjajna stvar kod ovog popravka je to što ne zahtijeva ponovno potpisivanje postojećih dodataka. Čim preglednik primi novi certifikat, svi će dodaci ponovno raditi. Preostali izazov je dostaviti novi certifikat korisnicima (automatski i daljinski), kao i natjerati Firefox da ponovno provjeri onemogućene dodatke.

Normandija i istraživački sustav

Ironično, ovaj problem rješava poseban dodatak koji se zove “sustav”. Za provođenje istraživanja razvili smo sustav pod nazivom Normandy koji isporučuje istraživanja korisnicima. Ove se studije automatski izvode u pregledniku i imaju poboljšani pristup Firefoxovim internim API-jima. Istraživanje može dodati nove certifikate u spremište certifikata.

Napomena autora: Ne dodajemo certifikat s posebnim privilegijama; potpisan je korijenskim certifikatom, pa mu Firefox vjeruje. Jednostavno ga dodamo u skup certifikata koje preglednik može koristiti.

Dakle, rješenje je izraditi studiju:

  • instaliranje novog certifikata koji smo izradili za korisnike
  • prisiljavajući preglednik da ponovno provjeri onemogućene dodatke kako bi ponovno radili

"Ali čekajte", kažete, "dodaci ne rade, kako mogu pokrenuti sistemski dodatak?" Potpišimo to novim certifikatom!

Kad sve saberemo... zašto traje toliko dugo?

Dakle, plan: izdati novi certifikat umjesto starog, napraviti sistemski dodatak i instalirati ga korisnicima preko Normandije. Problemi su, kao što rekoh, počeli 4. svibnja u 4:00, a već u 12:44 istog dana, manje od 9 sati kasnije, poslali smo popravak u Normandiju. Trebalo je još 6-12 sati da dođe do svih korisnika. Uopće nije loše, ali ljudi na Twitteru pitaju zašto nismo mogli djelovati brže.

Prvo, trebalo je vremena za izdavanje novog posredničkog certifikata. Kao što sam već spomenuo, ključ korijenskog certifikata pohranjuje se izvan mreže u hardverskom sigurnosnom modulu. To je dobro sa sigurnosne točke gledišta, budući da se root koristi vrlo rijetko i trebao bi biti pouzdano zaštićen, ali malo je nezgodno kada morate hitno potpisati novi certifikat. Jedan od naših inženjera morao je otputovati u skladište HSM-a. Zatim je bilo neuspješnih pokušaja izdavanja ispravnog certifikata, a svaki pokušaj koštao je sat ili dva provedena testiranja.

Drugo, razvoj dodatka sustava trajao je neko vrijeme. Konceptualno je vrlo jednostavan, ali čak i jednostavni programi zahtijevaju brigu. Htjeli smo biti sigurni da nećemo pogoršati situaciju. Istraživanje treba testirati prije slanja korisnicima. Osim toga, dodatak mora biti potpisan, ali naš sustav potpisivanja dodataka bio je onemogućen, pa smo morali pronaći zaobilazno rješenje.

Konačno, nakon što smo istraživanje pripremili za podnošenje, implementacija je potrajala. Preglednik svakih 6 sati provjerava ima li Normandy ažuriranja. Nisu sva računala uvijek uključena i povezana s internetom, pa će trebati vremena da se popravak proširi na korisnike.

Završni koraci

Istraživanje bi trebalo riješiti problem za većinu korisnika, ali nije dostupno svima. Neki korisnici zahtijevaju poseban pristup:

  • korisnici koji su onemogućili istraživanje ili telemetriju
  • korisnici Android verzije (Fennec), gdje istraživanje uopće nije podržano
  • korisnici prilagođenih verzija Firefoxa ESR u poduzećima u kojima telemetrija ne može biti omogućena
  • korisnici koji sjede iza MitM proxyja, budući da naš sustav instalacije dodataka koristi prikvačivanje ključa, što ne radi s takvim proxyjima
  • korisnici naslijeđenih verzija Firefoxa koje ne podržavaju istraživanje

Ne možemo ništa učiniti u vezi s potonjom kategorijom korisnika - oni bi se ipak trebali ažurirati na novu verziju Firefoxa jer zastarjeli imaju ozbiljne nedostatke koji nisu zakrpani. Znamo da neki ljudi ostaju na starijim verzijama Firefoxa jer žele pokretati stare dodatke, ali mnogi od starih dodataka već su preneseni na novije verzije preglednika. Za ostale korisnike razvili smo zakrpu koja će instalirati novi certifikat. Objavljeno je kao izdanje s ispravkom pogrešaka (napomena prevoditelja: Firefox 66.0.5), tako da će ga ljudi dobiti - najvjerojatnije su ga već dobili - putem redovnog kanala ažuriranja. Ako koristite prilagođenu verziju Firefox ESR-a, obratite se svom održavatelju.

Shvaćamo da to nije idealno. U nekim slučajevima korisnici su izgubili podatke o dodacima (na primjer, podatke o dodacima Spremnici s više računa).

Ovu nuspojavu nismo mogli izbjeći, ali vjerujemo da smo kratkoročno odabrali najbolje rješenje za većinu korisnika. Dugoročno gledano, tražit ćemo druge, naprednije arhitektonske pristupe.

Lekcije

Prvo, naš tim napravio je nevjerojatan posao kreirajući i isporučujući popravak u manje od 12 sati nakon što je problem otkriven. Kao netko tko je prisustvovao sastancima, mogu reći da su ljudi u ovoj teškoj situaciji jako puno radili, a jako malo vremena je izgubljeno.

Očito se ništa od ovoga uopće nije trebalo dogoditi. Jasno je da se isplati prilagoditi naše procese kako bismo smanjili vjerojatnost takvih incidenata i olakšali sanaciju.

Sljedeći tjedan ćemo objaviti službenu obdukciju i popis promjena koje namjeravamo napraviti. Za sada ću podijeliti svoja razmišljanja. Prvo, mora postojati bolji način za praćenje statusa onoga što je potencijalna tempirana bomba. Moramo biti sigurni da se ne nađemo u situaciji da netko od njih odjednom proradi. Još uvijek razrađujemo detalje, ali minimalno je potrebno voditi računa o svim takvim stvarima.

Drugo, potreban nam je mehanizam za brzu isporuku ažuriranja korisnicima, čak i kada - posebno kada - sve ostalo ne uspije. Bilo je sjajno što smo mogli koristiti sustav "istraživanja", ali on je nesavršen alat i ima neke neželjene nuspojave. Konkretno, znamo da mnogi korisnici imaju uključena automatska ažuriranja, ali radije ne bi sudjelovali u istraživanju (priznajem, i ja sam ih isključio!). U isto vrijeme, trebamo način slanja ažuriranja korisnicima, ali bez obzira na internu tehničku implementaciju, korisnici bi se trebali moći pretplatiti na ažuriranja (uključujući hitne popravke), ali isključiti sve ostalo. Osim toga, kanal ažuriranja trebao bi biti osjetljiviji nego što je trenutno. Čak i 6. svibnja još uvijek je bilo korisnika koji nisu iskoristili ni popravak ni novu verziju. Na ovom problemu se već radilo, ali ovo što se dogodilo pokazalo je koliko je on važan.

Na kraju ćemo pobliže pogledati sigurnosnu arhitekturu dodatka kako bismo bili sigurni da pruža odgovarajuću razinu sigurnosti uz minimalan rizik od razbijanja bilo čega.

Sljedeći tjedan pogledat ćemo rezultate temeljitije analize onoga što se dogodilo, ali u međuvremenu ću rado odgovoriti na pitanja putem e-pošte: [e-pošta zaštićena]

Izvor: linux.org.ru

Dodajte komentar