混源文件许可冲突检测方法与流程

文档序号:21102765发布日期:2020-06-16 20:58阅读:263来源:国知局
混源文件许可冲突检测方法与流程

本发明涉及文件检测领域,尤其涉及一种混源文件许可冲突检测方法。



背景技术:

目前混源软件中开源代码及第三方插件大量使用,引起的知识产品和安全风险在国外已经引起了一定的关注和重视。已有的成果主要有美国blackduck和protecode两款成熟软件,这两套成熟软件在美国律师事务所、知识产权局、企业审计部门、软件承包商等单位广泛应用,并应用到其他国家的大型软件公司和企业审计单位。

(1)blackduck

blackduck(黑鸭软件)是目前占有市场份额最大的代码分析软件,但是blackduck主要实现对源代码进行扫描、审计和代码管理。包括单机版的protex和在线检测版的hub。软件的blackduckknowledgebase(kb)是目前世界上最大、最全面的开源知识库。

作为blackduck整个解决方案的基础,kb具有的主要优势包括:

1、包含5300亿行开源源代码;

2、囊括2,000,000个开源软件项目;

3、2500种独一无二的许可证(license);

4、79,000个安全漏洞;

5、数据来自6,500+站点;

6、专业团队负责维护,持续的更新。

blackduck支持的编程语言超过70种,能够对超过100种文件类型进行扫描和检测,支持代码逐行比对功能,能够在并列窗口中展示出用户代码和开源代码的匹配内容,帮助用户更加准确的确认代码匹配。

blackduck目前在超过20个国家拥有700多个客户,包括intel、cisco、alcatel-lucent、motorola、qualcomm、yahoo等。blackduck的产品和服务还应用于企业并购时的代码审计。

(2)protecode

protecode是synopsys公司研制的一款开源代码质量检查管理工具,可以管理第三方代码的开源内容、发现其安全漏洞和确保license与知识产权的合规性。protecodeenterpriseserver(es)是针对源代码进行扫描、组成分析、许可证合规性分析及安全漏洞分析的软件。

以下为protecodees的功能组成表

表1-1protecodees功能组成表

目前,blackduck与protecode均已经成熟应用,占有源代码分析的全球主要用户群,但是由于美国贸易限制,这两款软件的开源代码库均不对国内销售,只能通过上传源代码文件或二进制文件,使用软件的在线检测服务进行软件组成扫描分析,存在保密和安全的问题,这对软件是不允许的,因此无法采用这两套软件的服务进行代码组成分析。

中国国内代码组成和安全风险分析技术研究正处于百花齐放、百家争鸣的阶段,一些大学教授和安全领域专家正在从事一些细分技术领域的研究,绝大部分处于理论分析和技术仿真阶段,距离实用化、系统化和工程化还有很多关键技术需要研究和突破。

山东大学王凤宇教授正在研究基于函数层特征的二进制代码匹配与分析技术,该方法需要反汇编恶意软件并对汇编代码进行分析才能获得函数的特征,所以函数的特征会受混淆技术的干扰,需要采用静态分析和动态分析相结合的方法进行研究,该方法主要用于实现恶意软件的检测、已有研究成果仍停留在实验室论证阶段。

国防大学提出了一种高维特征融合的恶意代码分析方法,对恶意代码的静态二进制文件和反汇编特征等进行提取,借鉴局部敏感性思想,对多维特征进行融合分析和处理,采用典型的机器学习方法对融合后的特征向量进行学习训练,但是该方法仅适用于样本较少的场景,即无法适用于大规模样本场景,这种方法的可扩展性存在较大疑问。

中国人民解放军信息工程大学赵荣彩教授开展了基于特征提取的代码比较技术研究,在定义了基于图的二进制代码描述方法的基础上,从函数和基本块两个层次对近似的二进制代码进行比较,分析出它们之间相同的部分和差异信息,基于特征提取的二进制代码比较技术的实现框架,并列举了它在恶意软件变种分析,但是该方法对于恶意代码变种识别仍存在很多不确定性,该方法不依赖代码知识库的策略难以保证对比结果的可信性。

由此可见,中国开源安全联盟目前只实现了针对二进制代码的安全漏洞扫描分析,缺少对源代码分析的功能,综合能力还无法满足本项目应用需求,并且目前的性能指标还不能满足对高并发高效率代码分析匹配的应用需求。



技术实现要素:

为了解决上述问题,本发明提供了一种混源文件许可冲突检测方法,针对混源代码组成结构复杂的难题,利用函数接口、函数关系、代码结构等多级特征进行智能分析,实现对混源代码的组成分析和开源代码的准确定位,通过分析代码中包含的商用代码许可证信息与开源许可协议信息做对比,实现软件许可证合规性量化分析,为软件的合规性提供数据支撑,围绕开源软件的复杂和许可证的多样性引来的安全和知识产权风险,创新开展软件分析相关的技术研究,重点突破混源代码智能检测分析能力、许可证合规性分析能力、许可证冲突识别定位能力等代码分析能力。

根据本发明的一方面,提供了一种混源文件许可冲突检测方法,所述方法包括:

步骤1)构建代码许可库和特征知识库:定期从开源许可证信息网站爬取许可证信息和特征知识库信息,对许可证信息进行收集以构建代码许可库,对特征知识库信息进行特征值提取以构建特征知识库;

步骤2)混源文件特征值提取:获取混源文件,分析混源文件的文件信息以获取文件名称、文件大小和文件哈希值,分析混源文件中每一个函数的函数信息以获得所述函数的函数名称、函数大小、函数长度和函数哈希值;

步骤3)获取混源文件的允许属性:当所述混源文件中存在license文件即许可证文件时,将所述混源文件的允许属性设置为所述license文件的允许属性,当所述混源文件中不存在license文件时,将所述混源文件的允许属性设置为所述混源文件所在项目的项目属性;

步骤4)获取目标开源文件的限制属性:将所述混源文件的文件哈希值与所述特征知识库中各个开源文件的各个哈希值分别进行匹配,以将匹配到的哈希值对应的开源文件作为目标开源文件,获取所述目标开源文件的限制属性,在匹配失败时,将所述混源文件使用的第三方文件的文件哈希值与所述特征知识库中各个开源文件哈希值分别进行匹配,以将匹配到的哈希值对应的开源文件作为目标开源文件,获取所述目标开源文件的限制属性,在匹配仍失败时,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件,获取所述目标开源文件的限制属性;

步骤5)将所述混源文件的允许属性与所述目标开源文件的限制属性进行比较,以在相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;

步骤6)当步骤5)结果为不冲突时,将所述混源文件的每一个目标开源文件的限制属性与所述混源文件的其他各个目标开源文件的允许属性分别进行比较,以在与某一个目标开源文件的允许属性相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;

步骤7)当步骤5)和步骤6)结果都为不冲突时,将所述混源文件的每一个目标开源文件的允许属性与所述混源文件的其他各个目标开源文件的限制属性分别进行比较,以在与某一个目标开源文件的限制属性相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;

步骤8)在记录所述混源文件的许可证协议合规性为冲突,将所述混源文件标记为不合格,否则,标记为合格。

更具体地,在所述混源文件许可冲突检测方法中:在步骤3)中,当所述混源文件中存在license文件时,对所述license文件进行分析以获得license文件的许可证协议类型名称、允许属性、限制属性和条件属性。

更具体地,在所述混源文件许可冲突检测方法中:在步骤4)中,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件之后,记录匹配到的函数哈希值对应的函数所在的开源文件所在的工程名称和版本信息。

更具体地,在所述混源文件许可冲突检测方法中:在步骤4)中,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件之后,设置所述混源文件的开源率为所述混源文件中匹配成功的函数的个数/所述混源文件中函数总个数*100%,设置所述目标开源文件与所述混源文件的相似度为所述混源文件中匹配成功且位于所述目标开源文件中的函数的个数/所述混源文件中函数总个数*100%。

更具体地,在所述混源文件许可冲突检测方法中:在步骤4)中,还根据所述混源文件的文件哈希值从漏洞库查询对应的漏洞信息并记录。

本发明针对混源代码结构复杂的难题,利用函数接口,代码接口等多级特征来智能分析,实现对混源代码的分析和开源代码的定位,围绕开源软件的复杂和许可证的多样性带来的安全和知识产权分析,重点突破混源代码的智能检测与分析技术。

附图说明

以下将结合附图对本发明的实施方案进行描述,其中:

图1为根据本发明实施方案示出的混源文件许可冲突检测方法的步骤流程图。

图2为根据本发明实施方案示出的混源文件许可冲突检测方法的步骤流程图的详解图。

具体实施方式

下面将参照附图对本发明的混源文件许可冲突检测方法的实施方案进行详细说明。

目前混源软件中开源代码已有的成果主要有美国blackduck和protecode两款成熟软件,其缺点在于均不对国内销售,无法做到保密和安全等问题,中国开源安全联盟目前只实现了针对二进制代码的安全漏洞扫描分析,缺少对源代码分析的功能。

为了克服上述不足,本发明搭建了一种混源文件许可冲突检测方法,能够有效解决上述技术问题。

图1为根据本发明实施方案示出的混源文件许可冲突检测方法的步骤流程图,所述方法包括:

步骤1)构建代码许可库和特征知识库:定期从开源许可证信息网站爬取许可证信息和特征知识库信息,对许可证信息进行收集以构建代码许可库,对特征知识库信息进行特征值提取以构建特征知识库;

步骤2)混源文件特征值提取:获取混源文件,分析混源文件的文件信息以获取文件名称、文件大小和文件哈希值,分析混源文件中每一个函数的函数信息以获得所述函数的函数名称、函数大小、函数长度和函数哈希值;

步骤3)获取混源文件的允许属性:当所述混源文件中存在license文件即许可证文件时,将所述混源文件的允许属性设置为所述license文件的允许属性,当所述混源文件中不存在license文件时,将所述混源文件的允许属性设置为所述混源文件所在项目的项目属性;

步骤4)获取目标开源文件的限制属性:将所述混源文件的文件哈希值与所述特征知识库中各个开源文件的各个哈希值分别进行匹配,以将匹配到的哈希值对应的开源文件作为目标开源文件,获取所述目标开源文件的限制属性,在匹配失败时,将所述混源文件使用的第三方文件的文件哈希值与所述特征知识库中各个开源文件哈希值分别进行匹配,以将匹配到的哈希值对应的开源文件作为目标开源文件,获取所述目标开源文件的限制属性,在匹配仍失败时,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件,获取所述目标开源文件的限制属性;

步骤5)将所述混源文件的允许属性与所述目标开源文件的限制属性进行比较,以在相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;

步骤6)当步骤5)结果为不冲突时,将所述混源文件的每一个目标开源文件的限制属性与所述混源文件的其他各个目标开源文件的允许属性分别进行比较,以在与某一个目标开源文件的允许属性相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;

步骤7)当步骤5)和步骤6)结果都为不冲突时,将所述混源文件的每一个目标开源文件的允许属性与所述混源文件的其他各个目标开源文件的限制属性分别进行比较,以在与某一个目标开源文件的限制属性相同时,记录所述混源文件的许可证协议合规性为冲突,否则,记录所述混源文件的许可证协议合规性为不冲突;

步骤8)在记录所述混源文件的许可证协议合规性为冲突,将所述混源文件标记为不合格,否则,标记为合格。

接着,继续对本发明的混源文件许可冲突检测方法的具体流程进行进一步的说明。

在所述混源文件许可冲突检测方法中:

在步骤3)中,当所述混源文件中存在license文件时,对所述license文件进行分析以获得license文件的许可证协议类型名称、允许属性、限制属性和条件属性。

在所述混源文件许可冲突检测方法中:

在步骤4)中,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件之后,记录匹配到的函数哈希值对应的函数所在的开源文件所在的工程名称和版本信息。

在所述混源文件许可冲突检测方法中:

在步骤4)中,将所述混源文件的每一个函数和函数哈希值与所述特征知识库中各个开源文件内各个函数的函数哈希值进行匹配,以将匹配到的函数哈希值对应的函数所在的开源文件作为目标开源文件之后,设置所述混源文件的开源率为所述混源文件中匹配成功的函数的个数/所述混源文件中函数总个数*100%,设置所述目标开源文件与所述混源文件的相似度为所述混源文件中匹配成功且位于所述目标开源文件中的函数的个数/所述混源文件中函数总个数*100%。

在所述混源文件许可冲突检测方法中:

在步骤4)中,还根据所述混源文件的文件哈希值从漏洞库查询对应的漏洞信息并记录。

图2为根据本发明实施方案示出的混源文件许可冲突检测方法的步骤流程图的详解图。

如图2所示,本发明是对作为混源文件的代码文件的合规性检测,通过分析获得代码文件的文件信息,文件名称,文件大小,文件hash即文件哈希值。文件对应的函数信息:函数名称,函数大小,函数长度,函数hash即函数哈希值。如果有license文件,分析license文件的许可证协议类型名称,允许属性,限制属性,条件属性,把license的允许属性作为被测文件的允许属性;如果没有把被测代码文件所在项目的项目属性作为被测文件的允许属性,然后遍历所有被测代码文件以及第三方文件的hash值与知识库的所有开源代码文件hash做对比。

如果匹配到源文件,当前被测代码文件作为开源文件,记录其开源协议,记录开源文件所在工程名称,版本信息;如果没有匹配到,检测特征级别,文件或者函数;如果函数为第三方文件,比较开源协议的限制属性与被测文件的允许属性:如果不冲突,记录为被测代码的许可证合规性为不冲突;如果冲突,记录被测代码的许可证合规性为冲突,根据被测代码文件的hash从漏洞库中查询漏洞信息并记录;如果不是第三方文件,将函数的hash值与所有的开源文件的所有函数值做对比:如果没有匹配到,当前被测文件作为非开源文件,许可证合规性为不冲突;如果匹配到了,函数所在的被测代码为开源文件,把匹配到的函数对应的源文件的开源协议记录为被测文件的开源协议,记录开源文件所在的工程名称,版本信息;被测代码文件的开源率为开源个数/函数总个数*100%,开源文件与被测代码文件相似度为被测代码文件相似度为被测代码文件在开源代码中开源的函数个数/被测代码函数总个数*100%,比较开源协议的限制属性与被测文件的允许属性:如果冲突,记录被测代码的许可证合规性为冲突;如果不冲突,记录被测代码文件许可证协议合规性为不冲突,根据被测代码的代码文件的函数hash从漏洞库查询漏洞库信息并记录。

遍历所有开源文件的开源协议的限制属性与其他开源文件的开源协议的允许属性进行比较,如有冲突记录冲突信息,遍历所有开源文件的开源协议的限制属性与被测代码文件的允许属性进行对比,如有冲突记录冲突信息,如果冲突信息不为空,说明不合规;如果为空,说明被测代码文件合规。

其中,许可证信息,特征知识库信息是从开源许可证信息网站通过爬取,对许可证信息进行收集,以及特征值的提取并构建代码许可库与特征知识库,做到定时更新维护,保证数据的完整性。

综上,通过本发明,能够完成对混源文件复杂结构的解析,实现对混源文件的许可证协议合规性的准确判断。

可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1