قمت مؤخرًا في GoTo Chicago بإلقاء محاضرة حول هذا الموضوع واعتقدت أنه سيكون من الجيد أن تكتب مقالًا يتضمن الاستنتاجات. يدور هذا المنشور حول سبب أهمية البرامج الثابتة المصدر للأمان.
مستويات الامتياز
في مكدس نموذجي ، لديك مستويات امتياز مختلفة.
- الحلقة 3. التطبيقات: الحد الأدنى من الامتيازات ، باستثناء صندوق الحماية في مساحة المستخدم ، والذي هو أكثر محدودية.
- Ring 0. Kernel: نواة نظام التشغيل ، في حالة وجود نظام تشغيل مفتوح المصدر ، ترى رمزها.
- حلقة −1. Hypervisor: مراقبة الجهاز الظاهري (VMM) ، يقوم بإنشاء وتشغيل الأجهزة الافتراضية. في برامج Hypervisor المفتوحة المصدر مثل Xen و KVM و bhyve وغيرها ، تشاهد الكود.
- حلقة −2. وضع إدارة النظام (SMM) ، UEFI core: رمز الملكية ، والمزيد حول هذا أدناه.
- حلقة −3. محرك التحكم: رمز الملكية ، وأكثر على هذا أدناه.
تشير الحلقات السلبية إلى مستويات لها امتيازات أكبر من الصفر.
مما سبق ، من الواضح أنه في الحلقات من -1 إلى 3 ، لدينا فرصة لاستخدام برنامج مفتوح المصدر ، إلى حد كبير رؤيته والتحكم فيه. بالنسبة للمستويات أسفل الحلقة -1 ، لدينا سيطرة أقل ، لكن الموقف يتحسن بفضل تطوير البرامج الثابتة مفتوحة المصدر والمجتمع.
هذا موقف متناقض: معظم الشفرات المغلقة لها معظم الامتيازات في نظامنا. هذه المفارقة يجب إصلاح البرامج الثابتة مفتوحة المصدر.حلقة −2. SMM ، UEFI الأساسية
تتحكم هذه الحلقة في جميع موارد وحدة المعالجة المركزية.
وضع إدارة النظام (SMM) غير مرئي لبقية المكدس الموجود فوقه. لديها نصف الأساسية. تستخدم في الأصل لإدارة الطاقة والتحكم في أجهزة النظام. يحتوي على الكثير من الشفرات الاحتكارية وهو المكان الذي يضيف فيه الموردون ميزات خاصة جديدة. يعالج أحداث النظام ، مثل أخطاء الذاكرة أو شرائح ، بالإضافة إلى مجموعة من المنطق الأخرى.
جوهر UEFI معقد للغاية ، مع ملايين أسطر التعليمات البرمجية. تطبيقات UEFI نشطة بعد التنزيل. تم تطوير جوهر على مبدأ "الأمن من خلال الغموض".
المواصفات مجنونة تمامًا إذا كنت تريد البحث عنها.
حلقة −3. محرك التحكم
الحلقة الأكثر تميزا. في حالة Intel (x86) ، هذا هو محرك إدارة Intel. يمكن لهذا النظام تشغيل العقد بهدوء والكتابة فوق الأقراص ، ويقوم kernel بتشغيل
Minix 3 ، بالإضافة إلى خادم ويب ومكدس الشبكة بالكامل. اتضح أنه بفضل هذا ، Minix هو نظام تشغيل سطح المكتب الأكثر شعبية. محرك التحكم لديه العديد من الوظائف. قد يستغرق الأمر لي يومًا كاملاً لإدراجها. إذا كنت تريد ، فهناك
العديد من الموارد اللازمة لدراسة أكثر تفصيلاً.
بين الحلقة and2 والحلقة in 3 في مجموعتنا ، يوجد ما لا يقل عن حبتين ونصف أخرى ، بالإضافة إلى مجموعة من التعقيدات الملكية وغير الضرورية. كل من هذه النوى لديها مداخن الشبكة الخاصة وخوادم الويب. يمكن أن يتغير الرمز نفسه ، ويستمر بعد إيقاف تشغيل الطاقة وإعادة التثبيت.
لدينا القليل جدًا من المعلومات حول ما تقوم به الكود فعليًا في هذه الحلقات ، وهذا أمر فظيع ، نظرًا لأن هذه الحلقات تتمتع بأكبر قدر من الامتيازات.انهم جميعا يستغل
لا ينبغي أن يفاجئ أي شخص بوجود ثغرات في الحلقات −2 و −3. عندما يتم العثور عليها ، فإنه أمر فظيع حقا. على سبيل المثال ، على الرغم من أنه يمكنك البحث عن أمثلة أخرى بنفسك ،
فقد كان هناك
خطأ في خادم الويب Intel Management Engine لم يكن المطور قد عرف عنه منذ سبع سنوات .
كيف يمكن تحسين الوضع؟
NERF: البرامج الثابتة منخفضة غير قابلة للتوسيع
NERF هو ما يعمل عليه المجتمع. الهدف هو جعل البرامج الثابتة أقل قدرة على إلحاق الأذى وجعل تصرفاتها أكثر وضوحًا. إنهم يسعون جاهدين لإزالة جميع مكونات وقت التشغيل ، ولكن لا يزال من الصعب القيام بذلك في Intel Management Engine. ولكن يمكنك إزالة خادم الويب ومكدس IP من هناك. يريد المطورون أيضًا إزالة مكدس UEFI IP وبرامج التشغيل الأخرى وإزالة ميزة البرامج الثابتة Intel Management / UEFI.
me_cleaner
مشروع لتنظيف Intel Management Engine إلى الحد الأدنى من الوظائف المطلوبة (
على GitHub ).
ش التمهيد و الأساسية
U- التمهيد و
coreboot هي البرامج الثابتة مفتوحة المصدر. أنها تتعامل مع تهيئة رقاقة و DRAM. تستخدم أجهزة Chromebook كلاهما ، و coreboot على x86 ، و u-boot على الباقي. هذه هي إحدى الخطوات التي
يبحثون عنها للتحميل .
تتمثل فلسفة تصميم Coreboot في
"جعل الحد الأدنى الضروري لاستخدام الأجهزة ، ثم نقل التحكم إلى برنامج آخر يسمى الحمولة النافعة " . في هذه الحالة ، فمن linuxboot.
linuxboot
يتعامل
Linuxboot مع برامج تشغيل الأجهزة ، ومكدس الشبكة ، ويوفر بيئة متعددة المهام متعددة المستخدمين. إنه مبني على نظام Linux ، بحيث يمكن تشغيل نواة واحدة على لوحات متعددة. لقد تم بالفعل اختبار نظام Linux بشكل كافٍ ويتبعه الكثير من الأشخاص ، حيث يتم استخدامه على نطاق واسع. من الأفضل استخدام نواة مفتوحة مع عدد كبير من "وحدات التحكم" أكثر من نواة ونصف أخرى ، مختلفة ومغلقة. هذا يعني أننا نقوم بتقليل سطح الهجوم بسبب عدد أقل من المتغيرات البرمجية والاعتماد على شفرة مفتوحة المصدر. يعمل نظام Linux على تحسين موثوقية التشغيل عن طريق استبدال برامج تشغيل البرامج الثابتة التي تم اختبارها بشكل سيء مع برامج تشغيل Linux المحسنة.
باستخدام kernel ، لدينا بالفعل أدوات للبرامج الثابتة: يمكن للمطورين استخدام الأدوات المألوفة عندما يحتاجون إلى كتابة منطق للتحقق من التوقيعات وتشفير القرص وما إلى ذلك. كل هذا بلغة حديثة ومختبرة ومدعومة وسهلة القراءة.
ش الجذر
u-root هو مجموعة أدوات و مساحة أداة تحميل المستخدمين من golang. يتم استخدامه كما initramfs لنظام التشغيل Linux kernel في نظام التشغيل linuxboot.
يقولون أن مكدس NERF قلل من وقت التمهيد بمقدار 20 مرة. ولكن هذا مقال أمان ، لذلك دعونا نعود إلى الأمان ...
يحسن مكدس NERF من رؤية العديد من المكونات التي كانت مملوكة بالكامل من قبل. ومع ذلك ، لا يزال لدى الأجهزة العديد من البرامج الثابتة الأخرى.
ماذا عن البرامج الثابتة الأخرى؟
نحتاج إلى برامج ثابتة مفتوحة لوحدة تحكم واجهة الشبكة (NIC) ومحركات الأقراص ذات الحالة الصلبة (SSD) ووحدة التحكم في الإدارة الأساسية (BMC).
مشروع Open Compute يقوم ببعض الأعمال على البرامج الثابتة
NIC 3.0 . سيكون من المثير للاهتمام معرفة ما يفعلونه.
هناك كل من
OpenBMC و
u-bmc لـ BMC . كتبت قليلا عنهم في
مقال سابق .
نحتاج إلى الحصول على جميع البرامج الثابتة مفتوحة المصدر لضمان الرؤية الكاملة للمكدس والتحقق فعليًا من حالة البرنامج على الجهاز.
جذور الثقة
الغرض من جذر الثقة هو التحقق من تثبيت البرنامج المناسب على كل مكون من مكونات الجهاز. يمكنك التأكد من عدم اختراق الجهاز. نظرًا لأن لدينا الآن الكثير من شفرة المصدر المغلقة في العديد من مناطق الجهاز ، فمن الصعب القيام بذلك. كيف تعرف حقًا أنه لا توجد ثغرات أمنية أو خلفية في البرامج الثابتة للمكون؟ لا مفر المصدر المفتوح هو شيء آخر.
يبدو أن كل سحابة وكل بائع يقدم جذر الثقة الخاص به. مايكروسوفت لديها
Cerberus ، جوجل لديها
تيتان ، أمازون لديها
نيترو . يبدو أنها تنطوي على ثقة صريحة في رمز الملكية (الرمز الذي لا نراه). هذا يترك شعور غريب.
ألن يكون من الأفضل استخدام المصدر المفتوح بالكامل؟ بعد ذلك يمكننا التحقق من أن الشفرة المترجمة من الكود المصدري هي نفسها التي تعمل على الجهاز أينما تم تثبيت البرنامج الثابت. ثم يمكننا التحقق من أن الجهاز في الحالة الصحيحة ، دون أدنى شك بأنه ضعيف أو به مستتر.هذا يجعلك تتساءل عن ما يستخدمه موفري السحابة الصغيرة مثل DigitalOcean أو Packet كجذر للثقة. سألت عن ذلك على تويتر ، لكن لم أحصل على إجابة لائقة ...
هناك محاضرة رائعة قام بها
بول مكميلان ومات كينج
حول سلامة المعدات عند القياس . يصف المؤلفون بالتفصيل كيفية حماية الأجهزة ، مع منح العملاء في الوقت نفسه إمكانية الوصول إليه. عندما يستلمون المعدات من العملاء ، يجب عليهم التأكد من أن كل شيء لم يتغير وبأنه لم يتم إخفاء أي مفاجآت في أي مكون.
يجب على جميع مزودي الخدمات السحابية التأكد من عدم تعرض الجهاز للخطر بعد قيام العميل بإجراء العمليات الحسابية عليه.
النظام الأساسي خطأ التسامح
ومع ذلك ، يبدو أن صانعي الرقائق لديهم نظرة خاصة. لدى Intel نظام
أساسي للبرامج الثابتة ، والشبكة لديها نظام أساسي للبرامج
الثابتة . يبدو أنها أكثر تركيزًا على إرشادات NIST
للتسامح مع الأخطاء في البرامج الثابتة للنظام الأساسي .
حاولت أن أسأل على الإنترنت من قام باستخدامها ، لكنني تلقيت بعض الردود ، لذلك إذا كنت تستخدم أجهزة مزودة بتكنولوجيا Platform Firmware Resiliency ، فأعلمني!
من
محاضرة OCP حول الابتكارات في برامج Intel الثابتة ، يبدو أن نظام Intel® Platform Filware Resilience (PFR) و Cerberus يسيران جنبًا إلى جنب. تستخدم Intel PFR لتنفيذ مبادئ شهادات Cerberus. شكرا
msw على التوضيح.
سيكون من الجيد تقليص مجموعة الأدوات المزخرفة للقيام بهذه المهمة. أود أيضًا أن أرى الكود المصدري لأرى بنفسك أنه آمن.
كيف تساعد؟
أتمنى أن تكون لديك فكرة عن المشاريع الموجودة لتطوير البرامج الثابتة مفتوحة المصدر ومدى أهميتها! إذا كنت تريد المساعدة ، فيرجى إخبار الآخرين. حاول استخدام منصات مفتوحة المصدر. أجهزة Chromebook هي مثال رائع ، بالإضافة إلى أجهزة
Purism . يمكنك أن تسأل مورديك عما يفعلونه لإطلاق البرامج الثابتة مفتوحة المصدر وضمان سلامة المعدات مع جذر الثقة. الطالب الذي يذاكر كثيرا سعيد! :)