
تضمينات SAFE لمطابقة الدوال في yara
SAFE هي أداة تم تطويرها لإنشاء تمثيلات الدوال الثنائية (Binary Functions Embedding) بواسطة Massarelli L. و Di Luna G.A. و Petroni F. و Querzoni L. و Baldoni R. يمكنك استخدام SAFE لإنشاء تمثيل الدالة الخاص بك لاستخدامها داخل قواعد yara.
إذا كنت مهتمًا، ألقِ نظرة على ورقتنا البحثية: https://arxiv.org/abs/1811.05296
إذا كنت تستخدم هذا في بحثك، يرجى الاستشهاد بـ:
@inproceedings{massarelli2018safe,
title={SAFE: Self-Attentive Function Embeddings for Binary Similarity},
author={Massarelli, Luca and Di Luna, Giuseppe Antonio and Petroni, Fabio and Querzoni, Leonardo and Baldoni, Roberto},
booktitle={Proceedings of 16th Conference on Detection of Intrusions and Malware & Vulnerability Assessment (DIMVA)},
year={2019}
}
هذا ليس الكود الخاص بإعادة إنتاج التجارب في الورقة البحثية. إذا كنت مهتمًا به، ألقِ نظرة على: https://github.com/gadiluna/SAFE
إذا كنت تفضل استخدام PyTorch، ألقِ نظرة على SAFEtorch: https://github.com/facebookresearch/SAFEtorch
باستخدام yarasafe يمكنك بسهولة إنشاء توقيعات للدوال الثنائية دون النظر إلى كود التجميع على الإطلاق! كل ما عليك فعله هو تثبيت إضافات IDA Pro الموجودة في مجلد إضافات IDA Pro لهذا المستودع.
بمجرد تثبيت الإضافة، يمكنك البدء في إنشاء تمثيلات (embeddings) للدالة التي تريد مطابقتها. يمكن إدراج هذه التمثيلات في قواعد yara لمطابقة الدوال باستخدام yara. لإنشاء قاعدة قوية، يمكنك دمج تمثيلات دوال متعددة مع قواعد yara القياسية.
في هذا المستودع ستجد الإضافة لـ IDA Pro ووحدة yarasafe.
يمكن لـ yarasafe مطابقة الدوال التي تحتوي على أكثر من 50 تعليمة وأقل من 150.
أولاً، قم بتثبيت إضافة IDA Pro. يمكنك العثور على الإرشادات في مجلد ida-pro-plugin لهذا المستودع. ثم يمكنك استخدام حاوية docker الخاصة بنا أو يمكنك بناء yara مع وحدة yarasafe.
أسرع طريقة لاستخدام yarasafe هي استخدام حاوية docker الخاصة بنا.
اسحب الصور:
docker pull massarelli/yarasafeقم بتشغيل docker مع ربط المجلد الذي يحتوي على القاعدة والملف المراد تحليله:
docker run -v {FOLDER_TO_MOUNT}:/home/yarasafe/test -it massarelli/yarasafe bashقم بتشغيل yara داخل docker باستخدام القاعدة الخاصة بك!
git clone https://github.com/lucamassarelli/yarasafe.git
sudo apt-get install automake libtool make gcc flex bison
sudo apt-get install libjansson-dev
git clone https://github.com/radare/radare2.git
cd radare2
./sys/install.sh
cd yarasafe/python_script
pip3 install -r requirements.txt
./bootstrap.sh
./configure
make
export YARAPYSCRIPT={PATH_TO_YARASAFE_REPO}/python_script
git clone https://github.com/lucamassarelli/yarasafe.git
brew install automake libtool flex bison
brew install jansson
git clone https://github.com/radare/radare2.git
cd radare2
./sys/install.sh
تثبيت تبعيات yarasafe:
cd yarasafe/python_script
pip3 install -r requirements.txt
./bootstrap.sh
./configure.sh
make
export YARAPYSCRIPT={PATH_TO_YARASAFE_REPO}/python_script
داخل مجلد rules يمكنك العثور على القاعدة sample_safe_rule.yar. يجب أن تثير هذه القاعدة أي ملف PE:
yara {PATH_TO_YARASAFE_REPO}/rules/sample_safe_rule.yar {FILES}
لإنشاء قاعدة safe-yara-rule الخاصة بك، تحتاج أولاً إلى إنشاء التمثيلات (embeddings) لدالتك. لتحقيق ذلك، يمكنك استخدام إضافة IDA Pro المرفقة في هذا المستودع. داخل مجلد ida-pro-plugin يمكنك العثور على جميع المعلومات حول كيفية تشغيل الإضافة!
بمجرد حصولك على تمثيلات دوالك، تحتاج فقط إلى إنشاء القاعدة. مثال على قاعدة safe-yara-rule هو:
import "safe"
rule example
{
meta:
description = "This is just an example"
threat_level = 3
in_the_wild = true
condition:
safe.similarity("[-0.02724416,0.00640265,0.01138294,-0.07013566,0.00306808,-0.09757628,0.10414989,-0.13555837,-0.07873314,-0.00725415,-0.01418876,-0.05907412,-0.12452127,0.06237456,0.02260636,-0.06013175,0.11689295,-0.00200026,-0.03594812,0.07857288,-0.00288544,0.01148411,0.00891006,0.04702956,0.1205316,0.0079077,-0.07449158,0.00653283,0.15414064,0.13021031,0.01325423,-0.35491243,-0.00992016,-0.21460094,0.0558461,-0.07761839,-0.10909985,-0.05616508,0.01800609,0.06736821,0.00308393,0.04241242,-0.08351246,0.13501632,-0.10729794,-0.10229874,0.00066896,-0.01963937,0.05516102,-0.01612499,-0.09743191,-0.0314435,-0.01470971,-0.00125769,-0.01774654,0.2332938,0.14166495,0.16998142,-0.04843156,-0.08931472,0.13102795,0.14147657,0.02275739,-0.04335862,0.05724025,0.03936686,-0.10526938,-0.11637416,-0.0112917,0.05484914,-0.06934103,0.2543144,-0.17833991,-0.00828893,0.00174531,-0.03048271,-0.04773486,0.095866,-0.14434388,0.11433239,-0.10749247,0.03952292,0.03988512,-0.11541581,-0.07812429,-0.04978319,0.32052052,-0.0497911,-0.13022986,0.02477266,-0.05968329,0.01724695,0.01577485,-0.0497415,0.24494685,0.00361651,-0.08172874,-0.07473877,-0.01046288,0.02298573]") > 0.95
}
سيتم استيفاء القاعدة إذا كان داخل العينة دالة واحدة على الأقل يكون تشابهها مع الهدف أكبر من 0.95.
إذا كنت تريد إضافة safe إلى مستودع yara الخاص بك:
تثبيت جميع التبعيات
انسخ الملف libyara/modules/safe.c إلى your_rep/libyara/modules/safe.c
انسخ المجلد libyara/include/python إلى your_rep/libyara/include
في نهاية libyara/modules/module_list أضف MODULE(safe)
تعديل libyara/Makefile.am:
libyara_la_LDFLAGS = -version-number 3:8:1
libyara_la_LDFLAGS += -LPATH_TO_PYTHON3.*_LIB -lpython3.*m -ljansson
قم بالترجمة!