[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity

jTrans: Jump-Aware Transformer for Binary Code Similarity [ISSTA 2022]

二进制代码相似性检测(Binary code similarity detection, BCSD)在漏洞检测、软件构件分析、逆向工程等领域具有重要应用。最近的研究表明,深度神经网络(DNNs)可以理解二进制代码的指令或控制流图(CFG),并支持BCSD。本文提出一种新的基于transformer的方法,即jTrans,来学习二进制代码的表示。它是第一个将二进制代码的控制流信息嵌入到基于transformer的语言模型中的解决方案,通过使用所分析的二进制代码的新的跳跃感知表示和新设计的预训练任务。此外,我们向社区发布了一个新创建的大型二进制数据集BinaryCorp,这是迄今为止最多样化的。评估结果表明,jTrans在这个更具挑战性的数据集上比最先进的(SOTA)方法性能提高了30.5%(即从32.0%到62.5%)。在一个真实的已知漏洞搜索任务中,jTrans取得了比现有SOTA基线高2倍的召回率。

一句话:jTrans,对二进制代码的控制流信息结合到transformer的嵌入中

导论

在机器学习应用于该领域之前,传统的BCSD解决方案严重依赖二进制代码的特定特征,即函数的控制流图(CFGs),它捕获程序的语法知识。BinDiff[64]、BinHunt[23]和iBinHunt[46]等解决方案采用图同构技术来计算两个函数CFGs的相似度。然而,这种方法既耗时又不稳定,因为CFGs可能根据编译器优化而改变。BinGo[5]和Esh[8]等研究通过计算CFG片段的相似度,对CFG变化具有更强的鲁棒性。然而,这些方法基于人工设计的特征,难以捕捉二进制代码的精确语义。因此,这些解决方案往往具有相对较低的精度。
随着机器学习技术的快速发展,目前大多数最先进的BCSD解决方案都是基于学习的。通常,这些解决方案将目标二进制代码(如函数)嵌入到向量中,并计算函数在向量空间中的相似度。一些解决方案,如Asm2Vec[14]和SAFE[43],使用受自然语言处理(NLP)启发的语言模型来建模汇编语言(机器代码)。其他研究使用图神经网络(GNNs)来学习CFGs的表示并计算它们的相似性。一些研究结合了这两种方法,通过NLP技术学习基本块的表示,并通过GNN进一步处理CFG中的基本块特征,例如[44,62]。尽管性能有所提高,但现有方法有一些局限性。

通过在指令的每个跳转目标的标记嵌入和位置嵌入之间共享参数,修改Transformer来捕获控制流信息。首先利用无监督学习任务对jTrans进行预训练,以学习二进制函数的指令语义和控制流信息;接下来,对预训练的jTrans进行微调,以匹配语义相似的函数。请注意,我们的方法能够使用语言模型组合每个基本块的特征,而不依赖gnn遍历相应的CFG。
除了所提出的新方法,还提出了一个大型和多样化的数据集BinaryCorp,从ArchLinux的官方存储库[2]和Arch用户存储库(AUR)[3]中提取。新创建的数据集使我们能够缓解现有数据集的过拟合和多样性缺乏。我们自动地从包含大多数流行开源软件的仓库中收集所有的c/c++项目,并使用不同的编译器优化来构建它们以生成不同的二进制文件。据我们所知,我们的数据集是迄今为止用于BCSD任务的最大、最多样化的二进制程序数据集。

Contributions

(1) 本文提出了一种新的基于Transformer的跳变感知模型jTrans,这是第一个将控制流信息嵌入Transformer的解决方案。该方法能够学习二进制代码表示,并支持真实世界的BCSD。我们在https://github.com/vul337/jTrans上发布jTrans的代码。
(2) 本文创建了一个新的大规模、结构良好和多样化的数据集BinaryCorp,用于BCSD的任务。据我们所知,BinaryCorp是迄今为止最多样化的,它可以显著减轻以前基准的过拟合问题。
(3) 进行了广泛的实验,表明该模型可以明显优于SOTA方法。

PROBLEM DEFINITION

BCSD是计算两个二元函数相似度的基本任务。它可以用于中讨论的三种类型的场景,包括(1)一对一(OO),其中返回一个源函数与一个目标函数的相似度分数;(2)一对多(OM),其中目标函数池将根据它们与一个源函数的相似度得分进行排序;(3)多对多(MM),函数池将根据相似度分成组。
在不失一般性的情况下,本文关注OM任务。注意,我们可以通过将目标函数的大小设置为1来将OM问题简化为OO问题。我们也可以将OM问题扩展到MM,将池中的每个函数作为源函数,同时求解多个OM问题。为了使演示更加清晰,我们对这些问题进行了如下的正式定义:
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第1张图片

Related Works

基于学习的BCSD研究受到了自然语言处理(NLP)最新发展的启发,该发展使用称为嵌入的实值向量来编码单词和句子的语义信息。在这些技术的基础上,之前的研究将深度学习方法应用于二进制相似性检测。这些研究的共同思想是将二进制函数嵌入到数值向量中,然后使用向量距离来近似不同二进制函数之间的相似性。如图2所示,这些方法使用深度学习训练算法,使逻辑上相似的二进制函数的向量距离更近。

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第2张图片

大多数基于学习的方法使用孪生网络[6],它需要训练等价的二元函数的基本真值映射。Diff[40]使用卷积神经网络(CNN)[38]直接从原始字节序列中学习二进制函数嵌入。INNEREYE[63]和RLZ2019[51]将指令视为单词,将基本块视为句子,使用word2vec[45]和LSTM[29]学习基本块嵌入。SAFE[43]使用类似的方法来学习二进制函数的嵌入,而Gemini [59], VulSeeker [24], GraphEmb[44]和OrderMatters[62]使用gnn来构建用于学习二进制函数的属性控制流图(ACFG)的图嵌入模型。Gemini和VulSeeker使用人工选择的特征对基本块进行编码,而GraphEmb和OrderMatters使用神经网络来学习基本块的嵌入。

方法

Overview

为了解决第1节中讨论的挑战,本文提出了一种新的模型jTrans,用于自动学习二进制程序的指令语义和控制流信息。jTrans基于transformer编码器架构,包含几个重要的变化,旨在使其更有效地进行二进制分析。
对Transformer架构提出的第一个更改旨在使jTrans能够更好地捕获代码的跳转关系,即控制流信息。为此,首先对输入二进制文件的汇编代码进行预处理,使其包含程序的跳转关系;接下来,我们修改Transformer的每个输入标记的嵌入,使跳转的起点和目标位置在“语义上”相似。
为鼓励模型学习将跳跃纳入代码的方式,提出一种新的辅助训练任务,要求模型预测跳跃指令的目标。这个任务,我们称之为跳转目标预测(JTP),需要深入理解代码的语义,它对模型的性能有显著贡献。

Binary Function Representation Model

jTrans基于BERT架构,这是在许多自然语言处理(NLP)任务中最先进的预训练语言模型。在jTrans中,我们遵循BERT用于文本建模的相同方法,即为每个token(即单词)创建嵌入,并使用BERT强大的注意力机制来有效地对二进制代码进行建模。然而,二进制代码与自然语言有许多不同之处。首先,二进制代码中有太多的词汇(例如常量和字面量)。其次,二进制代码中存在跳转指令。对于跳转指令,我们将其操作数标记表示为源标记,源标记指定跳转目标指令的地址。为简单起见,我们将目标指令的助记符标记表示为目标标记,并将该跳转对表示为源标记,目标标记。
要应用BERT,必须解决两个问题。
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第3张图片

预处理指令。为了缓解OOV问题,我们使用了最新的反汇编工具IDA Pro 7.5来分析输入的二进制程序并生成汇编指令序列。然后,我们应用以下分词策略来规范化汇编代码并减少其词汇量:
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第4张图片

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第5张图片
对跳转指令进行建模。现在,我们解决了表示跳转指令的挑战,其方式可以使jTrans更好地将其二分性质上下文化(并将整个控制流信息作为一个整体)。我们选择使用位置编码,这是Transformer架构的组成部分。这些编码使模型能够确定单词之间的距离。然而,跳转指令将代码中相隔很远的区域绑定在一起。因此,我们修改了位置编码机制,以反映跳转指令的效果。
我们对位置编码的更改旨在反映这样一个事实,即跳转指令的源和目标不仅像两个连续的标记一样接近(由于执行顺序),而且它们具有很强的上下文联系。我们通过参数共享实现此目标:对于每个跳转对,源令牌的嵌入(参见图3中的JUMP_14)被用作目标令牌的位置编码。
这种表示方式实现了两个重要目标。首先,共享嵌入使Transformer能够识别源标记和目标标记之间的上下文连接。其次,这种强大的上下文联系在整个训练过程中都保持着,因为两个标记的共享参数会同时更新。值得注意的是,我们只关注jTrans中的直接跳转指令。假设间接跳转带来的控制流信息能够进一步提升jTrans的性能。然而,识别这种跳跃的目标是一个众所周知的公开挑战,超出了我们目前工作的范围。如果将来提出间接跳转目标识别的方案,可以通过融合所有跳转目标的位置嵌入来嵌入间接跳转操作数。

通过在跳转对的源标记和目标标记之间共享参数,在它们的表示中创建了高度的相似性。因此,每当为jTrans提供支持的注意力机制为其中一个token分配高注意力权重时(即确定它对理解/分析二进制文件很重要),它们也会自动为其伙伴分配高注意力。因此,这种表示方式确保了跳转指令的两部分,以及代码中靠近这两部分的指令,都包含在推理过程中。
我们现在提供了对跳转对的标记相似性的形式化分析,并证明了这对标记之间的相似性高于它们与其他任何标记之间的相似性。对于一个给定的二元函数 f = [ x 1 , . . . , x n ] f = [x_1, ..., x_n] f=[x1,...,xn], x i x_i xi是函数 f f f i i i 个token。所有的标记将被转换成 { E ( x 1 ) , . . . , E ( x n ) } \{E(x_1), ..., E(x_n)\} {E(x1),...,E(xn)}被送入jTrans之前,每个嵌入 E ( x i ) E(x_i) E(xi)可以表示为一个求和的令牌嵌入 E x i E_{x_i} Exi和位置嵌入 P i P_i Pi

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第6张图片

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第7张图片

接下来,介绍jTrans如何传递程序的控制流信息。考虑三个标记,,在给定的函数中,对应的嵌入是 E i , E j E_i,E_j EiEj E l E_l El。假设在和之间有一个跳转关系,是源token,是目标token。是函数中的任何其他标记。
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第8张图片

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第9张图片
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第10张图片

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第11张图片

Pre-training jTrans

jTrans所基于的BERT架构使用两个无监督学习任务进行预训练。第一个任务是掩码语言模型(MLM), BERT的任务是重建随机掩码标记。第二个无监督学习任务旨在通过判断两个句子是否连续来磨练BERT的上下文能力。建立在BERT的整体训练过程的基础上,同时进行特定领域的适应:保留MLM任务,但用称为跳转目标预测(JTP)的任务取代第二个任务。

掩码语言模型任务。jTrans使用BERT的掩码程序:随机选择的标记中80%被掩码标记替换,10%被其他随机标记替换,10%不变。定义函数 f = [ x 1 , ⋅ ⋅ ⋅ , x n ] f = [x_1,···,x_n] f=[x1⋅⋅⋅xn],其中 x i x_i xi f f f 的-th标记, n n n是标记的数量。首先为 f f f 选择一组随机的位置来掩盖。

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第12张图片

掩码过程的一个例子如图4所示。我们制作了rsp、rdi和call token,并在jTrans任务中重构它们。为了成功,我们的模型必须学习基本的汇编语法及其上下文信息。例如,成功地重构rdi令牌需要模型学习函数的调用约定,而rsp token需要理解连续执行。

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第13张图片

跳跃目标预测。JTP任务定义如下: 给定一个随机选择的跳转源token,模型被要求去预测相应的目标token。
这项任务,即使对人类专家来说也是困难的,需要我们的模型对CFG有深刻的理解。这反过来又提升了jTrans的性能。JTP的实现首先从可用的跳转源令牌中随机选择一个子集。然后将这些标记替换为标记

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第14张图片

图5给出了JTP任务的一个示例,其中我们将JUMP_20令牌替换为; 模型的任务是预测索引。表6对jTrans在JTP任务中的性能进行了分析,结果表明我们的模型达到了92.9%的准确率。此外,消融研究评估了JTP对jTrans整体性能的贡献。这些结果表明,该训练任务提高了jTrans学习被分析函数控制流的能力。
jTrans在预训练阶段的整体损失函数是MLM和JTP目标函数的总和:
在这里插入图片描述

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第15张图片

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第16张图片

Fine-tuning for Binary Similarity Detection

在无监督预训练阶段完成后,我们现在为函数相似性检测的监督学习任务微调我们的模型。我们的目标是训练jTrans,使相似的二元函数对之间的相似性最大化,同时最小化不相关的二元函数对之间的相似性。用方程4来表示函数f。我们选择余弦相似度来计算函数相似度。
在这里插入图片描述

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第17张图片

微调过程完成后,我们可以通过计算两个函数嵌入的余弦相似度来衡量两个函数 f 1 , f 2 f_1,f_2 f1f2的相似度得分。

Large-Scale Dataset Construction

基于ArchLinux[2]官方库和Arch用户库[3]构建了用于二进制相似性检测的数据集。ArchLinux是一个Linux发行版,以其大量的包和快速的包更新而闻名。ArchLinux的[2]官方仓库包含数以万计的软件包,包括编辑器、即时通、HTTP服务器、web浏览器、编译器、图形库、密码库等。Arch用户库包含用户上传和维护的超过77,000个包,极大地扩大了数据集。此外,ArchLinux为开发人员提供了一个有用的工具makepkg,以便从源代码构建他们的软件包。makepkg可以通过解析PKGBUILD文件从源代码编译指定的包,该文件包含所需的依赖项和编译辅助函数。二进制代码相似性任务需要大量标记数据,因此使用这些基础设施来构建数据集。

项目筛选 出于编译兼容性的原因,我们选择管道中的c/c++项目来构建数据集。如果PKGBUILD文件中的build函数包含了对cmake、make、gcc和g++的调用,那么它很可能是一个C/ c++项目。另一方面,如果PKGBUILD文件中的变量依赖包含rustc, go, jvm,那么它不太可能是c / c++项目,我们可以在编译前删除它。

编译管道 在我们的流水线中,我们希望每次都自动指定我们想要的任何优化级别。一些项目的工具链不消耗环境变量CFLAGS和CXXFLAGS,使得无法轻松更改优化级别。然而,由于大多数项目以CC或CXX的方式调用编译器,我们为环境变量分配了自修改版本的gcc、g++、clang、clang++。修改后的编译器将与优化级别相关的命令行参数更改为预期的编译参数。此外,它还将预期的编译参数添加到原始参数中。我们使用这两种方法来确保编译以预期的优化级别完成。

标签集合 为了收集标签,我们首先需要获取未剥离的二进制数据并获取函数的偏移量。我们发现许多实际项目在编译期间调用strip,因此仅在PKGBUILD中指定参数并不能解决这个问题。我们用修改后的版本替换了strip。无论传入的参数是什么,它都不会剥离符号表。

实验

The BinaryCorp Dataset

我们的数据集统计如表1所示。虽然之前的许多工作使用Coreutils和GNUtils作为其数据集,但表1清楚地表明,binarycorp-26M以不同的规模运行: 虽然我们新创建的数据集有大约2600万个函数,而GNUtils的为161,202, Coreutils为76174。因此BinaryCorp-26M的大小是GNUtils的160倍多,是Coreutils的339倍多。新数据集的大小阻止了一些现有方法的使用,因为它们的可扩展性不足。本文还提供了一个较小的数据集BinaryCorp-3M,包含10,265个二进制程序和大约360万个函数。在我们较小的数据集中,函数的数量大约是GNUtils的22倍,是Coreutils的47倍。BinKit[36]是最大的二进制数据集,包含36、256,322个函数。然而,BinKit仅从51个GNU包中使用了1352个不同的编译选项来生成243k个二进制文件,因此在数据集中有太多类似的函数。另一方面,我们只使用5种不同的编译选项来编译近10,000个项目。
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第18张图片

Baselines

我们将jTrans与六个表现最好的基线进行了比较:
Genius [21] 基线是一种非深度学习方法。Genius以属性控制流图的形式提取原始特征,并使用局部敏感哈希(LSH)生成用于漏洞搜索的数值向量。我们基于它的官方代码实现了这个基线。
Gemini [59] 该基线为每个基本块提取手工设计的特征,并使用GNN学习所分析函数的CFG表示。我们基于其官方Tensorflow code实现了这种方法,并在整个评估过程中使用其默认参数设置。
Safe [43] 该基线采用带有注意力机制的RNN架构来生成所分析函数的表示,它接收汇编指令作为输入。我们基于其官方Pytorch代码和默认参数设置实现了此基线。
Asm2Vec [14] 该方法使用CFG上的随机游走对指令序列进行采样,然后使用PV-DM模型联合学习函数标记和指令标记的嵌入。这种方法不是开源的,因此我们使用非官方的实现。我们使用它的默认参数设置。
GraphEmb [44] 这个基线使用word2vec来学习指令标记的嵌入。接下来,它使用RNN为每个基本块生成独立的嵌入,最后使用structure2vec来组合嵌入并生成所分析函数的表示。为了使此基线可扩展到BinaryCorp-26M这样大的数据集,我们使用Pytorch重新实现了作者的原始Tensorflow源代码。
OrderMatters [62] 这种方法结合了两种类型的嵌入。第一种嵌入类型使用BERT为每个基本块创建嵌入,然后使用GNN将所有这些嵌入组合起来以生成最终表示。第二种嵌入是通过在CFG上应用CNN获得的。然后将两个嵌入连接起来。该方法不是开源的,其黑盒不能满足研究的需要。我们使用报告的超参数自己实现。

Evaluation Metrics

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第19张图片

Implementation

在整个实验过程中,为了防止信息泄露,所有的二进制文件都被剥离。在所有实验中,我们使用IDA Pro对二进制代码进行反汇编和函数提取,从而保证了公平的竞争环境。对于没有使用IDA Pro的基线,我们使用它们默认的反汇编框架进行预处理,然后使用IDA Pro提取函数。所有的训练和推理都在Linux服务器上运行,该服务器运行Ubuntu 18.04, CPU为Intel Xeon 96 core 3.0GHz,包括超线程,768GB RAM和8个Nvidia A100 gpu。

Biniary Similarity Detection Performance

在两个数据集BinaryCorp-3M和BinaryCorp-26M上进行了评估。此外,我们使用两种函数池大小——32和10,000,以便可以在不同程度上评估jTrans和基线。值得注意的是,我们随机地将整个项目分配给实验的训练集或测试集,因为最近的研究表明,随机分配二进制文件可能会导致信息泄漏。
实验结果如表2-5所示。jTrans的表现比所有基线都要好得多。对于poolsize=32(表2)和4,jTrans在MRR指标上比最接近的基准竞争对手高出0.07,在recall@1指标上高出10%以上。当我们在较大的池规模(10000)上评估模型时,性能上的差异变得更加明显。对于这种设置,其结果如表3和表5所示,jTrans在MRR指标上比最接近的竞争对手高出0.26,在recall@1指标上高出27%。

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第20张图片
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第21张图片

The Effects of Poolsize on Performance

我们现在深入分析池大小对二进制分析SOTA方法性能的影响。结果如图6所示。我们对不同的池大小(2、10、32、128、512、1000和10 000)进行了多次实验,并绘制了各种优化对的结果。结果表明,随着池大小的增加,所有基线的相对性能都比jTrans差。
要指出的是,对于非常小的池大小(例如2),SOTA基线(如SAFE和Asm2Vec)的性能几乎与jTrans相同,后者的性能比jTrans高出约2%。在小池上评估二进制分析工具并不能为它们在现实世界中的性能提供有意义的指示。
[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第22张图片

Real-World Vulnerability Search

漏洞检测是计算机安全领域的重要应用之一。我们希望评估jTrans在真实漏洞搜索任务上的性能。在本节中,我们将jTrans应用于一个已知的漏洞数据集,目的是搜索有漏洞的函数。图7显示了每个查询的recall@10度量的结果。将所提出方法与来自SAFE和Asm2Vec的两个主要基线进行了比较。例如,在包含3038个函数的openjpeg项目中的CVE-2016-3183上,所提出方法实现了100%的top-10召回率,这意味着它成功地检索了所有10个变体,而Asm2Vec和SAFE分别实现了recall@10值的36.9%和28.6%。实验结果表明,jTrans能够在大池规模上表现良好,因此可以在现实场景中有效部署作为漏洞搜索工具。

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第23张图片

The Impact of Our Jump-aware Design

在本节中,我们会测试我们的假设,即我们的跳变感知设计极大地提高了jTrans分析二进制代码CFG的能力。为此,我们训练了一个标准的BERT模型,该模型不使用我们对跳转信息的表示,并将其与我们的方法进行比较。与SAFE类似,标准BERT不接收控制流信息,只能从汇编序列信息中学习。
我们使用Recall@1评估了BinaryCorp- 3M上的标准BERT模型和jTrans, poolsize=10,000。我们的评估结果如图8所示。结果表明,标准BERT的性能明显低于jTrans,因为它在每个优化对上的性能都较低。平均而言,jTrans比BERT高出7.3%。这些结果清楚地表明,在汇编语言序列建模中加入控制流信息对我们的模型是非常有益的。

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity_第24张图片

Evaluating the Efficacy of Pre-training

和最初的BERT一样,预训练是我们模型的关键组成部分。它的主要优点是可以在未标记的数据上执行,这更容易获得大量的数据。为了评估预训练方法(MLM和JTP)的有效性,我们评估了不进行任何微调的模型版本。遵循与零样本学习[58]相同的方法,在预训练阶段使用没有标签信息的二进制文件。然后,在不微调预训练模型的情况下,立即将其应用于二进制相似性搜索任务。该模型的计算结果记为jTrans-zero,如表2-5所示。

总结

DISCUSSION

现有的基于深度学习的工作,以及jTrans,都将单个二进制函数嵌入到数值向量中,并比较向量之间的相似性。因此,它们的精度随着池的大小而下降。如图6所示,如果池的大小为10 000,大多数现有解决方案的精度会下降到20%以下。在真实场景中,池的大小要大得多。直接将两个二元函数作为输入的模型可以更好地捕捉函数间的关系,从而进一步提高BCSD的性能,即使在较大的池中也是如此。然而,训练一个模型来直接比较两个函数会有更高的开销。在现实世界的BCSD任务中使用jTrans时,平衡准确性和开销是未来的工作。

References

[2] Archlinux. 2021. Arch linux. Retrieved August 8, 2021 from https://archlinux.org/packages/
[3] Archlinux. 2021. Arch User Repository. Retrieved August 8, 2021 from https://aur.archlinux.org/
[5] Mahinthan Chandramohan, Yinxing Xue, Zhengzi Xu, Yang Liu, Chia Yuan Cho, and Hee Beng Kuan Tan. 2016. Bingo: Cross-architecture cross-os binary search. In Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. 678–689.
[8] Yaniv David, Nimrod Partush, and Eran Yahav. 2016. Statistical similarity of binaries. ACM SIGPLAN Notices 51, 6 (2016), 266–280.
[14] Steven HH Ding, Benjamin CM Fung, and Philippe Charland. 2019. Asm2vec: Boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In 2019 IEEE Symposium on Security and Privacy (SP). IEEE, 472–489.
[23] Debin Gao, Michael K Reiter, and Dawn Song. 2008. Binhunt: Automatically finding semantic differences in binary programs. In International Conference on Information and Communications Security. Springer, 238–255.
[36] Dongkwan Kim, Eunsoo Kim, Sang Kil Cha, Sooel Son, and Yongdae Kim. 2020. Revisiting binary code similarity analysis using interpretable feature engineering and lessons learned. arXiv preprint arXiv:2011.10749 (2020).
[43] Luca Massarelli, Giuseppe Antonio Di Luna, Fabio Petroni, Roberto Baldoni, and Leonardo Querzoni. 2019. Safe: Self-attentive function embeddings for binary similarity. In International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. Springer, 309–329.
[44] Luca Massarelli, Giuseppe A Di Luna, Fabio Petroni, Leonardo Querzoni, and Roberto Baldoni. 2019. Investigating graph embedding neural networks with unsupervised features extraction for binary analysis. In Proceedings of the 2nd Workshop on Binary Analysis Research (BAR).
[46] Jiang Ming, Meng Pan, and Debin Gao. 2012. iBinHunt: Binary hunting with inter-procedural control flow. In International Conference on Information Security and Cryptology. Springer, 92–109.
[58] Yongqin Xian, Bernt Schiele, and Zeynep Akata. 2017. Zero-shot learning-the good, the bad and the ugly. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 4582–4591.
[62] Zeping Yu, Rui Cao, Qiyi Tang, Sen Nie, Junzhou Huang, and Shi Wu. 2020. Order matters: Semantic-aware neural networks for binary code similarity detection. In Proceedings of the AAAI Conference on Artificial Intelligence, Vol. 34. 1145–1152.
[64] zynamics. 2018. BinDiff. “https://www.zynamics.com/bindiff.html”.

Insights

(1) BinaryCorp 一个新数据集
(2) 跳转目标预测任务的训练,增强了模型对控制流的理解能力

你可能感兴趣的:(软件安全,transformer,人工智能,机器学习,相似度匹配)