التفاصيل الفنية للتعطيل الأخير للوظائف الإضافية في Firefox

ملحوظة المترجم: لراحة القراء، يتم تقديم التواريخ بتوقيت موسكو

لقد فاتنا مؤخرًا انتهاء صلاحية إحدى الشهادات المستخدمة لتوقيع الوظائف الإضافية. أدى ذلك إلى تعطيل الوظائف الإضافية للمستخدمين. والآن بعد أن تم حل المشكلة في الغالب، أود أن أشارككم تفاصيل ما حدث والعمل الذي تم إنجازه.

الخلفية: الإضافات والتوقيعات

على الرغم من أن العديد من الأشخاص يستخدمون المتصفح خارج الصندوق، إلا أن Firefox يدعم الامتدادات التي تسمى "الوظائف الإضافية". وبمساعدتهم، يضيف المستخدمون ميزات متنوعة إلى المتصفح. هناك أكثر من 15 ألف وظيفة إضافية: من حظر الإعلانات إلى إدارة مئات علامات التبويب.

يجب أن يكون لديك الوظائف الإضافية المثبتة توقيع إلكتروني، الذي يحمي المستخدمين من الوظائف الإضافية الضارة ويتطلب الحد الأدنى من مراجعة الوظائف الإضافية من قبل موظفي Mozilla. لقد قدمنا ​​هذا المطلب في عام 2015 لأننا كنا نشهده مشاكل خطيرة مع الإضافات الضارة.

كيف يعمل: تحتوي كل نسخة من Firefox على "شهادة جذر". يتم تخزين مفتاح هذا "الجذر" في وحدة أمان الأجهزة (HSM)دون الوصول إلى الشبكة. كل بضع سنوات، يتم توقيع "شهادة متوسطة" جديدة بهذا المفتاح، والذي يُستخدم عند توقيع الوظائف الإضافية. عندما يرسل أحد المطورين وظيفة إضافية، نقوم بإنشاء "شهادة نهاية" مؤقتة ونوقعها باستخدام شهادة متوسطة. يتم بعد ذلك توقيع الوظيفة الإضافية نفسها بالشهادة النهائية. تخطيطيا تبدو هكذا.

يرجى ملاحظة أن كل شهادة لها "الموضوع" (الذي صدرت له الشهادة) و"المصدر" (الذي أصدر الشهادة). في حالة الشهادة الجذرية، "الموضوع" = "المصدر"، أما بالنسبة للشهادات الأخرى، فإن مصدر الشهادة هو موضوع الشهادة الأصلية التي تم التوقيع عليها.

نقطة مهمة: يتم توقيع كل وظيفة إضافية بواسطة شهادة نهاية فريدة، ولكن غالبًا ما يتم توقيع شهادات النهاية هذه بنفس الشهادة المتوسطة.

ملاحظة المؤلف: الاستثناء هو الإضافات القديمة جدًا. في ذلك الوقت، تم استخدام الشهادات المتوسطة المختلفة.

تسببت هذه الشهادة المتوسطة في حدوث مشكلات: كل شهادة صالحة لفترة معينة. قبل هذه الفترة أو بعدها، تكون الشهادة غير صالحة ولن يستخدم المتصفح الوظائف الإضافية الموقعة بواسطة هذه الشهادة. للأسف الشهادة المتوسطة انتهت يوم 4 مايو الساعة 4 صباحا.

ولم تظهر العواقب على الفور. لا يتحقق Firefox من توقيعات الوظائف الإضافية المثبتة باستمرار، ولكن مرة واحدة تقريبًا كل 24 ساعة، ويكون وقت التحقق فرديًا لكل مستخدم. ونتيجة لذلك، واجه بعض الأشخاص مشاكل على الفور، بينما واجه آخرون مشاكل في وقت لاحق. لقد علمنا بالمشكلة لأول مرة في وقت انتهاء صلاحية الشهادة وبدأنا على الفور في البحث عن حل.

تقليل الضرر

وبمجرد أن أدركنا ما حدث، حاولنا منع الوضع من التفاقم.

أولاً، توقفوا عن قبول الإضافات الجديدة والتوقيع عليها. ليس هناك فائدة من استخدام شهادة منتهية الصلاحية لهذا الغرض. إذا نظرنا إلى الوراء، أود أن أقول أنه كان بإمكاننا ترك كل شيء كما كان. لقد استأنفنا الآن قبول المكملات الغذائية.

ثانيًا، أرسلوا على الفور إصلاحًا يمنع فحص التوقيعات بشكل يومي. وبالتالي، قمنا بحفظ هؤلاء المستخدمين الذين لم يتح لمتصفحهم الوقت الكافي للتحقق من الوظائف الإضافية خلال الـ XNUMX ساعة الماضية. لقد تم الآن سحب هذا الإصلاح ولم تعد هناك حاجة إليه.

عملية موازية

من الناحية النظرية، يبدو حل المشكلة بسيطًا: قم بإنشاء شهادة متوسطة صالحة جديدة وأعد تسجيل كل وظيفة إضافية. للأسف هذا لن ينجح:

  • لا يمكننا إعادة تسجيل 15 ألف وظيفة إضافية بسرعة مرة واحدة، فالنظام غير مصمم لمثل هذا الحمل
  • بعد أن نقوم بالتوقيع على الإضافات، يجب تسليم الإصدارات المحدثة للمستخدمين. يتم تثبيت معظم الوظائف الإضافية من خوادم Mozilla، لذلك سيجد Firefox التحديثات خلال الـ XNUMX ساعة القادمة، لكن بعض المطورين يقومون بتوزيع الوظائف الإضافية الموقعة من خلال قنوات خارجية، لذلك سيتعين على المستخدمين تحديث هذه الوظائف الإضافية يدويًا

وبدلاً من ذلك، حاولنا تطوير إصلاح يصل إلى جميع المستخدمين دون الحاجة إلى الكثير من الإجراءات أو عدم اتخاذ أي إجراء من جانبهم.

لقد توصلنا بسرعة كبيرة إلى استراتيجيتين رئيسيتين استخدمناهما بالتوازي:

  • قم بتحديث Firefox لتغيير فترة صلاحية الشهادة. سيؤدي هذا إلى جعل الوظائف الإضافية الموجودة تعمل بطريقة سحرية مرة أخرى، ولكن سيتطلب إصدار وشحن إصدار جديد من Firefox
  • أنشئ شهادة صالحة وأقنع Firefox بطريقة ما بقبولها بدلاً من الشهادة الحالية التي انتهت صلاحيتها

قررنا استخدام الخيار الأول أولاً، والذي بدا عمليًا تمامًا. وفي نهاية اليوم، أطلقوا إصلاحًا ثانيًا (شهادة جديدة)، والذي سنتحدث عنه لاحقًا.

استبدال الشهادة

وكما ذكرت أعلاه كان المطلوب:

  • إنشاء شهادة صالحة جديدة
  • تثبيته عن بعد في فايرفوكس

لفهم سبب نجاح ذلك، دعنا نلقي نظرة فاحصة على عملية التحقق من الوظيفة الإضافية. تأتي الوظيفة الإضافية نفسها كمجموعة من الملفات، بما في ذلك سلسلة من الشهادات المستخدمة للتوقيع. ونتيجة لذلك، يمكن التحقق من الوظيفة الإضافية إذا كان المتصفح يعرف شهادة الجذر، المضمنة في Firefox في وقت الإنشاء. ومع ذلك، كما نعلم بالفعل، انتهت صلاحية الشهادة المتوسطة، لذلك من المستحيل التحقق من الوظيفة الإضافية.

عندما يحاول Firefox التحقق من إحدى الوظائف الإضافية، فإن الأمر لا يقتصر على استخدام الشهادات الموجودة داخل الوظيفة الإضافية نفسها. وبدلاً من ذلك، يحاول المتصفح إنشاء سلسلة شهادات صالحة، بدءًا من الشهادة النهائية ويستمر حتى يصل إلى الجذر. في المستوى الأول نبدأ بالشهادة النهائية ثم نجد الشهادة التي يكون موضوعها جهة إصدار الشهادة النهائية (أي الشهادة المتوسطة). عادةً ما يتم توفير هذه الشهادة المتوسطة مع الوظيفة الإضافية، ولكن أي شهادة من مساحة تخزين المتصفح يمكن أيضًا أن تكون بمثابة هذه الشهادة المتوسطة. إذا تمكنا من إضافة شهادة صالحة جديدة إلى مخزن الشهادات عن بعد، فسيحاول Firefox استخدامها. الوضع قبل وبعد تثبيت شهادة جديدة.

بعد تثبيت الشهادة الجديدة، سيكون لدى Firefox خياران عند التحقق من صحة سلسلة الشهادات: استخدام الشهادة القديمة غير الصالحة (والتي لن تعمل) أو الشهادة الصالحة الجديدة (والتي ستعمل). ومن المهم أن تحتوي الشهادة الجديدة على نفس اسم الموضوع والمفتاح العام مثل الشهادة القديمة، وبالتالي فإن توقيعها على الشهادة النهائية سيكون صالحًا. يتميز Firefox بالذكاء الكافي لتجربة كلا الخيارين حتى يجد الخيار المناسب، وبالتالي يتم اختبار الوظائف الإضافية مرة أخرى. لاحظ أن هذا هو نفس المنطق الذي نستخدمه للتحقق من صحة شهادات TLS.

ملاحظة المؤلف: سيلاحظ القراء المطلعون على WebPKI أن الشهادات المشتركة تعمل بنفس الطريقة تمامًا.

إن الشيء العظيم في هذا الإصلاح هو أنه لا يتطلب منك إعادة تسجيل الوظائف الإضافية الموجودة. بمجرد أن يتلقى المتصفح الشهادة الجديدة، ستعمل جميع الوظائف الإضافية مرة أخرى. التحدي المتبقي هو تسليم الشهادة الجديدة للمستخدمين (تلقائيًا وعن بعد)، بالإضافة إلى جعل Firefox يعيد التحقق من الوظائف الإضافية المعطلة.

نورماندي ونظام البحث

ومن المفارقات أن هذه المشكلة تم حلها عن طريق إضافة خاصة تسمى "النظام". لإجراء الأبحاث، قمنا بتطوير نظام يسمى نورماندي والذي يقدم الأبحاث للمستخدمين. يتم إجراء هذه الدراسات تلقائيًا في المتصفح، كما تتمتع بوصول محسّن إلى واجهات برمجة التطبيقات الداخلية الخاصة بـ Firefox. يمكن للأبحاث إضافة شهادات جديدة إلى مخزن الشهادات.

ملاحظة المؤلف: نحن لا نضيف شهادة بأي امتيازات خاصة؛ تم توقيعه بواسطة شهادة الجذر، لذلك يثق بها Firefox. نقوم ببساطة بإضافته إلى مجموعة الشهادات التي يمكن للمتصفح استخدامها.

لذا فإن الحل هو إنشاء دراسة:

  • تثبيت الشهادة الجديدة التي أنشأناها للمستخدمين
  • إجبار المتصفح على إعادة فحص الوظائف الإضافية المعطلة حتى تعمل مرة أخرى

"ولكن مهلا،" ستقول، "الوظائف الإضافية لا تعمل، كيف يمكنني تشغيل وظيفة إضافية للنظام؟" دعونا نوقعها بشهادة جديدة!

تجميع كل ذلك معًا... لماذا يستغرق الأمر وقتًا طويلاً؟

لذا، الخطة: إصدار شهادة جديدة لتحل محل الشهادة القديمة، وإنشاء وظيفة إضافية للنظام وتثبيتها للمستخدمين عبر نورماندي. بدأت المشاكل، كما قلت، في 4 مايو الساعة 4:00، وبالفعل في الساعة 12:44 من نفس اليوم، بعد أقل من 9 ساعات، أرسلنا الإصلاح إلى نورماندي. استغرق الأمر من 6 إلى 12 ساعة أخرى حتى يصل إلى جميع المستخدمين. ليس سيئًا على الإطلاق، لكن الناس على تويتر يتساءلون لماذا لم نتمكن من التصرف بشكل أسرع.

أولاً، استغرق إصدار شهادة متوسطة جديدة بعض الوقت. كما ذكرت أعلاه، يتم تخزين مفتاح شهادة الجذر دون اتصال بالإنترنت في وحدة أمان الأجهزة. يعد هذا أمرًا جيدًا من الناحية الأمنية، حيث يتم استخدام الجذر نادرًا جدًا ويجب حمايته بشكل موثوق، ولكنه غير مريح بعض الشيء عندما تحتاج إلى التوقيع على شهادة جديدة بشكل عاجل. اضطر أحد مهندسينا إلى السفر إلى منشأة تخزين HSM. ثم كانت هناك محاولات فاشلة لإصدار الشهادة الصحيحة، وكانت كل محاولة تكلف ساعة أو ساعتين من الاختبار.

ثانيا، استغرق تطوير الوظيفة الإضافية للنظام بعض الوقت. من الناحية النظرية، فهو بسيط للغاية، ولكن حتى البرامج البسيطة تتطلب رعاية. أردنا التأكد من أننا لم نجعل الوضع أسوأ. يجب اختبار الأبحاث قبل إرسالها إلى المستخدمين. بالإضافة إلى ذلك، يجب توقيع الوظيفة الإضافية، ولكن تم تعطيل نظام توقيع الوظيفة الإضافية لدينا، لذلك كان علينا العثور على حل بديل.

أخيرًا، بمجرد أن أصبح البحث جاهزًا للتسليم، استغرق النشر وقتًا. يتحقق المتصفح من تحديثات نورماندي كل 6 ساعات. لا تكون جميع أجهزة الكمبيوتر قيد التشغيل ومتصلة بالإنترنت دائمًا، لذلك سيستغرق الأمر بعض الوقت حتى ينتشر الإصلاح إلى المستخدمين.

الخطوات النهائية

ومن المفترض أن يحل البحث المشكلة لدى معظم المستخدمين، ولكنه ليس متاحًا للجميع. يحتاج بعض المستخدمين إلى نهج خاص:

  • المستخدمين الذين قاموا بتعطيل البحث أو القياس عن بعد
  • لمستخدمي نسخة أندرويد (Fennec)، حيث لا يدعم البحث على الإطلاق
  • مستخدمي الإصدارات المخصصة من Firefox ESR في المؤسسات حيث لا يمكن تمكين القياس عن بعد
  • المستخدمون الذين يجلسون خلف وكلاء MitM، نظرًا لأن نظام التثبيت الإضافي الخاص بنا يستخدم تثبيت المفاتيح، وهو ما لا يعمل مع هؤلاء الوكلاء
  • مستخدمي الإصدارات القديمة من Firefox التي لا تدعم البحث

لا يمكننا أن نفعل أي شيء بشأن الفئة الأخيرة من المستخدمين - فلا يزال يتعين عليهم التحديث إلى الإصدار الجديد من Firefox، لأن الإصدارات القديمة بها نقاط ضعف خطيرة لم يتم إصلاحها. نحن نعلم أن بعض الأشخاص يستمرون في استخدام الإصدارات الأقدم من Firefox لأنهم يريدون تشغيل الوظائف الإضافية القديمة، ولكن تم بالفعل نقل العديد من الوظائف الإضافية القديمة إلى إصدارات أحدث من المتصفح. بالنسبة للمستخدمين الآخرين، قمنا بتطوير تصحيح يقوم بتثبيت شهادة جديدة. تم إصداره كإصدار لإصلاح الأخطاء (ملاحظة المترجم: فايرفوكس 66.0.5)، لذلك سيحصل عليه الأشخاص - على الأرجح حصلوا عليه بالفعل - من خلال قناة التحديث المنتظمة. إذا كنت تستخدم إصدارًا مخصصًا من Firefox ESR، فيرجى الاتصال بالمشرف لديك.

ونحن نفهم أن هذا ليس مثاليا. في بعض الحالات، فقد المستخدمون بيانات الوظائف الإضافية (على سبيل المثال، بيانات الوظائف الإضافية حاويات متعددة الحسابات).

لا يمكن تجنب هذا التأثير الجانبي، لكننا نعتقد أننا اخترنا الحل الأفضل لمعظم المستخدمين على المدى القصير. وعلى المدى الطويل، سوف نبحث عن أساليب معمارية أخرى أكثر تقدما.

الدروس

أولاً، قام فريقنا بعمل رائع في إنشاء الإصلاح وشحنه في أقل من 12 ساعة بعد اكتشاف المشكلة. وباعتباري أحد الذين حضروا الاجتماعات، أستطيع أن أقول إنه في هذا الوضع الصعب، عمل الناس بجد ولم يضيع سوى القليل من الوقت.

ومن الواضح أنه لا ينبغي أن يحدث أي من هذا على الإطلاق. ومن الواضح أنه من المفيد تعديل عملياتنا لتقليل احتمالية وقوع مثل هذه الحوادث وتسهيل عملية العلاج.

سننشر الأسبوع المقبل تقريرًا رسميًا بعد الوفاة وقائمة بالتغييرات التي نعتزم إجراءها. في الوقت الحالي، سأشارك أفكاري. أولاً، لا بد من وجود طريقة أفضل لمراقبة حالة القنبلة الموقوتة المحتملة. وعلينا أن نتأكد من أننا لن نجد أنفسنا في موقف يعمل فيه أحدهم فجأة. ما زلنا نعمل على التفاصيل، ولكن على الأقل، من الضروري أن نأخذ في الاعتبار كل هذه الأمور.

ثانيًا، نحتاج إلى آلية لتوصيل التحديثات للمستخدمين بسرعة، حتى عندما يفشل كل شيء آخر، خاصة عندما يفشل. كان من الرائع أننا تمكنا من استخدام نظام "البحث"، لكنه أداة غير كاملة ولها بعض الآثار الجانبية غير المرغوب فيها. على وجه الخصوص، نحن نعلم أن العديد من المستخدمين لديهم التحديثات التلقائية قيد التشغيل، لكنهم يفضلون عدم المشاركة في البحث (أعترف أنني قمت بإيقاف تشغيلها أيضًا!). في الوقت نفسه، نحتاج إلى طريقة لإرسال التحديثات إلى المستخدمين، ولكن مهما كان التنفيذ الفني الداخلي، يجب أن يكون المستخدمون قادرين على الاشتراك في التحديثات (بما في ذلك الإصلاحات السريعة) ولكن مع إلغاء الاشتراك في كل شيء آخر. بالإضافة إلى ذلك، يجب أن تكون قناة التحديث أكثر استجابة مما هي عليه حاليًا. حتى في 6 مايو، لا يزال هناك مستخدمون لم يستفيدوا من الإصلاح أو الإصدار الجديد. لقد تم العمل على هذه المشكلة بالفعل، لكن ما حدث أظهر مدى أهميتها.

أخيرًا، سنلقي نظرة فاحصة على بنية أمان الوظيفة الإضافية للتأكد من أنها توفر المستوى المناسب من الأمان مع الحد الأدنى من خطر كسر أي شيء.

سنلقي نظرة في الأسبوع المقبل على نتائج تحليل أكثر شمولاً لما حدث، ولكن في هذه الأثناء سأكون سعيدًا بالإجابة على الأسئلة عبر البريد الإلكتروني: [البريد الإلكتروني محمي]

المصدر: linux.org.ru

إضافة تعليق