
أداة تفريغ ذاكرة Lsass مبنية على PIC تستخدم مقابض مستنسخة لتجنب الكشف، وتنتج تفريغات مشوشة ببصمة ذاكرة ضئيلة لعمليات الفريق الأحمر.
تم تنفيذ هذه الأداة كجزء من محاضرتنا في مؤتمر Brucon2021 وتوضح استخدام مقابض مستنسخة لـ Lsass من أجل إنشاء تفريغ ذاكرة مبهم لنفس العملية.
يتم ترجمتها إلى ملف تنفيذي يعيش بالكامل في مقطع النص الخاص به. وبالتالي، فإن مقطع .text المستخرج من ملف PE هو كود كامل مستقل عن الموضع (=PIC)، مما يعني أنه يمكن التعامل معه مثل أي شيل كود.
تنفيذ HandleKatz في الذاكرة له بصمة صغيرة جدًا، حيث أنه في حد ذاته لا يخصص أي ذاكرة قابلة للتنفيذ إضافية وبالتالي يمكن دمجه بكفاءة مع مفاهيم مثل (Phantom)DLL-Hollowing كما هو موصوف من قبل @_ForrestOrr. وهذا على عكس محملات PIC PE، مثل Donut أو SRDI أو المحملات الانعكاسية التي، أثناء تحميل PE، تخصص ذاكرة قابلة للتنفيذ إضافية. بالإضافة إلى ذلك، يستخدم نسخة معدلة من ReactOS MiniDumpWriteDump ويتجاوز خطافات وضع المستخدم باستخدام RecycledGate.
للحصول على معلومات مفصلة، يرجى الرجوع إلى ملف PDF PICYourMalware.pdf في هذا المستودع.
يرجى ملاحظة أن المترجمات المختلفة (والإصدارات) تعطي نتائج مختلفة. قد ينتج عن ذلك ملف PE مع عمليات إعادة توطين.
تم إجراء جميع الاختبارات باستخدام x86_64-w64-mingw32-gcc mingw-gcc version 11.2.0 (GCC). تم اختبار PIC المنتج بنجاح على: Windows 10 Pro 10.0.17763. في إصدارات أخرى من ويندوز، قد تختلف تجزئات API.
لاستخدام PIC، قم بتحويل مؤشر إلى الشيل كود في ذاكرة قابلة للتنفيذ واستدعائه وفقًا للتعريف:
DWORD handleKatz(BOOL b_only_recon, char* ptr_output_path, uint32_t pid, char* ptr_buf_output);
لإزالة الإبهام عن ملف التفريغ، يمكن استخدام برنامج Decoder.py النصي.
يقوم Loader بتطبيق محمل نموذجي لـ HandleKatz:
loader.exe --pid:7331 --outfile:C:\Temp\dump.obfuscated

نظرًا لاستخدام المقابض المستنسخة مع كود ReactOS المعدل، لا يمكن ملاحظة أي أحداث ProcessAccess على Lsass. ومع ذلك، يمكن ملاحظة أحداث ProcessAccess على البرامج التي تحتوي على مقبض لـ Lsass.
يمكن للمدافعين مراقبة أقنعة ProcessAccess مع تعيين PROCESS_DUP_HANDLE (0x0040) لتحديد استخدام هذه الأداة.