Mga teknikal na detalye ng kamakailang hindi pagpapagana ng mga add-on sa Firefox

Tandaan tagasalin: para sa kaginhawahan ng mga mambabasa, ang mga petsa ay ibinibigay sa oras ng Moscow

Na-miss namin kamakailan ang pag-expire ng isa sa mga certificate na ginamit sa pag-sign ng mga add-on. Nagresulta ito sa pag-disable ng mga add-on para sa mga user. Ngayon na halos naayos na ang problema, nais kong ibahagi ang mga detalye ng nangyari at ang gawaing ginawa.

Background: mga karagdagan at lagda

Bagama't maraming tao ang gumagamit ng browser sa labas ng kahon, sinusuportahan ng Firefox ang mga extension na tinatawag na "mga add-on." Sa kanilang tulong, nagdaragdag ang mga user ng iba't ibang feature sa browser. Mayroong higit sa 15 libong mga add-on: mula sa pagharang ng ad sa pamahalaan ang daan-daang tab.

Dapat mayroon ang mga naka-install na add-on digital na lagda, na nagpoprotekta sa mga user mula sa mga nakakahamak na add-on at nangangailangan ng kaunting pagsusuri ng mga add-on ng kawani ng Mozilla. Ipinakilala namin ang kinakailangang ito noong 2015 dahil nararanasan namin malubhang problema na may mga nakakahamak na add-on.

Paano ito gumagana: Ang bawat kopya ng Firefox ay naglalaman ng "root certificate". Ang susi sa "ugat" na ito ay naka-imbak sa Hardware Security Module (HSM)walang access sa network. Bawat ilang taon, isang bagong β€œintermediate certificate” ang nilalagdaan gamit ang key na ito, na ginagamit kapag pumipirma ng mga add-on. Kapag nagsumite ang isang developer ng add-on, gumagawa kami ng pansamantalang "end certificate" at nilalagdaan ito gamit ang isang intermediate na certificate. Ang add-on mismo ay nilagdaan gamit ang huling sertipiko. Sa eskematiko parang ganito.

Pakitandaan na ang bawat sertipiko ay may "paksa" (kung kanino ibinigay ang sertipiko) at isang "tagapagbigay" (na nagbigay ng sertipiko). Sa kaso ng root certificate, "subject" = "issuer", ngunit para sa ibang mga certificate, ang issuer ng certificate ay ang paksa ng parent certificate kung saan ito nilagdaan.

Isang mahalagang punto: ang bawat add-on ay nilagdaan ng isang natatanging sertipiko ng pagtatapos, ngunit halos palaging ang mga sertipiko ng pagtatapos na ito ay nilagdaan ng parehong intermediate na sertipiko.

Tala ng may-akda: Ang pagbubukod ay napakalumang mga karagdagan. Sa oras na iyon, iba't ibang mga intermediate na sertipiko ang ginamit.

Nagdulot ng mga problema ang intermediate na certificate na ito: valid ang bawat certificate para sa isang partikular na panahon. Bago o pagkatapos ng panahong ito, hindi wasto ang certificate at hindi gagamit ang browser ng mga add-on na nilagdaan ng certificate na ito. Sa kasamaang palad, ang intermediate certificate ay nag-expire noong Mayo 4 sa 4 am.

Ang mga kahihinatnan ay hindi agad lumitaw. Hindi palaging sinusuri ng Firefox ang mga lagda ng mga naka-install na add-on, ngunit humigit-kumulang isang beses bawat 24 na oras, at ang oras ng pag-verify ay indibidwal para sa bawat user. Bilang resulta, ang ilang mga tao ay nakaranas kaagad ng mga problema, habang ang iba ay nakaranas ng mga problema sa ibang pagkakataon. Una naming nalaman ang problema sa oras na nag-expire ang certificate at agad kaming nagsimulang maghanap ng solusyon.

Pagbawas ng pinsala

Nang napagtanto namin kung ano ang nangyari, sinubukan naming pigilan ang sitwasyon na lumala.

Una, tumigil sila sa pagtanggap at pagpirma ng mga bagong karagdagan. Walang saysay ang paggamit ng nag-expire na sertipiko para dito. Sa pagbabalik-tanaw, masasabi kong maaari na nating iwan ang lahat ng dati. Ipinagpatuloy na namin ngayon ang pagtanggap ng mga suplemento.

Pangalawa, agad silang nagpadala ng isang pag-aayos na pumipigil sa mga pirma na masuri sa araw-araw. Kaya, na-save namin ang mga user na iyon na ang browser ay wala pang oras upang suriin ang mga add-on sa huling XNUMX na oras. Ang pag-aayos na ito ay binawi na ngayon at hindi na kailangan.

Parallel na operasyon

Sa teorya, ang solusyon sa problema ay mukhang simple: lumikha ng isang bagong valid na intermediate na sertipiko at muling lagdaan ang bawat add-on. Sa kasamaang palad, hindi ito gagana:

  • hindi namin mabilis na muling pumirma ng 15 libong mga add-on nang sabay-sabay, ang sistema ay hindi idinisenyo para sa gayong pagkarga
  • Pagkatapos naming lagdaan ang mga karagdagan, ang mga na-update na bersyon ay kailangang maihatid sa mga user. Karamihan sa mga add-on ay naka-install mula sa mga server ng Mozilla, kaya ang Firefox ay makakahanap ng mga update sa loob ng susunod na XNUMX na oras, ngunit ang ilang mga developer ay namamahagi ng mga naka-sign na add-on sa pamamagitan ng mga third-party na channel, kaya ang mga user ay kailangang i-update nang manu-mano ang mga naturang add-on.

Sa halip, sinubukan naming bumuo ng pag-aayos na makakaabot sa lahat ng user nang hindi nangangailangan ng marami o walang aksyon sa kanilang bahagi.

Mabilis na nakarating kami sa dalawang pangunahing diskarte, na ginamit namin nang magkatulad:

  • I-update ang Firefox para baguhin ang panahon ng bisa ng certificate. Gagawin nitong mahiwagang gagana muli ang mga kasalukuyang add-on, ngunit mangangailangan ng pagpapalabas at pagpapadala ng bagong build ng Firefox
  • Bumuo ng isang wastong sertipiko at kahit papaano ay kumbinsihin ang Firefox na tanggapin ito sa halip na ang umiiral na isa na nag-expire na

Napagpasyahan naming gamitin muna ang unang opsyon, na mukhang maayos. Sa pagtatapos ng araw, naglabas sila ng pangalawang pag-aayos (isang bagong sertipiko), na pag-uusapan natin mamaya.

Pagpapalit ng sertipiko

Tulad ng nabanggit ko sa itaas, ito ay kinakailangan:

  • lumikha ng bagong valid na sertipiko
  • i-install ito nang malayuan sa Firefox

Upang maunawaan kung bakit ito gumagana, tingnan natin ang proseso ng add-on na pag-verify. Ang add-on mismo ay dumating bilang isang set ng mga file, kabilang ang isang hanay ng mga certificate na ginagamit para sa pagpirma. Bilang resulta, maaaring ma-verify ang add-on kung alam ng browser ang root certificate, na naka-built in sa Firefox sa oras ng build. Gayunpaman, tulad ng alam na natin, ang intermediate na sertipiko ay nag-expire na, kaya imposibleng i-verify ang add-on.

Kapag sinubukan ng Firefox na i-verify ang isang add-on, hindi ito limitado sa paggamit ng mga certificate na nasa loob mismo ng add-on. Sa halip, sinusubukan ng browser na lumikha ng wastong chain ng certificate, simula sa huling certificate at magpapatuloy hanggang sa makarating ito sa ugat. Sa unang antas, magsisimula tayo sa sertipiko ng pagtatapos at pagkatapos ay hanapin ang sertipiko na ang paksa ay ang nagbigay ng sertipiko ng pagtatapos (iyon ay, ang intermediate na sertipiko). Kadalasan ang intermediate na certificate na ito ay ibinibigay kasama ng add-on, ngunit anumang certificate mula sa storage ng browser ay maaari ding magsilbi bilang intermediate certificate na ito. Kung maaari kaming malayuang magdagdag ng bagong wastong sertipiko sa tindahan ng sertipiko, susubukan ng Firefox na gamitin ito. Ang sitwasyon bago at pagkatapos mag-install ng bagong sertipiko.

Pagkatapos i-install ang bagong certificate, magkakaroon ng dalawang opsyon ang Firefox kapag pinapatunayan ang chain ng certificate: gamitin ang lumang di-wastong certificate (na hindi gagana) o ang bagong valid na certificate (na gagana). Mahalaga na ang bagong sertipiko ay naglalaman ng parehong pangalan ng paksa at pampublikong key tulad ng lumang sertipiko, kaya ang lagda nito sa huling sertipiko ay magiging wasto. Ang Firefox ay sapat na matalino upang subukan ang parehong mga pagpipilian hanggang sa makita nito ang isa na gumagana, kaya ang mga add-on ay muling nasubok. Tandaan na ito ang parehong logic na ginagamit namin upang patunayan ang mga TLS certificate.

Tala ng May-akda: Mapapansin ng mga mambabasa na pamilyar sa WebPKI na ang mga cross-certificate ay gumagana sa eksaktong parehong paraan.

Ang magandang bagay tungkol sa pag-aayos na ito ay hindi ito nangangailangan sa iyo na muling pumirma sa mga kasalukuyang add-on. Sa sandaling matanggap ng browser ang bagong certificate, gagana muli ang lahat ng add-on. Ang natitirang hamon ay ihatid ang bagong certificate sa mga user (awtomatiko at malayuan), pati na rin ang pagkuha ng Firefox upang muling suriin ang mga hindi pinaganang add-on.

Normandy at ang sistema ng pananaliksik

Ironically, ang problemang ito ay nalutas sa pamamagitan ng isang espesyal na add-on na tinatawag na "system". Para magsagawa ng pananaliksik, bumuo kami ng system na tinatawag na Normandy na naghahatid ng pananaliksik sa mga user. Ang mga pag-aaral na ito ay awtomatikong ginagawa sa browser, at may pinahusay na access sa mga panloob na API ng Firefox. Ang pananaliksik ay maaaring magdagdag ng mga bagong sertipiko sa tindahan ng sertipiko.

Tala ng may-akda: Hindi kami nagdaragdag ng sertipiko na may anumang espesyal na pribilehiyo; ito ay nilagdaan ng root certificate, kaya pinagkakatiwalaan ito ng Firefox. Idagdag lang namin ito sa pool ng mga certificate na magagamit ng browser.

Kaya ang solusyon ay lumikha ng isang pag-aaral:

  • pag-install ng bagong certificate na ginawa namin para sa mga user
  • pinipilit ang browser na suriin muli ang mga hindi pinaganang add-on upang gumana muli ang mga ito

"Ngunit maghintay," sabi mo, "hindi gumagana ang mga add-on, paano ako maglulunsad ng add-on ng system?" Pirmahan natin ito gamit ang isang bagong sertipiko!

Pinagsasama-sama ang lahat... bakit ang tagal?

Kaya, ang plano: mag-isyu ng bagong certificate para palitan ang luma, gumawa ng system add-on at i-install ito sa mga user sa pamamagitan ng Normandy. Ang mga problema, tulad ng sinabi ko, ay nagsimula noong Mayo 4 sa 4:00, at na sa 12:44 ng parehong araw, wala pang 9 na oras, nagpadala kami ng pag-aayos sa Normandy. Tumagal ng isa pang 6-12 oras bago nito maabot ang lahat ng user. Hindi masama sa lahat, ngunit ang mga tao sa Twitter ay nagtatanong kung bakit hindi kami maaaring kumilos nang mas mabilis.

Una, tumagal ng oras upang mag-isyu ng bagong intermediate na sertipiko. Tulad ng nabanggit ko sa itaas, ang susi sa root certificate ay naka-imbak offline sa module ng seguridad ng hardware. Ito ay mabuti mula sa isang punto ng seguridad, dahil ang ugat ay bihirang ginagamit at dapat na mapagkakatiwalaan na protektado, ngunit ito ay bahagyang hindi maginhawa kapag kailangan mong agarang pumirma ng isang bagong sertipiko. Kinailangang maglakbay ang isa sa aming mga inhinyero sa pasilidad ng imbakan ng HSM. Pagkatapos ay may mga hindi matagumpay na pagtatangka na mag-isyu ng tamang sertipiko, at ang bawat pagtatangka ay nagkakahalaga ng isa o dalawang oras na ginugol sa pagsubok.

Pangalawa, ang pagbuo ng system add-on ay tumagal ng ilang oras. Conceptually ito ay napaka-simple, ngunit kahit na ang mga simpleng programa ay nangangailangan ng pangangalaga. Nais naming siguraduhin na hindi namin palalain ang sitwasyon. Kailangang masuri ang pananaliksik bago ipadala sa mga user. Bilang karagdagan, ang add-on ay dapat na nilagdaan, ngunit ang aming add-on na sistema ng pag-sign ay hindi pinagana, kaya kailangan naming maghanap ng isang solusyon.

Sa wakas, kapag naihanda na namin ang pananaliksik para sa pagsusumite, nagtagal ang pag-deploy. Sinusuri ng browser ang mga update sa Normandy tuwing 6 na oras. Hindi lahat ng mga computer ay laging naka-on at nakakonekta sa Internet, kaya't magtatagal bago kumalat ang pag-aayos sa mga user.

Mga huling hakbang

Dapat ayusin ng pananaliksik ang problema para sa karamihan ng mga user, ngunit hindi available sa lahat. Ang ilang mga gumagamit ay nangangailangan ng isang espesyal na diskarte:

  • mga user na hindi pinagana ang pananaliksik o telemetry
  • mga gumagamit ng bersyon ng Android (Fennec), kung saan hindi sinusuportahan ang pananaliksik
  • mga gumagamit ng mga custom na build ng Firefox ESR sa mga negosyo kung saan hindi maaaring paganahin ang telemetry
  • mga user na nakaupo sa likod ng mga proxy ng MitM, dahil ang aming add-on na sistema ng pag-install ay gumagamit ng key pinning, na hindi gumagana sa mga naturang proxy
  • mga gumagamit ng mga legacy na bersyon ng Firefox na hindi sumusuporta sa pananaliksik

Wala kaming magagawa tungkol sa huling kategorya ng mga user - dapat pa rin silang mag-update sa bagong bersyon ng Firefox, dahil ang mga hindi napapanahon ay may malubhang hindi na-patch na mga kahinaan. Alam namin na ang ilang mga tao ay nananatili sa mga mas lumang bersyon ng Firefox dahil gusto nilang magpatakbo ng mga lumang add-on, ngunit marami sa mga lumang add-on ay nai-port na sa mga mas bagong bersyon ng browser. Para sa ibang mga user, nakagawa kami ng patch na mag-i-install ng bagong certificate. Ito ay inilabas bilang isang bugfix release (tala ng tagasalin: Firefox 66.0.5), kaya makukuha ito ng mga tao - malamang na nakuha na ito - sa pamamagitan ng regular na channel sa pag-update. Kung gumagamit ka ng custom na build ng Firefox ESR, mangyaring makipag-ugnayan sa iyong maintainer.

Naiintindihan namin na hindi ito perpekto. Sa ilang sitwasyon, nawalan ng add-on na data ang mga user (halimbawa, add-on na data Mga lalagyan na Multi-Account).

Ang side effect na ito ay hindi maiiwasan, ngunit naniniwala kami na sa maikling panahon napili namin ang pinakamahusay na solusyon para sa karamihan ng mga user. Sa mahabang panahon, maghahanap tayo ng iba pang mas advanced na mga diskarte sa arkitektura.

Ang mga aralin

Una, ang aming koponan ay gumawa ng isang kamangha-manghang trabaho sa paglikha at pagpapadala ng isang pag-aayos sa loob ng wala pang 12 oras pagkatapos matuklasan ang isyu. Bilang isang taong dumalo sa mga pulong, masasabi kong sa mahirap na sitwasyong ito ang mga tao ay nagtrabaho nang husto at napakakaunting oras ang nasayang.

Malinaw, wala sa mga ito ay dapat na nangyari sa lahat. Malinaw na sulit na ayusin ang ating mga proseso upang mabawasan ang posibilidad ng mga ganitong insidente at gawing mas madali ang remediation.

Sa susunod na linggo ay maglalathala kami ng isang opisyal na post-mortem at isang listahan ng mga pagbabagong balak naming gawin. Sa ngayon, ibabahagi ko ang aking mga saloobin. Una, dapat mayroong isang mas mahusay na paraan upang masubaybayan ang katayuan ng kung ano ang isang potensyal na bomba ng oras. Kailangan nating tiyakin na hindi natin makikita ang ating sarili sa isang sitwasyon kung saan ang isa sa kanila ay biglang gumana. Ginagawa pa rin namin ang mga detalye, ngunit sa pinakamababa, kinakailangang isaalang-alang ang lahat ng mga bagay na iyon.

Pangalawa, kailangan namin ng mekanismo para mabilis na makapaghatid ng mga update sa mga user, kahit naβ€”lalo na kapagβ€”nabigo ang lahat. Napakaganda na nagamit namin ang sistema ng "pananaliksik", ngunit ito ay isang hindi perpektong tool at may ilang hindi gustong epekto. Sa partikular, alam namin na maraming mga gumagamit ang naka-on ang mga awtomatikong pag-update, ngunit mas gugustuhin na huwag lumahok sa pananaliksik (inaamin ko, pinatay ko rin ang mga ito!). Kasabay nito, kailangan namin ng isang paraan upang magpadala ng mga update sa mga user, ngunit anuman ang panloob na teknikal na pagpapatupad, ang mga user ay dapat na makapag-subscribe sa mga update (kabilang ang mga mainit na pag-aayos) ngunit mag-opt out sa lahat ng iba pa. Bukod pa rito, dapat na mas tumutugon ang channel sa pag-update kaysa sa kasalukuyan. Kahit noong Mayo 6, mayroon pa ring mga gumagamit na hindi sinamantala ang alinman sa pag-aayos o bagong bersyon. Naayos na ang problemang ito, ngunit ipinakita ng nangyari kung gaano ito kahalaga.

Sa wakas, susuriin natin ang arkitektura ng seguridad ng add-on upang matiyak na nagbibigay ito ng tamang antas ng seguridad na may kaunting panganib na masira ang anuman.

Sa susunod na linggo titingnan natin ang mga resulta ng isang mas masusing pagsusuri sa nangyari, ngunit sa ngayon ay magiging masaya akong sagutin ang mga tanong sa pamamagitan ng email: [protektado ng email]

Pinagmulan: linux.org.ru

Magdagdag ng komento