二进制代码相似性检测也能对抗?
2022-12-2 14:57:47 Author: mp.weixin.qq.com(查看原文) 阅读量:4 收藏

VLab-实验室
二进制代码相似性检测(BCSD),即两个二进制可执行代码的相似性检测,有着广泛的用途,如软件成分分析、恶意软件检测和软件剽窃检测等。
笔者给大家推荐一篇关于BCSD黑盒对抗代码生成算法的论文——FuncFooler:APracticalBlack-boxAttackAgainstLearning-base Binary Code Similarity Detection Methods。

论文地址:https://arxiv.org/abs/2208.14191

二进制代码相似性检测BCSD

二进制代码相似性检测,首先对二进制可执行程序进行反汇编,得到反汇编的代码,然后根据代码片段粒度(函数)对反汇编的代码进行切割,得到代码片段,根据代码片段计算两个可执行程序的相似度。

传统的分析方法主要是分析代码的特征,可扩展性和检测性能较差。近年来,随着深度学习在各个领域的蓬勃发展,利用深度学习方法获取代码片段的语义信息已成为当下的主流研究方向,当前成熟有效的方案包括等。

尽管基于深度学习的BCSD已经取得了很好的效果,对相似的二进制代码有很高的召回率。但由于深度学习本身的原因,使得模型容易受到输入代码微小变化的影响,尤其是对抗代码的存在,使得模型容易被欺骗,从而影响模型对代码的判断,降低相似代码的召回率。为了验证基于深度学习的方法的脆弱性并提高方法的鲁棒性,论文提出了,一种高效的黑盒对抗代码生成算法。

算法概要

不同于图像和文本领域的对抗攻击,对抗代码的搜索空间可以是离散的,目标汇编代码搜索范围局限于特定的架构指令集(如),且对抗代码必须满足语义约束,即

1.对抗代码功能与原始代码相同;

2.对抗代码的控制流图与原始代码相同。

是一种黑盒攻击下的对抗代码生成算法,通过三个任务:

1.确定可攻击集合;

2.插入对抗指令;

3.纠正对抗指令的语义错误。

生成对抗代码样本,并成功地应用于基准测试中的三个最先进的基于深度学习的BCSD模型()。在对抗实验中,能通过向程序中添加较少的扰动,生成有效误导目标模型的对抗代码。

算法介绍

算法流程

图一

如图上图示,通过在恶意软件函数的第6条指令之后插入指令,得到了三个对抗样例。

对抗样例1可以欺骗基于深度学习的BCSD方法,但插入的跳转指令改变了控制流图,因此不是一个有效的对抗样例。

对抗样例2通过在指令之后插入指令,虽然可以欺骗基于深度学习的BCSD方法,但改变了函数的功能,因此它也不是一个有效的对抗样例。

对抗样例3由生成,在不改变控制流图的同时,又保证了与恶意函数功能的功能等价。

对于给定有n个指令的函数,有效的对抗样例应满足以下要求:

其中表示两个函数之间的相似度,有效的对抗样例与目标函数之间的相似度高于原函数与目标函数之间的相似度。代表的实现功能,两者应该是等价的。返回知识库中与对抗性样例相似度最高的的函数。

作者以恶意软件检测领域为例,介绍了对基于深度学习的BCSD的作用,如下图所示,的输入是一个恶意软件函数,输出是一个对抗样例。将恶意软件函数和对抗样例分别传递给基于深度学习的BCSD模型,该模型将分别生成特征向量y,计算与知识库中所有函数的相似度得分,并按得分降序排序。从相似度得分可以看出,恶意软件函数与知识库中具有相同恶意行为的其他恶意函数(用橙色表示)具有较高的相似度,与良性程序(用蓝色表示)的相似度较低。而对抗样例与知识库中的良性程序具有较高的相似性,与恶意函数具有作者以恶意软件检测领域为例,介绍了对基于深度学习的BCSD的作用,如下图所示,的输入是一个恶意软件函数,输出是一个对抗样例。将恶意软件函数和对抗样例分别传递给基于深度学习的BCSD模型,该模型将分别生成特征向量y,计算与知识库中所有函数的相似度得分,并按得分降序排序。从相似度得分可以看出,恶意软件函数与知识库中具有相同恶意行为的其他恶意函数(用橙色表示)具有较高的相似度,与良性程序(用蓝色表示)的相似度较低。而对抗样例与知识库中的良性程序具有较高的相似性,与恶意函数具有较低的相似性。较低的相似性。

图2

对抗样例的生成

如图2所示,对抗样例的生成步骤如下:

1.使用将源代码编译成二进制可执行程序。

2.将二进制可执行文件进行反汇编,得到二进制可执行文件的函数片段。

3.通过向指定位置插入指令对函数进行对抗转换,得到对抗指令。

4.将对抗指令写入源代码。

5.使用编译对抗源代码,得到对抗二进制可执行文件。

实验结果

评估指标

论文对基于深度学习的BCSD的SOTA方案执行攻击。算法性能用进行评估:

来表示模型的原始精度。表示模型对对抗样例的识别率。表示为生成对抗样例而引入到原始样例中的指令的百分比。表示模型在对抗指令方面的敏感性。

分析结果

基准测试上,对3个目标模型()的攻击结果,如下所示:

图 3

将所有模型的准确性从100%降低到9%以下,而插入的指令占比不到13%。

为了验证基于一个模型的对抗样例是否也能欺骗另一个模型,作者收集了被一个目标模型预测错误的的对抗样例,测量它们与另一个目标模型的预测精度。

图4

根据图4,一个模型上生成的对抗例对其他模型仍然具有攻击效果,基于模型生成的对抗例具有较高的可移植性。

向模型中同时输入原始数据和对抗实例,原始模型是否能获得更强的鲁棒性。作者从中收集了基于的有效对抗样例,并将它们添加到原始训练集中。并用新的对抗样例测试经过重新训练的

图5

经过重新训练的在两个基准上都提高了50%到100%。通过使用生成的对抗样例训练模型,可以增强模型对攻击的鲁棒性。然而,经过重新训练的模型还不足以完全防御的攻击。

参考文献

Jia L, Tang B, Wu C, et al. FuncFooler: A Practical Black-box Attack Against Learning-based Binary Code Similarity Detection Methods[J]. arXiv preprint arXiv:2208.14191, 2022.

论文地址:https://arxiv.org/abs/2208.14191

注:本文图片均来源于以上论文

往期回顾

引领智能网络攻防科技
点击在看
分享给小伙伴
↓点击阅读原文,了解更多墨云信息

文章来源: https://mp.weixin.qq.com/s?__biz=MzkwNzIxMDUyNg==&mid=2247485038&idx=1&sn=3854168edee727201558bcc013be8b4f&chksm=c0ddfc1ff7aa7509c0fe81ab2ee479b92d4a9f5e87a99e08f8784ce78efe2b05fcf31f0588c7&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh