
نسخة معدّلة بشكل كبير من مشروع dlinject الخاص بـ David Buchanan. تحقن حمولات تعليمات التجميع الاعتباطية (أو ملفات ثنائية مُجمَّعة مسبقًا) مباشرةً في عمليات Linux ذات معماريات x86-64 و x86 و ARM32 دون استخدام ptrace، وذلك عبر الوصول إلى /proc/<pid>/mem. مفيدة في بعض سيناريوهات ما بعد الاستغلال، واسترجاع المحتوى من ذاكرة العملية، وما إلى ذلك..
asminject.py هو fork مُعدّل بشكل كبير من مشروع dlinject الخاص بـ David Buchanan. فهو يحقن حمولات من لغة التجميع التعسفية (أو ثنائيات مُجمّعة مسبقًا) مباشرة في عمليات Linux بمعماريات x86-64 وx86 وARM32 عبر الوصول إلى /proc/<pid>/mem بدلاً من الالتصاق عبر ptrace. وهو مفيد للعبث مع العمليات الموثوقة، وبعض سيناريوهات ما بعد الاستغلال، واستعادة المحتوى من ذاكرة العملية، وتجاوز بعض ضوابط الأمان. كما يمكنه الحقن في العمليات المحتواة من خارج الحاوية، طالما لديك صلاحية وصول الجذر على المضيف.
يمكنك أيضًا قراءة المزيد عن asminject.py وأصله على صفحة الأداة في Bishop Fox، بما في ذلك مقال مفصّل عن العمل الذي ألهم الأداة.
في هذا المستند:
وثائق منفصلة وأكثر تفصيلًا:
asminject.py يشبه dlinject، إلا أنه يتيح لك حقن أي حمولة تريدها بدلاً من مجرد تحميل مكتبة، ويعمل على معماريات متعددة."asminject.py إلى حدٍ ما Frida، إلا أنه لا يلتصق عبر واجهة ptrace، لذا لا يمكن للعمليات حظره عن طريق تتبع نفسها بـ ptrace."كُتب asminject.py لسيناريوهين رئيسيين في اختبار الاختراق داخل بيئات Linux:
على سبيل المثال، لنفترض اختبار اختراق حصل فيه المختبر على صلاحية الجذر لخادم يستضيف العديد من الحاويات. إحدى الحاويات تعالج التحويلات المصرفية، وفي داخلها منتج أمان للطرفيات قوي جدًا. عندما يحاول مختبر الاختراق تعديل بيانات التحويلات المصرفية من داخل الحاوية، يكتشف برنامج أمان الطرفيات المحاولة ويحظرها. يتيح asminject.py لمختبر الاختراق حقن كود تعسفي مباشرة في ذاكرة عملية البرنامج المصرفي أو حتى في منتج أمان الطرفيات من خارج الحاوية. ومثل ضحية «الشيطان الشرير» عند ديكارت، يكون برنامج الأمان داخل الحاوية عاجزًا تمامًا، لأنه يوجد في بيئة خاضعة بالكامل لسيطرة المهاجم.
صُمم dlinject.py الأصلي خصيصًا لتحميل المكتبات المشتركة لنظام Linux في عملية قائمة. يقوم asminject.py بكل ما كان يفعله الأصل وأكثر من ذلك بكثير. فهو ينفّذ كود تجميع تعسفيًا، ويتضمن قوالب لمجموعة متنوعة من الهجمات. كما أُعيد تصميمه للمساعدة في تجنّب الاكتشاف بواسطة آليات الأمان التي ترصد الأنشطة التي قد تكون مشبوهة مثل أحداث تحميل المكتبات.
يتضمن دليل practice في هذا المستودع كود حلقات أساسيًا يطبع طابعًا زمنيًا ورقم تكرار الحلقة إلى وحدة التحكم، حتى تتمكن من التدرب على حقن أنواع مختلفة من الكود في بيئة خاضعة للسيطرة. تتم الإشارة إلى هذه الحلقات التدريبية في الأمثلة المتبقية.
الصيغة الأساسية لاستدعاء asminject.py هي:
# python3 ./asminject.py <target_process_id> <payload> \
--arch [x86-64|x86|arm32] --relative-offsets-from-binaries --stop-method "slow" \
--var <payload_variable_1_name> <payload_variable_1_value> \
# ... \
--var <payload_variable_n_name> <payload_variable_n_value>
في معظم الحالات، ستعمل أي حمولة من الحمولات المستخدمة في الأمثلة على أي من المعماريات المدعومة.
تتضمن معظم توزيعات Linux وحدة أمان نواة تُدعى Yama تتحكم في الوصول إلى استخدام إمكانية ptrace ضد العمليات الأخرى. وبينما لا يلتصق asminject.py بواجهة المصحح، فإنه ما زال يتطلب إذنًا لاستخدام إمكانية ptrace. إذا كنت تتلقى أخطاءً حول هذه الإمكانية، فافحص محتوى /proc/sys/kernel/yama/ptrace_scope. إذا كانت قيمته 2، فشغّل الأمر التالي بصلاحية root:
echo 1 > /proc/sys/kernel/yama/ptrace_scope
لا يمكن إلغاء القيم 3 أو أعلى دون إعادة تشغيل النظام. ومع ذلك، إذا كنت مسؤولًا مخوّلًا لنظام Linux حيث قام شخص ما بتعيين /proc/sys/kernel/yama/ptrace_scope إلى 3 عن طريق الخطأ، أو كنت تجري اختبار اختراق مخوّلًا لبيئة تم فيها تعيين هذه القيمة، فراجع دليل ptrace_scope_kernel_module للاطلاع على حل محتمل لا يتطلب إعادة تشغيل.
gcc على مستوى نظام التشغيل.eval لكود نصي قابل للقراءة البشرية)، توفير حمولات للاستفادة من هذه القدرة لمزيد من التخفي.dlinject.py.asminject.py - هناك حاجة إلى مزيد من البحث.asminject.py من المشغّل سطر كود لحقنه بدلاً من حقن سطر معيّن من كود بايثون في عملية بايثون، ثم يحقنه، ويعيد المخرجات الناتجة، ثم يطلب سطرًا آخر من الكود.
asminject.py بطريقة تتجنب حاجة Frida إلى استدعاء واجهة المصحح مؤقتًا.asminject.py. مثال: التفاعل مع جهاز بعيد باستخدام عتاد مثل PCI leech، أو استغلال حالات حافة قصوى مثل أجهزة يمكن الوصول إلى /proc/mem فيها كجذر عبر مشاركة NFS، إلى آخره.