
SAFE एम्बेडिंग्स yara में फ़ंक्शंस से मेल खाने के लिए
SAFE एक उपकरण है जो बाइनरी फंक्शन एम्बेडिंग बनाने के लिए विकसित किया गया है, जिसे Massarelli L., Di Luna G.A., Petroni F., Querzoni L. और Baldoni R. द्वारा विकसित किया गया है। आप अपने फंक्शन एम्बेडिंग को yara नियमों के अंदर उपयोग करने के लिए SAFE का उपयोग कर सकते हैं।
यदि आप रुचि रखते हैं तो हमारे शोध पत्र पर एक नज़र डालें: 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 Plugin फ़ोल्डर में मिलेंगे।
एक बार प्लगइन इंस्टॉल करने के बाद आप उस फंक्शन के लिए एम्बेडिंग बनाना शुरू कर सकते हैं जिसे आप मैच करना चाहते हैं। इन एम्बेडिंग को yara नियमों में डाला जा सकता है ताकि yara का उपयोग करके फंक्शन को मैच किया जा सके। शक्तिशाली नियम बनाने के लिए, आप कई फंक्शन एम्बेडिंग को मानक yara नियमों के साथ जोड़ सकते हैं।
इस रिपॉजिटरी में आपको IDA Pro के लिए प्लगइन और yarasafe मॉड्यूल मिलेगा।
Yarasafe 50 से अधिक और 150 से कम निर्देशों वाले फंक्शन को मैच कर सकता है।
सबसे पहले IDA Pro प्लगइन इंस्टॉल करें। इसके लिए निर्देश आप इस रिपॉजिटरी के ida-pro-plugin फ़ोल्डर में पा सकते हैं। फिर आप हमारे डॉकर कंटेनर का उपयोग कर सकते हैं या yarasafe मॉड्यूल के साथ yara बना सकते हैं।
yarasafe का उपयोग करने का सबसे तेज़ तरीका हमारे डॉकर कंटेनर का उपयोग करना है।
इमेज को पुल करें:
docker pull massarelli/yarasafeडॉकर को उस फ़ोल्डर को माउंट करके शुरू करें जिसमें नियम और विश्लेषण करने के लिए फ़ाइल है:
docker run -v {FOLDER_TO_MOUNT}:/home/yarasafe/test -it massarelli/yarasafe bashअपने नियम के साथ डॉकर के अंदर yara लॉन्च करें!
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
cd yarasafe/python_script
pip3 install -r requirements.txt
./bootstrap.sh
./configure.sh
make
export YARAPYSCRIPT={PATH_TO_YARASAFE_REPO}/python_script
नियम फ़ोल्डर के अंदर आपको sample_safe_rule.yar नियम मिलेगा। यह नियम किसी भी PE फ़ाइल के साथ ट्रिगर होना चाहिए:
yara {PATH_TO_YARASAFE_REPO}/rules/sample_safe_rule.yar {FILES}
अपना safe-yara-rule बनाने के लिए, आपको पहले अपने फंक्शन के लिए एम्बेडिंग बनानी होगी। इसे पूरा करने के लिए, आप इस रिपॉजिटरी के साथ शामिल 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 से अधिक है।
यदि आप अपने yara रिपॉजिटरी में safe जोड़ना चाहते हैं:
सभी निर्भरताएँ इंस्टॉल करें
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
कंपाइल करें!