استغلال تصعيد الامتياز المحلي لسائق kernel وحدة المعالجة المركزية.
سيقوم تطبيق CPU-Z بتثبيت برنامج تشغيل موقّع للخطر للوصول إلى بيانات kernel من UserMode. قبل V1.81 ، كشف برنامج تشغيل CPU-Z عن ثلاثة IOCTLs التي تسمح لأي تطبيق usermode بقراءة سجلات التحكم ، وقراءة dwords من الذاكرة الفعلية ، وكتابة dwords إلى الذاكرة الفعلية. نحن نسيء استخدام هذه الوظيفة للحصول على تنفيذ رمز وضع kernel الكامل ونفرز قذيفة النظام كدليل على المفهوم.
يدعم هذا الاستغلال Windows XP - Windows 10 1607:
تم اختبار هذا الاستغلال على الأنظمة التالية مع CPU-Z V1.76:
* على نظام التشغيل Windows 1703 و Later Kernel Control Flow Guard (CFG) يتم تمكينه افتراضيًا [1] ، مما يؤدي إلى فحص خلل kernel_security_check_failure.
لتشغيل هذا الاستغلال ، ابدأ تطبيق CPU-Z ، وقم بتشغيل exploit.exe من موجه الأوامر كمستخدم عادي. إذا نجحت ، يجب أن تفرخ عملية cmd.exe جديدة تعمل كنظام. لاحظ أن هذا الاستغلال سيفشل إذا تم تشغيله من عملية انخفاض منخفض بسبب استخدام ntquerysysteminformation.
يتيح برنامج تشغيل kernel CPU-Z قبل V1.81 أي تطبيق USERMODE لقراءة سجلات التحكم ، وقراءة DWORDS من الذاكرة الفعلية ، وكتابة dwords إلى الذاكرة الفعلية. نحن نسيء استخدام هذه الوظيفة لقراءة CR3 وتجاوز جداول الصفحة من أجل بناء قراءة/كتابة تعسفية بدائية على مساحة الذاكرة الافتراضية بأكملها.
مع القراءة/الكتابة الكاملة ، نقلب بت المستخدم/المشرف على إدخال جدول الصفحة (PTE) الذي يحتوي على حمولة لدينا إلى kernelmode لتجاوز منع تنفيذ وضع المشرف (SMEP). ثم نقوم بعد ذلك بكتابة مؤشر دالة في NT! HALDISPATCHTABLE [1] ونطلق الحمولة النافعة عن طريق استدعاء ntqueryintervalprofile.
كدليل على المفهوم ، ستقوم الحمولة النافعة بتعيين رمز النظام لعملية CMD.exe المعلقة ، واستئناف العملية. يجب أن يؤدي ذلك إلى تشغيل موجه أوامر جديد كسلطة/نظام NT. لا تعتمد الحمولة على الإزاحة الثابتة ، وبالتالي ينبغي أن تعمل على نظام التشغيل Windows XP+.
تم تقديم عدد من التخفيفات على مدار العامين الماضيين التي تحد من فعالية هذا الاستغلال. وصف موجز أدناه.
اعتبارًا من الإصدار 1.81 ، تم تصحيح برنامج التشغيل الذي تم توفيره مع وحدة المعالجة المركزية (CPU-Z) للحد من مجموعة المتصلين التي يمكنها فتح كائن الجهاز الخاص به وتمت إزالة بعض تطبيقات IOCTL. بناءً على طلبات فتح كائن جهاز السائق ، سيتم التحقق لمعرفة ما إذا كانت العملية الحالية قد تم تمكين seloaddriverprivilege. إذا كان هذا الخصائص مفقودًا أو معطلًا ، فسوف يرفض برنامج التشغيل الطلب باستخدام status_access_denied. لاحظ أنه عند التشغيل كمسؤول ، يكون من التافهة تمكين هذا الامتياز من UserMode. علاوة على ذلك ، تمت إزالة سجلات IOCTL لقراءة سجلات التحكم (على الرغم من بقاء تطبيقات قراءة/كتابة الذاكرة الفعلية). بدون القدرة على قراءة قاعدة جدول الصفحة من CR3 ، لم تعد طريقة الاستغلال في هذا المشروع ممكنة. لاحظ أن برنامج تشغيل CPU-Z يوفر العديد من IOCTLs الأخرى التي يمكن استخدامها للاستغلال ، مثل القراءة والكتابة إلى السجلات الخاصة بالنموذج التعسفي.
اعتبارًا من نظام التشغيل Windows 10 1703 (تحديث المبدعين) ، يتم تمكين واقي تدفق التحكم kernel بشكل افتراضي في x86_64. ستؤدي المكالمات من خلال HaldispatchTable إلى فحص خطأ kernel_security_check_failure لأنه محمي بواسطة CFG. إذا لم يتم تمكين الأمان القائم على المحاكاة الافتراضية (VBS) ، فيجب أن يكون من الممكن إضافة الحمولة النافعة كهدف صالح للمكالمة لتجاوز CFG.
إذا تم تمكين الأمان القائم على المحاكاة الافتراضية (VBS) ، فسوف يقتل غالبية هذا الاستغلال. لن يكون معالجة PTE المستخدمة لتعطيل SMEP ممكنًا ، حيث سيتم حماية PTEs بواسطة Hypervisor. بالإضافة إلى ذلك ، ستكون هناك حاجة إلى تجاوز CFG على x86_64 للحصول على تنفيذ رمز من خلال HaldispatchTable لأن Kernel CFG Bitmap لن تكون قابلة للكتابة.
يتم تفصيل نقاط الضعف المستخدمة في هذا الاستغلال في CVE-2017-15302 و CVE-2017-15303. يمكن الاطلاع على دليل آخر على المفهوم في CPUZ-DSEFIX [5].
[1] https://community.osr.com/discussion/283374/control-flow-guard-question
[2] https://www.cvedetails.com/cve/cve-2017-15302/
[3] https://www.cvedetails.com/cve/cve-2017-15303/
[4] https://github.com/akayn/bugs/blob/master/cpuid/cve-2017-15302/readme.md
[5] https://github.com/samlarenn/cpuz-dsefix
بالإضافة إلى ذلك ، فإن طريقة الكتابة فوق HaldispatchTable المستخدمة في هذا الاستغلال هي متجه شائع الاستخدام للحصول على تنفيذ التعليمات البرمجية من kernel قراءة/كتابة بدائية. للحصول على تفاصيل إضافية حول هذه التقنية ، راجع الموارد أدناه.
[6] http://poppopret.blogspot.com/2011/07/windows-kernel-exploitation-basics-bart.html
[7] https://www.abatchy.com/2018/01/kernel-exploitation-7
[8]
[9]