logo好方法网

一种开源软件的安全分析方法及装置


技术摘要:
本发明公开了一种开源软件的安全分析方法,包括:对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;使用分布式索引库和预先构建的基  全部
背景技术:
随着互联网技术的兴起,开源软件已逐步成为主流。近些年,著名开源项目的范围 涵盖移动操作系统Android、数据库软件MySQL、大数据计算平台SPARK、深度学习框架 tensorflow等。众多知名IT公司也参与其中,如微软、阿里巴巴、腾讯、百度等。目前全球使 用开源软件的公司占总数的50%以上,美国则更高。2016年至少80%的各类商业解决方案 中包含开源软件[1]。据著名开源社区Github统计,2016年该社区拥有580万以上的活跃用 户、33万以上的活跃组织、1.9亿以上的活跃项目,以及1000万以上的活跃问题汇报。目前中 国是Github新用户注册增长最多的国家,同比增长97%。在当代的软件开发过程中,工程师 们越来越多的选择使用开源软件来减少重复的工作。 然而开源代码滥用将会带来大量代码缺陷和安全漏洞,导致代码质量和性能大幅 下降,同时开源许可证侵权会带来法律风险等问题。近几年,美国已有成熟的商业公司如 Blackduck公司、Palamida等公司针对开源代码的安全性问题、知识产权问题进行了相关研 究,可被检测的开源软件漏洞超过1万个。目前我国对开源软件项目的风险识别意识也已初 步形成,但在实际管控体系、检测检测等手段有待进一步提高,也未形成成熟的开源安全类 产品。
技术实现要素:
本申请提供一种开源软件的安全分析方法和装置,解决现有的安全检测手段在开 源软件安全检测上的不足。 本申请提供一种开源软件的安全分析方法,包括: 对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代 码的片段特征库; 从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构 建分布式索引库; 使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的 源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。 优选的,对开源软件的源代码进行预处理,包括: 使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代码包含的注释、 头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处理。 优选的,提取所述源代码的片段特征,并形成所述源代码的片段特征库,包括: 将开源软件的源代码中的词法单元,按照固定数目进行结合,形成一个代码片段; 对所述代码片段进行Hash值计算,获得所述代码片段的特征; 4 CN 111581638 A 说 明 书 2/7 页 偏移固定的词法单元数目,按照固定数目进行结合,形成新的代码片段; 计算新的代码片段的Hash值,再获得下一个新的代码片段的特征; 重复获得代码片段的特征和形成新的代码片段的步骤,直至开源软件的源代码和 经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源代码的片段特征库。 优选的,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源 软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析,包 括: 构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检索; 使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作为行头,每行 存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则 根据待检测源代码中的索引号排序; 通过索引与分布式索引库,对所述开源软件成分进行分析识别; 获取所述开源软件的漏洞,完成所述开源软件的安全分析。 本申请同时提供一种开源软件的安全分析装置,包括: 特征库形成单元,对开源软件的源代码进行预处理,提取所述源代码的片段特征, 并形成所述源代码的片段特征库; 索引库构建单元,从所述源代码的片段特征库中,提取固定长度的索引单元,使用 所述索引单元构建分布式索引库; 安全分析单元,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所 述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全 分析。 优选的,特征库形成单元,包括: 预处理子单元,使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代 码包含的注释、头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处 理。 优选的,特征库形成单元,包括: 代码片段形成子单元,将开源软件的源代码中的词法单元,按照固定数目进行结 合,形成一个代码片段; 特征获取子单元,对所述代码片段进行Hash值计算,获得所述代码片段的特征; 代码片段形成子单元,偏移固定的词法单元数目,按照固定数目进行结合,形成新 的代码片段; 特征获取子单元,计算新的代码片段的Hash值,再获得下一个新的代码片段的特 征; 特征库建立子单元,重复获得代码片段的特征和形成新的代码片段的步骤,直至 开源软件的源代码和经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源 代码的片段特征库。 优选的,安全分析单元,包括: 检索子单元,构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检 索; 5 CN 111581638 A 说 明 书 3/7 页 排序子单元,使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作 为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行 排序,行头则根据待检测源代码中的索引号排序; 分析识别子单元,通过索引与分布式索引库,对所述开源软件成分进行分析识别; 安全分析子单元,获取所述开源软件的漏洞,完成所述开源软件的安全分析。 本申请提供的一种开源软件的安全分析方法和装置,将开源软件的源代码和经过 预处理后的代码进行特征提取,建立代码片段特征库;使用分布式索引库和预先构建的基 于Spark的机器学习模型,对所述开源软件成分进行分析识别;获取所述开源软件的漏洞, 完成所述开源软件的安全分析,解决现有的安全检测手段在开源软件安全检测上的不足。 附图说明 图1是本申请提供的一种开源软件的安全分析方法的流程示意图; 图2是本申请涉及的开源软件安全检测系统的工作内容划分图; 图3是本申请涉及的开源软件安全检测的设计方案意图; 图4是本申请涉及的词法分析器的预处理过程示意图; 图5是本申请涉及的创建索引库的流程示意图; 图6是本申请涉及的基于Spark的机器学习应用框架示意图; 图7是本申请提供的一种开源软件的安全分析装置示意图。
下载此资料需消耗2积分,
分享到:
收藏