
إضافة WinDbg في وضع النواة وPoCs للتحقيق في امتيازات التوكن.
ملحق WinDbg في وضع النواة وأمثلة (PoCs) لاختبار كيفية عمل صلاحيات الرموز المميزة.
توجد مستودعات ومقالات بارزة حول إساءة استخدام صلاحيات الرموز المميزة مثل Grzegorz Tworek و Priv2Admin. تهدف الأكواد في هذا المستودع إلى المساعدة في التحقيق في كيفية عمل صلاحيات الرموز المميزة.
يغطي هذا المشروع كيفية الحصول على صلاحيات النظام من شل ذي مستوى تكامل عالٍ. انظر README.md للتفاصيل.
الغرض من هذا المشروع هو التحقيق في كيفية إساءة استخدام المهاجمين لثغرات الكتابة العشوائية في النواة. جميع الأمثلة (PoCs) مكتوبة لـ HackSys Extreme Vulnerable Driver. تقوم معظم هذه الأمثلة بترقية الصلاحيات إلى مستوى تكامل SYSTEM من خلال إساءة استخدام ثغرة الكتابة العشوائية في النواة وصلاحيات الرموز المميزة. تم اختبارها على Windows 10 الإصدار 1809/1903، لكن من الناحية النظرية يجب أن تعمل على معظم إصدارات Windows 10:
| اسم PoC | الوصف |
|---|---|
| CreateAssignTokenVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeCreateTokenPrivilege و SeAssignPrimaryTokenPrivilege. |
| CreateImpersonateTokenVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeCreateTokenPrivilege و SeImpersonatePrivilege. |
| CreateTokenVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeCreateTokenPrivilege. |
| DebugInjectionVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeDebugPrivilege. يستخدم حقن الأكواد في winlogon.exe في المرحلة النهائية. |
| DebugUpdateProcVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeDebugPrivilege. ينشئ عملية SYSTEM من winlogon.exe باستخدام واجهة UpdateProcThreadAttribute في المرحلة النهائية. |
| RestoreServiceModificationVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeRestorePrivilege. يستخدم HijackShellLib مع هذا المثال. |
| SecondaryLogonVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeCreateTokenPrivilege و SeImpersonatePrivilege. يستخدم خدمة تسجيل الدخول الثانوية في المرحلة النهائية. |
| TakeOwnershipServiceModificationVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeTakeOwnershipPrivilege. يستخدم HijackShellLib مع هذا المثال. |
| TcbS4uAssignTokenVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeTcbPrivilege. يحصل على شل بمستوى إلزامي للنظام من مستوى إلزامي متوسط. |
| TcbS4uImpersonationVariant | يقوم هذا المثال بترقية الصلاحيات باستخدام SeTcbPrivilege. يقوم بانتحال هوية مؤشر الترابط باستخدام تسجيل الدخول S4U. لا يحصل على مستوى تكامل عالٍ أو مستوى النظام. |
تحذير
في بعض البيئات، لا يعمل إصدار التصحيح (Debug). يفضل استخدام إصدار الإصدار (Release).
PrivEditor هو ملحق WinDbg في وضع النواة لتعديل صلاحيات الرمز المميز لعملية معينة. يجعل هذا الملحق من السهل تكوين صلاحية الرمز المميز التي تريد التحقيق فيها:``` 0: kd> .load C:\dev\PrivEditor\x64\Release\PrivEditor.dll
PrivEditor - Kernel Mode WinDbg extension for token privilege edit.
Commands : + !getps : List processes in target system. + !getpriv : List privileges of a process. + !addpriv : Add privilege(s) to a process. + !rmpriv : Remove privilege(s) from a process. + !enablepriv : Enable privilege(s) of a process. + !disablepriv : Disable privilege(s) of a process. + !enableall : Enable all privileges available to a process. + !disableall : Disable all privileges available to a process.
[*] To see command help, execute "! help" or "! /?".
### أمر getps
يستخدم هذا الأمر لسرد العمليات في نظامك الهدف:```
0: kd> !getps /?
!getps - List processes in target system.
Usage : !getps [Process Name]
Process Name : (OPTIONAL) Specifies filter string for process name.
إذا قمت بتنفيذ هذا الأمر بدون أي وسائط، فإن هذا الأمر يقوم بإدراج جميع العمليات في نظامك المستهدف كما يلي:``` 0: kd> !getps
PID nt!_EPROCESS nt!_SEP_TOKEN_PRIVILEGES Process Name
======== =================== ======================== ============
0 0xfffff80581233630 0x0000000000000000 Idle
4 0xffffd60fec068380 0xffffaf00cec07a40 System
68 0xffffd60ff1780480 0xffffaf00d3b290a0 svchost.exe
88 0xffffd60fec0db080 0xffffaf00cec0d080 Registry
324 0xffffd60fef342040 0xffffaf00d0416080 smss.exe
348 0xffffd60ff052f100 0xffffaf00d25d30a0 dwm.exe
408 0xffffd60feca8e140 0xffffaf00d21bd930 csrss.exe
480 0xffffd60ff05a8340 0xffffaf00d2568670 svchost.exe
484 0xffffd60fefcd60c0 0xffffaf00d06430e0 wininit.exe
500 0xffffd60fefd130c0 0xffffaf00d23100a0 csrss.exe
580 0xffffd60fefdc0080 0xffffaf00d2266630 winlogon.exe
--snip--
إذا كنت ترغب في معرفة عمليات محددة، قم بتعيين مرشح النص كما يلي.
يعمل المرشح مع المطابقة الأمامية وغير حساس لحالة الأحرف:```
0: kd> !getps micro
PID nt!_EPROCESS nt!_SEP_TOKEN_PRIVILEGES Process Name
======== =================== ======================== ============
4568 0xffffd60f`f14ed080 0xffffaf00`d3db60a0 MicrosoftEdge.exe
4884 0xffffd60f`f1647080 0xffffaf00`d3fc17b0 MicrosoftEdgeCP.exe
4892 0xffffd60f`f1685080 0xffffaf00`d3fc07b0 MicrosoftEdgeSH.exe
يستخدم هذا الأمر لعرض صلاحيات الرمز المميز لعملية محددة:``` 0: kd> !getpriv /?
!getpriv - List privileges of a process.
Usage : !getpriv