
yara에서 함수를 매칭하기 위한 SAFE 임베딩
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
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을 생성하려면 먼저 함수에 대한 임베딩을 생성해야 합니다. 이를 위해 이 저장소에 포함된 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
컴파일!