جزئیات فنی غیرفعال کردن اخیر افزونه ها در فایرفاکس

توجه داشته باشید مترجم: برای راحتی خوانندگان، تاریخ ها به وقت مسکو ارائه می شود

ما اخیراً انقضای یکی از گواهی‌های مورد استفاده برای امضای افزونه‌ها را از دست داده‌ایم. این منجر به غیرفعال شدن افزونه ها برای کاربران شد. اکنون که مشکل بیشتر برطرف شده است، می خواهم جزئیات اتفاقات و کارهای انجام شده را به اشتراک بگذارم.

پیشینه: اضافات و امضاها

اگرچه بسیاری از افراد از مرورگر خارج از جعبه استفاده می کنند، فایرفاکس از افزونه هایی به نام «افزونه» پشتیبانی می کند. با کمک آنها، کاربران ویژگی های مختلفی را به مرورگر اضافه می کنند. بیش از 15 هزار افزونه وجود دارد: from مسدود کردن تبلیغات به صدها برگه را مدیریت کنید.

افزونه های نصب شده باید داشته باشند امضای دیجیتالی، که از کاربران در برابر افزونه های مخرب محافظت می کند و به حداقل بازبینی افزونه ها توسط کارکنان موزیلا نیاز دارد. ما این نیاز را در سال 2015 معرفی کردیم زیرا در حال تجربه بودیم مشکلات جدی با افزونه های مخرب

چگونه کار می کند: هر کپی از فایرفاکس حاوی یک "گواهی ریشه" است. کلید این "ریشه" در آن ذخیره می شود ماژول امنیت سخت افزار (HSM)بدون دسترسی به شبکه هر چند سال یک بار، یک "گواهی متوسط" جدید با این کلید امضا می شود که هنگام امضای افزونه ها استفاده می شود. هنگامی که یک توسعه‌دهنده یک افزونه ارسال می‌کند، ما یک «گواهی پایان» موقت ایجاد می‌کنیم و با استفاده از یک گواهی میانی آن را امضا می‌کنیم. سپس خود افزونه با گواهی نهایی امضا می شود. به صورت شماتیک به نظر می رسد این است.

لطفاً توجه داشته باشید که هر گواهی دارای یک "موضوع" (که گواهی برای او صادر شده است) و یک "صادرکننده" (که گواهی را صادر کرده است) دارد. در مورد گواهی ریشه، "موضوع" = "صادرکننده"، اما برای سایر گواهی ها، صادرکننده گواهی موضوع گواهی مادر است که توسط آن امضا شده است.

یک نکته مهم: هر افزونه توسط یک گواهی پایان منحصر به فرد امضا می شود، اما تقریباً همیشه این گواهی های پایان توسط همان گواهی میانی امضا می شوند.

یادداشت نویسنده: استثناء اضافات بسیار قدیمی است. در آن زمان از گواهی های میانی مختلفی استفاده می شد.

این گواهی میانی مشکلاتی را ایجاد کرد: هر گواهی برای مدت معینی معتبر است. قبل یا بعد از این مدت، گواهی نامعتبر است و مرورگر از افزونه های امضا شده توسط این گواهی استفاده نخواهد کرد. متاسفانه اعتبار گواهینامه میانی در تاریخ 4 اردیبهشت ساعت 4 صبح تمام شد.

عواقب آن بلافاصله ظاهر نشد. فایرفاکس امضای افزونه های نصب شده را به طور مداوم بررسی نمی کند، بلکه تقریباً هر 24 ساعت یک بار، و زمان تأیید برای هر کاربر جداگانه است. در نتیجه، برخی از افراد بلافاصله مشکلات را تجربه کردند، در حالی که برخی دیگر خیلی دیرتر دچار مشکلات شدند. ما ابتدا در حوالی زمانی که گواهی منقضی شد از مشکل آگاه شدیم و بلافاصله به دنبال راه حلی بودیم.

کاهش آسیب

وقتی متوجه شدیم چه اتفاقی افتاده است، سعی کردیم از بدتر شدن اوضاع جلوگیری کنیم.

اولاً آنها از پذیرش و امضای اضافات جدید منصرف شدند. استفاده از گواهی منقضی شده برای این کار فایده ای ندارد. با نگاهی به گذشته، می‌توانم بگویم که می‌توانستیم همه چیز را همانطور که بود رها کنیم. اکنون پذیرش مکمل ها را از سر گرفته ایم.

دوم، آنها فوراً اصلاحیه ای را ارسال کردند که مانع از بررسی روزانه امضاها می شد. بنابراین، ما آن دسته از کاربرانی را که مرورگرشان در XNUMX ساعت گذشته هنوز فرصت بررسی افزونه‌ها را نداشت، ذخیره کردیم. این اصلاح اکنون برداشته شده است و دیگر مورد نیاز نیست.

عملیات موازی

در تئوری، راه حل مشکل ساده به نظر می رسد: یک گواهی معتبر میانی جدید ایجاد کنید و هر افزونه را دوباره امضا کنید. متأسفانه این کار نمی کند:

  • ما نمی توانیم به سرعت 15 هزار افزونه را به یکباره دوباره امضا کنیم، سیستم برای چنین بارگیری طراحی نشده است
  • پس از امضای اضافات، نسخه های به روز شده باید به کاربران تحویل داده شود. اکثر افزونه‌ها از سرورهای موزیلا نصب می‌شوند، بنابراین فایرفاکس ظرف XNUMX ساعت آینده به‌روزرسانی‌ها را پیدا می‌کند، اما برخی از توسعه‌دهندگان افزونه‌های امضاشده را از طریق کانال‌های شخص ثالث توزیع می‌کنند، بنابراین کاربران باید این افزونه‌ها را به‌صورت دستی به‌روزرسانی کنند.

در عوض، ما سعی کردیم راه حلی ایجاد کنیم که بدون نیاز به اقدام زیاد یا هیچ اقدامی از جانب آنها، به همه کاربران برسد.

خیلی سریع به دو استراتژی اصلی رسیدیم که به طور موازی از آنها استفاده کردیم:

  • برای تغییر دوره اعتبار گواهی، فایرفاکس را به روز کنید. این باعث می‌شود که افزونه‌های موجود دوباره به شکل جادویی کار کنند، اما نیاز به انتشار و ارسال یک بیلد جدید فایرفاکس دارد.
  • یک گواهی معتبر ایجاد کنید و به نوعی فایرفاکس را متقاعد کنید که آن را به جای گواهی منقضی شده موجود بپذیرد

تصمیم گرفتیم ابتدا از گزینه اول استفاده کنیم که کاملاً کاربردی به نظر می رسید. در پایان روز، آنها اصلاح دوم (یک گواهی جدید) را منتشر کردند که بعداً در مورد آن صحبت خواهیم کرد.

تعویض گواهی

همانطور که در بالا ذکر کردم، لازم بود:

  • یک گواهی معتبر جدید ایجاد کنید
  • آن را از راه دور در فایرفاکس نصب کنید

برای درک اینکه چرا این کار می‌کند، اجازه دهید نگاهی دقیق‌تر به فرآیند تأیید افزودنی بیندازیم. این افزونه خود به عنوان مجموعه ای از فایل ها، از جمله زنجیره ای از گواهی های مورد استفاده برای امضا ارائه می شود. در نتیجه، اگر مرورگر گواهی ریشه را که در زمان ساخت در فایرفاکس تعبیه شده است، بداند، می‌تواند تأیید شود. با این حال، همانطور که می دانیم، گواهی میانی منقضی شده است، بنابراین تأیید افزونه غیرممکن است.

هنگامی که فایرفاکس تلاش می کند تا یک افزونه را تأیید کند، به استفاده از گواهی های موجود در خود افزونه محدود نمی شود. در عوض، مرورگر سعی می‌کند یک زنجیره گواهی معتبر ایجاد کند، که از گواهی پایان شروع می‌شود و تا زمانی که به ریشه می‌رسد ادامه می‌یابد. در سطح اول از گواهی پایان شروع می کنیم و سپس گواهینامه ای را پیدا می کنیم که موضوع آن صادر کننده گواهی پایان (یعنی گواهینامه میانی) است. معمولاً این گواهی میانی همراه با افزونه ارائه می‌شود، اما هر گواهی از فضای ذخیره‌سازی مرورگر می‌تواند به عنوان این گواهی میانی نیز عمل کند. اگر بتوانیم از راه دور یک گواهی معتبر جدید به فروشگاه گواهی اضافه کنیم، فایرفاکس سعی خواهد کرد از آن استفاده کند. وضعیت قبل و بعد از نصب گواهی جدید.

پس از نصب گواهینامه جدید، فایرفاکس هنگام اعتبار سنجی زنجیره گواهی دو گزینه خواهد داشت: از گواهی نامعتبر قدیمی (که کار نمی کند) یا گواهی معتبر جدید (که کار می کند) استفاده کنید. مهم است که گواهی جدید حاوی همان نام موضوع و کلید عمومی گواهی قدیمی باشد، بنابراین امضای آن در گواهی نهایی معتبر خواهد بود. فایرفاکس آنقدر هوشمند است که هر دو گزینه را امتحان کند تا زمانی که یکی را پیدا کند که کار می کند، بنابراین افزونه ها دوباره آزمایش می شوند. توجه داشته باشید که این همان منطقی است که برای اعتبارسنجی گواهی‌های TLS استفاده می‌کنیم.

توجه نویسنده: خوانندگان آشنا با WebPKI متوجه خواهند شد که گواهینامه های متقابل دقیقاً به همان روش کار می کنند.

نکته مهم در مورد این اصلاح این است که نیازی به امضای مجدد افزونه های موجود ندارد. به محض اینکه مرورگر گواهی جدید را دریافت کرد، همه افزونه ها دوباره کار خواهند کرد. چالش باقی مانده تحویل گواهی جدید به کاربران (به صورت خودکار و از راه دور)، و همچنین واداشتن مرورگر فایرفاکس به بررسی مجدد افزونه های غیرفعال شده است.

نرماندی و سیستم تحقیقاتی

از قضا، این مشکل توسط یک افزونه ویژه به نام "سیستم" حل می شود. برای انجام تحقیقات، ما سیستمی به نام نرماندی ایجاد کردیم که تحقیقات را به کاربران ارائه می دهد. این مطالعات به صورت خودکار در مرورگر انجام می شود و دسترسی به APIهای داخلی فایرفاکس را افزایش می دهد. تحقیقات می تواند گواهی های جدید را به فروشگاه گواهی اضافه کند.

توجه نویسنده: ما گواهی با هیچ امتیاز خاصی اضافه نمی کنیم. توسط گواهی ریشه امضا شده است، بنابراین فایرفاکس به آن اعتماد دارد. ما به سادگی آن را به مجموعه گواهی هایی که می تواند توسط مرورگر استفاده شود اضافه می کنیم.

بنابراین راه حل ایجاد یک مطالعه است:

  • نصب گواهینامه جدیدی که برای کاربران ایجاد کردیم
  • مرورگر را مجبور می کند تا افزونه های غیرفعال را دوباره بررسی کند تا دوباره کار کنند

شما می‌گویید: «اما صبر کنید، افزونه‌ها کار نمی‌کنند، چگونه می‌توانم یک افزونه سیستمی راه‌اندازی کنم؟» بیایید آن را با یک گواهی جدید امضا کنیم!

همه رو کنار هم گذاشتن... چرا اینقدر طول میکشه؟

بنابراین، طرح: صدور گواهی جدید برای جایگزینی گواهی قدیمی، ایجاد یک افزونه سیستم و نصب آن برای کاربران از طریق نرماندی. مشکلات، همانطور که گفتم، در 4 می در ساعت 4:00 شروع شد و قبلاً در ساعت 12:44 همان روز، کمتر از 9 ساعت بعد، ما یک تعمیر را به نرماندی فرستادیم. 6-12 ساعت دیگر طول کشید تا به همه کاربران برسد. اصلا بد نیست، اما مردم در توییتر می پرسند که چرا ما نمی توانستیم سریعتر عمل کنیم.

اول، صدور گواهینامه جدید میانی زمان برد. همانطور که در بالا ذکر کردم، کلید گواهی ریشه به صورت آفلاین در ماژول امنیتی سخت افزار ذخیره می شود. این از نقطه نظر امنیتی خوب است، زیرا ریشه بسیار به ندرت استفاده می شود و باید به طور قابل اعتماد محافظت شود، اما زمانی که نیاز به امضای فوری گواهینامه جدید دارید کمی ناخوشایند است. یکی از مهندسان ما مجبور شد به مرکز ذخیره سازی HSM سفر کند. سپس تلاش‌های ناموفقی برای صدور گواهینامه صحیح انجام شد و هر تلاش یک یا دو ساعت صرف آزمایش شد.

ثانیا، توسعه سیستم افزودنی مدتی طول کشید. از نظر مفهومی بسیار ساده است، اما حتی برنامه های ساده نیز نیاز به مراقبت دارند. می خواستیم مطمئن شویم که وضعیت را بدتر نمی کنیم. تحقیقات قبل از ارسال به کاربران باید آزمایش شود. علاوه بر این، افزونه باید امضا شود، اما سیستم امضای افزونه ما غیرفعال بود، بنابراین باید راه حلی پیدا می‌کردیم.

در نهایت، هنگامی که ما تحقیقات را برای ارائه آماده کردیم، استقرار زمان برد. مرورگر هر ۶ ساعت یکبار به‌روزرسانی‌های نرماندی را بررسی می‌کند. همه رایانه ها همیشه روشن و متصل به اینترنت نیستند، بنابراین زمان لازم است تا رفع مشکل به کاربران سرایت کند.

مراحل پایانی

این تحقیق باید مشکل را برای اکثر کاربران برطرف کند، اما برای همه در دسترس نیست. برخی از کاربران به رویکرد خاصی نیاز دارند:

  • کاربرانی که تحقیق یا تله متری را غیرفعال کرده اند
  • کاربران نسخه اندروید (Fennec) که در آن تحقیق اصلاً پشتیبانی نمی شود
  • کاربران ساخت‌های سفارشی Firefox ESR در شرکت‌هایی که تله‌متری را نمی‌توان فعال کرد
  • کاربرانی که پشت پراکسی های MitM نشسته اند، زیرا سیستم نصب افزونه ما از پین کردن کلید استفاده می کند که با چنین پراکسی هایی کار نمی کند.
  • کاربران نسخه های قدیمی فایرفاکس که از تحقیق پشتیبانی نمی کنند

ما نمی‌توانیم کاری در مورد این دسته از کاربران انجام دهیم - آنها همچنان باید به نسخه جدید فایرفاکس به‌روزرسانی شوند، زیرا موارد قدیمی دارای آسیب‌پذیری‌های جدی بدون اصلاح هستند. می دانیم که برخی از افراد به دلیل اینکه می خواهند افزونه های قدیمی را اجرا کنند، روی نسخه های قدیمی فایرفاکس می مانند، اما بسیاری از افزونه های قدیمی قبلاً به نسخه های جدیدتر مرورگر منتقل شده اند. برای سایر کاربران، ما یک وصله ایجاد کرده ایم که گواهینامه جدیدی را نصب می کند. به عنوان نسخه رفع اشکال منتشر شد (یادداشت مترجم: فایرفاکس 66.0.5، بنابراین مردم آن را - به احتمال زیاد قبلاً دریافت کرده اند - از طریق کانال به روز رسانی معمولی دریافت خواهند کرد. اگر از یک ساخت سفارشی Firefox ESR استفاده می کنید، لطفاً با نگهدارنده خود تماس بگیرید.

ما درک می کنیم که این ایده آل نیست. در برخی موارد، کاربران داده های افزودنی را از دست می دهند (به عنوان مثال، داده های افزودنی کانتینرهای چند حساب).

این عارضه جانبی قابل اجتناب نیست، اما ما معتقدیم که در کوتاه مدت بهترین راه حل را برای اکثر کاربران انتخاب کرده ایم. در دراز مدت، ما به دنبال رویکردهای معماری پیشرفته تر دیگری خواهیم بود.

درسها

اول، تیم ما در کمتر از 12 ساعت پس از کشف مشکل، کار شگفت انگیزی را برای ایجاد و ارسال تعمیر انجام داد. به عنوان فردی که در جلسات شرکت می کردم، می توانم بگویم که در این شرایط سخت، مردم بسیار زحمت کشیدند و زمان بسیار کمی تلف شد.

بدیهی است که هیچ کدام از اینها اصلاً نباید اتفاق می افتاد. واضح است که ارزش این را دارد که فرآیندهای خود را برای کاهش احتمال وقوع چنین حوادثی تنظیم کنیم و اصلاح را آسانتر کنیم.

هفته آینده یک پس از مرگ رسمی و لیستی از تغییراتی که قصد انجام آن را داریم منتشر خواهیم کرد. در حال حاضر، من افکار خود را به اشتراک می گذارم. اول، باید راه بهتری برای نظارت بر وضعیت بمب ساعتی بالقوه وجود داشته باشد. ما باید مطمئن باشیم که در موقعیتی قرار نگیریم که یکی از آنها به طور ناگهانی کار کند. ما هنوز در حال بررسی جزئیات هستیم، اما حداقل باید همه این موارد را در نظر گرفت.

دوم، ما به مکانیزمی نیاز داریم که به‌روزرسانی‌ها را به سرعت به کاربران ارائه دهد، حتی زمانی که - به‌ویژه وقتی - همه چیز خراب شود. بسیار عالی بود که ما توانستیم از سیستم "تحقیق" استفاده کنیم، اما این یک ابزار ناقص است و عوارض جانبی ناخواسته ای دارد. به طور خاص، ما می دانیم که بسیاری از کاربران به روز رسانی خودکار را روشن کرده اند، اما ترجیح می دهند در تحقیقات شرکت نکنند (اعتراف می کنم، من هم آنها را خاموش کرده ام!). در عین حال، ما به راهی برای ارسال به‌روزرسانی‌ها به کاربران نیاز داریم، اما پیاده‌سازی فنی داخلی هرچه که باشد، کاربران باید بتوانند مشترک به‌روزرسانی‌ها (از جمله رفع مشکل) شوند، اما از هر چیز دیگری انصراف دهند. علاوه بر این، کانال به روز رسانی باید بیشتر از آنچه در حال حاضر است پاسخگو باشد. حتی در 6 می، هنوز کاربرانی بودند که از اصلاح یا نسخه جدید استفاده نکردند. قبلاً روی این مشکل کار شده است، اما اتفاقی که افتاد نشان داد که چقدر مهم است.

در نهایت، ما نگاهی دقیق‌تر به معماری امنیتی این افزونه خواهیم داشت تا مطمئن شویم که سطح مناسبی از امنیت را با حداقل خطر شکستن هر چیزی فراهم می‌کند.

هفته آینده ما به نتایج تجزیه و تحلیل دقیق تری از آنچه رخ داده است نگاه خواهیم کرد، اما در عین حال خوشحال خواهم شد که به سوالات از طریق ایمیل پاسخ دهم: [ایمیل محافظت شده]

منبع: linux.org.ru

اضافه کردن نظر