CN111581638A - 一种开源软件的安全分析方法及装置 - Google Patents
一种开源软件的安全分析方法及装置 Download PDFInfo
- Publication number
- CN111581638A CN111581638A CN202010200957.6A CN202010200957A CN111581638A CN 111581638 A CN111581638 A CN 111581638A CN 202010200957 A CN202010200957 A CN 202010200957A CN 111581638 A CN111581638 A CN 111581638A
- Authority
- CN
- China
- Prior art keywords
- code
- index
- source code
- open source
- source software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 76
- 238000007781 pre-processing Methods 0.000 claims abstract description 23
- 238000010801 machine learning Methods 0.000 claims abstract description 22
- 239000012634 fragment Substances 0.000 claims abstract description 9
- 238000000034 method Methods 0.000 claims description 11
- 238000001914 filtration Methods 0.000 claims description 7
- 238000012163 sequencing technique Methods 0.000 claims description 6
- 238000009411 base construction Methods 0.000 claims description 2
- 238000001514 detection method Methods 0.000 abstract description 25
- 230000007547 defect Effects 0.000 abstract description 5
- 238000000605 extraction Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000011156 evaluation Methods 0.000 description 3
- 230000008676 import Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 230000007474 system interaction Effects 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- ZXQYGBMAQZUVMI-GCMPRSNUSA-N gamma-cyhalothrin Chemical compound CC1(C)[C@@H](\C=C(/Cl)C(F)(F)F)[C@H]1C(=O)O[C@H](C#N)C1=CC=CC(OC=2C=CC=CC=2)=C1 ZXQYGBMAQZUVMI-GCMPRSNUSA-N 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012038 vulnerability analysis Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种开源软件的安全分析方法,包括:对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析,解决现有的安全检测手段在开源软件安全检测上的不足。
Description
技术领域
本申请涉及网络安全领域,具体涉及一种开源软件的安全分析方法,同时涉及一种开源软件的安全分析装置。
背景技术
随着互联网技术的兴起,开源软件已逐步成为主流。近些年,著名开源项目的范围涵盖移动操作***Android、数据库软件MySQL、大数据计算平台SPARK、深度学习框架tensorflow等。众多知名IT公司也参与其中,如微软、阿里巴巴、腾讯、百度等。目前全球使用开源软件的公司占总数的50%以上,美国则更高。2016年至少80%的各类商业解决方案中包含开源软件[1]。据著名开源社区Github统计,2016年该社区拥有580万以上的活跃用户、33万以上的活跃组织、1.9亿以上的活跃项目,以及1000万以上的活跃问题汇报。目前中国是Github新用户注册增长最多的国家,同比增长97%。在当代的软件开发过程中,工程师们越来越多的选择使用开源软件来减少重复的工作。
然而开源代码滥用将会带来大量代码缺陷和安全漏洞,导致代码质量和性能大幅下降,同时开源许可证侵权会带来法律风险等问题。近几年,美国已有成熟的商业公司如Blackduck公司、Palamida等公司针对开源代码的安全性问题、知识产权问题进行了相关研究,可被检测的开源软件漏洞超过1万个。目前我国对开源软件项目的风险识别意识也已初步形成,但在实际管控体系、检测检测等手段有待进一步提高,也未形成成熟的开源安全类产品。
发明内容
本申请提供一种开源软件的安全分析方法和装置,解决现有的安全检测手段在开源软件安全检测上的不足。
本申请提供一种开源软件的安全分析方法,包括:
对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;
从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;
使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
优选的,对开源软件的源代码进行预处理,包括:
使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代码包含的注释、头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处理。
优选的,提取所述源代码的片段特征,并形成所述源代码的片段特征库,包括:
将开源软件的源代码中的词法单元,按照固定数目进行结合,形成一个代码片段;
对所述代码片段进行Hash值计算,获得所述代码片段的特征;
偏移固定的词法单元数目,按照固定数目进行结合,形成新的代码片段;
计算新的代码片段的Hash值,再获得下一个新的代码片段的特征;
重复获得代码片段的特征和形成新的代码片段的步骤,直至开源软件的源代码和经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源代码的片段特征库。
优选的,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析,包括:
构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检索;
使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则根据待检测源代码中的索引号排序;
通过索引与分布式索引库,对所述开源软件成分进行分析识别;
获取所述开源软件的漏洞,完成所述开源软件的安全分析。
本申请同时提供一种开源软件的安全分析装置,包括:
特征库形成单元,对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;
索引库构建单元,从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;
安全分析单元,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
优选的,特征库形成单元,包括:
预处理子单元,使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代码包含的注释、头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处理。
优选的,特征库形成单元,包括:
代码片段形成子单元,将开源软件的源代码中的词法单元,按照固定数目进行结合,形成一个代码片段;
特征获取子单元,对所述代码片段进行Hash值计算,获得所述代码片段的特征;
代码片段形成子单元,偏移固定的词法单元数目,按照固定数目进行结合,形成新的代码片段;
特征获取子单元,计算新的代码片段的Hash值,再获得下一个新的代码片段的特征;
特征库建立子单元,重复获得代码片段的特征和形成新的代码片段的步骤,直至开源软件的源代码和经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源代码的片段特征库。
优选的,安全分析单元,包括:
检索子单元,构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检索;
排序子单元,使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则根据待检测源代码中的索引号排序;
分析识别子单元,通过索引与分布式索引库,对所述开源软件成分进行分析识别;
安全分析子单元,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
本申请提供的一种开源软件的安全分析方法和装置,将开源软件的源代码和经过预处理后的代码进行特征提取,建立代码片段特征库;使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件成分进行分析识别;获取所述开源软件的漏洞,完成所述开源软件的安全分析,解决现有的安全检测手段在开源软件安全检测上的不足。
附图说明
图1是本申请提供的一种开源软件的安全分析方法的流程示意图;
图2是本申请涉及的开源软件安全检测***的工作内容划分图;
图3是本申请涉及的开源软件安全检测的设计方案意图;
图4是本申请涉及的词法分析器的预处理过程示意图;
图5是本申请涉及的创建索引库的流程示意图;
图6是本申请涉及的基于Spark的机器学习应用框架示意图;
图7是本申请提供的一种开源软件的安全分析装置示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
图1为本申请提供的一种开源软件的安全分析方法的流程示意图,下面结合图1对本申请提供的方法进行详细说明。
步骤S101,对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库。
开源软件安全检测***的主要目的是为了实现对开源软件安全性的有效检测,通过从开源软件历史漏洞情况、流行程度、更新频率、说明文档、贡献人数、补丁发布速度等维度,开展对开源软件的有效评估,实现对低质量和低安全性的开源软件进行风险警告为开源软件的安全性评价提供有利支撑。基于以上目标需要设计一款基于现有技术基础上的,可实现对开源软件成分分析和各维度安全评价的一款安全检测***。结合开源软件安全检测***,实现对软件开源成分的分析,发现存在的开源漏洞以及许可证风险等信息,为开源软件安全评价提供有力支撑,提高安全检测的水平,从而提高项目研发质量。
开源软件安全检测***的工作主要分为三个部分:如图2所示,应用层的技术集成、数据层的数据收集和展示层的功能交互。数据层主要作用是数据获取与数据存储,主要包含数据采集***、文件存储***和基于MySql的开源软件信息知识库和风险特征库。应用层主要包含代码分析引擎、安全分析引擎、开源代码安全分布式检测引擎和服务调度器。展现层主要用于可视化地展现开源软件安全检测数据和结果,以及用于用户交互。
1、数据采集***:数据采集***用于数据更新和维护,在连接互联网的条件下,可使用分布式爬虫进行数据更新和维护。在没有连接互联网的条件下,可使用人工导入方法进行数据更新和维护。
2、文件存储***:文件存储***由Ceph分布式文件***和HDFS文件***组成,Ceph分布式文件***用于存储开源软件源代码,HDFS文件***用于存储开源软件代码特征库和二进制开源组件特征知识库。
3、MySql数据库:MySql数据库用于存储的开源软件信息知识库和风险特征库,包含了开源软件和安全风险代码的各种信息和特征。
4、代码分析引擎:代码分析引擎主要用于对源代码和二进制文件进行开源成分分析,包含代码片段提取模块、代码片段匹配模块、代码标签提取模块、代码克隆分析模块、代码标签匹配模块、二进制代码特征提取模块、二进制代码特征匹配模块和机器学习引擎。
5、安全分析引擎:安全分析引擎主要用于对代码的安全性进行识别分析,包含漏洞分析模块、木马分析模块、APT分析模块、代码敏感行为分析模块、加密算法分析模块和机器学习引擎。
6、开源软件安全分布式分布检测引擎:开源软件安全分布式分布检测引擎主要用于对研发过程中的开源软件进行实时和持续的安全检测,包含安全检测Agent模块、日志管理模块、安全与代码检测管理模块等。
7、服务调度器:服务调度器主要用于各个应用服务的调度。
8、***交互和可视化模块:***交互和可视化模块主要用于用户交互和数据展示。
开源代码安全检测的核心是开源代码成分分析功能,开源代码安全检测正是依靠开源代码成分分析功能从错综复杂的代码中发现潜在的安全问题。
为了实现开源代码的成分分析功能的实现,首先要对开源代码进行片段特征提取,建立开源代码片段特征库,并基于特征库建立分布式索引库。通过机器学习算法对源代码成分分析模块进行训练,提高源代码成分分析模块的速度和准确度。设计方案如图3所示。
开源代码成分分析功能主要由词法分析器、代码片段特征提取模块、Spark计算平台、机器学习引擎、开源代码片段特征库、开源代码分布式索引库和源代码成分分析模块组成。源代码经过词法分析器处理后,形成预处理文件,然后利用代码片段特征提取模块对原始代码文件和预处理文件进行代码片段特征提取,建立开源代码片段特征库。基于开源代码片段特征库建立开源代码分布式索引库,最后利用源代码成分分析模块进行成分分析。具体如下:
首先,使用词法分析器对开源软件的源代码,进行去噪处理,获得标准化的词法单元;从所述词法单元,获取固定长度的索引单元,完成对开源软件的源代码的预处理。
词法分析器是为了对代码的无关部分进行去噪操作,过滤了注释、头文件、多余的无义字符,获得标准化的词法单元(token)之后,再进一步获取固定长度的索引单元(chunk),实现源代码的预处理。
本申请中的词法分析器主要过滤的词法单元有以下5种:
(1)注释:包括一行、多行注释,以及doc注释。
(2)预处理命令:比如import、include、package、define等。
(3)可见度修饰符:例如static、public、private等。
(4)命名空间限定符:例如global等。
(5)this调用。
另外,词法分析器还对源代码中的所有的标识符、类型、常量进行统一编号,处理规则如下:
(1)标识符采用id+编号来替换,编号由0递增,如果前面已经出现过,则采用第一次的编号。
(2)字符串统一替换为“”空串。
(3)数据类型为整形变换为0。
(4)数据类型为浮点形变换为00.0。
(5)布尔值变换为true。
如图4所示,词法分析器针对每个输入的词法单元,按照上述五条规则,以及五个token过滤标准,得到最终的标准化token集合。其中,函数名getTest也会作为标识符,被转化为id+编号的形式;而小括号都会被忽略。
源代码经过词法分析器处理后,形成新的预处理代码。通过对原始代码和预处理代码进行特征提取,即可建立代码片段特征库。以预处理后代码为例,代码片段特征的提取方法如下:
(1)预处理代码中的token,按照固定数目进行结合,形成一个代码片段;
(2)对该代码片段进行Hash值计算,即得到了该代码片段的特征;
(3)偏移固定的token数目,安全固定数目进行结合,形成一个新的代码片段,并计算新片段的Hash值;
(4)重复步骤(2)和步骤(3),直至开源软件的源代码和经过预处理后的代码结束。
使用获取的代码片码的特征,建立代码片段特征库。
步骤S102,从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库。
索引单元里面不含源代码的文本信息,含有代码片段的特征值、token数量等信息。其结构如下表所示。
属性 | 说明 |
<u>chunkHash</u> | 该段代码文本的MD5hash值 |
<u>elementUnits</u> | 索引单元中包含的词法Token数目 |
<u>firstRawLineNumber</u> | 对应源文件的开始行号 |
<u>firstUnitIndex</u> | 所含Token中,第一个Token的编号 |
<u>lastRawLineNumber</u> | 对应源代码文件的结束行号 |
<u>originId</u> | 该索引单元所在文件的唯一路径 |
<u>rawEndOffset</u> | 对应源代码文件中结束行中的偏移量 |
<u>rawStartOffset</u> | 对应源代码文件中开始行中的偏移量 |
索引库采用分布式数据库HBase。因为HBase的数据是按列存储的。当存储索引数据Chunk时,特定列由originId加上#firstUnitIndex唯一标识。例如,elementUnits列是散列值为hashA的块,存储在具有hashA的行中其elementUnits列的列键是elementUnits:originId#firstUnitIndex,存储的值或elementUnits的值。图5显示了创建索引库的完整过程。
步骤S104,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
本申请建立了基于Spark的机器学习应用框架,如图6所示,通过对框架接口的调用,实现了高效的代码片段分析技术。如图所示该机器学习应用框架的原理是:
(1)相关机器学习任务,是通过调用接口来进行访问实现的
(2)根据获得的参数和接口情况,向算法优化器提交任务,实现算法优化。同时将从代码特征库中加载到特征数据,并将相关数据提交到算法优化器,由算法优化器进行处理。
(3)机器学习算法将指导算法优化器完成算法的预处理优化;
(4)数据处理完成后,算法优化器开始优化工作,主要的工作内容包括:数据提取、向框架提交优化子任务、将子任务信息注册添加到信息统计器中;
(5)框架将各个任务分配至不同的计算节点,开始优化工作;
(6)最后优化器将所有节点完成的结果进行有效整合,最终得到的机器学习模型。
通过建立的分布式索引和机器学习模型,实现基于代码特征的开源软件源代码分析模块。主要过程如下:
(1)构建待检测源代码索引,利用索引到HBase中进行检索;
(2)利用检索生成的二维邻接表结构,按照待检测的代码的索引序列作为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则根据待检测文件中的索引号排序;
(3)通过索引与开源软件分布式索引库,分析识别开源软件成分;
(4)获取所述开源软件的漏洞,完成所述开源软件的安全分析。
基于同一发明构思,本申请同时提供一种开源软件的安全分析装置700,如图7所示,包括:
特征库形成单元710,对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;
索引库构建单元720,从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;
安全分析单元730,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
优选的,特征库形成单元,包括:
预处理子单元,使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代码包含的注释、头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处理。
优选的,特征库形成单元,包括:
代码片段形成子单元,将开源软件的源代码中的词法单元,按照固定数目进行结合,形成一个代码片段;
特征获取子单元,对所述代码片段进行Hash值计算,获得所述代码片段的特征;
代码片段形成子单元,偏移固定的词法单元数目,按照固定数目进行结合,形成新的代码片段;
特征获取子单元,计算新的代码片段的Hash值,再获得下一个新的代码片段的特征;
特征库建立子单元,重复获得代码片段的特征和形成新的代码片段的步骤,直至开源软件的源代码和经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源代码的片段特征库。
优选的,安全分析单元,包括:
检索子单元,构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检索;
排序子单元,使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则根据待检测源代码中的索引号排序;
分析识别子单元,通过索引与分布式索引库,对所述开源软件成分进行分析识别;
安全分析子单元,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
本申请提供一种开源软件的安全分析方法和装置,将开源软件的源代码和经过预处理后的代码进行特征提取,建立代码片段特征库;使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件成分进行分析识别;获取所述开源软件的漏洞,完成所述开源软件的安全分析,解决现有的安全检测手段在开源软件安全检测上的不足。
最后应该说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求范围当中。
Claims (8)
1.一种开源软件的安全分析方法,其特征在于,包括:
对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;
从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;
使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
2.根据权利要求1所述的方法,其特征在于,对开源软件的源代码进行预处理,包括:
使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代码包含的注释、头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处理。
3.根据权利要求1所述的方法,其特征在于,提取所述源代码的片段特征,并形成所述源代码的片段特征库,包括:
将开源软件的源代码中的词法单元,按照固定数目进行结合,形成一个代码片段;
对所述代码片段进行Hash值计算,获得所述代码片段的特征;
偏移固定的词法单元数目,按照固定数目进行结合,形成新的代码片段;
计算新的代码片段的Hash值,再获得下一个新的代码片段的特征;
重复获得代码片段的特征和形成新的代码片段的步骤,直至开源软件的源代码和经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源代码的片段特征库。
4.根据权利要求1所述的方法,其特征在于,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析,包括:
构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检索;
使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则根据待检测源代码中的索引号排序;
通过索引与分布式索引库,对所述开源软件成分进行分析识别;
获取所述开源软件的漏洞,完成所述开源软件的安全分析。
5.一种开源软件的安全分析装置,其特征在于,包括:
特征库形成单元,对开源软件的源代码进行预处理,提取所述源代码的片段特征,并形成所述源代码的片段特征库;
索引库构建单元,从所述源代码的片段特征库中,提取固定长度的索引单元,使用所述索引单元构建分布式索引库;
安全分析单元,使用分布式索引库和预先构建的基于Spark的机器学习模型,对所述开源软件的源代码进行分析识别,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
6.根据权利要求5所述的装置,其特征在于,特征库形成单元,包括:
预处理子单元,使用词法分析对开源软件的源代码进行去噪操作,过滤所述源代码包含的注释、头文件、多余的无义字符,获得标准化的词法单元,实现所述源代码的预处理。
7.根据权利要求5所述的装置,其特征在于,特征库形成单元,包括:
代码片段形成子单元,将开源软件的源代码中的词法单元,按照固定数目进行结合,形成一个代码片段;
特征获取子单元,对所述代码片段进行Hash值计算,获得所述代码片段的特征;
代码片段形成子单元,偏移固定的词法单元数目,按照固定数目进行结合,形成新的代码片段;
特征获取子单元,计算新的代码片段的Hash值,再获得下一个新的代码片段的特征;
特征库建立子单元,重复获得代码片段的特征和形成新的代码片段的步骤,直至开源软件的源代码和经过预处理后的代码结束,使用获取的代码片段的特征,形成所述源代码的片段特征库。
8.根据权利要求5所述的装置,其特征在于,安全分析单元,包括:
检索子单元,构建待检测的源代码索引,使用索引对分布式数据库Hbase进行检索;
排序子单元,使用检索生成的二维邻接表结构,将待检测的源代码的索引序列作为行头,每行存储与行头元素相同的散列值作为索引数据,每行的元素按照文件路径进行排序,行头则根据待检测源代码中的索引号排序;
分析识别子单元,通过索引与分布式索引库,对所述开源软件成分进行分析识别;
安全分析子单元,获取所述开源软件的漏洞,完成所述开源软件的安全分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010200957.6A CN111581638A (zh) | 2020-03-20 | 2020-03-20 | 一种开源软件的安全分析方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010200957.6A CN111581638A (zh) | 2020-03-20 | 2020-03-20 | 一种开源软件的安全分析方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111581638A true CN111581638A (zh) | 2020-08-25 |
Family
ID=72112990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010200957.6A Pending CN111581638A (zh) | 2020-03-20 | 2020-03-20 | 一种开源软件的安全分析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111581638A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112001376B (zh) * | 2020-10-29 | 2021-02-26 | 深圳开源互联网安全技术有限公司 | 基于开源组件的指纹识别方法、装置、设备及存储介质 |
CN112559330A (zh) * | 2020-12-07 | 2021-03-26 | 深圳开源互联网安全技术有限公司 | 一种开源软件组分检测结果正确性的分析方法 |
CN113094711A (zh) * | 2021-04-30 | 2021-07-09 | 云南电网有限责任公司 | 基于阶段性项目开发的开源代码检测方法及*** |
CN113297583A (zh) * | 2021-07-27 | 2021-08-24 | 深圳开源互联网安全技术有限公司 | 漏洞风险分析方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106446691A (zh) * | 2016-11-24 | 2017-02-22 | 工业和信息化部电信研究院 | 检测软件中集成或定制的开源项目漏洞的方法和装置 |
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN108763928A (zh) * | 2018-05-03 | 2018-11-06 | 北京邮电大学 | 一种开源软件漏洞分析方法、装置和存储介质 |
-
2020
- 2020-03-20 CN CN202010200957.6A patent/CN111581638A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106446691A (zh) * | 2016-11-24 | 2017-02-22 | 工业和信息化部电信研究院 | 检测软件中集成或定制的开源项目漏洞的方法和装置 |
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN108763928A (zh) * | 2018-05-03 | 2018-11-06 | 北京邮电大学 | 一种开源软件漏洞分析方法、装置和存储介质 |
Non-Patent Citations (1)
Title |
---|
林婵等: "基于索引的分布式代码克隆检测", 《信息安全研究》, vol. 2, no. 3, pages 201 - 210 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112001376B (zh) * | 2020-10-29 | 2021-02-26 | 深圳开源互联网安全技术有限公司 | 基于开源组件的指纹识别方法、装置、设备及存储介质 |
CN112559330A (zh) * | 2020-12-07 | 2021-03-26 | 深圳开源互联网安全技术有限公司 | 一种开源软件组分检测结果正确性的分析方法 |
CN113094711A (zh) * | 2021-04-30 | 2021-07-09 | 云南电网有限责任公司 | 基于阶段性项目开发的开源代码检测方法及*** |
CN113297583A (zh) * | 2021-07-27 | 2021-08-24 | 深圳开源互联网安全技术有限公司 | 漏洞风险分析方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111581638A (zh) | 一种开源软件的安全分析方法及装置 | |
KR102230661B1 (ko) | Sql 검토 방법, 장치, 서버 및 저장 매체 | |
CN103544255B (zh) | 基于文本语义相关的网络舆情信息分析方法 | |
CN108595583A (zh) | 动态图表类页面数据爬取方法、装置、终端及存储介质 | |
CN110321466B (zh) | 一种基于语义分析的证券资讯查重方法及*** | |
CN112989348B (zh) | 攻击检测方法、模型训练方法、装置、服务器及存储介质 | |
KR101617696B1 (ko) | 데이터 정규표현식의 마이닝 방법 및 장치 | |
KR20220064016A (ko) | 빅데이터를 활용한 데이터마이닝기반 건설사고 객체정보 추출 방법 | |
CN112328936A (zh) | 一种网站识别方法、装置、设备及计算机可读存储介质 | |
JP6419667B2 (ja) | テストdbデータ生成方法及び装置 | |
CN114385668A (zh) | 冷数据清理方法、装置、设备及存储介质 | |
CN112613176A (zh) | 慢sql语句预测方法及*** | |
CN110989991B (zh) | 检测应用程序中源代码克隆开源软件的方法及*** | |
CN110825947A (zh) | Url去重方法、装置、设备与计算机可读存储介质 | |
CN116226108A (zh) | 可实现不同治理程度的数据治理方法及*** | |
CN115859932A (zh) | 一种日志模板提取方法、装置、电子设备及存储介质 | |
CN112287663B (zh) | 一种文本解析方法、设备、终端及存储介质 | |
CN114666078B (zh) | Sql注入攻击的检测方法及***、电子设备及存储介质 | |
CN112131462A (zh) | 一种基于信息监测的关键词发现方法、***和电子设备 | |
CN114417828A (zh) | 一种服务器告警日志描述文本的实体关系抽取方法及*** | |
CN111859896B (zh) | 配方文档检测方法、装置、计算机可读介质及电子设备 | |
CN111857688A (zh) | Sql代码自动补全方法、***及存储介质 | |
CN112948415A (zh) | Sql语句检测方法、装置、终端设备及存储介质 | |
CN109815270B (zh) | 一种关系计算的方法、装置、计算机存储介质及终端 | |
CN111324726A (zh) | 一种专利数据库自动去燥的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |