AI 摘要 · 由英文经 AI 翻译

FoC: Figure out the Cryptographic Functions in Stripped Binaries with LLMs

Xiuwei Shang, Guoqiang Chen, Shaoyin Cheng, Shikai Guo, Yanming Zhang, Weiming Zhang, Nenghai Yu

arXiv:2403.18403v3cs.CR

TL;DR

分析剥离二进制文件中的密码函数颇具挑战性,但这对病毒分析和遗留代码检查等任务十分重要。FoC结合自然语言二进制摘要、相似性检索和密码二进制数据集。结果显示,该方法优于ChatGPT和此前表现最佳的相似性方法,并在病毒分析和漏洞检测中展现出实际效果。

  • 问题

    理解剥离二进制文件中的密码函数颇具挑战,而现有相似性方法对密码函数的覆盖有限,并依赖已知函数库。

    出处:§1 · p. 2
  • 方法

    FoC构建包含自动生成语义标签的密码二进制数据集,并结合FoC-BinLLM生成自然语言摘要、FoC-Sim进行相似性检索。

    出处:§1 · p. 3
  • 结果

    在ROUGE-L指标上,FoC-BinLLM比ChatGPT高14.61%;在密码二进制数据集上,FoC-Sim的Recall@1比此前表现最佳的方法高52%。

    出处:§1 · p. 3, §10 · p. 33
  • 启示与局限

    FoC的各组件在密码函数相关的病毒分析和1-day漏洞检测中展现出实际能力。

    出处:§10 · p. 33

    FoC独立分析二进制函数,因此缺少调用上下文和交叉引用可能导致可用信息不足。

    出处:§8 · p. 31

Abstract

from arXiv · show

Analyzing the behavior of cryptographic functions in stripped binaries is a challenging but essential task. Cryptographic algorithms exhibit greater logical complexity compared to typical code, yet their analysis is unavoidable in areas such as virus analysis and legacy code inspection. Existing methods often rely on data or structural pattern matching, leading to suboptimal generalizability and suffering from manual work. In this paper, we propose a novel framework called FoC to Figure out the Cryptographic functions in stripped binaries. In FoC, we first build a binary large language model (FoC-BinLLM) to summarize the semantics of cryptographic functions in natural language. The prediction of FoC-BinLLM is insensitive to minor changes, such as vulnerability patches. To mitigate it, we further build a binary code similarity model (FoC-Sim) upon the FoC-BinLLM to create change-sensitive representations and use it to retrieve similar implementations of unknown cryptographic functions in a database. In addition, we construct a cryptographic binary dataset for evaluation and to facilitate further research in this domain. And an automated method is devised to create semantic labels for extensive binary functions. Evaluation results demonstrate that FoC-BinLLM outperforms ChatGPT by 14.61% on the ROUGE-L score. FoC-Sim outperforms the previous best methods with a 52% higher Recall@1. Furthermore, our method also shows practical ability in virus analysis and 1-day vulnerability detection.

1 引言

FoC通过语义摘要、相似性检索和专门构建的数据集,解决剥离二进制文件中密码学函数难以理解的问题。其结果显示,该方法优于以往方法,并可用于病毒分析和漏洞检测。

1 引言

  • 面向密码学的启发式方法容易受到隐藏常量和编译器优化的影响,通常只能提供基本类别,而无法揭示更深层的语义。出处:§1 · p. 2
  • 二进制代码相似性方法能够反映细微的代码变更,但其在密码学应用中的研究仍不充分,且检索效果受已知函数库限制。出处:§1 · p. 3
  • FoC将FoC-BinLLM生成的自然语言语义摘要与FoC-Sim相结合;后者利用语义、结构和密码学特征检索同源函数。该框架旨在从数据库中识别未知密码学函数。出处:§1 · p. 3
  • 作者从常用库构建了密码学二进制数据集,并实现了大规模二进制代码语义标注的自动化。出处:§1 · p. 3
  • 在ROUGE-L上,FoC-BinLLM比ChatGPT高14.61%;FoC-Sim的Recall@1则比此前最佳方法高52%。出处:§1 · p. 3
  • 据报告,FoC还具有实际应用价值,可用于密码学病毒分析以及真实固件中存在漏洞的密码学实现的识别。出处:§1 · p. 4

2 背景与动机

FoC 将剥离二进制文件中的密码函数分析定义为同时生成自然语言描述和用于相似性检测的嵌入表示。本节从数据集构建、语义标注和跨版本分析等方面说明这一双重输出的动机,并指出现有技术尚未充分应对这些挑战。

2.1 问题定义

  • 分析目标是生成密码函数行为与用途的自然语言摘要,并生成用于二进制代码相似性检测的嵌入表示。分析该函数时需结合其所在的二进制文件。出处:§2.1 · p. 4

2.2 挑战

  • 由于不同实现会因算法、标准、开发者、编译环境、优化方式和体系结构而异,因此难以构建多样化的公开数据集。论文指出,缺乏全面的密码二进制数据集是阻碍该领域研究的一项因素。出处:§2.2 · pp. 4–5
  • 高质量语义标签必须描述二进制函数的行为,但函数名和原语类别过于简略,注释可能缺失,而且大规模人工标注并不可行。论文指出,要有效开展训练和评估,必须自动、准确地生成标签。出处:§2.2 · p. 5
  • 密码算法更新可能非常细微,例如仅涉及单行漏洞补丁,因此生成模型能否感知微小代码变更是一项关键挑战。本节将这一要求称为跨版本感知能力。出处:§2.2 · p. 5

2.3 现有技术

  • 现有技术尚未解决上述挑战:启发式方法依赖代码模式或已知实现,而二进制摘要方法面向的是通用代码,并非密码代码。二进制代码相似性检测(BCSD)方法可能有助于实现跨版本感知,但文中引用的方法并非针对密码学设计。出处:§2.3 · pp. 5–6

2.4 大语言模型与本文动机

  • FoC 的动机是采用面向二进制代码的 LLM 生成语义描述,并基于该模型加入 BCSD 模块,以生成具备跨版本感知能力的嵌入表示。这一动机还将自动生成语义描述与构建丰富的密码二进制数据集联系起来。出处:§2.4 · p. 7

3 数据集构建

FoC 构建了一个密码学二进制数据集,并实现语义标签生成自动化,随后将生成的标签与源代码类别进行核验。该数据集涵盖多种编译设置;标签生成流程则应对开发者注释稀缺且质量不佳的问题。

3 数据集构建

  • FoC 构建数据集,旨在解决公开可用且实现类型多样的密码学二进制数据集不足的问题,并支持方法开发和后续研究。该数据集主要收集大型 C 项目中广泛使用的密码学库、实现和模块。出处:§3.1 · p. 7, §3 · p. 7

3.1 密码学数据集收集

  • 项目使用两种编译器、四个优化级别和六种目标架构进行交叉编译;随后对二进制文件进行剥离、反编译,并依据函数 MD5 去重。为避免训练集和测试集中出现编译代码重叠的项目,研究者将这类项目排除在其中一方之外。出处:§3.1 · p. 8

3.2 自动化语义标签生成

  • 由于带注释的函数不足 20%,且注释往往缺少有用描述,或包含间接、冗余信息,作者根据源代码元数据生成摘要。提示词要求生成一句话摘要,以减少伪代码中未体现的信息。出处:§3.2 · pp. 8–10

3.3 基于关键词的判别器

  • 生成的摘要中有超过 85% 通过了基于关键词的判别器;开发者注释与模型摘要的一致性得分为 43.55% ROUGE-L。仅当摘要中识别出的类别与源代码中的类别一致时,判别器才接受该标签。出处:§3.3 · p. 10

4 方法概述

FoC 将用于命名和总结密码函数的二进制语言模型,与用于检索相关实现的相似度模型结合起来。两个模型共用训练好的编码器,使一次输入即可为逆向工程师提供互补的输出。

  • FoC-BinLLM 解读提升后的伪代码,预测剥离符号后的函数名称,并生成简洁的函数摘要。该模型经过训练,可解读剥离符号后的二进制文件中密码函数的行为。出处:§4 · pp. 11–12
  • 两个模型共用一个编码器:FoC-Sim 复用训练好的编码器,仅训练轻量级 GCN 和 MLP;推理时,两个模型在编码后并行运行。单次输入既可生成语义摘要,也可检索同源的相似函数。出处:§4 · pp. 11–12
  • FoC-Sim 将 FoC-BinLLM 的语义编码器与控制流图结构及密码学特征结合起来,对函数进行嵌入表示。其表示对代码的小幅改动敏感,弥补了生成模型对此类改动不敏感的问题。出处:§4 · p. 12
  • 如果数据库中存在同源实现,FoC-Sim 可检索其源代码层面的信息,也可用于检查二进制文件中是否存在易受攻击的密码实现。出处:§4 · pp. 12–13

5 详细设计

FoC-BinLLM通过生成任务和对比任务适配预训练编码器—解码器模型,其编码器为FoC-Sim提供语义表示。FoC-Sim融合语义、结构和密码学特征嵌入,用于相似度学习。

5 详细设计

5.1.1 黄金模型初始化。

  • FoC-BinLLM以预训练的CodeT5+为基础,其编码器—解码器架构同时支持理解和生成任务。CodeT5+以此前预训练的LLM权重初始化,并在大规模源代码数据集上训练。出处:§5.1.1 · p. 13

5.1.2 多任务与冻结解码器训练。

  • FoC-BinLLM采用函数名预测、二进制代码摘要和二进制—源代码对比学习任务;对比任务使源代码与二进制代码的嵌入更加接近。名称预测提供简要的功能线索,摘要则更全面地描述行为;对比学习使预训练于源代码的模型适应二进制代码。出处:§5.1.2 · pp. 14–15
  • 解码器被冻结,而编码器和交叉注意力层仍可训练,从而减少可训练参数的数量。解码器的层数多于编码器,因为作者认为解码器对复杂的因果生成任务至关重要。出处:§5.1.2 · p. 15

5.2.1 代码语义与控制结构编码。

  • FoC-Sim使用FoC-BinLLM编码器表示伪代码,并使用五层GCN对带属性的控制流图进行摘要。GCN最多跨五个图步骤聚合邻居节点信息,再将节点状态求和,得到函数结构嵌入。出处:§5.2 · p. 15, §5.2.1 · p. 16

5.2.2 密码学特征。

  • 密码学特征将基本块的算术与逻辑操作码统计、函数级关键词统计和图统计结合为一个65维向量。函数级特征包括密码学类别关键词计数、基本块数、边数和被调用函数数。出处:§5.2.2 · pp. 16–17

5.2.3 嵌入融合与模型训练。

  • FoC-Sim通过单层MLP融合语义、控制结构和人工设计的密码学特征嵌入。训练对从数据集中采样;同一文件和项目中名称相同的函数被视为相似,并采用MultipleNegativesRankingLoss。出处:§5.2.3 · p. 17

6 实验设置

实验设置评估 FoC-BinLLM 的摘要生成、FoC-Sim 的相似性检测、实际分析能力及各组件的贡献。实验结合密码学与通用二进制数据、任务专用指标,以及明确的硬件和训练配置。

6.1 研究问题

  • 评估旨在考察 FoC-BinLLM 能否总结密码学二进制文件、FoC-Sim 能否检测相似性、FoC 能否用于病毒分析和漏洞分析,以及各组件是否有助于提升性能。出处:§6.1 · p. 17

6.2.1 数据集

  • 训练集由密码学数据集和 GNU 仓库中的二进制文件组成,随后通过 MD5 去重和 MinHash 筛选来减少数据泄漏和文本相似性。Five percent of the training data is held out for validation.出处:§6.2.1 · p. 18

6.2.2 评估指标

  • 摘要生成使用 BLEU-4、METEOR 和 ROUGE-L 评估;相似性检测则在成对比较和搜索任务中使用 AUC、Recall@K 和 MRR@K。此外,实验还通过 ROC 曲线评估相似性,并报告不同阈值下的 TPR 和 FPR。出处:§6.2.2 · pp. 18–19

6.3.1 实验环境

  • 实验在 Ubuntu 20.04 上运行,硬件配置为 48 核 Intel Xeon Gold 5220 CPU、256 GB RAM 和 NVIDIA RTX 3090 GPUs。使用 IDA Pro 反编译二进制函数;模型基于 PyTorch 和 Transformers 实现,并通过 DeepSpeed ZeRO2 加速。出处:§6.3.1 · pp. 19–20

6.3.2 模型与训练设置

  • FoC-BinLLM 使用 12 层编码器和解码器,其中 38.11% 的参数可训练;FoC-Sim 使用该模型的编码器、五层 GCN 和 256 维 MLP。出处:§6.3.2 · p. 20
  • FoC-BinLLM 训练四个 epoch,其中一个用于对比学习,三个用于名称预测和摘要生成;FoC-Sim 训练 110,000 steps。出处:§6.3.2 · p. 20

7.1 RQ1 的回答:密码学二进制代码摘要性能

FoC-BinLLM 在概括密码学二进制语义方面优于现有基线,也支持原语识别和函数名预测。其报告的效率使其适合大规模处理。

7.1 RQ1 的回答:密码学二进制代码摘要性能

  • 30.2% 精确率、31.7% 召回率和 32.6% F1 分数:FoC-BinLLM 显著优于函数名预测基线。其 F1 分数分别比 SymLM 和 XFL 高 19.2% 和 15.3%,比 Mixtral 和 ChatGPT 高 14.0% 和 13.1%。出处:Table 9 · p. 21, §7.1 · pp. 21–22
  • 41.34% ROUGE-L、14.47% BLEU-4 和 40.20% METEOR:FoC-BinLLM 优于所有现有摘要基线。在三项指标上的平均表现中,它分别比通用大语言模型 Mixtral 和 ChatGPT 高出 3.28%、2.15% 和 5.59%。出处:§7.1 · pp. 21–22
  • 每个二进制函数耗时 0.1533 秒:FoC-BinLLM 的处理速度快于耗时 9.0232 秒的 Mixtral;未评估 ChatGPT 的耗时。ChatGPT 通过 API 调用,因此耗时取决于网络状况。出处:§7.1 · p. 21
  • FoC-BinLLM 正确识别了 70 个原语类别实例中的 46 个,在所比较的方法中数量最多,另有 5 个误报。其他方法没有误报,但识别出的实例明显更少。出处:§7.1 · p. 22

7.2 RQ2 的回答:二进制代码相似性检测性能

在通用和密码学二进制相似性任务上,FoC-Sim 均优于对比方法。在密码学数据集上,其最佳结果出现在一对多搜索中;其嵌入表示融合了密码学特征和伪代码。

7.2.1 通用数据集上的性能。

  • 在通用数据集的一对一比较中,FoC-Sim 在 XC、XC+XB、XA 和 XM 上的 AUC 分别达到 99%、98%、97% 和 99%,较 GMN 分别高出 14%、12%、11% 和 13%。各子任务设置了不同的编译器/优化选项、位数和体系结构。出处:§7.2.1 · p. 23, §7.2 · p. 23
  • 在通用数据集 XM 的一对多搜索中,FoC-Sim 的 MRR@10、Recall@1 和 Recall@10 分别为 83%、78% 和 95%,较 GMN 分别高出 30%、33% 和 37%。Zeek、SAFE 和 Asm2Vec 的 Recall@1 分别仅为 0.13、0.16 和 0.07;Gemini 和 GMN 分别为 0.28 和 0.45。出处:§7.2.1 · p. 24

7.2.2 密码学数据集上的性能。

  • 在密码学数据集上,FoC-Sim 的四个一对一子任务 AUC 均超过 99%,较 RCFG2Vec 分别高出 2.6%、2.1%、6.4% 和 5.2%。在 XM 一对多搜索中,其 MRR@10、Recall@1 和 Recall@10 分别为 94.0%、91.0% 和 99.0%;RCFG2Vec 对应的结果为 77.5%、69.4% 和 89.1%。出处:Table 12 · p. 24, §7.2.2 · p. 25
  • FoC-Sim 在密码学数据集上优势更大,原因被归结为其嵌入表示包含密码学相关特征;伪代码也使其具备跨体系结构能力。作者将其基于伪代码的方法与直接从汇编生成语义嵌入的基线方法进行对比。出处:§7.2.2 · p. 25
  • FoC-Sim 平均用时 62.26ms 完成 100 次密码学函数比较,速度与 SAFE 和 PalmTree 相当,快于若干其他基线方法,但慢于 Zeek 的 28.14ms。作者认为,考虑到 FoC-Sim 带来的性能提升,相较 Zeek 增加的耗时是合理的权衡。出处:§7.2.2 · p. 25
  • 随着密码学一对多搜索池规模从 10 增至 10,000,所有方法的 Recall@1 均有所下降,但 FoC-Sim 仍保持领先,且性能下降相对较小。当搜索池规模为 10,000 时,FoC-Sim 仍保持较高性能;此处未提供确切的 Recall@1 数值。出处:§7.2.2 · p. 25, Figure 8 · p. 25

7.3 对 RQ3 的回答:实际应用能力

FoC 展示了在病毒函数分析、固件漏洞检索,以及从剥离二进制文件中检索密码函数方面的实用价值。结果显示其检测数量较高;Libgcrypt 的版本不匹配则体现了区分漏洞版本与补丁版本的能力边界。

7.3.2 固件中的密码实现检测

  • FoC-Sim 在 NETGEAR 固件中检测出 91/97 个易受攻击函数,在 TP-LINK 中检测出 168/181 个,在 Xiaomi 中检测出 319/330 个。固件数据库涵盖三家物联网厂商使用的 OpenSSL、mbedTLS 和 Libgcrypt 库;根据库版本号判断是否存在漏洞。出处:Table 13 · p. 27, §7.3.2 · p. 28

7.3.1 病毒中的密码函数分析

  • FoC-BinLLM 分析了病毒的加密通信调用链,给出的名称和摘要总体准确;尽管对 mbedtls_ssl_write 的预测名称不匹配,其握手验证摘要仍能准确说明函数行为。示例从 main 开始,沿调用关系追踪 SSL 上下文初始化、证书解析和密钥解析等函数。出处:§7.3.1 · pp. 26–27

7.3.2 固件中的密码实现检测

  • 实际评估涵盖三项任务:查找易受攻击函数、区分易受攻击版本与已打补丁版本,以及检索真实剥离二进制文件中的密码函数。对于第一项任务,若易受攻击函数出现在可疑文件中相似度最高的前 10 个函数之列,即视为查找成功。出处:§7.3.2 · p. 27
  • 在完全剥离的固件二进制文件中,FoC-Sim 在 2,000 个经标注的密码相关函数上取得 Recall@1 0.714 和 Recall@100 0.955;每个函数至少有一个 Database Server 中的同源函数。在被移除的组件中,代码语义是影响检测性能的最关键因素。出处:§7.3.2 · p. 29
  • FoC-Sim 在 NETGEAR 的 70/97 个案例、TP-Link 的 142/181 个案例和 Xiaomi 的 289/330 个案例中,正确区分了易受攻击函数与已打补丁函数。一次 Libgcrypt 检测失败的原因是,固件中易受攻击函数的版本与漏洞数据库所收录的版本差异很大,且数据库仅包含一个版本。出处:§7.3.2 · pp. 27–28

7.4 RQ4 的回答:消融研究

消融实验考察 FoC-BinLLM 的模型规模和 Task3,并测试 FoC-Sim 的代码语义、控制结构和密码学特征各自的作用。

7.4.1 FoC-BinLLM 的消融研究。

  • 2B FoC-BinLLM 的 ROUGE-L 得分为 43.96%,高于 220M 模型的 41.34%。2B 模型的损失收敛下界也更低,收敛速度更快。出处:§7.4.1 · p. 30, Table 15 · p. 30
  • 采用 Task3(二进制源码对比学习)时,FoC-BinLLM 在相同步数下的训练损失低于未采用 Task3 时。作者指出,Task3 有助于模型快速适应二进制领域;他们没有对 Task1 和 Task2 进行消融。出处:§7.4.1 · p. 30

7.4.2 FoC-Sim 的消融研究。

  • 移除代码语义、控制结构和密码学特征后,FoC-Sim 的 Recall@1 分别下降 18%、4% 和 1%,这一影响在一对多搜索中尤为明显。代码语义的影响最大。出处:§7.4.2 · p. 30, Table 15 · p. 30

8 讨论

讨论指出了语义标签质量、密码学原语覆盖范围、函数上下文以及混淆二进制处理方面的局限。

摘要质量

  • 语义标签质量很大程度上取决于所用的 LLM;判别器可以确保关键密码学语义,而通用领域中如何生成更高质量的标签仍有待研究。作者指出,标签来源于自动生成语义摘要。出处:§8 · p. 31

判别器的原语类别

  • 收集的密码学原语类别可能遗漏某些算法,尤其是在极端情形或特殊应用中。作者提出系统地扩大原语覆盖范围。出处:§8 · p. 31

函数上下文

  • FoC 独立分析二进制函数;作者报告称,在病毒分析中偶尔会出现错误预测,这可能是由于缺少上下文所致。作者建议纳入函数之间的依赖关系和交叉引用。出处:§8 · p. 31

混淆二进制

  • FoC 未考虑混淆二进制;作者认为这是一个正交研究方向,并指出它对恶意软件分析等应用很重要。作者建议使用混淆样本进行训练,以提升鲁棒性。出处:§8 · p. 31

9 相关工作

相关工作部分先回顾二进制分析方法,再介绍软件工程领域的 LLM,并说明这些方法如何推动 LLM 在二进制任务中的应用。

9.1 二进制分析

  • 传统的静态和动态二进制分析工具耗费人力、依赖专业知识,且需要大量人工干预。剥离符号的二进制文件还缺少函数名、变量标签等符号信息,可读性因此受限。出处:§9.1 · pp. 31–32
  • 深度学习方法可处理多种二进制任务,包括恢复名称、类型和调试信息,生成代码摘要,以及检测相似性。相关讨论涵盖数据驱动的二进制分析方法,以及用于反编译和分析的 LLM 工具。出处:§9.1 · p. 32
  • 在更广泛的二进制分析领域中,FoC 聚焦于二进制代码摘要和相似性检测。相关讨论指出,深度学习和 LLM 已应用于这两个领域。出处:§9.1 · p. 32

9.2 软件工程领域的 LLM

  • 软件工程领域的 LLM 覆盖软件开发生命周期中的多种任务,而源代码模型可用于代码生成、摘要、搜索和语义理解。论文认为,这些能力促使研究者探索 LLM 在二进制代码任务中的应用。出处:§9.2 · pp. 32–33

10 结论

FoC 将剥离二进制文件中的密码函数语义总结与相似性检测相结合,并报告了基准测试性能提升、公开数据集及实际案例研究。

10 结论

  • 在密码学数据集上,FoC-BinLLM 的 ROUGE-L 得分比 ChatGPT 高 14.61%,FoC-Sim 的 Recall@1 比以往方法高 52%。作者还报告了该方法在密码学病毒分析和 1-day 漏洞检测中的实用能力。出处:§10 · p. 33
  • 本文提供了一个公开的密码学数据集,以支持未来对剥离二进制文件中密码函数的研究。作者指出,该数据集有助于应对现有研究尚未解决的挑战。出处:§10 · p. 33
Loading 2403.18403v3…