针对自动攻击的代码混淆的加固工作
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/RUB-SysSec/loki
Loki:强化代码混淆以应对自动攻击
Loki 是一种学术混淆器原型,旨在展示新颖的 VM 处理程序强化技术。
它基于我们 在 Usenix Security '22(链接)上发表的论文 :
@inproceedings{schloegel2022loki,
author = {Moritz Schloegel and Tim Blazytko and Moritz Contag and Cornelius Aschermann and Julius Basler and Thorsten Holz and Ali Abbasi},
title = {{Loki}: Hardening Code Obfuscation Against Automated Attacks},
year = {2022},
booktitle = {USENIX Security Symposium}
}
在此存储库中,我们开源了我们的实施和评估工具。请注意,这是研究代码:我们的学术原型并非用于生产,而是按原样提供。除非另有说明,否则我们所有的代码和数据均根据 AGPL3 获得许可。Loki 已被Usenix Artifact Evaluation Committee授予Artifact Available、Artifact Functional和Artifact Reproduced徽章。
更多资源
我们在 Zenodo 上发布了一个额外的工件,其中包含我们评估期间生成的二进制文件和数据。
除了我们的论文之外,arxiv 上还提供了一份包含更多详细信息的技术报告。
结构
这个存储库的结构如下:
- loki:包含我们的混淆器原型、测试用例和用于生成混淆目标的脚本
- lokiattack:包含我们的评估工具,用于攻击被 Loki 混淆的二进制文件
- experiments:我们评估的所有实验,记录在案并使用脚本重现它们
安装
使用 Loki 的最简单方法是 Docker。
Docker
我们提供了一个 Dockerfile 和一些便利/帮助脚本。您要么需要从 Dockerhub 中拉取镜像,要么自己构建。
从 Dockerhub 拉取镜像
为了您的方便,您可以使用我们的pull.sh脚本从Dockerhub中拉取镜像:
./pull.sh
拉取镜像时,无需自己构建 docker 镜像。您可以跳到运行 docker 容器。
构建 docker 镜像
您可以自己构建它,而不是从 Dockerhub 中提取图像:
运行./docker_build.sh——镜像名称在docker_data/docker_config.sh中设置。默认情况下,这将使用所有可用的 CPU 内核(由 确定nproc)。如果不需要,请PARALLEL_JOBS在docker_build.sh中设置您要使用的内核数。
通常,我们建议在至少具有 64GB RAM 的服务器上构建和运行它。无论是构建图像还是运行实验,更多的 CPU 内核和更多的 RAM 都是有益的。如果 RAM 不足,请设置PARALLEL_JOBS为较低的值。
运行 docker 容器
一旦你从 Dockerhub 中拉取镜像或者你自己构建它,你就可以启动一个容器:
运行./docker_run.sh两次:第一次,启动 docker 容器。如果./docker_run.sh在容器运行时运行,则您已连接 ( /bin/zsh)。bash 和 zsh 历史记录保存在 docker_data 中(与 zshrc 一样)。该目录在容器中作为卷提供/home/user/loki,它允许将文件复制到容器中或从容器中复制文件。
停止 docker 容器
要停止(并删除)容器,请运行./docker_stop.sh.
Docker 和依赖项中的步骤
进入 Docker 容器后,通过运行以下命令安装所有工具和依赖项:
./setup.sh
此脚本将使用所有可用内核(由 确定nproc)。如果不需要,请PARALLEL_JOBS在docker_data/zshrc中设置您要使用的核心数。此环境变量由所有构建脚本使用,但是对实验脚本没有影响。
手动安装依赖项
或者,手动安装依赖项。
- 安装 Loki(和 z3)
cd loki
./build.sh
- 对于LokiAttack,运行:
cd lokiattack
python3 -m pip install --user -r requirements.txt
./install_triton.sh
- 最后,安装实验二需要的 tracing Intel Pin:
cd experiments/experiment_02_coverage/tracer
./install_pin.sh
入门
一旦您构建了我们的 docker 容器并安装了依赖项,您就可以在实验中查看我们的实验;他们的文档和代码是熟悉 Loki 和 LokiAttack 提供的全部功能的良好起点。
如果您对混淆感兴趣,请前往loki,这是我们能够混淆代码(有限制)的原型实现。对于实际用途,高级包装器脚本obfuscate.py应该足以生成混淆的二进制文件。如果您对更深层次的架构感兴趣,请务必查看 Loki 的两个组件:
- translator : 该C++组件负责解析输入程序,提升待混淆功能。一旦第二个组件处理了输入,翻译器将编译最终的二进制文件。
- 混淆器:这个 Rust 组件在函数的提升表示上工作,并应用实际的混淆转换。
如果您对反混淆更感兴趣,请查看lokiattack,它提供了一个提取所有 Loki 处理程序的攻击框架,以便可以测试不同的攻击(例如,污点分析、符号执行或程序合成)。我们为这些技术提供插件;如果你想出一个自己的,写你自己的插件!对于大多数用途,我们的包装脚本run.py应该提供足够的接口来解锁 LokiAttack 的功能。
联系我们
如需更多信息,请联系m_u00d8 ( @m_u00d8 ) 或mrprazer ( @mr_phrazer )。
