
سكربت PowerShell لتطبيق الحل البديل الخاص بـ Zenbleed (CVE-2023-20593) عبر MSR على Windows
تُؤثّر ثغرة Zenbleed المكتشفة حديثًا (CVE-2023-20593) على جميع معالجات Zen2 من AMD. لسوء الحظ، لن توفّر AMD تحديثات للميكروكود للعديد من معالجاتها حتى نوفمبر أو ديسمبر 2023. كيف يمكن البقاء آمنًا في هذه الأثناء؟ لحسن الحظ، يوجد حل برمجي بديل. في حين أن تطبيق الحل البرمجي البديل يتلخص في سطر واحد على لينكس، فإن الأمور أكثر تعقيدًا على ويندوز.
لتطبيق الحل البرمجي البديل، يجب تعيين بت معيّن (وهو ما يُعرف بـ chicken bit DE_CFG[9]) في سجل MSR الخاص بوحدة المعالجة المركزية.
كما أشار Travis Ormandy، يمكن استخدام الأمر التالي لتجنّب Zenbleed على لينكس:
# wrmsr -a 0xc0011029 $(($(rdmsr -c 0xc0011029) | (1<<9)))
تحت ويندوز، يكون ضبط سجل MSR أكثر صعوبة. فبرامج تشغيل مستوى النواة فقط هي المسموح لها بالكتابة إلى سجل MSR. علاوة على ذلك، لتحميل برنامج تشغيل على مستوى النواة، يجب أن يكون موقّعًا. لهذا السبب قررنا استخدام برنامج تشغيل WinRing0 الموجود من OpenLibSys.org. كتبنا سكربت PowerShell يقوم بتحميل WinRing0، وإرسال طلبات الكتابة المناسبة إلى سجل MSR إلى برامج التشغيل، ثم إلغاء تحميل برنامج تشغيل WinRing0 فورًا بعد ذلك. حاليًا، يعمل سكربت PowerShell الخاص بنا فقط عند تعطيل Hyper-V. سكربت PowerShell الخاص بنا مستضاف هنا: https://github.com/sbaresearch/stop-zenbleed-win
يُرجى ملاحظة أن سكربت PowerShell يأتي مع بعض المحاذير. يرجى قراءة قسم 'المحاذير' وإجراء تحليل مخاطر لبيئتك الخاصة قبل استخدام السكربت.
Stop-Zenbleed.ps1 في PowerShell 5.x بصلاحيات المسؤول (admin)NT AUTHORITY\SYSTEM يصبح ممكنًا.
الإصلاح الحقيقي يتطلب تغييرًا في برنامج تشغيل WinRing0 وبالتالي توقيعًا جديدًا، وهو أمر معقّد.
مكتبة OpenHardwareMonitor، كحل بديل، تقوم بتصحيح حقوق الوصول فور تحميل برنامج التشغيل (https://github.com/openhardwaremonitor/openhardwaremonitor/commit/0e435cafc61fe84d429e8a9500d666e34e3de67b).
سكربت PowerShell الخاص بنا يتعامل مع CVE-2020–14979 عن طريق إلغاء تحميل برنامج التشغيل فورًا بعد تعيين chicken bit.
ومع ذلك، توجد نافذة زمنية صغيرة للاستغلال في كل مرة يتم فيها تنفيذ السكربت.
نظرًا لأن تعيين chicken bit ليس دائمًا، يجب تنفيذ السكربت عند كل إعادة تشغيل.
في تحليل المخاطر لدينا، فوائد الحماية من Zenbleed (والذي يمكن أن يحدث عن بُعد) تفوق مرة أخرى مخاطر تصعيد الصلاحيات المحلية.
علاوة على ذلك، نوصي بتنفيذ السكربت في أقرب وقت ممكن أثناء عملية الإقلاع للحد من قابلية الاستغلال من قبل عمليات المستخدم.
يرجى إجراء تحليل مخاطر لبيئتك الخاصة قبل نشر سكربت PowerShell.PS C:\stop-zenbleed-win> powershell -ExecutionPolicy RemoteSigned .\Stop-Zenbleed.ps1
[>] Installing driver...
[SC] CreateService SUCCESS
[>] Starting driver...
SERVICE_NAME: WinRing0_1_2_0
TYPE : 1 KERNEL_DRIVER
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 0
FLAGS :
[>] Opening driver...
[+] Driver access OK, handle: 2456
[>] Try 1 to apply fix on processor 1
[+] Fix is applied on processor 1 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 2 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 3
[+] Fix is applied on processor 3 (MSR 0xC0011029=0x3004310E08202)
[+] Fix is applied on processor 4 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 5
[+] Fix is applied on processor 5 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 6 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 7
[+] Fix is applied on processor 7 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 8 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 9
[+] Fix is applied on processor 9 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 10 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 11
[+] Fix is applied on processor 11 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 12 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 13
[+] Fix is applied on processor 13 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 14 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 15
[+] Fix is applied on processor 15 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 16 (MSR 0xC0011029=0x300C310E08203)
[>] Closing driver...
[>] Stopping driver...
SERVICE_NAME: WinRing0_1_2_0
TYPE : 1 KERNEL_DRIVER
STATE : 1 STOPPED
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
[>] Uninstalling driver...
[SC] DeleteService SUCCESS
بعد تنفيذ سكربت PowerShell الخاص بنا، يجب ألّا يُنتج استغلال إثبات المفهوم (POC) أي مخرجات إضافية.
Stop-Zenbleed.ps1 بموجب رخصة GNU GPL v3.0: LICENSE