
أداة تحليل وتصنيف البرامج الضارة.
إنهيل هي أداة تحليل وتصنيف للبرمجيات الخبيثة قادرة على أتمتة وتوسيع نطاق العديد من عمليات التحليل الثابت.
هذه هي النسخة التجريبية، لأغراض الاختبار، والملاحظات، والتطوير المجتمعي.
بدأت إنهيل كسلسلة من السكريبتات الصغيرة التي استخدمتها عند جمع وتحليل كمية كبيرة من البرمجيات الخبيثة من مصادر متنوعة. هناك العديد من الأطر والأدوات للقيام بعمل مماثل، لكن لم يتوافق أي منها حقًا مع سير عملي في العثور السريع على عدد كبير من الملفات وتصنيفها وتخزين معلومات عنها. بعضها أيضًا يتطلب مفاتيح API باهظة الثمن وخدمات أخرى تكلف مالًا.
انتهى بي الأمر بتحويل هذه السكريبتات إلى شيء يمكن للأشخاص إعداده واستخدامه بسرعة، سواء كنت تعمل من خادم بحث، أو كمبيوتر محمول، أو كمبيوتر منخفض التكلفة مثل Raspberry Pi.
تم بناء هذه الأداة لتعمل على لينكس باستخدام Python3 و ElasticSearch و radare2 و yara و binwalk. كما أن jq مطلوب لطباعة المخرجات من قاعدة البيانات بشكل منسق. فيما يلي بعض التعليمات الأساسية للتثبيت.
هناك مجموعة من الأشياء في ملف config.yml لم يتم إعدادها بعد، فقط اتركها كما هي ما لم يُذكر خلاف ذلك في هذه الوثائق.
تثبيت المتطلبات
python3 -m pip install -r requirements.txt
ليست هناك حاجة إلى قاعدة بيانات لاستخدام إنهيل، ولكن إذا كنت ترغب في إعداد واحدة، فاتبع هذه التعليمات واضبط خيار enable_database في config.yml على True.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo service elasticsearch start
يمكنك أيضًا التثبيت يدويًا باتباع هذه الوثائق
بالإضافة إلى ذلك، يمكنك إعداد مجموعة ELK كاملة لأغراض التصور وتحليل البيانات. ليس من الضروري لاستخدام هذه الأداة.
من المهم تثبيت radare2 من المستودع، وليس من مدير الحزم الخاص بك. إصدارات مدير الحزم لا تأتي بكل الميزات المطلوبة لإنهيل.
git clone https://github.com/radare/radare2
cd radare2
sys/install.sh
sudo apt-get install automake libtool make gcc
wget https://github.com/VirusTotal/yara/archive/v3.10.0.tar.gz
tar xvzf v3.10.0.tar.gz
cd yara-3.10.0/
./bootstrap.sh
./configure
make
sudo make install
إذا حصلت على أي أخطاء حول الكائنات المشتركة، جرب هذا لإصلاحها.
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ldconfig
من الأفضل على الأرجح تثبيت binwalk ببساطة من المستودع.
git clone https://github.com/ReFirmLabs/binwalk
cd binwalk
sudo python3 setup.py install
مزيد من المعلومات حول تثبيت الميزات الإضافية لـ binwalk موجودة هنا.
هذه مكتبة تقوم بتجزئة أقسام ملفات ELF لتحليل عائلة البرمجيات الخبيثة. telfhash يعتمد على tlsh، لذا تعليمات تثبيت كلاهما كما يلي:
إعداد tlsh
git clone https://github.com/trendmicro/tlsh
cd tlsh
./make.sh
cd py_ext/
python3 ./setup.py build
sudo python3 ./setup.py install
إعداد telfhash
git clone https://github.com/trendmicro/telfhash
cd telfhash
sudo python3 setup.py install
إذا كنت ترغب في استخدام خادم ويب لاستضافة مخرجات إنهيل للمشاركة، قم بتعيين المتغيرات في config.yml إلى المسارات المناسبة، وتأكد من وجود الدلائل!
web:
gen_html: False
webdir: "/var/www/html/" # The actual web directory
fqdn: "http://threat.land" # Your website
in_path: "/var/www/html/inhaled/" # The path to inhale output
ex_path: "/var/www/html/exhaled/" # The path for db query cache output
لاستخدام مخرجات html، قم بتشغيل إنهيل كالتالي:
python3 inhale.py [all your args here] --html
حدد الملف الذي تقوم بفحصه حسب النوع:
-f INFILE تحليل ملف واحد
-d DIRECTORY تحليل مجلد من الملفات
-u URLFILE تحليل ملف عن بُعد (url)
-r RDIRECTORY تحليل مجلد عن بُعد (url)
-l URLLIST تحليل قائمة عناوين URL في ملف نصي
خيارات أخرى:
-t TAGS إضافة وسوم إضافية إلى المخرجات.
-b إيقاف تواقيع binwalk
-y YARARULES تحديد قواعد Yara مخصصة
-o OUTDIR تخزين الملفات الممسوحة في مجلد إخراج محدد (الافتراضي: ./files/<date>/)
-i طباعة المعلومات فقط، لا تضف الملفات إلى قاعدة البيانات
--html حفظ المخرجات كـ html إلى webdir.
تشغيل inhale.py سيقوم بإجراء جميع التحليلات على ملف/مجلد/url معين وطباعتها على terminal الخاص بك.
عرض معلومات عن /bin/ls، لكن لا تضف إلى قاعدة البيانات
python3 inhale.py -f /bin/ls -i
إضافة المجلد 'malwarez' إلى قاعدة البيانات
python3 inhale.py -d malwarez/
تحميل هذا الملف وإضافته إلى قاعدة البيانات
python3 inhale.py -u https://thugcrowd.com/chal/skull
تحميل كل شيء في هذا المجلد البعيد، ووسم الكل كـ "تصيد":
python3 inhale.py -r http://someurl.com/opendir/ -t phishing
نصيحة محترف: استخدم هذا البحث بالوسم على تويتر للعثور على مجلدات مفتوحة مثيرة للاهتمام قد تحتوي على برمجيات خبيثة. استخدم على مسؤوليتك الخاصة.
يمكنك تمرير قواعد yara الخاصة بك باستخدام -y، هذا عمل قيد التطوير بشكل كبير وكل شيء تقريبًا في "YaraRules" هو من https://github.com/kevthehermit/PasteHunter/tree/master/YaraRules. تحية لـ @KevTheHermit
استخدم db.sh للاستعلام (قريبًا سيصبح سكريبتًا لطيفًا)
db.sh *something* | jq .
فيما يلي نموذج البيانات الحالي المستخدم في قاعدة بيانات elasticsearch. لن يُستخدم كل واحد من هذه لكل ملف معين. أي وسوم r2_* محجوزة عادةً للثنائيات من نوع ما.
هناك بعض المشكلات المعروفة مع هذا المشروع (تتعلق بشكل أساسي بالإصدارات من مديري الحزم)، وهنا سأتابع أي شيء له حل.
إذا حصلت على خطأ مثل هذا:
elasticsearch.exceptions.RequestError: RequestError(400, 'illegal_argument_exception', 'Limit of total fields [1000] in index [inhaled] has been exceeded')
قد يكون لديك إصدار أقدم من elasticSearch. يمكنك الترقية، أو يمكنك زيادة حد الحقول باستخدام هذا السطر الواحد.
curl -XPUT 'localhost:9200/inhaled/_settings' -H 'Content-Type: application/json' -d'{ "index" : { "mapping" : { "total_fields" : { "limit" : "100000" }}}}'
نرحب بالطلبات (PRs)! إذا كنت تريد تقديم ملاحظات محددة، يمكنك أيضًا مراسلتي مباشرة @netspooky على تويتر.
أود شكر كل من ساعدني في اختبار هذه الأداة. كما أشكر Plazmaz على القيام بفحص أولي للكود لجعله أنظف قليلاً.
تحيات لـ: hermit, plazmaz, nux, x0, dustyfresh, aneilan, sshell, readme, dnz, notdan, rqu, specters, nullcookies, ThugCrowd، وكل من شارك في ThreatLand و TC Safari Zone.
| Name | الوصف |
|---|
| filename | المسار الكامل للملف الثنائي |
| file_ext | امتداد الملف |
| filesize | حجم الملف |
| filetype | نوع الملف بناءً على قيمة magic. ليس موثوقًا مثل تواقيع binwalk. |
| md5 | تجزئة MD5 للملف |
| sha1 | تجزئة SHA1 للملف |
| sha256 | تجزئة SHA256 للملف |
| added | تاريخ إضافة الملف |
| r2_arch | بنية الملف الثنائي |
| r2_baddr | العنوان الأساسي للثنائي |
| r2_binsz | حجم كود البرنامج |
| r2_bits | بتات البنية - 8/16/32/64 إلخ. |
| r2_canary | ما إذا كانت استعلامات المكدس مفعلة أم لا |
| r2_class | صنف الثنائي |
| r2_compiled | تاريخ تجميع الثنائي |
| r2_dbg_file | ملف التصحيح للثنائي |
| r2_intrp | المفسر الذي يستدعيه الثنائي إذا كان مرتبطًا ديناميكيًا |
| r2_lang | لغة الكود المصدري |
| r2_lsyms | ما إذا كانت هناك رموز تصحيح أم لا |
| r2_machine | نوع الجهاز، يعني عادةً وحدة المعالجة المركزية التي صُمم الثنائي لها |
| r2_os | نظام التشغيل الذي يُفترض أن يعمل عليه الجهاز |
| r2_pic | ما إذا كان هناك كود مستقل عن الموضع (PIC) أم لا |
| r2_relocs | ما إذا كانت هناك إعادة توطين أم لا |
| r2_rpath | مسار البحث في وقت التشغيل - إن أمكن |
| r2_stripped | ما إذا كان الثنائي مجردًا (stripped) أم لا |
| r2_subsys | النظام الفرعي للثنائي |
| r2_format | تنسيق الثنائي |
| r2_iorw | ما إذا كانت استدعاءات ioctl موجودة |
| r2_type | نوع الثنائي، سواء كان ملفًا تنفيذيًا أو كائنًا مشتركًا إلخ. |
| yara | يحتوي على قائمة بمطابقات yara |
| binwalk | يحتوي على قائمة بتواقيع binwalk ومواقعها في الثنائي |
| tags | أي وسوم معرفة من قبل المستخدم تم تمريرها مع العلم -t. |
| url | عنوان URL الأصلي إذا تم تحميل الملف عن بُعد |
| urls | أي عناوين URL تم سحبها من الثنائي |