
baton drop (CVE-2022-21894): ثغرة تجاوز ميزة الأمان في Secure Boot
تسمح تطبيقات تمهيد Windows للإعداد truncatememory بإزالة كتل من الذاكرة تحتوي على نطاقات "مستمرة" من البيانات المسلسلة من خريطة الذاكرة، مما يؤدي إلى تجاوز التمهيد الآمن.
truncatememory كل الذاكرة الواقعة فوق عنوان فيزيائي محدد من خريطة الذاكرة.bootdebug, testsigning, nointegritychecks)، مما يكسر التمهيد الآمن.تم إصلاح هذه المشكلة بتغييرين مختلفين:
bootmgr، فإن تهيئة تطبيق التمهيد تفشل.VERSIONINFO يتضمن OriginalFilename، وإذا كان هذا الاسم مضمنًا في قائمة حظر (تحتوي على bootmgr.exe و hvloader.exe؛ في Nickel، تمت إضافة hvloader.efi ولكن هذا التغيير لم يُنقل إلى الإصدارات السابقة)، يفشل التحميل.
hvloader.exe في قائمة حظر winload - كان مضمنًا في الأصل، مما كسر تحميل Hyper-V!flightedbootmgr لتحميل bootmgr من القرص)، فإن OriginalFilename مطلوب أن يكون bootmgr.exe.يحتاج المهاجم إلى ضمان أن يتم تخصيص سياسة التمهيد الآمن المسلسلة فوق عنوان فيزيائي معروف.
osdevice لإدخال BCD، عند تحميل تطبيق تمهيد، قسمًا مشفرًا بـ BitLocker حيث تم اشتقاق VMK باستخدام TPM.
يمكن استخدام عنصر avoidlowmemory لضمان أن جميع تخصيصات الذاكرة الفيزيائية تكون فوق عنوان فيزيائي محدد:
bootmgr وتحديد مسار BCD مخصص (باستخدام عنصر bcdfilepath المعروف أيضًا باسم custom:22000023) لتجاوز ذلك.bootmgr من Windows 8.x لتعطيل VBS ثم العودة إلى أداة التمهيد الأصلية.
bootmgr من Windows 8.x في فك ختم VMK على نظام Windows 10+.يمكن تحميل hvloader.efi مع عنصر nointegritychecks لتحميل mcupdate.dll موقّع ذاتيًا، حيث سيتم استدعاء نقطة الدخول الخاصة به قبل ExitBootServices.
بدلاً من ذلك، على الأنظمة غير AMD64، يمكن استخدام winload.efi قبل TH2 مع عنصر testsigning؛ وهذا يسمح بالملفات الثنائية الموقعة ذاتيًا التي تحتوي على EKU szOID_NT5_CRYPTO في الشهادة.
على أنظمة ARMv7، سيكون من الضروري تحميل hal.dll موقّع ذاتيًا ومصححًا مع استيراد إلى mcupdate.dll للحصول على تنفيذ التعليمات البرمجية.
على أنظمة x86 و AMD64، يجب أن يكون اسم الملف الذي يُحمَّل كـ mcupdate.dll هو mcupdate_*.dll، حيث * هي سلسلة الشركة المصنعة CPUID (GenuineIntel, AuthenticAMD إلخ).
على أنظمة ARM64، لا يمكن استخدام هذه التقنية لأن أقدم إصدار إنتاج موقّع متاح هو WinPE من RS2؛ وبالتالي، لا يمكن حاليًا سوى تنفيذ تعليمات برمجية مقيد (tethered) باستخدام bootdebug.
يتضمن هذا المستودع الملفات التالية:
mcupdate.dll يعمل على عنوان افتراضي مع تمكين الترحيل (paging)، يستحيل استدعاء دوال EFI مباشرةً (يجب تعطيل الترحيل لاستدعاء دوال EFI، والعودة إلى عنوان افتراضي مع تعطيل الترحيل لا تؤدي إلى نتيجة جيدة).BlImgLoadPEImageEx أو BlImgLoadPEImageFromSourceBuffer مع تعيين البت 0 في الأعلام لتحميل حمولة إضافية على تعيين 1:1 بين العنوان الفيزيائي والعنوان الافتراضي.
BlImgAllocateImageBuffer مع تعيين نفس البت لتخصيص ذاكرة على تعيين 1:1 بين العنوان الفيزيائي والعنوان الافتراضي؛ ثم تحميل حمولة بنفسها (أو إعادة تعيين نفسها هناك).bootmgfw من Windows 8 RTM و hvloader من TH1 RTM.
hvloader تم الحصول عليها عبر إزاحة ثم تدخل في حلقة لا نهائية.bootmgr من RS1 و hvloader من TH1 RTM.bootmgr الإصدار 19041.1081 و hvloader من TH1 RTM.يمكن استخدام هذه المشكلة لتفريغ مفاتيح BitLocker (حيث يُستخدم التمهيد الآمن للتحقق من السلامة).
إصلاح هذه المشكلة أصلح أيضًا مشكلة أخرى ليس لها CVE.
bootmgr أي جدول مفاتيح BitLocker موجود بالفعل في الذاكرة ويخصص جدولًا جديدًا، دون مسح القديم.
bootmgr من RS2+ من bootmgr (تحديد osdevice عشوائي حيث يُستخدم التمهيد الآمن للتحقق من السلامة)، ثم التمهيد إلى WinPE، وتحميل برنامج تشغيل معروف بثغراته، واستخدامه للبحث عن جدول مفاتيح BitLocker الموجود في الذاكرة الفيزيائية وتفريغه.لم يتم إبطال أي تطبيق تمهيد معروف بثغراته حتى الآن.
bootmgr بالتحقق من توقيعه الخاص.حدث إبطال غير مكتمل، وCVE أخرى (CVE-2023-24932). لا تزال هناك ملفات bootmgfw معرضة للخطر لم يتم إبطالها، بالإضافة إلى تصحيحات إضافية تعالج فقط الحالة التي يقوم فيها bootmgr بتحميل bootmgr. لم يتطلب الأمر سوى bootkit مُجمَّع بالنسخ واللصق لدفع MS إلى التحرك ;)
إذا كنت مبدعًا بما يكفي، فستجد طريقة للالتفاف حول إبطال أكثر من 2000 ملف bootmgfw ;)