Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
EDRSandblast — يسلح السائقين الموقعين الضعفاء لتجاوز استدعاءات نواة EDR، واستدعاءات الكائنات، وموفر ETW TI، وخطافات مساحة المستخدم لتفريغ ذاكرة LSASS واستخراج بيانات الاعتماد. | Kitploit
أدوات/GitHubGitHub/wavestone-cdt/edrsandblast
أدوات دفاعيةتصعيد الامتيازاتالاستغلالاختبار الاختراقالفريق الأحمر
GitHubwavestone-cdt/edrsandblast

EDRSandblast

يسلح السائقين الموقعين الضعفاء لتجاوز استدعاءات نواة EDR، واستدعاءات الكائنات، وموفر ETW TI، وخطافات مساحة المستخدم لتفريغ ذاكرة LSASS واستخراج بيانات الاعتماد.

عرض المستودع
1.8k32018منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

EDRSandBlast

EDRSandBlast هي أداة مكتوبة بلغة C تقوم بتسليح برنامج تشغيل موقع ضعيف لتجاوز كشف EDR (إجراءات روتين الإشعار، عمليات الاسترجاع للكائنات وموفر ETW TI) وحماية LSASS. كما تم تنفيذ تقنيات متعددة لإلغاء ربط المستخدم لتجنب مراقبة وضع المستخدم.

عند الإصدار، تم استخدام مزيج من تقنيات وضع المستخدم (--usermode) ووضع النواة (--kernelmode) لتفريغ ذاكرة LSASS تحت مراقبة EDR، دون حظر أو إنشاء أحداث متعلقة بـ"سرقة بيانات الاعتماد من نظام التشغيل" في وحدة تحكم المنتج (السحابية). تم إجراء الاختبارات على 3 منتجات EDR متميزة ونجحت في كل حالة.

الوصف

تجاوز EDR من خلال إزالة إجراءات روتين الإشعار في النواة

تستخدم منتجات EDR عمليات الاسترجاع "إجراءات روتين الإشعار" في النواة على Windows ليتم إعلامها من قبل النواة بنشاط النظام، مثل إنشاء العمليات والخيوط وتحميل الصور (exe / DLL).

يتم تعريف عمليات الاسترجاع هذه من وضع النواة، عادةً من برنامج التشغيل الذي ينفذ عمليات الاسترجاع، باستخدام عدد من واجهات برمجة التطبيقات الموثقة (nt!PsSetCreateProcessNotifyRoutine، nt!PsSetCreateThreadNotifyRoutine، إلخ). تضيف واجهات برمجة التطبيقات هذه إجراءات روتين استرجاع مقدمة من برنامج التشغيل إلى مصفوفات غير موثقة من الإجراءات في مساحة النواة:

  • PspCreateProcessNotifyRoutine لإنشاء العمليات
  • PspCreateThreadNotifyRoutine لإنشاء الخيوط
  • PspLoadImageNotifyRoutine لتحميل الصور

يقوم EDRSandBlast بتعداد الإجراءات المحددة في تلك المصفوفات وإزالة أي إجراء استرجاع مرتبط بقائمة محددة مسبقًا من برامج تشغيل EDR (أكثر من 1000 برنامج تشغيل لمنتجات أمنية مدعومة، راجع قسم كشف برامج تشغيل EDR. يتم تمكين التعداد والإزالة من خلال استغلال بدائية قراءة / كتابة ذاكرة عشوائية في النواة مقدمة من استغلال برنامج تشغيل ضعيف (راجع قسم برامج التشغيل الضعيفة).

يتم استعادة إزاحات المصفوفات المذكورة باستخدام تقنيات متعددة، يرجى الرجوع إلى قسم الإزاحات.

تجاوز EDR من خلال إزالة عمليات الاسترجاع للكائنات

غالبًا ما تسجل منتجات EDR (وحتى EPP) "عمليات استرجاع للكائنات" من خلال استخدام واجهة برمجة تطبيقات النواة nt!ObRegisterCallbacks. تسمح هذه العمليات لمنتج الأمان بالحصول على إشعار عند كل إنشاء لمقبض على أنواع كائنات محددة (عمليات الاسترجاع المتعلقة بالعمليات والخيوط وسطح المكتب أصبحت مدعومة الآن بواسطة Windows). قد يحدث إنشاء مقبض عند فتح كائن (استدعاء OpenProcess، OpenThread، إلخ) وكذلك عند تكرار مقبض (استدعاء DuplicateHandle، إلخ).

من خلال إعلام النواة لكل من هذه العمليات، قد يقوم منتج الأمان بتحليل شرعية إنشاء المقبض (على سبيل المثال، عملية غير معروفة تحاول فتح LSASS)، وحتى حظره إذا تم اكتشاف تهديد.

عند كل تسجيل استرجاع باستخدام ObRegisterCallbacks، تتم إضافة عنصر جديد إلى القائمة المزدوجة CallbackList الموجودة في كائن _OBJECT_TYPE الذي يصف نوع الكائن المتأثر بالاسترجاع (إما عملية أو خيط أو سطح مكتب). لسوء الحظ، يتم وصف هذه العناصر بهيكل غير موثق ولا يتم نشره في ملفات الرموز بواسطة Microsoft. ومع ذلك، فإن دراسته من إصدارات ntoskrnl.exe المختلفة يبدو أنه يشير إلى أن الهيكل لم يتغير بين (على الأقل) إصدارات Windows 10 10240 و 22000 (من 2015 إلى 2022).

الهيكل المذكور، الذي يمثل تسجيل استرجاع كائن، هو كما يلي:```C typedef struct OB_CALLBACK_ENTRY_t { LIST_ENTRY CallbackList; // linked element tied to _OBJECT_TYPE.CallbackList OB_OPERATION Operations; // bitfield : 1 for Creations, 2 for Duplications BOOL Enabled; // self-explanatory OB_CALLBACK* Entry; // points to the structure in which it is included POBJECT_TYPE ObjectType; // points to the object type affected by the callback POB_PRE_OPERATION_CALLBACK PreOperation; // callback function called before each handle operation POB_POST_OPERATION_CALLBACK PostOperation; // callback function called after each handle operation KSPIN_LOCK Lock; // lock object used for synchronization } OB_CALLBACK_ENTRY;

هيكل `OB_CALLBACK` المذكور أعلاه غير موثق أيضًا، ويتم تعريفه على النحو التالي:```C
typedef struct OB_CALLBACK_t {
    USHORT Version;                           // usually 0x100
    USHORT OperationRegistrationCount;        // number of registered callbacks
    PVOID RegistrationContext;                // arbitrary data passed at registration time
    UNICODE_STRING AltitudeString;            // used to determine callbacks order
    struct OB_CALLBACK_ENTRY_t EntryItems[1]; // array of OperationRegistrationCount items
    WCHAR AltitudeBuffer[1];                  // is AltitudeString.MaximumLength bytes long, and pointed by AltitudeString.Buffer
} OB_CALLBACK;

لتعطيل استدعاءات الكائنات المسجلة بواسطة EDR، تم تطبيق ثلاث تقنيات في EDRSandblast؛ ومع ذلك، يتم تمكين تقنية واحدة فقط في الوقت الحالي.

استخدام حقل Enabled من OB_CALLBACK_ENTRY

هذه هي التقنية الافتراضية الممكّنة في EDRSandblast. من أجل اكتشاف وتعطيل استدعاءات الكائنات المتعلقة بـ EDR، يتم تصفح قائمة CallbackList الموجودة في كائنات _OBJECT_TYPE المرتبطة بأنواع العملية والخيط. تتم الإشارة إلى كائني _OBJECT_TYPE هذين بواسطة رموز عامة في النواة، PsProcessType وPsThreadType.

يُفترض أن كل عنصر في القائمة يتطابق مع بنية OB_CALLBACK_ENTRY الموضحة أعلاه (افتراض يبدو أنه صحيح على الأقل في جميع إصدارات Windows 10 وقت كتابة هذا التقرير). يتم تحديد الوظائف المحددة في حقلي PreOperation وPostOperation للتحقق من انتمائها إلى برنامج تشغيل EDR، وإذا كان الأمر كذلك، يتم ببساطة تعطيل الاستدعاءات عن طريق تبديل علامة Enabled.

على الرغم من كونها تقنية آمنة إلى حد ما، إلا أن لها عيب الاعتماد على بنية غير موثقة؛ لتقليل مخاطر التعامل غير الآمن مع هذه البنية، يتم إجراء فحوصات أساسية للتحقق من أن بعض الحقول لها القيم المتوقعة:

  • Enabled إما TRUE أو FALSE (لا تضحك، BOOL هو int، لذا يمكن أن يكون أي شيء آخر غير 1 أو 0)؛
  • Operations هو OB_OPERATION_HANDLE_CREATE، أو OB_OPERATION_HANDLE_DUPLICATE أو كلاهما؛
  • ObjectType يشير إلى PsProcessType أو PsThreadType.

فصل قائمة CallbackList عن الخيوط والعملية

استراتيجية أخرى لا تعتمد على بنية غير موثقة (وبالتالي فهي من الناحية النظرية أكثر قوة ضد تغييرات نواة NT) هي فصل قائمة CallbackList بالكامل لكل من العمليات والخيوط. كائن _OBJECT_TYPE هو كما يلي:```C struct _OBJECT_TYPE { LIST_ENTRY TypeList; UNICODE_STRING Name; [...] _OBJECT_TYPE_INITIALIZER TypeInfo; [...] LIST_ENTRY CallbackList; }

جعل المؤشرين `Flink` و `Blink` لقائمة `LIST_ENTRY` الخاصة بـ `CallbackList` يشيران إلى `LIST_ENTRY` نفسها يجعل القائمة فارغة فعليًا. نظرًا لأن بنية `_OBJECT_TYPE` منشورة في رموز النواة، فإن هذه التقنية لا تعتمد على إزاحات/هياكل ثابتة. ومع ذلك، فإن لها بعض العيوب.

العيب الأول هو عدم القدرة على تعطيل الاستدعاءات من EDR فقط؛ بل تؤثر هذه التقنية على جميع استدعاءات الكائنات التي قد تكون مسجلة بواسطة برامج "شرعية". ومع ذلك، تجدر الإشارة إلى أن استدعاءات الكائنات لا تُستخدم بواسطة أي مكون مثبت مسبقًا في ويندوز 10 (في وقت كتابة هذا التقرير)، لذا فإن تعطيلها لا ينبغي أن يؤثر على استقرار الجهاز (حتى أكثر من ذلك إذا كان التعطيل مؤقتًا).

العيب الثاني هو أن عمليات مقابض العمليات أو مؤشرات الترابط متكررة جدًا (شبه مستمرة) في الأداء الطبيعي لنظام التشغيل. ونتيجة لذلك، إذا كانت بدائية كتابة النواة المستخدمة لا تستطيع إجراء كتابة `QWORD` "ذرية"، فهناك احتمال كبير أن يتم الوصول إلى مؤشر `_OBJECT_TYPE.CallbackList.Flink` بواسطة النواة في منتصف استبداله. على سبيل المثال، يمكن لبرنامج تشغيل MSI الضعيف `RTCore64.sys` إجراء كتابة `DWORD` فقط في كل مرة، لذا ستكون هناك حاجة إلى طلبي IOCTL منفصلين لاستبدال المؤشر، وبينهما تكون النواة عرضة لاستخدامه (مما يؤدي إلى تعطل). من ناحية أخرى، يمكن لبرنامج تشغيل DELL الضعيف `DBUtil_2_3.sys` إجراء كتابات بأحجام عشوائية في طلب IOCTL واحد، لذا فإن استخدام هذه الطريقة معه لا يخاطر بالتسبب في تعطل.
تنزيل الأداة