0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

二进制代码相似度比较研究技术汇总

清欢科技 来源:清欢科技 作者:清欢科技 2022-10-13 08:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在对二进制应用程序进行安全分析过程中,二进制代码相似度比较技术是重要的技术手段之一,基于此技术,可以实现对恶意代码极其变种的追踪,已知漏洞检测、补丁存在性检测。该技术基础理论依据是如果源代码中存在的属性(恶意代码、已知漏洞、漏洞修复补丁)即使相同源代码编译出不同的二进制代码(cpu架构、OS、编译选项等会直接导致编译出来的二进制会存在较大的差别),这些属性在二进制代码中也是存在的(好像是废话,不然编译构建工具就有问题了)。因此若在一个样本二进制文件中已知存在上述类型的属性,如果发现另外一个待检测二进制代码和样本二进制代码相似,那么可以认为待检测二进制代码也存在相同类型的属性。

我们知道编译生成二进制代码的影响因素非常的多,同一套源代码基于不同因素的组合可以生成非常多不同二进制程序。

CPU架构:X86、ARM、MIPS、PPC、RISC-V;

架构位数:32bits、64bits;

OS:Linux、Windows、Android鸿蒙、VxWork;

编译选项:O0~O3;

安全编译选项:BIND_NOW、NX、PIC、PIE、RELRO、SP、FS、Ftrapv等;

按这些选项可以有5x2x5x4x8 =1600个组合,从中可以看出二进制代码相似度比较技术不管是学术界还是工业界来说都是一个挑战技术。但是基于广阔的应用前景,20多年来学术界一直在不停的探索和研究新的方法想来解决这个技术挑战,并且也取得了一定的成果,下面就该方面的技术进行一些梳理,让大家对二进制代码相似度比较技术有一个大致的了解。

源代码到二进制代码的生成过程

pYYBAGNGp_2Ab1jJAAClwC8Ks0Y533.png

从源代码编译生成二进制过程中,有很多有助于理解代码意图的信息会被丢失,比如:函数名称、变量名称、数据结构定义、变量类型定义、注释信息等;因为二进制代码是给CPU运行用的,因此这些信息对计算机来说不是必须的,但这些信息对人类来理解代码是有很大帮助的,这就大大的提升了二进制代码语义理解的难度。其次,为了更好的保护二进制代码的知识产权或最大程度的提升对二进制代码的理解难度,还会对二进制代码进行混淆处理,使得混淆后的二进制代码与编译器编译出来的二进制之间又存在很大的不同。

从历史发表的二进制代码相似度比较技术论文统计来看,有61种二进制代码相似性比较方法,这些在不同研究场所发表的数百篇论文涵盖了计算机安全、软件工程、编程语言和机器学习等计算机科学领域,主要发表在IEEE S&P、ACM CCS、USENIX Security、NDSS、ACSAC、RAID、ESORICS、ASIACCS、DIMVA、ICSE、FSE、ISSTA、ASE、MSR等顶级刊物上。根据上述论文得到如下统计数据:

输入比较:一对一(21种)、一对多(30种)、多对多(10种);

比较方法:大多数方法使用单一类型的比较:相似性(42种)、等效性(5种)和相同(2种);即使方法中仅使用一种类型的比较,它也可能有不同的输入比较不同;

分析粒度:分为输入粒度、方法粒度;有8中不同的比较粒度,分别是指令级、基本快、函数以及相关集合、执行轨迹、程序。最常见的输入粒度是函数(26个),然后是整个程序(25个)和相关的基本块(4)。最常见的方法粒度是函数(30个),然后是基本块(20);

语法相似性:通过语法方法来捕获代码表示的相似性,更具体地说,它们比较指令序列。最常见的是序列中的指令在虚拟地址空间中是连续的,属于同一函数。

语义相似性:语义相似性是指所比较的代码是否具有类似的效果,而语法相似性则是指代码表示中的相似性。其中有26种计算语义相似度的方法。它们中的大多数以基本块粒度捕获语义,因为基本块是没有控制流的直线代码。有三种方法用于捕获语义:指令分类、输入-输出对和符号公式。

结构相似度:结构相似性计算二进制代码的图表示上的相似性。它位于句法和语义相似性之间,因为图可以捕获同一代码的多个句法表示,并可以用语义信息注释。结构相似性可以在不同的图上计算。常见的有控制流图CFG、过程间控制流图ICFG、调用图CG;(子)图同构—大多数结构相似性方法是检查图同构的变化,其中涉及到方法有K子图匹配、路径相似性、图嵌入。

基于特征的相似度:计算相似性的常见方法(28种)是将一段二进制代码表示为向量或一组特征,使得类似的二进制代码具有相似的特征向量或特征集。这里应用最多的是利用机器学习来实现。

Hash匹配相似度:对于多维向量数据相似度快速匹配,通常使用局部敏感hash算法LSH来实现。

跨架构比较方法:对不同CPU架构二进制代码的相似度比较,通常跨体系结构方法通过计算语义相似性来实现。方法之一是通过转换成与架构无关的中间语言IR来处理(7种),另外一种是使用基于特征的相似性方法(9种)。

分析类型:从分析类型来看有:静态分析、动态分析、数据流分析3种类型;

归一化方法:语法相似性方法通常会对指令进行规范化,来尽量减少语法上的差异;有33种方法使用指令规范化。具体的包括操作数移除法、操作数归一化法、助记符归一化法

论文发表的时间、发表刊物、技术方法汇总

poYBAGNGqAWABLO7AARTgKRVwF8195.png

不同二进制代码相似度比较方法的具体应用情况

pYYBAGNGqAmADxvWAADoMUuBQ_s268.png

从上表中可以看出二进制代码相似度比较主要应用于漏洞查找,其次是补丁分析和恶意代码分析;

针对上述不同的技术方法,分别从鲁棒性、准确度评估与比较、性能指标3个维度进行评测,结果如下:

poYBAGNGqA6ARnB9AARbK0K2eBU214.png

总结:二进制代码相似性比较技术随着研究的持续进行,学术界虽然取得的一定的进步和成果,但仍然还有很多挑战在等着攻克,小片段的二进制代码比较,源代码与二进制的相似度比较、数据相似度比较、语义关系、可扩展性、混淆、比较方法等等都是后续需要持续研究的方向。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    809

    浏览量

    42799
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73148
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在vivado上基于二进制码对指令运行状态进行判断

    在扩展指令时我们常常需要一些手段来帮助我们判断指令是否能够成功运行、运行状态是否正确。一方面,我们可以通过模拟器来实现,另一方面,在没有模拟器的情况下,我们可以通过将所扩展指令的二进制代码导入
    发表于 10-24 06:46

    在vivado上基于二进制码对指令运行状态进行判断

    在扩展指令时我们常常需要一些手段来帮助我们判断指令是否能够成功运行、运行状态是否正确。一方面,我们可以通过模拟器来实现,另一方面,在没有模拟器的情况下,我们可以通过将所扩展指令的二进制代码导入
    发表于 10-24 06:31

    如何将图像文件转换为二进制文件?

    如何将图像文件转换为二进制文件
    发表于 09-05 08:28

    二进制数据处理方法分享

    时,我们如何去解析数据并且应用它们。本次的技术分享文章,我们就从如何传输数据和解析二进制数据来一步一步剥丝抽茧,搞清楚他的运作原理和二进制数据的数据结构。
    的头像 发表于 07-30 15:41 2150次阅读
    <b class='flag-5'>二进制</b>数据处理方法分享

    MAX14001/MAX14002可配置、隔离型10位ADC,用于多范围二进制输入技术手册

    MAX14001/MAX14002为隔离型、单通道模数转换器(ADC),带有可编程电压比较器和浪涌电流控制,优化用于可配置二进制输入应用。MAX14001/MAX14002的二进制输入侧(现场侧
    的头像 发表于 06-03 10:15 687次阅读
    MAX14001/MAX14002可配置、隔离型10位ADC,用于多范围<b class='flag-5'>二进制</b>输入<b class='flag-5'>技术</b>手册

    如何使用Keil将二进制文件加载到外部SPI Flash中?

    我想知道是否有办法使用 Keil 将随机二进制文件加载到外部 SPI 闪存中。二进制文件将通过 LPC54102(OM13077 EVK 板)。我知道一些用于 FPGA 的 ISE 允许您执行此作
    发表于 03-17 06:37

    无法使用密度化参数构建OpenVINO™二进制,怎么处理?

    无法使用密度化参数构建OpenVINO™二进制
    发表于 03-06 06:51

    74LV4060-Q100二进制纹波计数器规格书

    电子发烧友网站提供《74LV4060-Q100二进制纹波计数器规格书.pdf》资料免费下载
    发表于 02-10 14:19 0次下载
    74LV4060-Q100<b class='flag-5'>二进制</b>纹波计数器规格书

    74LV4060二进制纹波计数器规格书

    电子发烧友网站提供《74LV4060二进制纹波计数器规格书.pdf》资料免费下载
    发表于 02-10 14:14 0次下载
    74LV4060<b class='flag-5'>二进制</b>纹波计数器规格书

    74HC4520;74HCT4520同步二进制计数器规格书

    电子发烧友网站提供《74HC4520;74HCT4520同步二进制计数器规格书.pdf》资料免费下载
    发表于 02-09 11:42 0次下载
    74HC4520;74HCT4520同步<b class='flag-5'>二进制</b>计数器规格书

    74HC193;74HC7193二进制加减计数器规格书

    电子发烧友网站提供《74HC193;74HC7193二进制加减计数器规格书.pdf》资料免费下载
    发表于 02-07 16:28 0次下载
    74HC193;74HC7193<b class='flag-5'>二进制</b>加减计数器规格书

    74HC191可预置同步4位二进制加减计数器规格书

    电子发烧友网站提供《74HC191可预置同步4位二进制加减计数器规格书.pdf》资料免费下载
    发表于 02-07 15:57 1次下载
    74HC191可预置同步4位<b class='flag-5'>二进制</b>加减计数器规格书

    偏移二进制二进制补码如何和实际数据对应,如何转换?

    偏移二进制二进制补码如何和实际数据对应,如何转换,请哪位高手解惑
    发表于 01-16 06:01

    TLC2543的输出结果应为带符号二进制格式的数据,现在输出的结果为不带符号的二进制数,这是因为什么原因?

    DSP采用模拟SPI总线的方式和TLC2543进行通信,采用AIN0,AIN1,AIN2,TLC2543的输出数据格式为16位,高位在前,带符号二进制数。用万用表测的AIN0,AIN1,AIN2
    发表于 12-27 07:46

    bcd编码的应用 bcd与二进制的区别

    BCD(Binary-Coded Decimal)编码是一种二进制编码形式,用于表示十进制数字。它将每个十进制数字(0-9)直接编码为一个四位二进制数。BCD编码的主要优点是易于阅读和
    的头像 发表于 12-20 17:11 4363次阅读