
Rogue Assembly Hunter هي أداة لاكتشاف وحدات .NET CLR 'المثيرة للاهتمام' في العمليات الجارية.
__________ _____ . .
_____ \ ____ ____ __ __ ____ / _ \ ______ ______ ____ _ | | | ..
| // _ \ / __| | _/ __ \ / /\ \ / // __// __ \ / | __ | |< | |
| | ( <> ) // > | /\ / / | \ \ _ \ /| Y Y \ _\ \ |_ |
|| /_/_ /|/ _ > _| /____ >____ >___ >|| / /____/ |
/ // / / / / / / / /
___ ___ __
/ | \ __ __ / | ___________
/ ~ \ | / \ __/ __ _ __
\ Y / | / | \ | \ /| | /
_| /|/|| /| _ >|
/ / /
صائد التجمعات المارقة هو أداة لاكتشاف وحدات CLR .NET 'المثيرة للاهتمام' في العمليات الجارية.
.NET هي منصة تطوير وإطار عمل تشغيلي قوي وقادر على بناء وتشغيل تطبيقات .NET المُدارة. على مدى السنوات القليلة الماضية، تم اعتماد .NET من قبل الفرق الحمراء (وأمثالها) لتنفيذ أدوات دعم العمليات الهجومية. على وجه الخصوص، كان الانتقال من PowerShell الهجومي إلى .NET قفزة منطقية (للعديد) بسبب الرؤية المتزايدة والفرص الانتهازية الموجودة في PowerShell v5+. ونتيجة لذلك، تم استخدام الأدوات والتقنيات الهجومية الخاصة بـ .NET بنجاح للتهرب من قدرات الدفاع القائمة على المضيف، وتجاوز التحكم في التطبيقات، وبناء/تجميع/تسليم/تنفيذ التعليمات البرمجية الضارة (على غرار PowerShell).
من منظور الوقاية، تقوم Microsoft بالمزيد لمكافحة التهديدات الخاصة بـ .NET وتقليل سطح الهجوم الإجمالي لـ .NET. على سبيل المثال، أضافت Microsoft قدرات فحص AMSI في .NET Framework 4.8، وآليات WDAC/WLDP فعالة للغاية. من منظور الكشف/الاستجابة، فإن المزيد من الرؤية والتحليل المتعمق في نظام .NET البيئي مفيد دائمًا لاكتشاف طرق جديدة لمكافحة التهديدات التي تركز على .NET.
في عام 2017، كتب جو ديسيمون (@dez_) مقالة رائعة بعنوان Hunting For In-Memory .NET Attacks. لا تزال المقالة ذات صلة اليوم، حيث تحدد ناقلات الهجوم الحديثة لـ .NET بالإضافة إلى التقنيات القائمة على الطلب والحدث للكشف. ورافق المقالة إصدار أداة (Get-ClrReflection) للكشف الاستباقي (واسترجاع) وحدات CLR .NET في الذاكرة التي تفتقر إلى مرجع قرص مناسب. مستوحى من عمل جو والاستفادة من قدرات التحليل المتعمق لمكتبة تشخيص وقت التشغيل CLRMD (+ قدرات الوصول إلى البيانات اللاحقة لـ mscordacwks.dll)، تم إنشاء صائد التجمعات المارقة من أجل:
[*] المعلمات:
--mode=<.> : مطلوب | تحديد وضع التحليل. الخيارات تشمل sweep, process, watch.
--hunt=<.> : اختياري | تحديد نوع مسح الصيد للعثور على وحدات CLR مثيرة للاهتمام. حدد all (افتراضي)، memory-only، unusual-dir،
sig-status، imposter-file، أو list.
--export=<.> : اختياري، تجريبي | تحديد مسار ملف لتصدير وحدات CLR المحملة لمسوحات الصيد في الذاكرة ومسوحات صيد ملفات المنتحلين
(مثل --hunt=memory-only/imposter-file/all).
--pid=<.> : اختياري | تحديد عملية مستهدفة بواسطة PID. يجب استخدامه مع معلمة/قيمة --mode=process.
--checks=<.> : اختياري | تحديد قيمة لدورات المسح. قد يساعد ذلك في تقليل حالات فقدان ظروف السباق أثناء المسوحات ولكنه قد يكرر إخراج النتائج.
القيمة الافتراضية هي 1.
--sleep=<.> : اختياري | تحديد قيمة لثواني النوم. قد يساعد ذلك في تقليل حالات فقدان ظروف السباق أثناء المسوحات عن طريق تأخير دورة الفحص.
القيمة الافتراضية هي 0 ثانية.
--debug : اختياري | عرض معلومات الاستثناء (مثل أخطاء اتصال العملية).
--nobanner : اختياري | إخفاء لافتة العرض. مفيد للتنفيذ مع نص PowerShell أو لحالات الاستخدام التي تستخدم الأتمتة.
--suppress : اختياري | عدم مسح عملية RogueAssemblyHunter أثناء --mode=sweep أو --mode=watch.
--help : اختياري | عرض هذه المساعدة. هذا سيتجاوز أي معلمات سطر أوامر أخرى ويخرج من التطبيق. *هذا هو الوضع الافتراضي بدون معلمات.
[*] الأوضاع (--mode=)
- sweep : مسح/التكرار عبر جميع العمليات (ملاحظة: سيتم مسح العمليات من نفس الهندسة المعمارية/'البتات' فقط. قم بالتجميع للتشغيل لـ x86/x64/إلخ).
- process : مسح عملية واحدة. استخدم مع --pid=<PID>.
- watch : مسح العمليات الجديدة عند إنشائها. اضبط سمات المسح باستخدام --checks و --sleep. (ملاحظة: هذا تجريبي. ظروف السباق محتملة.)
[*] عمليات الصيد (--hunt=)
- all : القيمة الافتراضية. تحليل مع جميع خيارات الصيد (باستثناء 'list').
- memory-only : صيد الذاكرة. تحليل وحدات CLR التي لا يدعمها قرص.
- unusual-dir : صيد الدليل غير المعتاد. تحليل وحدات CLR المحملة خارج الأدلة 'العادية'.
قم بتعديل '_huntUnusualDirectoryFilter' للتخصيص.
- sig-status : صيد توقيع الملف. تحليل وحدات CLR ذات حالة توقيع شاذة (مثل غير موقعة). ملاحظة: هذا تجريبي. النتائج الإيجابية الخاطئة ممكنة.
قم بتعديل '_huntSigExclusionsFilter' للتخصيص.
- imposter-file : صيد وحدة CLR غير متوقعة. تحليل وحدة CLR مع دعم ملف قرص مشبوه. تجريبي.
- list : التكرار عبر جميع وحدات CLR وسردها وفقًا لذلك.
[*] أمثلة الاستخدام
- مثال 1 : مسح العمليات وتشغيل جميع عمليات الصيد للعمليات 64 بت القابلة للوصول (باستثناء 'list') -
RogueAssemblyHunter_x64.exe --mode=sweep
- مثال 2 : مسح العمليات، سرد جميع وحدات CLR في العمليات المُدارة 32 بت القابلة للوصول، وعرض معلومات الخطأ -
RogueAssemblyHunter_x86.exe --mode=sweep --hunt=list --debug
- مثال 3 : مراقبة العمليات الجديدة، مسح جميع وحدات CLR (إذا كانت مُدارة و 64 بت)، عدم مسح عملية RogueAssemblyHunter، وإجراء فحصين مع تأخير 3 ثوانٍ بينهما -
RogueAssemblyHunter_x64.exe --mode=watch --suppress --checks=2 --sleep=3
- مثال 4 : مسح عملية واحدة بواسطة PID، سرد نتائج وحدات CLR في الذاكرة فقط، وتصدير وحدات CLR إلى المسار المحدد -
RogueAssemblyHunter_x86.exe --mode=process --pid=4650 --hunt=memory-only --export=c:\evilassemblies\
- مثال 5 : مسح العمليات، سرد نتائج وحدات CLR في الذاكرة فقط للعمليات 64 بت القابلة للوصول، عدم مسح عملية RogueAssemblyHunter، وعدم إظهار لافتة العنوان -
RogueAssemblyHunter_x64.exe --mode=sweep --hunt=memory-only --suppress --nobanner
للراحة، تم تضمين نص PowerShell مع ثنائيتين مترجمتين (RogueAssemblyHunter_x64.exe و RogueAssemblyHunter_x86.exe) في مجلد \Release. لا تتردد في التعديل لتناسب حالات الاستخدام الخاصة بك (مثل النشر والتضمين والفحوصات والنوم وما إلى ذلك).
مثال الاستخدام:
تشغيل Invoke-RogueAssemblyHunter في وضع المسح والتحقق من جميع خيارات الصيد
cd c:\path\to\RogueAssemblyHunter
import-module .\Invoke-RogueAssemblyHunter.ps1
Invoke-RogueAssemblyHunter
تشغيل Invoke-RogueAssemblyHunter في وضع المراقبة والتحقق من جميع خيارات الصيد
cd c:\path\to\RogueAssemblyHunter
import-module .\Invoke-RogueAssemblyHunter.ps1
Invoke-RogueAssemblyHunter -ScanMode watch
تجزئات SHA256:
e804711a8b6469f1b13b388de47dfa6dde1c85279d365db7b6e19e1644990fa6 Invoke-RogueAssemblyHunter.ps1
cc985d918e566671aa209142abc55bd798ca6c1a18730b785ac8c18d489736c3 RogueAssemblyHunter_x64.exe
ae3aead43871e263cd8465d5356c4daaae0635714321f872c931ec825008287a RogueAssemblyHunter_x86.exe