Tehnički detalji o nedavnom onemogućavanju Firefoxovog dodatka

Bilješka. prevodilac: radi pogodnosti čitalaca, datumi su dati po moskovskom vremenu

Nedavno smo propustili datum isteka za jedan od certifikata koji se koristi za potpisivanje dodataka. To je dovelo do toga da su dodaci onemogućeni za korisnike. Sada kada je većina problema riješena, želio bih podijeliti detalje onoga što se dogodilo i obavljenog posla.

Pozadina: dodaci i potpisi

Iako mnogi koriste preglednik iz kutije, Firefox podržava proširenja koja se nazivaju "dodatci". Uz njihovu pomoć, korisnici dodaju različite funkcije pretraživaču. Postoji preko 15 hiljada dodataka: od blokiranje oglasa do upravljanje stotinama kartica.

Moraju biti instalirani dodaci digitalni potpis, koji štiti korisnike od zlonamjernih dodataka i zahtijeva minimalan pregled dodataka od strane zaposlenih u Mozili. Ovaj zahtjev smo uveli 2015. dok smo testirali ozbiljni problemi sa zlonamjernim ekstenzijama.

Kako to funkcionira: Svaka kopija Firefoxa sadrži "root certifikat". Ključ za ovaj "root" je pohranjen u Hardverski sigurnosni modul (HSM)koja nema pristup mreži. Svakih nekoliko godina ovim ključem se potpisuje novi "srednji certifikat" koji se koristi prilikom potpisivanja dodataka. Kada programer podnese dodatak, kreiramo privremeni "završni certifikat" i potpisujemo ga pomoću srednjeg certifikata. Zatim se sam dodatak potpisuje konačnim certifikatom. shematski izgleda ovako.

Imajte na umu da svaki certifikat ima "subjekta" (kome je certifikat izdat) i "izdatelja" (koji je izdao certifikat). U slučaju korijenskog certifikata, "predmet" = "izdavač", ali za druge certifikate, izdavalac certifikata je subjekt nadređenog certifikata koji ga je potpisao.

Važna stvar: svaki dodatak je potpisan jedinstvenim završnim certifikatom, ali gotovo uvijek ovi krajnji certifikati su potpisani istim srednjim certifikatom.

Napomena autora: izuzetak su vrlo stari dodaci. U to vrijeme korišteni su različiti srednji certifikati.

Ovaj srednji certifikat je izazvao probleme: svaki certifikat vrijedi određeni period. Prije ili nakon ovog perioda, certifikat je nevažeći i pretraživač neće koristiti dodatke potpisane ovim certifikatom. Nažalost, privremeni certifikat je istekao 4. maja u 4:XNUMX ujutro.

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

Smanjujemo štetu

Kada smo shvatili šta se dogodilo, pokušali smo spriječiti pogoršanje situacije.

Prvo su prestali da prihvataju i potpisuju nove dopune. Za ovo nema smisla koristiti sertifikat koji je istekao. Gledajući unazad, rekao bih da bi bilo moguće ostaviti sve kako jeste. Sada je nastavljeno prihvatanje dodataka.

Drugo, odmah su poslali popravku koja onemogućava svakodnevnu provjeru potpisa. Tako smo sačuvali one korisnike čiji pretraživač nije imao vremena da provjeri dodatke u posljednja XNUMX sata. Ovaj popravak je sada povučen i više nije potreban.

Paralelni rad

Teoretski, rješenje problema izgleda jednostavno: kreirajte novi važeći srednji certifikat i ponovo potpišite svaki dodatak. Nažalost ovo neće raditi:

  • ne možemo brzo ponovo potpisati 15 dodataka odjednom, sistem nije dizajniran za takvo opterećenje
  • nakon što potpišemo dodatke, ažurirane verzije treba dostaviti korisnicima. Većina dodataka se instalira sa Mozilla servera, tako da će Firefox pronaći ažuriranja u naredna XNUMX sata, ali neki programeri distribuiraju potpisane dodatke putem kanala trećih strana, tako da bi korisnici morali ručno ažurirati takve dodatke

Umjesto toga, pokušali smo da razvijemo ispravku koja bi doprla do svih korisnika uz malo ili nikakvu akciju s njihove strane.

Prilično brzo smo došli do dvije glavne strategije, koje smo koristili paralelno:

  • Ažurirajte Firefox da promijenite period važenja certifikata. Ovo će učiniti da postojeći dodaci ponovo rade na magičan način, 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

Odlučili smo prvo upotrijebiti prvu opciju, koja se činila prilično dobrom. Na kraju dana izašao je i drugi popravak (novi certifikat), o čemu ćemo kasnije.

Zamjena certifikata

Kao što sam već pomenuo, potrebno je:

  • kreirajte novi važeći certifikat
  • instalirajte ga daljinski u Firefox

Da bismo razumjeli zašto bi ovo funkcioniralo, pogledajmo detaljnije proces validacije 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 pretraživač poznaje korijenski certifikat koji je ugrađen u Firefox u vrijeme izgradnje. Međutim, kao što već znamo, srednji certifikat je istekao, pa nije moguće provjeriti dodatak.

Kada Firefox pokuša provjeriti valjanost dodatka, nije ograničen na korištenje certifikata sadržanih u samom dodatku. Umjesto toga, pretraživač pokušava izgraditi važeći lanac certifikata, počevši od krajnjeg certifikata i nastavljajući sve dok ne dođe do korijena. Na prvom nivou počinjemo sa listnim certifikatom, a zatim pronalazimo certifikat čiji je predmet izdavalac lisnog certifikata (odnosno srednji certifikat). Obično ovaj srednji certifikat dolazi s dodatkom, ali bilo koji certifikat iz trgovine pretraživača također može djelovati kao ovaj srednji certifikat. Ako možemo daljinski dodati novi važeći certifikat u spremište certifikata, Firefox će ga pokušati koristiti. Situacija prije i nakon instaliranja novog certifikata.

Nakon što se novi certifikat instalira, Firefox će imati dvije opcije prilikom provjere lanca certifikata: koristiti stari nevažeći certifikat (koji neće raditi) ili novi važeći (koji će raditi). Važno je da novi certifikat sadrži isto ime subjekta i javni ključ kao i stari certifikat, tako da će njegov potpis na konačnom certifikatu biti važeći. Firefox je dovoljno pametan da isproba oboje dok ne pronađe onaj koji radi, tako da će dodaci biti ponovo provjereni. Imajte na umu da je ovo ista logika koju koristimo za provjeru valjanosti TLS certifikata.

Napomena autora: Čitaoci upoznati sa WebPKI-jem primijetit će da unakrsni certifikati rade na potpuno isti način.

Odlična stvar u vezi s ovim popravkom je da ne zahtijeva da ponovo potpišete postojeće dodatke. Čim pretraživač dobije novi sertifikat, svi dodaci će ponovo raditi. Ostaje izazov isporučivanja novog certifikata korisnicima (automatski i daljinski) i natjerati Firefox da ponovo provjeri onemogućene dodatke.

Normandija i sistem istraživanja

Ironično, ovaj problem je riješen posebnim dodatkom koji se zove "sistem". Kako bismo sproveli istraživanje, razvili smo sistem pod nazivom Normandy koji pruža istraživanje korisnicima. Ova istraživanja se automatski izvode u pretraživaču i imaju poboljšan pristup Firefoxovim internim API-jima. Istraživanje može dodati nove certifikate u spremište certifikata.

Napomena autora: Ne dodajemo sertifikat sa posebnim privilegijama; potpisan je korijenskim certifikatom, tako da mu Firefox vjeruje. Jednostavno ga dodamo u skup certifikata koje pretraživač može koristiti.

Dakle, rješenje je napraviti studiju:

  • koji instalira novi certifikat koji smo kreirali za korisnike
  • prisiljavanje pretraživača da ponovo provjeri onemogućene dodatke kako bi ponovo radili

"Ali čekajte", kažete, "dodaci ne rade, kako da pokrenem sistemski dodatak?". Potpišimo ga novim certifikatom!

Stavljajući sve zajedno...zašto traje tako dugo?

Dakle, u planu je izdavanje novog certifikata koji će zamijeniti stari, kreirati sistemski dodatak i instalirati ga korisnicima preko Normandije. Problemi su, kao što sam rekao, počeli 4. maja u 4:00, a već u 12:44 istog dana, manje od 9 sati kasnije, poslali smo popravku u Normandiju. Trebalo je još 6-12 sati da stigne do svih korisnika. Već nije loše, ali korisnici Twittera se pitaju zašto nismo mogli brže djelovati.

Prvo, trebalo je vremena da se izda novi srednji certifikat. Kao što sam gore spomenuo, ključ iz root certifikata je pohranjen van mreže u hardverskom sigurnosnom modulu. Ovo je dobro sa sigurnosne tačke gledišta, jer se root rijetko koristi i mora biti siguran, ali je malo nezgodno kada trebate hitno potpisati novi certifikat. Jedan od naših inženjera morao je otići u skladište HSM-a. Zatim je bilo neuspješnih pokušaja izdavanja ispravne potvrde, a svaki pokušaj je vrijedio sat ili dva utrošena na testiranje.

Drugo, razvoj sistemskog dodatka je potrajao. Konceptualno je vrlo jednostavno, ali čak i jednostavni programi zahtijevaju pažnju. Hteli smo da budemo sigurni da nećemo pogoršati stvari. Istraživanje je potrebno testirati prije nego što se pošalje korisnicima. Takođe, dodatak treba da bude potpisan, ali naš sistem za potpisivanje dodataka je onemogućen, pa smo morali da tražimo rešenje.

Konačno, nakon što smo pripremili studije za otpremu, trebalo je vremena da se rasporede. Pregledač provjerava da li postoje ažuriranja Normandije svakih 6 sati. Nisu svi računari stalno uključeni i povezani na Internet, tako da je potrebno vrijeme da se popravka 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 isključili istraživanje ili telemetriju
  • korisnici Android verzije (Fennec), gdje istraživanje uopće nije podržano
  • korisnici prilagođenih verzija Firefox ESR-a u preduzećima u kojima se telemetrija ne može omogućiti
  • korisnici koji sede iza MitM proksija, jer naš sistem za instalaciju dodataka koristi zakačenje ključeva, što ne radi sa takvim proksijima
  • korisnici starijih verzija Firefoxa koje ne podržavaju istraživanje

Ne možemo ništa učiniti u vezi sa posljednjom kategorijom korisnika – oni bi ipak trebali nadograditi na novu verziju Firefoxa, jer zastarjeli imaju ozbiljne nezakrpljene ranjivosti. Znamo da neki ljudi ostaju na starijim verzijama Firefoxa jer žele pokrenuti starije dodatke, ali mnogi od starijih dodataka su već prebačeni na nove verzije preglednika. Za ostale korisnike razvili smo zakrpu koja će instalirati novi certifikat. Objavljen je kao izdanje za popravku grešaka (napomena prevodioca: Firefox 66.0.5), tako da će ga ljudi dobiti - najvjerovatnije su ga već dobili - putem normalnog kanala ažuriranja. Ako koristite prilagođenu verziju Firefox ESR-a, obratite se svom održavaču.

Razumijemo da to nije idealno. U nekim slučajevima, korisnici su izgubili dodatne podatke (na primjer, podatke o dodacima Kontejneri za više računa).

Ova nuspojava se nije mogla izbjeći, ali vjerujemo da smo u kratkom roku odabrali najbolje rješenje za većinu korisnika. Dugoročno ćemo tražiti druge, naprednije arhitektonske pristupe.

Predavanja

Prvo, naš tim je napravio nevjerovatan posao kreiranja i slanja popravka za manje od 12 sati od otkrivanja problema. Kao neko ko je prisustvovao sastancima, mogu reći da su se u ovoj teškoj situaciji ljudi jako trudili i vrlo malo vremena je izgubljeno.

Očigledno, ovo uopšte nije trebalo da se desi. Jasno je da je vrijedno prilagoditi naše procese kako bismo smanjili vjerovatnoću takvih incidenata i olakšali ispravljanje posljedica.

Sljedeće sedmice ćemo objaviti zvaničnu obdukciju i listu promjena koje namjeravamo izvršiti. Za sada ću podijeliti svoja razmišljanja. Prvo, mora postojati bolji način da se prati status onoga što je potencijalna tempirana bomba. Moramo biti sigurni da se ne nađemo u situaciji da neko od njih odjednom proradi. Još uvijek radimo na detaljima, ali u najmanju ruku moramo uzeti u obzir sve ove stvari.

Drugo, potreban nam je mehanizam za brzo isporuku ažuriranja korisnicima, čak i kada - posebno kada - sve ostalo ne radi. Bilo je sjajno što smo mogli da koristimo "istraživački" sistem, ali to nije savršen alat i ima neke neželjene nuspojave. Konkretno, znamo da mnogi korisnici imaju uključena automatska ažuriranja, ali radije ne bi učestvovali u istraživanju (priznajem, i ja sam ih isključio!). U isto vrijeme, potreban nam je način da šaljemo ažuriranja korisnicima, ali bez obzira na internu tehničku implementaciju, korisnici bi trebali biti u mogućnosti da se pretplate na ažuriranja (uključujući vruće popravke), ali odustanu od svega ostalog. Također, kanal za ažuriranje trebao bi bolje reagirati nego što je sada. Čak i 6. maja i dalje je bilo korisnika koji nisu iskoristili ni popravak ni novu verziju. Na ovom problemu se već radilo, ali ono što se dogodilo pokazalo je koliko je on važan.

Konačno, pogledat ćemo sigurnosnu arhitekturu dodataka kako bismo bili sigurni da pruža odgovarajući nivo sigurnosti uz minimalan rizik da se nešto pokvari.

Sljedeće sedmice ćemo pogledati rezultate detaljnije analize onoga što se dogodilo, ali ću u međuvremenu rado odgovarati na pitanja putem e-pošte: [email zaštićen]

izvor: linux.org.ru

Dodajte komentar