
SAFE вложения для сопоставления функций в yara
SAFE — это инструмент для создания вложений бинарных функций, разработанный 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 Plugin этого репозитория.
После установки плагина вы можете начать создавать вложения для функций, которые хотите сопоставить. Эти вложения можно вставить в правила 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, сначала необходимо создать вложения для вашей функции. Для этого вы можете использовать плагин IDA Pro, поставляемый в этом репозитории. В папке ida-pro-plugin вы найдете всю информацию о том, как запустить плагин!
После получения вложений для ваших функций вам останется только создать правило. Пример правила safe-yara:
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
Скомпилируйте! `