حذاء شرودنغر الموثوق به. Intel Boot Guard

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

بالمناسبة ، تستند المقالة إلى التقارير "On Guard for Rootkits: Intel BootGuard" من المؤتمر ليالي الصفر 2016 والجلسة 29 DefCon روسيا (كلا العرضين هنا).

برنامج ثابت لمنصة كمبيوتر ذات بنية Intel 64

بادئ ذي بدء ، دعنا نجيب على السؤال: ما هي البرامج الثابتة لمنصة كمبيوتر حديثة بهندسة Intel 64؟ بالطبع ، UEFI BIOS. لكن هذه الإجابة لن تكون دقيقة. دعونا نلقي نظرة على الشكل الذي يظهر نسخة سطح المكتب (الكمبيوتر المحمول) من هذه البنية.

حذاء شرودنغر الموثوق به. Intel Boot Guard
الأساس هو الرابط:

  • المعالج (وحدة المعالجة المركزية ، وحدة المعالجة المركزية) ، والذي يحتوي ، بالإضافة إلى النوى الرئيسية ، على نواة رسومات مدمجة (ليس في جميع الطرز) ووحدة تحكم في الذاكرة (IMC ، وحدة تحكم الذاكرة المدمجة) ؛
  • مجموعة شرائح (PCH ، لوحة تحكم النظام الأساسي) ، تحتوي على وحدات تحكم متنوعة للتفاعل مع الأجهزة الطرفية وإدارة الأنظمة الفرعية. من بينها محرك إدارة Intel (ME) سيئ السمعة ، والذي يحتوي أيضًا على برنامج ثابت (برنامج Intel ME الثابت).

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

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

  • UEFI BIOS ؛
  • البرامج الثابتة لـ ACPI EC (ظهرت منطقة منفصلة مع البنية الدقيقة للمعالج Skylake (2015) ، ولكننا لم نر أمثلة على استخدامها حتى الآن ، لذلك لا تزال البرامج الثابتة لوحدة التحكم المضمنة جزءًا من UEFI BIOS) ؛
  • إنتل مي البرامج الثابتة ؛
  • التكوين (عنوان MAC ، إلخ) لمحول شبكة GbE (Gigabit Ethernet) المدمج ؛
  • واصفات الفلاش - المنطقة الرئيسية لذاكرة الفلاش ، والتي تحتوي على مؤشرات لمناطق أخرى ، بالإضافة إلى أذونات الوصول إليها.

حذاء شرودنغر الموثوق به. Intel Boot Guard
يتم التعامل مع التمايز في الوصول إلى المناطق (وفقًا للأذونات المحددة) بواسطة مدير ناقل SPI - وحدة التحكم SPI المدمجة في مجموعة الشرائح ، والتي يتم من خلالها الوصول إلى هذه الذاكرة. إذا تم تعيين الأذونات على القيم الموصى بها (لأسباب أمنية) من قبل Intel ، فحينئذٍ يكون لكل مستخدم فلاش SPI وصول كامل (قراءة / كتابة) إلى منطقته فقط. أما البقية فهي إما للقراءة فقط أو لا يمكن الوصول إليها. الحقيقة المعروفة: في العديد من الأنظمة ، تتمتع وحدة المعالجة المركزية بوصول كامل إلى UEFI BIOS و GbE ، والوصول للقراءة فقط إلى واصفات الفلاش ، ولا يوجد وصول إلى منطقة Intel ME على الإطلاق. لماذا كثير وليس كل شيء؟ ما هو موصى به اختياري. سنخبرك بالمزيد لاحقًا في المقالة.

آليات حماية البرامج الثابتة لمنصة الكمبيوتر من التعديل

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

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

ويتم فحص البرامج الثابتة لـ ACPI EC ، كقاعدة عامة ، للتأكد من سلامتها فقط. ومع ذلك ، نظرًا لحقيقة أن هذا الثنائي مضمن في UEFI BIOS ، فإنه يخضع دائمًا لنفس آليات الحماية التي يستخدمها UEFI BIOS. دعنا نتحدث عنها.

يمكن تقسيم هذه الآليات إلى فئتين.

حماية الكتابة إلى منطقة UEFI BIOS

  1. الحماية المادية لمحتويات ذاكرة فلاش SPI مع وصلة حماية ضد الكتابة ؛
  2. حماية إسقاط منطقة UEFI BIOS في مساحة عنوان وحدة المعالجة المركزية باستخدام سجلات PRx لمجموعة الشرائح ؛
  3. يحاول الحظر الكتابة إلى منطقة UEFI BIOS عن طريق إنشاء مقاطعة SMI المقابلة ومعالجتها عن طريق تعيين بتات BIOS_WE / BLE و SMM_BWP في سجلات مجموعة الشرائح ؛
  4. إصدار أكثر تقدمًا من هذه الحماية هو Intel BIOS Guard (PFAT).

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

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

التحقق من مصادقة UEFI BIOS

عندما نتحدث عن تقنيات التمهيد الموثوقة ، فإن أول ما يتبادر إلى الذهن هو التمهيد الآمن. ومع ذلك ، من الناحية المعمارية ، تم تصميمه لمصادقة المكونات الخارجية لـ UEFI BIOS (برامج التشغيل ، برامج التحميل ، وما إلى ذلك) ، وليس البرنامج الثابت نفسه.

لذلك ، نفذت Intel في SoCs مع الهندسة الدقيقة Bay Trail (2012) نظام التمهيد الآمن غير القابل للتحويل (التمهيد المتحقق منه) ، والذي لا علاقة له بتقنية Secure Boot المذكورة أعلاه. في وقت لاحق (2013) ، تم تحسين هذه الآلية ، وتحت اسم Intel Boot Guard ، تم إصدارها لأجهزة الكمبيوتر المكتبية مع بنية Haswell المصغرة.

قبل وصف Intel Boot Guard ، دعنا نلقي نظرة على بيئات التنفيذ في بنية Intel 64 ، والتي تشكل مجتمعة جذور الثقة في تقنية التمهيد الموثوق بها.

إنتل وحدة المعالجة المركزية

يقترح Cap أن المعالج هو بيئة التنفيذ الرئيسية في معمارية Intel 64. لماذا هو أيضًا أصل الثقة؟ اتضح أن امتلاك العناصر التالية هو ما يجعلها كذلك:

  • Microcode ROM هي ذاكرة غير متطايرة وغير قابلة لإعادة الكتابة لتخزين الرمز الصغير. يُعتقد أن الرمز الصغير هو تنفيذ نظام تعليمات المعالج وفقًا لأبسط التعليمات. يحدث في الرمز الصغير أيضًا البق. لذلك في BIOS ، يمكنك العثور على ثنائيات مع تحديثات الرمز الصغير (يتم فرضها في وقت التمهيد ، لأنه لا يمكن الكتابة فوق ROM). يتم تشفير محتوى هذه الثنائيات ، مما يعقد التحليل إلى حد كبير (وبالتالي ، فإن المحتوى المحدد للشفرة الصغيرة معروف فقط لمن يطورونه) ، ويتم توقيعه للتحكم في السلامة والأصالة ؛
  • مفتاح AES لفك تشفير محتويات تحديثات الرمز الصغير ؛
  • تجزئة المفتاح العام RSA الذي يتحقق من توقيع تحديثات الرمز الصغير ؛
  • تجزئة المفتاح العام RSA الذي يتحقق من توقيع وحدات كود ACM المطورة من قبل Intel (وحدة رمز مصادقة) والتي يمكن لوحدة المعالجة المركزية تشغيلها قبل بدء BIOS (مرحبًا الرمز الصغير) أو أثناء تشغيله ، عند حدوث بعض الأحداث.

إنتل مي

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

على الرغم من التخفي ، فإن Intel ME هي أيضًا أصل الثقة ، لأنها تمتلك:

  • ME ROM - ذاكرة غير متطايرة وغير قابلة لإعادة الكتابة (لم يتم توفير طريقة تحديث) ، تحتوي على رمز البدء ، بالإضافة إلى تجزئة SHA256 للمفتاح العام RSA ، والتي تتحقق من توقيع البرنامج الثابت Intel ME ؛
  • مفتاح AES لتخزين المعلومات السرية ؛
  • الوصول إلى مجموعة من الصمامات (FPFs ، الصمامات القابلة للبرمجة الميدانية) المدمجة في مجموعة الشرائح للتخزين الدائم لبعض المعلومات ، بما في ذلك المعلومات المحددة من قبل بائع نظام الكمبيوتر.

إنتل بوت جارد 1.x

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

لذا ، فإن Intel Boot Guard (BG) هي تقنية مصادقة UEFI BIOS مدعومة بالأجهزة. إذا حكمنا من خلال الوصف الصغير في الكتاب [تم الكشف عن تقنية الأمان المضمنة في النظام الأساسي ، أو الفصل التمهيد مع النزاهة ، أو عدم التمهيد] ، فإنها تعمل كسلسلة تمهيد موثوقة. والرابط الأول فيه هو رمز التمهيد (الرمز الصغير) داخل وحدة المعالجة المركزية ، والذي يتم تشغيله بواسطة حدث RESET (يجب عدم الخلط بينه وبين ناقل RESET في BIOS!). تعثر وحدة المعالجة المركزية على وحدة رمز (Intel BG startup ACM) تم تطويرها وتوقيعها بواسطة Intel على ذاكرة فلاش SPI ، وتحميلها في ذاكرة التخزين المؤقت الخاصة بها ، والتحقق منها (تمت الإشارة بالفعل أعلاه إلى أن وحدة المعالجة المركزية لديها تجزئة مفتاح عام يتحقق من توقيع ACM ) ويبدأ.

حذاء شرودنغر الموثوق به. Intel Boot Guard

وحدة الكود هذه مسؤولة عن التحقق من جزء صغير من UEFI BIOS - كتلة التمهيد الأولية (IBB) ، والتي بدورها تحتوي على وظيفة للتحقق من الجزء الرئيسي من UEFI BIOS. وبالتالي ، تتيح لك Intel BG التحقق من صحة BIOS قبل تشغيل نظام التشغيل (والذي يمكن إجراؤه تحت إشراف تقنية Secure Boot).

توفر تقنية Intel BG وضعين للتشغيل (أحدهما لا يتداخل مع الآخر ، أي يمكن تمكين كلا الوضعين على النظام ، ويمكن تعطيل كليهما).

التمهيد المقاس

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

يحتوي TPM على PCRs (سجلات تكوين النظام الأساسي) ، والتي تسجل نتيجة عملية التجزئة وفقًا للصيغة:

حذاء شرودنغر الموثوق به. Intel Boot Guard

أولئك. تعتمد قيمة PCR الحالية على القيمة السابقة ، ويتم إعادة تعيين هذه السجلات فقط عندما يكون النظام هو RESET.

وبالتالي ، في وضع MB ، في وقت ما ، تعكس تقارير تفاعل البوليميراز المتسلسل معرفًا فريدًا (ضمن قدرات عملية التجزئة) للرمز أو البيانات التي تم "قياسها". يمكن استخدام قيم PCR في عملية تشفير بعض البيانات (TPM_Seal). بعد ذلك ، لن يكون فك التشفير (TPM_Unseal) ممكنًا إلا إذا لم تتغير قيم PCR نتيجة التحميل (أي ، لم يتم تعديل مكون "مُقاس" واحد).

تم التحقق من التمهيد

الأمر الأكثر رعبًا بالنسبة لأولئك الذين يرغبون في تعديل UEFI BIOS هو وضع التحقق من التمهيد (VB) ، حيث يتحقق كل مكون من مكونات التمهيد بشكل مشفر من سلامة وصحة المكون التالي. وفي حالة حدوث خطأ في التحقق (أحد الأمور التالية):

  • إيقاف التشغيل بمهلة من دقيقة واحدة إلى 1 دقيقة (بحيث يكون لدى المستخدم الوقت لفهم سبب عدم تشغيل جهاز الكمبيوتر الخاص به ، وإذا أمكن ، سيحاول استعادة BIOS) ؛
  • الإغلاق الفوري (حتى لا يكون لدى المستخدم الوقت لفهمه وفعله) ؛
  • استمرار العمل بوجه مستقيم (في حالة عدم وجود وقت للأمان ، لأن هناك أشياء أكثر أهمية يجب القيام بها).

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

بالإضافة إلى التكوين ، ينشئ البائع مفتاحين RSA 2048 وينشئ هيكلين للبيانات (كما هو موضح في الشكل):

  1. بيان مفتاح جذر البائع (KEYM ، بيان مفتاح جذر OEM) ، والذي يضع SVN (رقم إصدار الأمان) لهذا البيان ، وتجزئة SHA256 للمفتاح العام للبيان التالي ، المفتاح العام RSA (أي الجزء العام من مفتاح جذر البائع) للتحقق من توقيع هذا البيان والتوقيع نفسه ؛
  2. بيان IBB (IBBM ، بيان كتلة التمهيد الأولي) ، الذي يضع SVN لهذا البيان ، وتجزئة SHA256 لـ IBB ، والمفتاح العام للتحقق من توقيع هذا البيان ، والتوقيع نفسه.

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

حذاء شرودنغر الموثوق به. Intel Boot Guard

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

في الواقع ، توفر Intel بالتالي للبائع فرصة استخدام مفاتيح IBB مختلفة لخطوط إنتاج مختلفة وواحد كجذر. إذا تم تسريب الجزء الخاص من مفتاح IBB (الذي يوقع على البيان الثاني) ، فسيؤثر الحادث على خط إنتاج واحد فقط وحتى يقوم البائع بإنشاء زوج جديد وتمكين البيانات المعاد حسابها في تحديث BIOS التالي.

ولكن إذا تم اختراق مفتاح الجذر (الذي تم من خلاله التوقيع على البيان الأول) ، فلن يكون من الممكن استبداله ، ولن يتم توفير إجراء الإلغاء. تمت برمجة تجزئة الجزء العام من هذا المفتاح في FPFs مرة واحدة وإلى الأبد.

تكوين Intel Boot Guard

الآن دعنا نلقي نظرة فاحصة على تكوين Intel BG وعملية إنشائه. إذا نظرت إلى علامة التبويب المقابلة في واجهة المستخدم الرسومية لأداة Flash Image Tool من Intel System Tool Kit (STK) ، ستلاحظ أن تكوين Intel BG يتضمن تجزئة للجزء العام من مفتاح جذر البائع ، وهما زوجان غامضان القيم ، وما إلى ذلك. ملف تعريف Intel BG.

حذاء شرودنغر الموثوق به. Intel Boot Guard

هيكل هذا الملف الشخصي:

typedef struct BG_PROFILE
{
	unsigned long Force_Boot_Guard_ACM : 1;
	unsigned long Verified_Boot : 1;
	unsigned long Measured_Boot : 1;
	unsigned long Protect_BIOS_Environment : 1;
	unsigned long Enforcement_Policy : 2; // 00b – do nothing
                                              // 01b – shutdown with timeout
                                              // 11b – immediate shutdown
	unsigned long : 26;
};

بشكل عام ، يعد تكوين Intel BG كيانًا مرنًا للغاية. ضع في اعتبارك ، على سبيل المثال ، علامة Force_Boot_Guard_ACM. عندما يتم مسحه ، إذا لم يتم العثور على BG startup ACM على فلاش SPI ، فلن يحدث تمهيد موثوق به. سيكون غير جدير بالثقة.

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

اترك أشياء كهذه للبائعين ...

توفر واجهة المستخدم الرسومية للأداة الملفات الشخصية "الجاهزة" التالية:

عدد
نظام الحكم
وصف

0
No_FVME
تم تعطيل تقنية Intel BG

1
VE
تم تمكين وضع VB ، إيقاف التشغيل بواسطة المهلة

2
VME
يتم تمكين كلا الوضعين (VB و MB) ، ويتم إيقاف التشغيل بواسطة المهلة

3
VM
يتم تمكين كلا الوضعين ، دون إيقاف تشغيل النظام

4
FVE
تمكين وضع VB ، الاغلاق الفوري

5
FVME
كلا الوضعين ممكن ، الاغلاق الفوري

كما ذكرنا سابقًا ، يجب كتابة تكوين Intel BG مرة واحدة وإلى الأبد من قبل بائع النظام في مجموعة شرائح الصمامات (FPFs) - تخزين معلومات الأجهزة الصغيرة (وفقًا للمعلومات التي لم يتم التحقق منها ، 256 بايت فقط) داخل مجموعة الشرائح ، والتي يمكن برمجتها من الخارج من منشآت إنتاج Intel (ولهذا السبب برمجة ميدانية الصمامات).

إنه رائع لتخزين التكوين للأسباب التالية:

  • يحتوي على منطقة تخزين بيانات قابلة للبرمجة لمرة واحدة (فقط حيث يتم كتابة تكوين Intel BG) ؛
  • يستطيع Intel ME فقط قراءته وبرمجته.

لذلك ، من أجل ضبط التكوين لتقنية Intel BG على نظام معين ، يقوم البائع بما يلي أثناء الإنتاج:

  1. باستخدام أداة Flash Image Tool (من Intel STK) ، يُنشئ صورة برنامج ثابت بتكوين Intel BG كمتغيرات داخل منطقة Intel ME (ما يسمى بالمرآة المؤقتة لـ FPFs) ؛
  2. باستخدام أداة برمجة الفلاش (من Intel STK) ، يكتب هذه الصورة إلى ذاكرة فلاش SPI للنظام ويغلق ما يسمى ب. وضع التصنيع (في هذه الحالة ، يتم إرسال الأمر المقابل إلى Intel ME).

نتيجة لهذه العمليات ، ستلتزم Intel ME بالقيم المعطاة لـ FPFs من المرآة لـ FPFs في منطقة الشرق الأوسط ، وتعيين الأذونات في واصفات فلاش SPI إلى القيم التي أوصت بها Intel (الموضحة في بداية المادة) وتنفيذ إعادة تعيين النظام.

تحليل تنفيذ Intel Boot Guard

من أجل تحليل تطبيق هذه التقنية على مثال محدد ، قمنا بفحص الأنظمة التالية بحثًا عن آثار لتقنية Intel BG:

نظام
لاحظ

جيجابايت GA-H170-D3H
Skylake ، هناك دعم

جيجابايت GA-Q170-D3H
Skylake ، هناك دعم

جيجابايت GA-B150-HD3
Skylake ، هناك دعم

ام اس اي H170A جيمنج برو
Skylake ، لا يوجد دعم

لينوفو ثينك باد شنومكس
Skylake ، الدعم المتاح ، التكنولوجيا الممكنة

لينوفو اليوغا شنومكس برو
هاسويل ، لا يوجد دعم

Lenovo U330p
هاسويل ، لا يوجد دعم

"الدعم" يعني وجود وحدة Intel BG startup ACM ، والقوائم المذكورة أعلاه ، والرمز المقابل في BIOS ، أي تطبيقات للتحليل.

كمثال ، لنأخذ ذلك الذي تم تنزيله من المكتب. صورة موقع البائع لذاكرة فلاش SPI لـ Gigabyte GA-H170-D3H (الإصدار F4).

ROM تمهيد وحدة المعالجة المركزية Intel

بادئ ذي بدء ، دعنا نتحدث عن إجراءات المعالج إذا تم تمكين تقنية Intel BG.

لم يكن من الممكن العثور على عينات من الرمز الصغير الذي تم فك تشفيره ، وبالتالي ، فإن كيفية تنفيذ الإجراءات الموضحة أدناه (في الرمز الصغير أو في الأجهزة) هي سؤال مفتوح. ومع ذلك ، فإن حقيقة أن معالجات Intel الحديثة "يمكنها" تنفيذ هذه الإجراءات هي حقيقة واقعة.

بعد الخروج من حالة RESET ، يقوم المعالج (الذي تم تعيين محتويات ذاكرة الفلاش في مساحة العنوان الخاصة به بالفعل) بالعثور على FIT (جدول واجهة البرنامج الثابت). من السهل العثور عليها ، المؤشر إليها مكتوب على العنوان FFFF FFC0h.

حذاء شرودنغر الموثوق به. Intel Boot Guard
في هذا المثال ، يحتوي هذا العنوان على القيمة FFD6 9500h. بالانتقال إلى هذا العنوان ، يرى المعالج جدول FIT ، ومحتوياته مقسمة إلى سجلات. المدخل الأول هو عنوان الهيكل التالي:

typedef struct FIT_HEADER
{
	char           Tag[8];     // ‘_FIT_   ’
	unsigned long  NumEntries; // including FIT header entry
	unsigned short Version;    // 1.0
	unsigned char  EntryType;  // 0
	unsigned char  Checksum;
};

حذاء شرودنغر الموثوق به. Intel Boot Guard
لسبب غير معروف ، لا يتم دائمًا حساب المجموع الاختباري في هذه الجداول (يُترك الحقل فارغًا).

تشير الإدخالات المتبقية إلى العديد من الثنائيات التي يجب تحليلها / تنفيذها قبل تنفيذ BIOS ، أي قبل التبديل إلى متجه RESET القديم (FFFF FFF0h). هيكل كل إدخال كالتالي:

typedef struct FIT_ENTRY
{
	unsigned long  BaseAddress;
	unsigned long  : 32;
	unsigned long  Size;
	unsigned short Version;     // 1.0
	unsigned char  EntryType;
	unsigned char  Checksum;
};

حذاء شرودنغر الموثوق به. Intel Boot Guard
يشير حقل EntryType إلى نوع الكتلة التي يشير إليها هذا الإدخال. نعرف عدة أنواع:

enum FIT_ENTRY_TYPES
{
	FIT_HEADER = 0,
	MICROCODE_UPDATE,
	BG_ACM,
	BIOS_INIT = 7,
	TPM_POLICY,
	BIOS_POLICY,
	TXT_POLICY,
	BG_KEYM,
	BG_IBBM
};

من الواضح الآن أن أحد الإدخالات يشير إلى موقع برنامج Intel BG startup ACM الثنائي. يعتبر هيكل رأس هذا الثنائي نموذجيًا لوحدات التعليمات البرمجية التي طورتها Intel (ACMs ، تحديثات الرمز الصغير ، أقسام رمز Intel ME ، ...).

typedef struct BG_ACM_HEADER
{
	unsigned short ModuleType;     // 2
	unsigned short ModuleSubType;  // 3
	unsigned long  HeaderLength;   // in dwords
	unsigned long  : 32;
	unsigned long  : 32;
	unsigned long  ModuleVendor;   // 8086h
	unsigned long  Date;           // in BCD format
	unsigned long  TotalSize;      // in dwords
	unsigned long  unknown1[6];
	unsigned long  EntryPoint;
	unsigned long  unknown2[16];
	unsigned long  RsaKeySize;     // in dwords
	unsigned long  ScratchSize;    // in dwords
	unsigned char  RsaPubMod[256];
	unsigned long  RsaPubExp;
	unsigned char  RsaSig[256];
};

حذاء شرودنغر الموثوق به. Intel Boot Guard
يقوم المعالج بتحميل هذا الملف الثنائي في ذاكرة التخزين المؤقت الخاصة به ، والتحقق منه وتشغيله.

بدء تشغيل Intel BG ACM

نتيجة لتحليل عمل ACM ، أصبح من الواضح أنها تقوم بما يلي:

  • يتلقى من Intel ME تكوين Intel BG المكتوب على فتائل مجموعة الشرائح (FPFs) ؛
  • يجد بيانات KEYM و IBBM ، ويتحقق منها.

للعثور على هذه القوائم ، تستخدم ACM أيضًا جدول FIT ، الذي يحتوي على نوعين من الإدخالات للإشارة إلى هذه الهياكل (انظر FIT_ENTRY_TYPES أعلاه).

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

typedef struct KEY_MANIFEST
{
	char           Tag[8];          // ‘__KEYM__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned char  : 8;             // 1
	unsigned short : 16;            // 0Bh
	unsigned short : 16;            // 20h == hash size?
	unsigned char  IbbmKeyHash[32]; // SHA256 of an IBBM public key
	BG_RSA_ENTRY   OemRootKey;
};

typedef struct BG_RSA_ENTRY
{
	unsigned char  : 8;             // 10h
	unsigned short : 16;            // 1
	unsigned char  : 8;             // 10h
	unsigned short RsaPubKeySize;   // 800h
	unsigned long  RsaPubExp;
	unsigned char  RsaPubKey[256];
	unsigned short : 16;            // 14
	unsigned char  : 8;             // 10h
	unsigned short RsaSigSize;      // 800h
	unsigned short : 16;            // 0Bh
	unsigned char  RsaSig[256];
};

حذاء شرودنغر الموثوق به. Intel Boot Guard
للتحقق من المفتاح العام لمفتاح OEM الجذر ، نتذكر أنه يتم استخدام تجزئة SHA256 من الصمامات ، والتي تم استلامها بالفعل في هذه اللحظة من Intel ME.

دعنا ننتقل إلى البيان الثاني. يتكون من ثلاثة هياكل:

typedef struct IBB_MANIFEST
{
	ACBP Acbp;         // Boot policies
	IBBS Ibbs;         // IBB description
	IBB_DESCRIPTORS[];
	PMSG Pmsg;         // IBBM signature
};

الأول يحتوي على بعض الثوابت:

typedef struct ACBP
{
	char           Tag[8];          // ‘__ACBP__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 1
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned short : 16;            // x & F0h = 0
	unsigned short : 16;            // 0 < x <= 400h
};

يحتوي الثاني على تجزئة SHA256 لـ IBB وعدد الواصفات التي تصف محتويات IBB (أي ما يتم حساب التجزئة منه):

typedef struct IBBS
{
	char           Tag[8];            // ‘__IBBS__’
	unsigned char  : 8;               // 10h
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // x <= 0Fh
	unsigned long  : 32;              // x & FFFFFFF8h = 0
	unsigned long  Unknown[20];
	unsigned short : 16;              // 0Bh
	unsigned short : 16;              // 20h == hash size ?
	unsigned char  IbbHash[32];       // SHA256 of an IBB
	unsigned char  NumIbbDescriptors;
};

تتبع واصفات IBB هذا الهيكل ، واحدًا تلو الآخر. يحتوي محتواها على التنسيق التالي:

typedef struct IBB_DESCRIPTOR
{
	unsigned long  : 32;
	unsigned long  BaseAddress;
	unsigned long  Size;
};

الأمر بسيط: يحتوي كل واصف على عنوان / حجم مقطع IBB. وبالتالي ، فإن سلسلة الكتل التي تشير إليها هذه الواصفات (بترتيب الواصفات نفسها) هي IBB. وكقاعدة عامة ، يعتبر IBB مزيجًا من جميع وحدات مراحل SEC و PEI.

ينتهي البيان الثاني بهيكل يحتوي على المفتاح العام IBB (تم التحقق منه بواسطة تجزئة SHA256 من البيان الأول) وتوقيع هذا البيان:

typedef struct PMSG
{
	char           Tag[8];            // ‘__PMSG__’
	unsigned char  : 8;               // 10h
	BG_RSA_ENTRY   IbbKey;
};

حذاء شرودنغر الموثوق به. Intel Boot Guard
لذلك ، حتى قبل بدء تنفيذ UEFI BIOS ، سيطلق المعالج ACM ، والذي سيتحقق من صحة محتويات الأقسام برمز طور SEC و PEI. بعد ذلك ، يخرج المعالج من ACM ، ويتحرك على طول ناقل RESET ، ويبدأ في تنفيذ BIOS.

يجب أن يحتوي قسم PEI الذي تم التحقق منه على وحدة نمطية ستتحقق من بقية BIOS (رمز DXE). تم تطوير هذه الوحدة بالفعل بواسطة IBV (بائع BIOS المستقل) أو بائع النظام نفسه. لأن فقط أنظمة Lenovo و Gigabyte هي في حوزتنا ولدينا دعم Intel BG ، دعنا نفكر في الكود المستخرج من هذه الأنظمة.

وحدة UEFI BIOS LenovoVerifiedBootPei

في حالة Lenovo ، اتضح أنها وحدة LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D} ، التي طورتها Lenovo.

وتتمثل مهمتها في البحث (بواسطة GUID) عن جدول تجزئة لـ DXE والتحقق من DXE.

if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME)
{
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	if (!VerifyDxe())
		return EFI_SECURITY_VIOLATION;
}

Хеш таблица {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} имеет следующий формат:

typedef struct HASH_TABLE
{
	char          Tag[8];            // ‘$HASHTBL’
	unsigned long NumDxeDescriptors;
	DXE_DESCRIPTORS[];
};

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long Offset;
	unsigned long Size;
};

وحدة UEFI BIOS BootGuardPei

في حالة Gigabyte ، اتضح أنها وحدة BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066} ، التي طورتها AMI ، وبالتالي فهي موجودة في أي BIOS AMI بدعم Intel BG.

تختلف خوارزمية التشغيل الخاصة بها إلى حد ما ، إلا أنها تتلخص في نفس الشيء:

int bootMode = EFI_PEI_SERVICES->GetBootMode();

if (bootMode != BOOT_ON_S3_RESUME &&
    bootMode != BOOT_ON_FLASH_UPDATE &&
    bootMode != BOOT_IN_RECOVERY_MODE)
{
	HOB* h = CreateHob();
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	WriteHob(&h, VerifyDxe());
	return h;
}

يحتوي جدول التجزئة {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} الذي يبحث عنه على التنسيق التالي:

typedef HASH_TABLE DXE_DESCRIPTORS[];

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long BaseAddress;
	unsigned long Size;
};

إنتل بوت جارد 2.x

دعنا نتحدث بإيجاز عن تطبيق آخر لـ Intel Boot Guard ، والذي تم العثور عليه في نظام أحدث يعتمد على Intel SoC مع هندسة Apollo Lake الدقيقة - ASRock J4205-IT.

على الرغم من أن هذا الإصدار لن يتم استخدامه إلا في SoCs (تستمر الأنظمة الجديدة ذات الهندسة المعمارية الدقيقة لمعالج Kaby Lake في استخدام Intel Boot Guard 1.x) ، إلا أنها ذات أهمية كبيرة في استكشاف خيار معماري جديد للأنظمة الأساسية القائمة على Intel SoCs ، والتي شهدت بشكل ملموس التغييرات ، على سبيل المثال:

  • أصبحت مناطق BIOS و Intel ME (أو بالأحرى Intel TXE ، وفقًا لمصطلحات Intel SoC) الآن منطقة IFWI واحدة ؛
  • على الرغم من تمكين Intel BG على النظام الأساسي ، لم يتم العثور على هياكل مثل FIT و KEYM و IBBM في ذاكرة الفلاش ؛
  • بالإضافة إلى نوى TXE و ISH (x86) ، تمت إضافة نواة ثالثة (مرة أخرى ARC ، بالمناسبة) إلى مجموعة الشرائح - PMC (وحدة التحكم في إدارة الطاقة) ، المرتبطة بضمان تشغيل النظام الفرعي للطاقة ومراقبة الأداء.

حذاء شرودنغر الموثوق به. Intel Boot Guard
محتوى منطقة IFWI الجديدة عبارة عن مجموعة من الوحدات النمطية التالية:

الإزاحة
اسم
وصف

0000 2000 ساعة
سميب
بعض تكوين النظام الأساسي ، موقعة من قبل البائع

0000 6000 ساعة
ربيب
قسم رمز برنامج Intel TXE الثابت ، x86 ، موقّع من Intel

0001 0000 ساعة
بمكب
قسم رمز البرنامج الثابت Intel PMC ، ARC ، موقّع من Intel

0002 0000 ساعة
FTPR
قسم رمز برنامج Intel TXE الثابت ، x86 ، موقّع من Intel

0007B000h
UCOD
تحديثات الرمز الصغير لوحدة المعالجة المركزية موقعة من Intel

0008 0000 ساعة
IBBP
UEFI BIOS ، مراحل SEC / PEI ، x86 ، توقيع البائع

0021 8000 ساعة
ISHC
قسم الكود الخاص ببرنامج Intel ISH الثابت ، x86 ، موقع من البائع

0025 8000 ساعة
بروتوكول نقل الملفات
قسم رمز برنامج Intel TXE الثابت ، x86 ، موقّع من Intel

0036 1000 ساعة
إيونب
غير معروف

0038 1000 ساعة
أوبب
UEFI BIOS ، مرحلة DXE ، x86 ، بدون توقيع

أثناء تحليل البرنامج الثابت TXE ، أصبح من الواضح أنه بعد RESET ، يبقي TXE المعالج في هذه الحالة حتى يقوم بإعداد المحتويات الأساسية لمساحة العنوان لوحدة المعالجة المركزية (FIT ، ACM ، RESET vector ...). علاوة على ذلك ، يضع TXE هذه البيانات في ذاكرة SRAM الخاصة به ، وبعد ذلك يزود المعالج مؤقتًا بالوصول إلى هناك و "يطلقها" من RESET.

على حراسة الجذور الخفية

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

بعد التحقق من الأداة المساعدة MEinfo (من Intel STK) ، رأينا أن وضع التصنيع على هذه الأنظمة لم يكن مغلقًا ، وبالتالي ، تم ترك فتيل مجموعة الشرائح (FPFs) في حالة غير محددة. نعم ، لا يتم تمكين Intel BG أو تعطيله في مثل هذه الحالات.

نحن نتحدث عن الأنظمة التالية (فيما يتعلق بـ Intel BG وما سيتم وصفه لاحقًا في المقالة ، سنتحدث عن الأنظمة ذات البنية الدقيقة لمعالج Haswell والإصدارات الأحدث):

  • جميع منتجات جيجابايت ؛
  • جميع منتجات MSI ؛
  • 21 طرازًا من أجهزة الكمبيوتر المحمول Lenovo و 4 طرازات خادم Lenovo.

بالطبع ، أبلغنا هؤلاء البائعين عن هذا الاكتشاف ، وكذلك لشركة Intel.

استجابة كافية متبوعة فقط من Lenovoمن اعترف بالمشكلة و صدر التصحيح.

جيجابايت يبدو أنهم قبلوا المعلومات المتعلقة بالثغرة الأمنية ، لكنهم لم يعلقوا بأي شكل من الأشكال.

التواصل مع MSI توقف تمامًا بناءً على طلبنا لإرسال مفتاح PGP العام الخاص بنا (من أجل إرسال مستشار أمان مشفر إليهم). وذكروا أنهم "مصنعون للأجهزة ولا يصنعون مفاتيح PGP."

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

1. قم بالتمهيد إلى نظام التشغيل Windows (بشكل عام ، يمكن أيضًا تنفيذ الخطوات الموضحة أدناه من نظام Linux ، إذا قمت بتطوير نظير من Intel STK لنظام التشغيل المطلوب). باستخدام الأداة المساعدة MEinfo ، تأكد من أن الصمامات الموجودة على هذا النظام غير مبرمجة.

حذاء شرودنغر الموثوق به. Intel Boot Guard
2. اقرأ محتويات ذاكرة الفلاش باستخدام أداة برمجة الفلاش.

حذاء شرودنغر الموثوق به. Intel Boot Guard
3. افتح صورة القراءة باستخدام أي أداة تحرير UEFI BIOS ، وقم بإجراء التغييرات اللازمة (قم بتطبيق rootkit ، على سبيل المثال) ، وقم بإنشاء / تحرير هياكل KEYM و IBBM الموجودة في منطقة الشرق الأوسط.

حذاء شرودنغر الموثوق به. Intel Boot Guard
حذاء شرودنغر الموثوق به. Intel Boot Guard
يتم تمييز الجزء العام من مفتاح RSA في الصورة ، حيث سيتم برمجة تجزئة في فيوزات مجموعة الشرائح مع باقي تكوين Intel BG.

4. باستخدام أداة Flash Image Tool ، أنشئ صورة جديدة للبرنامج الثابت (عن طريق ضبط تكوين Intel BG).

حذاء شرودنغر الموثوق به. Intel Boot Guard
5. اكتب صورة جديدة لتومض باستخدام أداة برمجة الفلاش ، وتحقق باستخدام MEinfo من أن منطقة الشرق الأوسط تحتوي الآن على تكوين Intel BG.

حذاء شرودنغر الموثوق به. Intel Boot Guard
6. استخدم أداة برمجة الفلاش لإغلاق وضع التصنيع.

حذاء شرودنغر الموثوق به. Intel Boot Guard
7. سيتم إعادة تشغيل النظام ، وبعد ذلك ، باستخدام MEinfo ، يمكنك التحقق من أن FPFs تمت برمجتها الآن.

حذاء شرودنغر الموثوق به. Intel Boot Guard
هذه الإجراءات إلى الأبد تمكين Intel BG على هذا النظام. سيكون من المستحيل التراجع عن الإجراء ، مما يعني:

  • لن يتمكن سوى مالك الجزء الخاص من مفتاح الجذر (أي الشخص الذي مكّن Intel BG) من تحديث UEFI BIOS على هذا النظام ؛
  • إذا قمت بإعادة البرنامج الثابت الأصلي إلى هذا النظام ، على سبيل المثال ، باستخدام مبرمج ، فلن يتم تشغيله (نتيجة لسياسة الإنفاذ في حالة حدوث خطأ في التحقق) ؛
  • للتخلص من مثل UEFI BIOS ، تحتاج إلى استبدال مجموعة الشرائح بـ FPFs المبرمجة بأخرى "نظيفة" (أي إعادة تركيب مجموعة الشرائح إذا كان لديك وصول إلى محطة لحام تعمل بالأشعة تحت الحمراء بسعر السيارة ، أو مجرد استبدال اللوحة الأم ).

لفهم ما يمكن أن يفعله هذا الجذور الخفية ، تحتاج إلى تقييم ما يجعل من الممكن تنفيذ التعليمات البرمجية الخاصة بك في بيئة UEFI BIOS. قل ، في الوضع الأكثر امتيازًا للمعالج - SMM. قد يكون لمثل هذه الجذور الخفية الخصائص التالية:

  • يتم تنفيذه بالتوازي مع نظام التشغيل (يمكنك إعداد المعالجة عن طريق إنشاء مقاطعة SMI ، والتي سيتم تشغيلها بواسطة مؤقت) ؛
  • تتمتع بجميع مزايا التواجد في وضع SMM (الوصول الكامل إلى محتويات ذاكرة الوصول العشوائي وموارد الأجهزة ، والسرية من نظام التشغيل) ؛
  • يمكن تشفير كود rootkit وفك تشفيره عند تشغيله في وضع SMM. يمكن استخدام أي بيانات متاحة فقط في وضع SMM كمفتاح تشفير. على سبيل المثال ، تجزئة من مجموعة من العناوين في SMRAM. للحصول على هذا المفتاح ، سوف تحتاج إلى الصعود إلى SMM. ويمكن القيام بذلك بطريقتين. ابحث عن RCE في كود SMM واستغلها ، أو أضف وحدة SMM الخاصة بك إلى BIOS ، وهو أمر مستحيل ، لأننا قمنا بتمكين Boot Guard.

وبالتالي ، فإن هذه الثغرة الأمنية تسمح للمهاجم بما يلي:

  • إنشاء مجموعة rootkit مخفية وغير قابلة للإزالة لغرض غير معروف في النظام ؛
  • قم بتنفيذ الكود الخاص بك على أحد نوى مجموعة الشرائح داخل Intel SoC ، أي على Intel ISH (ألق نظرة فاحصة على الصورة).

حذاء شرودنغر الموثوق به. Intel Boot Guard
حذاء شرودنغر الموثوق به. Intel Boot Guard
على الرغم من أن قدرات نظام Intel ISH الفرعي لم يتم استكشافها بعد ، إلا أنه يبدو أنه موجه هجوم مثير للاهتمام ضد Intel ME.

النتائج

  1. قدمت الدراسة وصفًا تقنيًا لكيفية عمل تقنية Intel Boot Guard. ناقص بعض الأسرار في أمان Intel من خلال نموذج الغموض.
  2. يتم تقديم سيناريو هجوم يسمح بإنشاء مجموعة rootkit غير قابلة للإزالة في النظام.
  3. لقد رأينا أن معالجات Intel الحديثة قادرة على تنفيذ الكثير من التعليمات البرمجية الخاصة حتى قبل أن يبدأ BIOS.
  4. أصبحت الأنظمة الأساسية ذات بنية Intel 64 أقل ملاءمة لتشغيل البرامج المجانية: التحقق من الأجهزة ، وعدد متزايد من التقنيات والأنظمة الفرعية الخاصة (ثلاثة مراكز في مجموعة شرائح SoC: x86 ME و x86 ISH و ARC PMC).

التخفيف

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

يمكن للمستخدمين تعطيل Intel BG على أنظمتهم (التي تتأثر بالثغرة الأمنية الموصوفة) عن طريق تشغيل أداة برمجة Flash مع خيار -closemnf. أولاً ، يجب التأكد (باستخدام MEinfo) من أن تكوين Intel BG في منطقة الشرق الأوسط يوفر إيقاف تشغيل هذه التقنية تمامًا بعد البرمجة في FPFs.

المصدر: www.habr.com

إضافة تعليق