
SAFE-Einbettungen zum Abgleichen von Funktionen in yara
SAFE ist ein Werkzeug, das entwickelt wurde, um Binary Functions Embeddings zu erstellen, entwickelt von Massarelli L., Di Luna G.A., Petroni F., Querzoni L. und Baldoni R. Sie können SAFE verwenden, um Ihre Funktions-Embeddings zu erstellen, die Sie in Yara-Regeln einsetzen können.
Wenn Sie interessiert sind, werfen Sie einen Blick auf unser Forschungspapier: https://arxiv.org/abs/1811.05296
Wenn Sie dies für Ihre Forschung verwenden, zitieren Sie bitte:
@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}
}
Dies ist nicht der Code zur Reproduktion der Experimente im Papier. Wenn Sie daran interessiert sind, sehen Sie sich an: https://github.com/gadiluna/SAFE
Wenn Sie PyTorch bevorzugen, sehen Sie sich SAFEtorch an: https://github.com/facebookresearch/SAFEtorch
Mit yarasafe können Sie einfach Signaturen für binäre Funktionen erstellen, ohne sich den Assembler-Code ansehen zu müssen! Sie müssen nur die IDA-Pro-Plugins installieren, die Sie im Ordner 'IDA Pro Plugin' dieses Repositorys finden.
Sobald Sie das Plugin installiert haben, können Sie Embeddings für die Funktionen erstellen, die Sie abgleichen möchten. Diese Embeddings können in Yara-Regeln eingefügt werden, um Funktionen mit Yara zu finden. Um leistungsstarke Regeln zu erstellen, können Sie mehrere Funktions-Embeddings mit standardmäßigen Yara-Regeln kombinieren.
In diesem Repository finden Sie das Plugin für IDA Pro und das yarasafe-Modul.
Yarasafe kann Funktionen mit mehr als 50 Anweisungen und weniger als 150 abgleichen.
Installieren Sie zuerst das IDA-Pro-Plugin. Die Anleitung dazu finden Sie im Ordner 'ida-pro-plugin' dieses Repositorys. Anschließend können Sie unseren Docker-Container verwenden oder Yara mit dem yarasafe-Modul bauen.
Der schnellste Weg, yarasafe zu verwenden, ist die Nutzung unseres Docker-Containers.
Holen Sie sich das Image:
docker pull massarelli/yarasafeStarten Sie den Docker und mounten Sie den Ordner, der die Regel und die zu analysierende Datei enthält:
docker run -v {FOLDER_TO_MOUNT}:/home/yarasafe/test -it massarelli/yarasafe bashStarten Sie Yara im Docker mit Ihrer Regel!
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
Installieren Sie die yarasafe-Abhängigkeiten:
cd yarasafe/python_script
pip3 install -r requirements.txt
./bootstrap.sh
./configure.sh
make
export YARAPYSCRIPT={PATH_TO_YARASAFE_REPO}/python_script
Im Ordner 'rules' finden Sie die Regel 'sample_safe_rule.yar'. Diese Regel sollte bei jeder PE-Datei auslösen:
yara {PATH_TO_YARASAFE_REPO}/rules/sample_safe_rule.yar {FILES}
Um Ihre Safe-Yara-Regel zu erstellen, müssen Sie zunächst die Embeddings für Ihre Funktion erstellen. Dazu können Sie das mitgelieferte IDA-Pro-Plugin verwenden. Im Ordner 'ida-pro-plugin' finden Sie alle Informationen zur Ausführung des Plugins!
Sobald Sie die Embeddings für Ihre Funktionen haben, müssen Sie nur noch die Regel erstellen. Ein Beispiel für eine Safe-Yara-Regel ist:
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
}
Die Regel wird erfüllt, wenn in der Probe mindestens eine Funktion vorhanden ist, deren Ähnlichkeit mit dem Ziel mehr als 0,95 beträgt.
Wenn Sie safe zu Ihrem Yara-Repository hinzufügen möchten:
Installieren Sie alle Abhängigkeiten
Kopieren Sie die Datei libyara/modules/safe.c in your_rep/libyara/modules/safe.c
Kopieren Sie den Ordner libyara/include/python in your_rep/libyara/include
Am Ende von libyara/modules/module_list fügen Sie ``` MODULE(safe) hinzu
Ändern Sie libyara/Makefile.am:
libyara_la_LDFLAGS = -version-number 3:8:1
libyara_la_LDFLAGS += -LPATH_TO_PYTHON3.*_LIB -lpython3.*m -ljansson
Kompilieren!