源码编译二进制-基于跨模态检索的双补码源码匹配

在NeurIPS2020中,腾讯安全敏锐实验室的“CodeCMR:跨模态检索功能级二进制源码匹配”论文利用AI算法解决二进制补码安全问题成功入围。本文首次提出一种基于AI的双补码/源码端到端匹配算法,与传统算法相比,该算法具有优异的功效和显著提高的准确性。本文的结果为逆向分析领域提供了新的思路,大大提高了产业部署的效率,并向大家介绍了背景、研究模型和实验结果。

背景

在人工智能顶级学术会议AAAI2020上,腾讯安全锐科实验室的技术受到广泛关注。在此基础上,将本研究方向拓展到两补码与源码的交集,进一步实现腾讯安全锐科实验室在AI+安全新兴方向上的新探索和突破。

其次,补码-源码匹配是信息安全领域重点研究方向之一。给定一个双补码,逆向分析研究人员希望找到其对应的源代码,从而提高逆向分析的效率和准确性。但是,由于源代码和二进制代码之间的差异,该领域的研究较少。B2SFinder[1] 和 BinPro [2] 等传统算法提取字符串和即时数量的源代码和二进制补码进行匹配。但是,函数级源代码和二进制补码的特点很少,匹配准确率不高。另一方面,设计合适的功能需要大量的专业知识。

图 1 显示了一个函数的源代码和两个补码。从图 1 可以看出,不仅字符串和即时数字特征,而且代码中隐藏的语义特征也至关重要。为此,本文希望设计一种端到端模型,可以手动提取代码之间的语义特征,以提高精确匹配率。

图1 - 两个补码对应于源代码

这是一个双补码源码检索任务,我们将两个码视为两种模态的输入,可以比作图片和文本互搜等跨模态检索场景。为此,我们设计了图2所示的CodeCMR框架,这是跨模态检索领域相对常见的结构[3,4]。在估计最终向量之前,两种模态之间没有信息传递,因此在实际应用中可以提前估计向量,可以节省大量的在线估计时间和存储空间。

图 2 - CodeCMR 总体框架

一、整体结构

模型的输入分为两部分:源代码特征和双补码特征。源代码的特点是字符级源代码、从源代码中提取的字符串和即时数字;二进制补码的特征是控制流图、双补码串和瞬时数。首先,通过不同模型估计三个输入(语义特征、字符串特征和即时数特征)得到向量,然后通过拼接+BatchNorm的方法得到代码向量,最后以tripletloss[5]作为损失函数。

在这个基本框架上,有许多创新可以改进,比如使用预训练模型进行语义融合,使用对抗性损失对齐向量等,我们将在后面讨论。

图 3 - 源代码和双补码代码的语义模型

2. 语义模型

如图 3 所示,对于字符级源代码,我们使用 DPCNN 模型 [6];对于双补控制流程图,我们使用端到端GNN模型。在功能层面,字符级源码的输入一般在4096以上,DPCNN的效率远优于TextCNN和LSTM。对于控制流图,我们没有使用BERT预训练的节点嵌入作为输入[7],而是采用了端到端的训练方法,取得了更好的结果。

在这个阶段,本文使用了DPCNN和GNN,但ASTNN等树模型也值得尝试。由于输入是函数级代码,缺乏 #define、#include等重要信息,因此需要设计合适的编译工具将源代码转换为 AST。相比之下,我们的优势是直接使用文本作为输入,它不需要额外的专家经验,而且功能强大。

3.即时数字,字符串模型

对于源代码和二进制补码的即时数字和字符串,我们还设计了一个匹配的模型。

对于即时数字,我们设计了一个整数LSTM。它的输入有两个输入:整数令牌和整数。整数作用于 LSTM 的输入和输出门,以控制信息流。

对于字符串,我们使用分层模型,首先使用 LSTM 模型获取每个字符串的向量,然后使用求和池获取字符串集合的向量。

4、规范加权抽样

在得到源代码和双补码向量后,我们设计了一种采样方法。在度量学习领域,损失函数和采样方法是两个非常重要的模块。为了解决训练开始时硬样本收敛到局部最小值的问题,[5]提出了一种半硬抽样方法。但是,[8]强调这些采样方法可能会在某个时间段停止训练,并提出距离加权采样采样方法来解决这个问题:

距离加权抽样可以选择分布中每个概率的样本,而半硬抽样、硬抽样、均匀抽样方法只能选择特定分布的样本。在此基础上,本文提出了一种改进,即减少超参数s以帮助调整概率分布,从而适应不同的任务和数据集。

实验

1. 数据集和评价指标

本文以GCC-X64-O0和CLANG-Arm-O3为两种组合形式,制作了2个30000/10000/10000训练/验证/测试集,recall@1和recall@10作为评价指标。数据集是公开可用的。

表1 - 实验结果

2. 实验结果

如表 1 所示,本文中介绍的方法比传统方法有了巨大的改进,这符合我们的期望,并表明代码中固有的语义特征很重要。在语义模型中,DPCNN+HBMP取得了最好的效果,表明双补码端的端到端训练优于预训练节点嵌入。与随机抽样和距离加权抽样相比,规范加权抽样具有更好的效果。图 4 中的训练/有效损失曲线也证明了这一点,其中当 s=5 时,规范加权采样的训练损失较高,但有效损失较低,表明采样了更合适的样本对。

图 4 - 用于训练和验证的损失函数曲线

讨论和总结

1. 讨论

基于CodeCMR框架,有许多创新值得尝试。

1)代码编码器。诸如ASTNN,Tree-LSTM源码编译二进制,变压器等模型可能同样有效。

2)其他损失函数和采样方法,如AM-softmax,Circleloss等。

3)对抗训练和其他跨模态检索技术。

4)预训练算法。在获得最终向量之前,两个模态之间没有信息融合,因此值得尝试分别预训练两个模态或通过融合跨语言模型来预训练。

2. 总结

该文提出一种用于双补码-源码匹配任务的CodeCMR框架,该框架成功地利用了码与两补码之间的语义特征。与传统方式相比源码编译二进制,已经取得了很大的突破。

引用

[1]YuanZ,FengM,LiF,etal.B2SFinder:DetectingOpen-SourceSoftwareReuseinCOTSSoftware[C]//201934thIEEE/ACMInternationalConferenceonAutomatedSoftwareEngineering(ASE).IEEE,2019:1038-1049.

[2]MiyaniD,HuangZ,LieD.Binpro:Atoolforbinarysourcecodeprovenance[J].arXivpreprintarXiv:1711.00830,2017.

[3]王海,萨胡德,刘丙,埃塔尔.学习跨模态嵌入与对抗网络用于烹饪食谱和食物图像[C]//IEEE论文集关于计算机视觉和模式识别.2019:11572-11581.

[4]王斌,杨彦,徐旭,艾塔尔.对抗叉模态检索[C]//第25届ACM国际多媒体会议论文集.2017:154-162.

[5]SchroffF,KalenichenkoD,PhilbinJ.Facenet:Aunifiedembeddingforfacerecognition and clustering[C]// Proceedings of theIEEEconferenceoncomputervisionandpatternrecognition.2015:815-823.

[6]JohnsonR,ZhangT.Deeppyramid卷积神经网络用于文本分类[C]// 第55届计算语言学协会年会论文集.2017:562-570.

[7]余兹,曹瑞,唐炳.秩序事项:语义感知神经网络二进制代码相似性检测[C]//AAAI论文集人工智能.2020,34(01):1145-1152.

[8]WuCY,ManmathaR,SmolaAJ,etal.Samplingmattersindeepememblearning[C]//IEEE国际计算机视觉会议论文集.2017:2840-2848.

技术高级系列(3):探讨双补SCA在数字供应链安全系统中的应用

内容

序言:开源整流落地关键技术

一、为什么要分析两补软件的组成

二、补码文件可以分析哪些风险

3. 什么是双补文件

4. 如何生成双补文件

5. 2.补码文件的基本结构

六、补体软件组成分析原理

7. 双补软件组件分析的实际应用

字数:4718 阅读时间:6分钟

小订单

在数字经济时代,随着开源应用软件开发方法的使用越来越多,开源组件逐渐成为软件开发的核心基础设施,但也带来了一些风险和安全风险。为了解决这个问题,双补软件的成分分析技术成为有效的手段之一。通过分析双补软件的组成,可以测量潜在风险并向用户提供有价值的信息。

本文将从诞生背景维度分析两补软件组成的关键技术、二补文件可以分析哪些安全隐患、二补技术的原理及实际应用。

01为什么需要分析二补软件的组成

在工业系统、车联网系统、银行经纪系统、嵌入式系统中,有无数的双补程序和库可能丢失多年或私有,这意味着很难以通常的方式修复此类程序和库或在源代码级别评估其安全性。

在供应链场景中,大多数采购的可交付成果未能提供源代码,对于此类需要上线或需要集成到自研产品中的采购产品,需要提前对二补产品进行检查,进行安全评估。

在整个数字供应链的背景下,对双补码测量的需求变得越来越重要。

SCA 的双补码检查可以很好地补充源代码检查:

事实上,在分析两补组成物的组成时也存在一些技术挑战:

其次,补码软件的组成分析和源码组件的分析是不可或缺的,在不同的阶段和场景中都有自己的优势。

02 两个补文件可以分析哪些风险

中间语言和双补码机器语言之间存在很大的语义差距,因此很难知道它们之间的关系。编译的程序不一定符合开发人员的意图。侧门(例如双补级侧门和恶意代码植入)可能会被忽视。

其次,补体软件的组成分析可以对提供的软件包/固件进行综合分析,通过解压得到包中待分析的文件,根据组件特性识别技术和各种风险监控规则,得到相关被测对象的组件SBOM清单和潜在风险清单。

主要包括以下几类:在了解2/补

分量分析如何剖析上述风险项之前,有必要了解2/补文件的定义、2/补文件的生成过程以及

2/补码文件的基本结构和运行时内存结构。

03哪些是两个补文件双补码

文件一般是指将属于每个程序的所有双补码代码(机器指令)和数据(变量、常量等)存储在一个独立的文件中。这些文件包含可以直接在相应系统上运行的二进制补充文件,因此它们被称为双补码可执行文件或双补码文件。

狭义上的双补码文件定义为文本文件以外的文件。也就是说,文件内容由0和1组成,可以称为双补文件。

ELF 格式和 PE 格式是 Linux 和 Windows 操作系统上使用最广泛的双补码格式。

PE格式(PortableExecutable):适用于Windows操作系统,包括可执行文件“EXE,SCR”,动态链接库“DLL,OCX,CPL,DRV”,驱动程序“SYS,VXD”,目标文件“OBJ”;

ELF格式(可执行和链接格式):用于Unix和Linux系统,包括可执行文件,动态链接库“so”,可重定位文件“o”,内核模块“ko”;

Mach-O格式(MachObjectFileFormat):适用于MacOS系统,类似于Linux和大多数UNIX的本机格式ELF(可扩展固件接口);

其他格式:联通设备应用程序“APK,IPA”,压缩文件“lzma,xz,zip,bz,tar,arj,lzo,tar.gz,rar,7z,rpm,deb”,固件映像“uimage,fitimage,zimage,IMG0,TR”,文件系统“cramfs,yaffs,jffs2,cpio,squashfs,ubi”等。

042. 补码文件是如何生成的

图1:补码文件的生成过程

以 C 为例,生成双补码文件有四个主要步骤:

05 代码2:补码文件的基本结构

在我们开始剖析双补文件之前

,我们需要了解双补码文件的基本结构。一个ELF二进制补码文件通常由以下部分组成

图 2:补码文件结构和运行内存结构之间的关系

运行可执行文件时,操作系统会分叉一个进程,exeve 将可执行文件加载到进程的用户模式内存中,从内核返回,跳转到 ELF file_start的条目地址,调用 main() 函数,然后单步进入代码片段。

该过程的内存段包括:堆栈

:堆栈,向低地址增长;堆

:堆,向高地址增长;

数据:具有读写权限的数据段;

code:具有执行权限的数据细分受众群。

可以看到代码片段与源代码相关,对应于 .rodata 部分、.text 部分、.init 部分和二进制补码文件的标头。rodata(只读数据)段存储常量数据源码编译二进制,例如在程序中定义为常量的全局变量,#define定义的常量 和常量,例如“HelloWorld”。

06 二、补体软件成分分析原理

二、补体检测技术的分类

图3:悬挂镜SCA检测能力分类树结构

双补分量分析技术可分为两类,或两者的组合,如下所示。

静态的

性能分析:静态分析允许您在不运行两个补码文件的情况下对其进行性能分析。这些技术有两个优点:它们可以一次剖析整个双补文件,并且不需要特定的 CPU 来运行双补文件。可以在 x86 计算机上静态解析 ARM 二进制补码文件。静态

剖析通常有两种形式:基于多维特征提取的静态拆解和对齐。

静态反汇编:涉及提取二进制补码文件而不执行的指令。静态反汇编的目标是将二进制补码转换为汇编代码的过程。一些反汇编工具可以将双补码文件转换为汇编指令序列,以帮助剖析程序的代码结构和控制流。通过反汇编,可以恢复程序的指令序列、跳转指令、条件分支等控制结构,从而建立控制流程图。

源代码>编译>双补程序>反汇编>控制流程图 (CFG) 定向图 G(V,E)。

生成控制流程图后,可以综合分析句型相似性特征、图相似性特征、函数相似性特征、常量字符串和即时数,估计开源组件的相似性和排名,确定引入的组件信息。

但是,反汇编也有一定的挑战性,对于不同的编译器来说,编译安全配置、编译优化级别、CPU架构等都会造成汇编代码的巨大差异,从而导致分析的不确定性很大。基于多维特征

提取的对比分析:从二进制补文件中提取各种静态特征,但也从开源组件项目中提取项目内的多维特征。通过将双补产品的多维特征与已知组件的特征进行比较,构建相似度和排名分析,最后筛选出符合条件的开源组件的组件。动态

性能分析:与静态性能分析相比,动态性能分析运行二进制补码文件,并在执行时对其进行性能分析。这些技术通常比静态分析更简单,因为您可以了解整个运行时状态,包括变量的值和条件分支的结果。在应用程序执行过程中,可以

借助运行时仪表检查技术对应用程序加载的第三方组件进行测量,该技术可以排除未执行加载冗余的组件并进行高精度检查。

相反,只能看到执行代码,因此这些技术可能会错过程序的某些部分。而缺失的部分也可能是流程永远达不到的部分,即使存在风险,也可以忽略不计。具体来说,需要结合漏洞可达性进一步分析。

图 4:运行时 SCA 技术基础实现

基于多维特性的双补组分分析技术方案

第二个补码检查过程如右图所示:

图5:补体成分剖析-检测过程

首先对待检包文件进行递归解压,然后对求解文件进行格式识别,确定二补文件格式。执行相应的逻辑,提取不同格式文件的多维特征,然后使用相似度算法对开源组件知识库的相对特征进行估计、过滤和排序,最终确定引入的开源组件的名称和版本。

二、补文件风险分析

从二进制补充文件中提取开源组件漏洞风险、许可证风险、安全配置和敏感信息。漏洞

风险:通过相似度算法确认组件GAV信息后,可以通过组件漏洞风险数据库检查是否存在影响当前使用的软件版本的漏洞。如果当前软件版本存在漏洞,您可以将软件版本更新到推荐版本。在紧急情况下,也可以通过社会提供的产品中收集的或制造商给出的补丁修复方法暂时解决。

图 6:源 SCA 工具 - 2。补体成分分析组件详细信息许可证

风险:根据组件GAV信息,可以分析开源软件和相应的许可证。分析软件是否合规,是否符合入门要求。如果使用的软件存在合规风险,则需要寻找功能、合规相近的开源软件进行替换或有针对性地避免触发合规条款。

图 7:源 SCA 工具 - 双补体成分分析许可证详细信息

检查安全配置:二进制补文件头上有一些数组参数的配置信息源码编译二进制,可以在编译器上提取不同的编译选项。检查可以执行双补码代码的编译选项,例如 PIE、RELRO、Canary、ASLR。确定二进制补码文件未打开的保护。

检查敏感信息

:密钥敏感信息、设备敏感信息、商业敏感信息、一般敏感信息检测,可以有效防止打包过程中无意中引入的敏感信息,防止信息泄露。每种敏感信息类型都有特定的格式,匹配规则通过常规或其他方法设计,以提取与规则匹配的信息。例如,电子邮件、电话号码、用户密码、身份证号码、IPv4、IPv6、URI、令牌、公钥、私钥、MAC地址、GIT/SVN仓库弱密码、硬编码密钥等风险。检查敏感文件

:识别敏感文件(密钥文件、证书文件、

源代码文件、调试工具等)在用户上传的软件包/固件中。

图 8:分析源 SCA 工具的敏感信息详细信息 - 两个补码组件

07 二、补码软件组件分析的实际应用

开发安全检查

源级SCA结合双补SCA的能力,防止开发流水线过程控制的疏忽,虽然中间更改了组件版本或错误配置了编译选项,但在编译建立和产品打包活动之后仍可进行二次检查。

图 9:软件生产双补码检查阶段

无论是人工拉取还是自动上传到CI/CDPipeline,都可以为软件产品的安全发布提供安全检查分析报告。

图 10:丰富访问 2 补码检查方案

供应链安全检查

借助双补分析,整合不同供应商的系统和自研应用,进行统一的系统安全测试,明确责任归属,及时通知供应商修复问题。

图11 检测中引入两种补品

源SCA结合丰富的知识库指纹样本:文件结构特征、文件哈希分析、各种静态特征等融合分析能力,全面提升扫描精度

基于丰富的知识库功能样本:知识库覆盖主流代码托管平台GitHub、GitLab、BitBucket、Gitee、Codeberg等,覆盖超过8W+CC++开源项目、5KW+JAVA开源项目,生成2亿+指纹特征;

其次,补码是基于多维特性的相似性度量算法:算法稳定高效,可以覆盖全面的CPU架构x86/x64、ARM/ARM64、PowerPC、MIPS;主流操作系统Linux,Android,Windows,MacOS,QNX;支持官方文件格式APK文件、固件、镜像、文件系统等的测量;

精准定位:根据相似度算法的实现结果,准确定位具体的开源项目和版本,关联分析子依赖的组件信息以及漏洞、许可证的风险信息。

灵活适配:相似度阈值可动态调整,降低误报、误报几率。

在满足源端巡检技术实现的基础上,结合运行时SCA技术、运行时SCA技术和漏洞可达性分析两补充,有效帮助开发者更好地管理和维护软件组件,减少无效漏洞的操作干扰,提高软件安全可靠,促进企业构建并有效实施数字化供应链安全整改体系, 并确保数字供应链安全。

+

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 源码编译二进制-基于跨模态检索的双补码源码匹配 https://www.wkzy.net/game/131392.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务