
تفريغ ذاكرة PPL باستخدام استغلال في وضع المستخدم
⚠️ 2022-07-24 - اعتبارًا من Windows 10 21H2 10.0.19044.1826 (تحديث يوليو 2022)، لم يعد الاستغلال (exploit) المطبق في PPLdump يعمل. أصلاح في NTDLL يمنع الآن عمليات PPL من تحميل Known DLLs. مزيد من المعلومات هنا.
تنفذ هذه الأداة استغلالًا في مساحة المستخدم (userland) نوقش لأول مرة من قبل James Forshaw (المعروف بـ @tiraniddo) - في هذا المقال - لـ تفريغ ذاكرة أي عملية PPL كمسؤول.
كتبت مقالين عن هذه الأداة. الجزء الأول يتعلق بمفاهيم العمليات المحمية (Protected Processes) بينما يناقش الجزء الثاني تقنية الالتفاف نفسها.
ما عليك سوى تشغيل الملف التنفيذي بدون أي وسيط وستحصل على تعليمات / استخدام مفصلة.
c:\Temp>PPLdump64.exe
_____ _____ __ _
| _ | _ | | _| |_ _ _____ ___
| __| __| |__| . | | | | . | الإصدار 0.4
|__| |__| |_____|___|___|_|_|_| _| بواسطة @itm4n
|_|
الوصف:
تفريغ ذاكرة عملية محمية خفيفة (PPL) باستغلال *مساحة المستخدم*
الاستخدام:
PPLdump.exe [-v] [-d] [-f] <اسم_العملية|معرف_العملية> <ملف_التفريغ>
الوسائط:
اسم_العملية اسم العملية المراد تفريغها
معرف_العملية معرف العملية المراد تفريغها
ملف_التفريغ مسار ملف التفريغ الناتج
الخيارات:
-v (مفصل) تفعيل الوضع المفصل
-d (تصحيح) تفعيل وضع التصحيح (يستلزم الوضع المفصل)
-f (إجباري) تجاوز فحص خطأ DefineDosDevice
أمثلة:
PPLdump.exe lsass.exe lsass.dmp
PPLdump.exe -v 720 out.dmp
أولاً، تم تقديم PPLs مع Windows 8.1 لذا فإن الإصدارات الأقدم من Windows غير مدعومة بوضوح. يستهدف هذا المشروع بشكل أساسي Windows 10 (وإصدارات الخادم الخاصة به) ولكنني اختبرته أيضًا على إصدارات أقدم. ستجد جدولًا ملخصًا للاختبارات التي أجريتها في القسم الذي يحمل نفس الاسم.
عادةً ما تقوم أدوات تجاوز PPL الأخرى بتنفيذ كود عشوائي في kernel من خلال برنامج تشغيل موقّع رقميًا. هذا الأداة مختلفة لأنها تتضمن فقط حيلًا في مساحة المستخدم وتكون (تقريبًا) بدون ملفات.
تستفيد هذه الأداة من خدعة ذكية جدًا نوقشت لأول مرة من قبل James Forshaw في 2018 (انظر الإشادات). تتضمن استخدام دالة API DefineDosDevice لخداع النظام لإنشاء إدخال DLL معروف اعتباطي. نظرًا لأن PPLs لا تتحقق من التوقيع الرقمي للـ DLLs المعروفة، يمكن استخدام هذا لاحقًا لتنفيذ هجوم اختطاف DLL وتنفيذ كود عشوائي داخل PPL.
على الرغم من أن هذه الأداة تقوم بهجوم اختطاف DLL كمرحلة ثانية، إلا أنها لا تنشئ ملف DLL جديدًا على القرص. بدلاً من ذلك، تستخدم معاملة NTFS لاستبدال محتوى ملف موجود افتراضيًا، وهي تقنية مستوحاة مباشرة من عمل @_ForrestOrr (انظر الإشادات).
الإجابة المختصرة هي "لا". أولاً، لا تتضمن الوصول المباشر إلى kernel فلا يوجد خطر التسبب في شاشة زرقاء (BSOD) من هذه الناحية. في أسوأ السيناريوهات، قد تفشل الأداة في إزالة إدخال DLL المعروف الذي تم إنشاؤه، ولكن هذا لن يتسبب في حجب الخدمة. سيبقى هناك حتى إعادة تشغيل الجهاز التالية. نظرًا لأن الإدخال الذي تم إنشاؤه سيكون مجرد رابط رمزي يشير إلى قسم غير موجود، فإن النظام سيعود في النهاية إلى الموقع الافتراضي (أي مجلد System32) لذا لن يؤثر على البرامج الأخرى التي تعمل على الجهاز.
⚠️ يفشل الاستغلال على أجهزة Windows 8.1 / Server 2012 R2 المحدثة بالكامل. لم أعرف بعد أي تصحيح تسبب في الخطأ.
[-] فشل DefineDosDevice برمز خطأ 6 - المقبض غير صالح.
⚠️ على Windows 8.1 / Server 2012 R2، قد تحتاج أيضًا إلى ترجمة الثنائي بشكل ثابت (انظر "تعليمات البناء" أدناه).
يتكون حل Visual Studio هذا من مشروعين (الملف التنفيذي و DLL للحمولة) يجب ترجمتهما بترتيب معين. كل شيء مهيأ مسبقًا، لذا كل ما عليك فعله هو اتباع هذه التعليمات البسيطة. يتم تضمين DLL الحمولة المترجمة تلقائيًا في الملف التنفيذي النهائي.
Release / x64 أو Release / x86 حسب بنية الجهاز الهدف.Build > Build Solution (بناء > بناء الحل).على Windows 8.1 / Server 2012 R2، قد تحتاج إلى ترجمة الثنائي بشكل ثابت.
PPLdump.Configuration Properties > C/C++ > Code Generation (خصائص التكوين > C/C++ > إنشاء الكود).Multi-threaded (/MT) كخيار Runtime Library (مكتبة وقت التشغيل).| إصدار Windows | البناء | الإصدار | البنية (Arch) | المسؤول (Admin) | النظام (SYSTEM) |
|---|
| Windows 10 20H2 | 19042 | Pro | x64 | ✔️ | ✔️ |
| Windows 10 20H2 | 19042 | Pro | x86 | ✔️ | ✔️ |
| Windows 10 1909 | 18363 | Pro | x64 | ✔️ | ✔️ |
| Windows 10 1507 | 10240 | Educational | x64 | ✔️ | ✔️ |
| Windows 10 1507 | 10240 | Home | x64 | ✔️ | ✔️ |
| Windows 10 1507 | 10240 | Pro | x64 | ✔️ | ✔️ |
| Windows Server 2019 | 17763 | Standard | x64 | ✔️ | ✔️ |
| Windows Server 2019 | 17763 | Essentials | x64 | ✔️ | ✔️ |
| Windows 8.1 | 9600 | Pro | x64 | ⚠️ | ⚠️ |
| Windows Server 2012 R2 | 9600 | Standard | x64 | ⚠️ | ⚠️ |