针对自动攻击的代码混淆的加固工作

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/RUB-SysSec/loki

Loki:强化代码混淆以应对自动攻击

b7635b76ff155054

 

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 AvailableArtifact FunctionalArtifact Reproduced徽章。

更多资源

我们在 Zenodo 上发布了一个额外的工件,其中包含我们评估期间生成的二进制文件和数据。

除了我们的论文之外,arxiv 上还提供了一份包含更多详细信息的技术报告。

结构

这个存储库的结构如下:

  1. loki:包含我们的混淆器原型、测试用例和用于生成混淆目标的脚本
  2. lokiattack:包含我们的评估工具,用于攻击被 Loki 混淆的二进制文件
  3. 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_JOBSdocker_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_JOBSdocker_data/zshrc中设置您要使用的核心数。此环境变量由所有构建脚本使用,但是对实验脚本没有影响。

手动安装依赖项

或者,手动安装依赖项。

  1. 安装 Loki(和 z3)

cd loki
./build.sh

  1. 对于LokiAttack,运行:

cd lokiattack
python3 -m pip install --user -r requirements.txt
./install_triton.sh

  1. 最后,安装实验二需要的 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 )。

 

标签:工具分享, 思路分享, 安全学术, 代码混淆