SEMA是一款基于符号执行的恶意软件分析工具,该工具可以帮助广大研究人员轻松执行恶意软件分析任务。
SEMA 基于 angr,而angr则一种用于提取 API 调用的符号执行引擎。SEMA扩展了 ANGR,使用基于系统调用依赖关系图 (SCDG) 创建代表性签名的策略,这些 SCDG 可用于机器学习模块进行分类/检测。
SEMA的工作原理如下:
1、收集来自不同恶意软件家族的标记二进制文件集合,并将其用作工具链的输入。
2、Angr是一个符号执行框架,用于以符号方式执行二进制文件并提取执行痕迹。为此,开发了不同的启发式方法来优化符号执行。
3、使用 Angr 提取与一个二进制文件相对应的多个执行跟踪(即使用的 API 调用及其参数),并使用多个图启发式方法收集在一起以构建 SCDG。
4、然后将这些得到的 SCDG 用作图形挖掘的输入,以提取同一家族的 SCDG 之间的公共图并创建签名。
5、最后,当需要对新样本进行分类时,将构建其 SCDG,并使用简单的相似性度量将其与已知家族的 SCDG 进行比较。
1、Python 3.8
2、Docker >=26.1.3 , docker buildx, Docker Compose >=v2.27.0
3、radare2
4、libvirt-dev, libgraphviz-dev, wheel
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3环境。
接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/csvl/SEMA.git
然后切换到项目目录中,使用下列命令构建和安装SEMA:
cd SEMA # Full installation (ubuntu) make build-toolchain;
pip install sema_toolchain python3 sema_scdg/application/SemaSCDG.py sema_scdg/application/configs/config.ini
首先启动容器:
make run-toolchain
这将启动 SCDG、分类器和 Web 应用服务。如果您只想使用 SCDG 或分类器,请参阅下面的具体部分。
等待容器启动,然后在浏览器上访问 127.0.0.1:5000。
要退出工具链,只需按 Ctrl+C,然后使用
make stop-toolchain
停止所有docker容器。
如果要删除所有图像:
docker rmi sema-web-app docker rmi sema-scdg docker rmi sema-classifier
要仅使用 SemaSCDG,首先使用如下卷运行 SCDG 容器:
docker run --rm --name="sema-scdg" -v ${PWD}/OutputFolder:/sema-scdg/application/database/SCDG -v ${PWD}/ConfigFolder:/sema-scdg/application/configs -v ${PWD}/InputFolder:/sema-scdg/application/database/Binaries -p 5001:5001 -it sema-scdg bash
在此命令中:
第一卷对应于放置结果的输出文件夹。
第二个卷对应的文件夹包含将传递给docker的配置文件。
第三个匹配包含要传递给容器的二进制文件的文件夹。
以已经提供的文件为例,位于 sema_toolchain 文件夹内,运行:
docker run --rm --name="sema-scdg" -v ${PWD}/database/SCDG:/sema-scdg/application/database/SCDG -v ${PWD}/sema_scdg/application/configs:/sema-scdg/application/configs -v ${PWD}/database/Binaries:/sema-scdg/application/database/Binaries -p 5001:5001 -it sema-scdg bash
如果你希望在容器运行时修改代码,请使用
docker run --rm --name="sema-scdg" -v ${PWD}/database:/sema-scdg/application/database -v ${PWD}/sema_scdg/application:/sema-scdg/application -p 5001:5001 -it sema-scdg bash
要运行实验,请在容器内运行:
python3 SemaSCDG.py configs/config.ini
或者如果你想使用 pypy3:
pypy3 SemaSCDG.py configs/config.ini
参数放在配置文件中:configs/config.ini。您可以随意修改它或创建新的配置文件来运行不同的实验。
默认情况下, SCDG 的输出会被放入database/SCDG/runs/。如果您不使用卷,并且想要将一些运行从容器保存到主机,请使用:
make save-scdg-runs ARGS=PATH
本项目的开发与发布遵循BSD-2-Clause开源许可协议。
SEMA:【GitHub传送门】