Basic Process of Binary Code Similarity Analysis: History
Please note this is an old version of this entry, which may differ significantly from the current revision.
Contributor: , , ,

在高度发达的软件工程的背景下,代码重用已被广泛认为是显着减轻开发负担和提高生产力的有效策略。但是,不正确的代码引用可能会导致安全风险和许可证问题。由于许多软件的源代码难以获取,二进制代码相似度分析(BCSA)在bug搜索、代码克隆检测、补丁分析等领域得到了广泛的应用。

  • binary code similarity analysis
  • source code
  • pre-compilation
  • compilation
  • assembly
  • linking
  • feature extraction
  • feature representation
  • feature comparison

1. 引言

随着科学技术的进步,电子设备、软件和互联网已成为日常生活中不可或缺的组成部分。互联网技术的不断进步,软件应用的频繁更新升级,网络环境日趋复杂,再加上软件的易用性,给人们带来了巨大的便利。然而,它在开发和维护方面也给软件开发人员带来了重大挑战。开源软件的使用不仅减少了开发人员的工作量,而且还将维护责任转移给了第三方软件开发人员。尽管广泛使用开源软件有好处,包括提高开发效率,但它也带来了一些风险。例如,合并包含漏洞的开源软件可能会导致将此类漏洞引入工程代码中。此外,在项目代码中未经授权使用开源软件可能会导致许可证合规性问题。
《2022年开源安全与分析报告》[1]Synopsys 发布的报告强调了开源代码在各行各业的普遍性。在所研究的 17 个行业中,与计算机硬件半导体、网络安全、能源和清洁技术以及物联网相关的行业拥有完全由开源代码组成的代码库。其余行业,在开源代码使用方面从93%到99%不等,仍然有很大一部分代码库依赖于开源软件。报告还指出,开源代码在不同行业的广泛使用既带来了好处,也带来了风险。例如,在物联网领域,100% 的代码库使用开源软件,其中 64% 的代码库容易受到攻击。同样,在航空航天、汽车、运输和物流行业,97% 的代码库包含开源代码,其中 60% 的代码库存在安全漏洞。
2021 年底,在常用程序 ApacheLog4j 中发现了一个零日漏洞。此漏洞称为 Log4Shell (CVE-2021-44228)[2],攻击者可以利用该漏洞在受影响的服务器上执行任意代码。使用该漏洞的首次记录攻击发生在 9 月 1 日,最初针对的是 Microsoft 的 Minecraft 游戏的 Java 版 18.4。根据 GitHub 存储库 YfryTchsGD/Log<>jAttackSurface 中记录的攻击案例,该漏洞影响了一系列流行的服务和平台,包括 Apple iCloud、QQ 邮箱、Steam 商店、Twitter 和百度搜索。这凸显了广泛使用的开源代码库中漏洞的潜在深远后果。
在许可安全方面,创新作品(包括软件)默认受专有版权保护。法律禁止在未经创建者/作者以授权许可形式明确许可的情况下使用、复制、分发或修改软件。即使是最宽松的开源许可证,用户在使用该软件时也会承担义务。当代码库中存在的开源代码许可证可能与该代码库的总体许可证发生冲突时,就会出现潜在的许可证风险。例如,GNU 通用公共许可证 (GPL) 通常规范了在商业软件中使用开源代码,但商业软件供应商可能会忽视 GPL 许可证的要求,这可能会导致许可证冲突。从行业来看,计算机硬件和半导体行业的代码库开源许可冲突比例最高,为93%,其次是物联网行业,为83%。相反,医疗保健、健康技术和生命科学的开源许可证冲突代码库比例最低,为 41%。
BCSA 是一种战略方法,用于在拒绝源代码访问的抑制性先决条件下解决代码重用引起的安全漏洞。通过测量和比较二元函数和易受攻击函数之间的相似性,我们可以对目标函数的潜在脆弱性进行初步评估。这种比较框架既可用于单一的二进制函数匹配,也可以扩展到多个匹配,即在全局漏洞数据库中对目标函数进行索引。类似地,这种方法也有助于揭示代码剽窃的隐蔽行为以及潜在的许可风险。
开源代码的重用或许可安全问题可能会对网络安全和版权保护构成威胁,并使在程序分析期间获取源代码更具挑战性。稳定且适用于嵌入式设备的动态分析工具在可用性方面受到限制。因此,研究人员已经开始研究使用 BCSA 技术检测代码重用,并取得了重大进展。然而,缺乏全面的文献来介绍受自然语言处理 (NLP) 和图神经网络 (GNN) 等技术启发的 BCSA 技术的最新进展。Haq等人进行的文献综述。[3]总结了 2019 年之前二十年中 BCSA 技术的发展,并系统分析了 BCSA 方法的技术细节。Kim等人。[4]分析了 43 年至 2014 年的 2020 篇 BCSA 论文,概述了当前研究中存在的问题,并提供了解决方案。Yu 等.[5]评估了 34 项工作的内容,特别关注它们在搜索嵌入式设备固件漏洞方面的表现。
软件相似性分析的研究包括源代码相似性分析和BCSA。当源代码易于访问时,经常进行源代码相似性分析,以检查易受攻击的代码段的重用或未经许可的代码的利用,例如在解释型语言(如Java或Python)的情况下。但是,在大多数情况下,目标程序是二进制格式,获取源代码变得具有挑战性。因此,BCSA在代码相似性分析研究中发挥着重要作用。以下各节将从两个角度概述 BCSA:从源代码到二进制代码的转换过程以及 BCSA 中涉及的基本过程。

2. 编译预处理

二进制代码表示源代码编译产生的机器代码,可以通过中央处理器直接执行。该代码由一系列二进制数字(0 秒和 1 秒)组成,人类不容易阅读。为了便于对二进制代码的分析,采用逆向工程技术将机器语言代码翻译成汇编语言,并利用调试器等工具简化人工检查过程。
如图 1 所示,将源代码转换为二进制代码的典型过程通常包括四个阶段:预编译、编译、汇编和链接。预编译阶段主要管理头文件的扩展、宏的替换和注释的消除等操作。编译阶段对代码进行词法、句法和语义分析,对其进行优化,并将其转换为汇编代码。汇编阶段将汇编代码转换为机器代码。最后,链接阶段将编译的目标文件集成到二进制形式中,以生成最终的可执行文件。
图 1.从源代码到二进制的编译过程。
编译过程负责将源代码准确地转换为 CPU 可以直接执行的二进制格式。然而,这个过程的结果并不是固定的,因为编译器的选择、优化选项、目标 CPU 架构和操作系统等各种因素都会对生成的最终机器代码产生影响。因此,相同的源代码可能会通过不同的编译路径导致不同的二进制代码输出,这给 BCSA 带来了挑战。

三、BCSA基本流程

BCSA 的中心目标是通过分析两个二进制函数的相似性来确定它们的出处。这种分析构成了确定二进制函数相似性的基础。在某些情况下,二进制函数的一对一比较可以扩展,例如在漏洞搜索的情况下,它可以扩展到一对多功能比较,在代码克隆检测中,它可以扩展到多对多函数比较。
本研究通过将工作分为三个阶段,清晰地描述了 BCSA 技术的技术特征,如图 2 所示。这些阶段是特征提取阶段、特征表示阶段和特征比较阶段。
图2.该方法的整个过程。
第 1 阶段:特征提取。此阶段的主要任务是通过利用 IDA Pro 等分析工具获得二进制函数的固有特征[6]、BAP公司[7]、 安格[8], 瓦尔格林德[9]等。这些固有特征是指直接从分析工具中获取的特征,无需任何额外处理,例如程序控制流图和调用图。此阶段的输入是一组原始二进制函数,例如二进制文件,输出是原始二进制函数特征。然后,这些特征在特征表示阶段进行进一步处理,然后在特征比较阶段进行比较。举例来说,在Gemini的特征提取阶段执行的工作[10]涉及提取功能控制流图 (CFG) 和基本块信息。
第 2 阶段:特征表示。此阶段的主要目标是根据作者的要求和偏好处理在特征提取阶段获得的函数的固有特征。该阶段的输入是特征提取阶段产生的函数的固有特征,输出是特征比较阶段可直接用于相似度计算的一种数据形式。例如,在 Gemini 的特征表示阶段执行的工作[10]包含两个主要任务:首先,将基本块信息转换为数字向量表示,作为控制流图(CFG)中的节点,从而创建具有基本块属性信息的ACFG。然后,通过使用端到端神经网络将 ACFG 表示为向量,从而提供包含其结构和语义信息的函数表示。这种向量表示用于在特征比较阶段直接计算函数的相似度。
Phase 3: Feature Comparison. The primary task of this stage is to employ an appropriate method to calculate the similarity between pairs of functional features generated in the feature representation stage. The input of this stage is the representation of the functional features directly produced by the feature representation stage, and the output is the score of similarity between the two functions obtained through the similarity calculation. As an illustration, in the case of Gemini[10], the feature comparison stage employs the cosine distance method to determine the similarity between two feature vectors representing two functions.

This entry is adapted from the peer-reviewed paper 10.3390/electronics12224671

References

  1. 2022 Open Source Security and Analysis Report . analyst-reports. Retrieved 2023-11-23
  2. CVE-2021-44228 . CVE - Common Vulnerabilities and Exposures. Retrieved 2023-11-23
  3. Irfan Ul Haq; Juan Caballero; A Survey of Binary Code Similarity. ACM Comput. Surv. 2021, 54, 1-38, .
  4. Dongkwan Kim; Eunsoo Kim; Sang Kil Cha; Sooel Son; Yongdae Kim; Revisiting Binary Code Similarity Analysis Using Interpretable Feature Engineering and Lessons Learned. IEEE Trans. Softw. Eng. 2022, 49, 1661-1682, .
  5. Yu, Y.; Gan, S.; Qiu, J.; et al.; Binary Code Similarity Analysis and Its Applications on Embedded Device Firmware Vulnerability Search. Journal of Software 2022, 33, 4137-4172, .
  6. IDA Pro . hex-rays. Retrieved 2023-11-23
  7. David Brumley; Ivan Jager; Thanassis Avgerinos; Edward J. Schwartz. BAP: A Binary Analysis Platform; Springer Science and Business Media LLC: Dordrecht, GX, Netherlands, 2011; pp. 463-469.
  8. Fish Wang; Yan Shoshitaishvili. Angr - The Next Generation of Binary Analysis; Institute of Electrical and Electronics Engineers (IEEE): Piscataway, NJ, United States, 2017; pp. 8-9.
  9. Nicholas Nethercote; Julian Seward. Valgrind; Association for Computing Machinery (ACM): New York, NY, United States, 2007; pp. 89-100.
  10. Xiaojun Xu; Chang Liu; Qian Feng; Heng Yin; Le Song; Dawn Song. Neural Network-based Graph Embedding for Cross-Platform Binary Code Similarity Detection; Association for Computing Machinery (ACM): New York, NY, United States, 2017; pp. 363-376.
More
This entry is offline, you can click here to edit this entry!
Video Production Service