
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 PluginフォルダにあるIDA Proプラグインをインストールするだけです。
プラグインをインストールすると、マッチさせたい関数の埋め込みを作成できます。 これらの埋め込みはYaraルールに挿入して、Yaraを使用して関数をマッチさせることができます。 強力なルールを作成するには、複数の関数埋め込みを標準のYaraルールと組み合わせることができます。
このリポジトリには、IDA Pro用のプラグインとyarasafeモジュールがあります。
Yarasafeは、50命令以上150命令未満の関数をマッチングできます。
まず、IDA Proプラグインをインストールします。このリポジトリのida-pro-pluginフォルダに手順があります。その後、Dockerコンテナを使用するか、yarasafeモジュールでyaraをビルドできます。
yarasafeを使用する最も速い方法は、Dockerコンテナを使用することです。
イメージをプル:
docker pull massarelli/yarasafeルールと分析対象ファイルを含むフォルダをマウントしてDockerを起動:
docker run -v {FOLDER_TO_MOUNT}:/home/yarasafe/test -it massarelli/yarasafe bashDocker内で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
rulesフォルダ内にルール sample_safe_rule.yar があります。このルールは任意のPEファイルでトリガーするはずです:
yara {PATH_TO_YARASAFE_REPO}/rules/sample_safe_rule.yar {FILES}
安全なYaraルールを作成するには、まず関数の埋め込みを作成する必要があります。 これを行うには、このリポジトリに同梱されているIDA Proプラグインを使用できます。 ida-pro-pluginフォルダ内に、プラグインの実行方法に関するすべての情報があります!
関数の埋め込みを取得したら、ルールを作成するだけです。 安全な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を超える関数が少なくとも1つ存在する場合に満たされます。
Yaraリポジトリにsafeを追加する場合:
libyara_la_LDFLAGS = -version-number 3:8:1
libyara_la_LDFLAGS += -LPATH_TO_PYTHON3.*_LIB -lpython3.*m -ljansson