
إثباتات مفاهيم توضح بعض جوانب تخفيف مكدس الظل في نواة ويندوز.
يهدف هذا المشروع إلى إبراز جوانب معينة من تخفيف حماية المكدس الظل (shadow stack) المطبَّق من مايكروسوفت في ويندوز 11. الكود مخصص تحديدًا لإصدار ويندوز 11 24H2. قد لا يعمل على إصدارات أخرى من ويندوز 11، بسبب إدارة إزاحات النواة (kernel offset management).
ينقسم المشروع إلى جزأين: عميل (client) وبرنامج تشغيل (driver). تتم المعالجة بينهما عبر آلية IOCTL. يطلب العميل من برنامج التشغيل تنفيذ إجراءات على مستوى النواة.
CR4 الحالي، مما يؤدي إلى شاشة الموت الزرقاء.try/except والمكدس الظل عند القسمة على صفر.استخدم build.bat.
كشرط مسبق، يجب أن تكون الحزم التالية لنفس إصدار ويندوز:
ملاحظة:
تم اختبار إثبات المفهوم (POC) مع الإصدار 10.0.26100.0 من الحزم.
لتفعيل تخفيف حماية المكدس الظل في النواة، يجب إضافة أو تعيين القيم التالية في مفتاح HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\:
| الاسم | النوع | البيانات |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
أيضًا، لتشغيل برنامج تشغيل موقّع للتجريب (test-signed)، يجب تنفيذ الأمر التالي في وحدة تحكم بصلاحيات المسؤول:
bcdedit /set testsigning on
بعد ذلك، يلزم إعادة تشغيل النظام.
لتحميل برنامج التشغيل، يجب إدخال الأوامر التالية في وحدة تحكم بصلاحيات المسؤول:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
يمتلك العميل الخيارات التالية:
SergiusTheBest على FindWDK.
| الخيار | الوصف |
|---|
| inc | زيادة عنوان العودة إلى المُستدعِي بمقدار 1 |
| skip | تصحيح RSP بحيث يشير إلى إطار المكدس السابق |
| cdisable | تعطيل CET في CR4 |
| cenable | تمكين CET في CR4 |
| wrmsr REGISTER VALUE | كتابة السجل REGISTER بالقيمة VALUE المحددة |
| wrshsk | الكتابة في المكدس الظل |
| wrshskpte | إعادة كتابة PTE الخاص بالمكدس الظل |
| div DIVIDEND DIVISOR | إجراء قسمة صحيحة في مساحة النواة |