ARTICLE · 1153977
二进制软件成分分析总不准,如何靠AI精准识别?
传统SCA识别二进制文件组件版本,通过模式匹配,寻找文件中存在的版本号作为组件版本。但是没有版本号的如何识别呢?结果可能是N/A或者随便推荐一个版本。这无疑对SBOM结果生成带来了困扰,有时候用户也不知道实际版本是多少,但是有这个组件,版本未知,风险也未知。
虽然无法读取实际版本,但二进制文件中的函数是实际存在的,可以比对二进制函数和源码函数来确定二进制组件的具体版本。
现有解决方案:计算函数的相似度,不可解释
现在的SCA产品或相关学术论文,识别函数之间的关系,大多采取计算函数相似度来确定2个函数是否相似。将函数文本使用模型将其编码为向量,再使用向量计算相似度。但是这样的相似度并不存在可解释性,2个函数之间到底哪里相似了?从一个相似度值并不能得到具体原因。可能解释为语义相似,但是这种向量的语义相似并不能说明什么,是一个极其模糊的概念。
下面从二进制反编译得到的mbedtls_net_poll函数使用microsoft/codebert-base模型编码为这样的768维向量
[-0.057,0.007,0.034,0.021,-0.104,-0.058,-0.009,0.024,0.049,0.052,-0.040,0.143,-0.028,-0.023,0.112,-0.003,0.027,0.032,0.015,-0.021,-0.035,-0.030,0.092,-0.066,0.060,0.058,...]
源码的mbedtls_net_poll函数被编码为另一个768维向量
[-0.048,-0.003,0.031,0.021,-0.083,-0.058,0.004,0.023,0.051,0.043,-0.018,0.171,-0.035,-0.021,0.106,0.001,0.024,0.025,0.002,-0.027,-0.027,-0.015,0.065,-0.072,0.040,0.039,...]
这2个向量计算出余弦相似度为0.9862,但是这个相似度能解释吗?到底哪里相似呢?往往一个相似度很难解释。
uintmbedtls_net_poll(uint *param_1, uint param_2, uint param_3){int iVar1;uint uVar2;__fd_mask *p_Var3;uint uVar5;timeval *__timeout;timeval local_120;fd_set fStack_118;uint auStack_98[32];__fd_mask *p_Var4;uVar5 = *param_1;...do {iVar1 = select(uVar5 + 1, &fStack_118,(fd_set *)auStack_98,(fd_set *)0x0,__timeout);} while (iVar1 == 4);...
intmbedtls_net_poll( mbedtls_net_context *ctx, uint32_t rw, uint32_t timeout ){int ret;struct timeval tv;fd_set read_fds;fd_set write_fds;int fd = ctx->fd;...do{ret = select( fd + 1, &read_fds, &write_fds, NULL,timeout == (uint32_t) -1 ? NULL : &tv );}while( IS_EINTR( ret ) );...}
SCA 二进制AI辅助识别组件版本
如果从函数的实际内容进行语义分析,分析得到真实的函数差异,则可以知道到底哪部分二进制代码和指定版本源码存在关系。而现在的AI大模型天生就会读代码,能够读懂两个函数之间的差异。
软安SCA现已推出二进制AI辅助识别组件版本功能,利用大模型对二进制中的反编译函数进行分析,与源码函数进行比对,逐步分析出该二进制中的函数属于组件的某个版本。
以freetype 2.13.3编译得到的libfreetype.so.6.20.2文件为例,该文件中无任何版本号。但是根据软安二进制组件版本识别算法,能够将该文件的版本号锁定在2.13.1至2.14.3之间。问题来了,这些版本之内有的存在漏洞,有的不存在漏洞。那么该文件到底存在风险吗?

软安 SCA 产品的二进制分析智能体,为二进制组件版本识别带来新的技术突破。它能够对二进制文件进行智能分析,结合组件特征与版本信息持续研判,进一步提升组件版本识别的准确性。
在本案例中,面对组件版本信息模糊、候选范围宽泛且难以精确判定的痛点,AI智能分析依托函数特征提取与函数语义分析推理能力,对候选版本区间进行了层层收敛与精准聚焦,成功将原本高度不确定的版本范围压缩至唯一确定版本,最终准确识别出该文件所对应的组件版本为 2.13.3,与该二进制文件的实际版本一致。
该版本存在相关安全风险,AI分析结果并为后续的风险评估、优先级研判与处置决策提供了关键、明确且可执行的依据,有效提升了SCA检测的准确率与风险发现效率,真正实现了从"版本难辨"到"风险可查"的闭环能力跃迁。

面向软件供应链安全场景,智能体可综合分析二进制文件特征与组件版本信息,提升组件版本识别的准确性,并提供可追溯的分析依据,帮助用户在资产盘点、组件溯源、漏洞影响评估及安全风险排查等环节,更清晰地研判识别结果与潜在影响,为后续风险处置提供支持。