CN114489787B - 软件成分分析方法、装置、电子设备及存储介质 - Google Patents
软件成分分析方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114489787B CN114489787B CN202210352904.5A CN202210352904A CN114489787B CN 114489787 B CN114489787 B CN 114489787B CN 202210352904 A CN202210352904 A CN 202210352904A CN 114489787 B CN114489787 B CN 114489787B
- Authority
- CN
- China
- Prior art keywords
- file
- tested
- feature
- party component
- party
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种软件成分分析方法、装置、电子设备及存储介质,软件成分分析方法包括:获取待检测项目的所有被测文件;提取所有被测文件的文件元数据;根据预设的至少两种不同维度的特征算法,对各文件元数据进行处理;基于处理后的文件元数据,确定待检测项目中是否包含第三方组件的被测文件。该方法可以实现对于第三方组件的识别。且本申请通过对待检测项目中各被测文件的文件元数据采用至少两种不同维度的特征算法进行处理,这使得最终的识别结果是综合不同维度的特征算法的识别结果得到的,从而相较于仅考虑单一维度的软件成分分析方式而言,可以提高第三方组件的检出率与准确性。
Description
技术领域
本申请涉及软件技术领域,具体而言,涉及一种软件成分分析方法、装置、电子设备及存储介质。
背景技术
软件成分分析系统是一种可以识别出项目中所使用的第三方组件的产品。目前的软件成分分析系统,主要是通过组件依赖管理文件解析、二进制字符串特征比对、文件元数据特征比对等方式实现的第三方组件的识别。
目前采用文件元数据特征比对的方式识别第三方组件时,往往仅考虑单一维度的文件元数据特性,例如仅考虑项目级的文件元数据,或者仅考虑单文件的文件元数据,这就导致对第三方组件的检出率不足。
发明内容
本申请实施例的目的在于提供一种软件成分分析方法、装置、电子设备及存储介质,用以实现对于第三方组件的识别。
本申请实施例提供了一种软件成分分析方法,包括:获取待检测项目的所有被测文件;提取所述所有被测文件的文件元数据;根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理;基于处理后的文件元数据,确定所述待检测项目中是否包含第三方组件的被测文件。
进一步地,获取待检测项目的所有被测文件,包括:截获所述待检测项目在编译过程中的编译指令;获取各所述编译指令涉及到的所有被测文件。
在上述实现过程中,通过获取待检测项目在编译过程中所产生的编译指令以及编译过程中涉及的所有被测文件,这就可以保证获取到的被测文件的完整性,进而保证软件成分分析结果的可靠性。
进一步地,基于各处理后的文件元数据,确定所述待检测项目中是否包含第三方组件的被测文件,包括:基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果;根据各所述特征算法对应的第三方组件初步识别结果,确定所述待检测项目中是否包含第三方组件的被测文件。
在上述实现过程中,基于各特征算法对应的第三方组件初步识别结果,确定待检测项目中是否包含第三方组件的被测文件,这就可以保证最终的识别结果全面性,从而相较于仅考虑单一维度的软件成分分析方式而言,有效提高了第三方组件的检出率与准确性。
进一步地,根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,包括:采用预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,得到不同维度的特征值;基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:将所述不同维度的特征值,在预先构建的文件元数据特征库中进行匹配,以确定是否存在与所述不同维度的特征值相匹配的第三方组件的组件信息;基于匹配结果,得到所述第三方组件初步识别结果;所述第三方组件初步识别结果包括:所述待检测项目中是否包含第三方组件的被测文件,以及在包含第三方组件的被测文件时,确定所述第三方组件的被测文件归属的第三方组件;其中,所述文件元数据特征库中关联保存有各第三方组件的组件信息和相应维度的特征值。
在上述实现过程中,通过预先构建文件元数据特征库,进而依据文件元数据特征库进行匹配的方式,一方面可以利用文件元数据特征库快速实现对于待检测项目中对应的第三方组件的识别;另一方面利用文件元数据特征库,针对每一次进行的待检测项目中第三方组件的识别,均可采用该文件元数据特征库来实现,无需反复获取第三方组件的不同维度的特征值,可以有效节约处理资源,提高处理效率。
进一步地,所述文件元数据特征库通过以下过程构建得到:
采集各第三方组件的特征文件;提取所述特征文件的文件元数据;采用所述至少两种不同维度的特征算法,对各所述特征文件的文件元数据进行特征值计算,得到各所述第三方组件的不同维度的特征值;关联保存各所述第三方组件的组件信息以及各所述第三方组件对应的特征值。
在上述实现过程中,通过采用同样的至少两种不同维度的特征算法,对各特征文件的文件元数据进行特征值计算,得到第三方组件的不同维度的特征值,然后关联保存各第三方组件的组件信息以及各第三方组件对应的特征值,这就可以得到可靠的文件元数据特征库,从而可以保证后续方案执行的可靠性。
进一步地,采用的所述特征算法包括目录结构级特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的目录级特征值;基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:根据所述待检测项目中的目录结构,分别对所述待检测项目中的各目录对应的文件元数据进行特征计算,得到各所述目录对应的第一特征值;将各所述目录对应的第一特征值,与各第三方组件的目录级特征值进行匹配操作,确定各所述第一特征值中是否存在目标第一特征值;所述目标第一特征值为:存在匹配的目录级特征值的第一特征值;在存在所述目标第一特征值时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述目标第一特征值对应的目录下的所有被测文件,归属于所匹配的目录级特征值所属的第三方组件;在不存在所述目标第一特征值时,确定所述待检测项目中不包含第三方组件的被测文件。
在上述实现过程中,通过上述目录结构级特征算法的处理,可以实现以目录为单位的,针对待检测项目中各目录中的所有被测文件的整体性检测识别,具有较高的检出率与检测准确性。
进一步地,采用的所述特征算法包括项目级特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的项目级特征值集合;基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:根据所述待检测项目中每一个被测文件对应的文件元数据,计算每一个被测文件对应的第二特征值,得到第二特征值集合;将所述第二特征值集合与各第三方组件的项目级特征值集合进行匹配操作,确定是否存在目标项目级特征值集合;所述目标项目级特征值集合为:与所述第二特征值集合的整体匹配度大于预设匹配度阈值的项目级特征值集合;在存在所述目标项目级特征值集合时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述第二特征值集合中的目标第二特征值对应的被测文件,归属于所述目标项目级特征值集合所属的第三方组件;所述目标第二特征值为:在所述目标项目级特征值集合中存在相匹配的项目级特征值的第二特征值;在不存在所述目标项目级特征值集合时,确定所述待检测项目中不包含第三方组件的被测文件。
在上述实现过程中,通过上述项目级特征算法的处理,可以实现针对待检测项目整体匹配度的检测,具有较高的检测准确性。
进一步地,采用的所述特征算法包括单文件特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的单文件特征值;基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:根据各被测文件对应的文件元数据,计算出各被测文件对应的第三特征值;将所述第三特征值与各第三方组件的单文件特征值进行匹配操作,确定是否存在目标第三特征值;所述目标第三特征值为:存在匹配的单文件特征值的第三特征值;在存在所述目标第三特征值时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述目标第三特征值对应的被测文件,归属于所述目标第三特征值所匹配的单文件特征值所属的第三方组件;在不存在所述目标第三特征值时,确定所述待检测项目中不包含第三方组件的被测文件。
在上述实现过程中,通过上述单文件特征算法的处理,可以实现针对待检测项目中单个文件的检测,具有较高的检出率。
进一步地,根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,包括:基于预设的至少两种不同维度的特征算法的优先级,遍历执行各所述特征算法对所述文件元数据进行处理,得到所述根据各所述特征算法对应的第三方组件初步识别结果。
进一步地,所述根据各所述特征算法对应的第三方组件初步识别结果,确定所述待检测项目中是否包含第三方组件的被测文件,包括:若各所述特征算法中的任一特征算法对应的第三方组件初步识别结果表征所述待检测项目中包含第三方组件的被测文件,则确定所述待检测项目中包含第三方组件的被测文件,并确定所述被测文件所归属的第三方组件;若所有特征算法对应的第三方组件初步识别结果均表征所述待检测项目中不包含第三方组件的被测文件,则确定所述待检测项目中不包含第三方组件的被测文件。
在上述实现过程中,通过在任一特征算法对应的第三方组件初步识别结果表征该被测文件为属于第三方组件的目标文件时,即确定该被测文件属于第三方组件,可以有效提高第三方组件的检出率。
进一步地,所述确定所述被测文件所归属的第三方组件,包括:确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;若是,确定该被测文件归属于该第三方组件;否则,将i值加1,重新确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;其中,i的值依次取1至n,n为预设的特征算法的数量;且i值越小,则优先级越高。
在上述实现过程中,基于算法优先级依次进行匹配,在某一优先级的算法匹配出该被测文件为归属于某一第三方组件的目标文件后,即可不再继续进行其他算法的匹配,从而可以有效节约处理程序,降低处理开销。
进一步地,预设的所述特征算法包括目录结构级特征算法、项目级特征算法和单文件特征算法,且所述目录结构级特征算法的优先级高于所述项目级特征算法的优先级,所述项目级特征算法的优先级高于所述单文件特征算法的优先级。
进一步地,在确定出所述待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,所述方法还包括:根据确定出的归属于第三方组件的各被测文件,识别出所述待检测项目中存在的第三方组件安全漏洞。
进一步地,在确定出所述待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,所述方法还包括:对所述待检测项目中,除归属于第三方组件的被测文件外的其他被测文件进行漏洞分析,得到项目安全漏洞。
本申请实施例还提供了一种特征库构建方法,包括:采集各第三方组件的特征文件;提取所述特征文件的文件元数据;采用至少两种不同维度的特征算法,对各所述特征文件的文件元数据进行特征值计算,得到各所述第三方组件的不同维度的特征值;关联保存各所述第三方组件的组件信息以及各所述第三方组件对应的特征值。
在上述实现过程中,通过采用至少两种不同维度的特征算法,对各特征文件的文件元数据进行特征值计算,得到第三方组件的不同维度的特征值,然后关联保存各第三方组件的组件信息以及各第三方组件对应的特征值,这就可以使得的文件元数据特征库中,一个第三方组件可以关联有不同维度的特征值,进而便于后续进行待检测项目中第三方组件的识别时,可以结合不同维度的特征值进行第三方组件的识别,提高第三方组件的检出率和准确性。
本申请实施例还提供了一种软件成分分析装置,包括:获取模块,用于获取待检测项目的所有被测文件;所述所有被测文件中包含第三方组件的被测文件;第一提取模块,用于提取所述所有被测文件的文件元数据;组件识别模块,用于根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,得到所述待检测项目中属于第三方组件的被测文件。
本申请实施例还提供了一种特征库构建装置,采集模块,用于采集各第三方组件的特征文件;第二提取模块,用于提取所述特征文件的文件元数据;特征值计算模块,用于采用至少两种不同维度的特征算法,对各所述特征文件的文件元数据进行特征值计算,得到各所述第三方组件的不同维度的特征值;保存模块,用于关联保存各所述第三方组件的组件信息以及各所述第三方组件对应的特征值。
本申请实施例还提供了一种电子设备,包括处理器及存储器;所述处理器用于执行所述存储器中存储的程序,以实现上述任一种的软件成分分析方法,或实现上述特征库构建方法。
本申请实施例中还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一种的软件成分分析方法,或实现上述特征库构建方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种软件成分分析方法的流程示意图;
图2为本申请实施例提供的一种特征库构建方法的流程示意图;
图3为本申请实施例提供的一种软件成分分析系统的结构示意图;
图4为本申请实施例提供的一种文件元数据特征计算系统的处理逻辑示意图;
图5为本申请实施例提供的一种文件元数据特征比对系统的处理逻辑示意图;
图6为本申请实施例提供的一种软件成分分析装置的结构示意图;
图7为本申请实施例提供的一种特征库构建装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
实施例一:
为了实现基于文件元数据的第三方组件识别,并提高第三方组件的检出率和准确性,本申请实施例中提供了一种软件成分分析方法。可以参见图1所示,图1为本申请实施例中提供的1的软件成分分析方法的流程示意图,包括:
S101:获取待检测项目的所有被测文件。
需要说明的是,在本申请实施例中,被测文件可以包括待检测项目的源文件,也可以包括待检测项目的二进制文件,也可以同时包括待检测项目的源文件和二进制文件。
还需要说明的是,本申请实施例中所述的待检测项目是指具有第三方组件识别需求的代码集合。在待检测项目的所有被测文件中,可以包含第三方组件的被测文件,从而基于本申请实施例的方案,可以识别出待检测项目中属于第三方组件的被测文件。
在本申请实施例的一种可行实施方式中,可以通过现有的一些文件识别组件实现对于待检测项目的被测文件的获取。
但是,考虑到由于通过源代码引入第三方组件时,往往会对目录组织进行改动,从而可能导致文件识别组件在收集源文件或二进制文件时,出现文件缺失、缺少组织等情况,从而导致第三方组件的识别成功率降低。
为此,在本申请实施例的另一种可行实施方式中,可以通过截获待检测项目在编译过程中的编译指令,通过获取各编译指令涉及到的所有被测文件的方式,实现对于被测文件的完整收集,从而保证软件成分分析结果的可靠性。
需要说明的是,在本申请实施例中,可以通过使用修改环境变量、预加载库等技术截获编译指令。
还需要说明的是,在本申请实施例中,针对同一编译指令所涉及的所有被测文件之间可以关联,从而便于进行软件成分分析。
S102:提取所有被测文件的文件元数据。
在本申请实施例中,文件元数据可以包括文件名、文件大小等不涉及文件具体内容的基础信息。
S103:根据预设的至少两种不同维度的特征算法,对各文件元数据进行处理。
S104:基于处理后的文件元数据,确定待检测项目中是否包含第三方组件的被测文件。
由于项目自身的源文件和/或二进制文件是由项目工程师编写的,而第三方组件的源文件和/或二进制文件是由第三方工程师编写的,往往在实现上会存在一定的差异,这些差异会体现在文件元数据上。因此,通过对待检测项目中各被测文件的文件元数据采用预设的至少两种不同维度的特征算法进行处理,进而基于处理结果,可以实现对于第三方组件的识别。且本申请从被测文件的文件元数据出发,识别出第三方组件,无需分析每个被测文件的具体内容,因此具有普适性强(针对源代码、二进制通用,各种编程语言通用)、检测效率高(无需对文件内容进行分析)等优点。且本申请实施例中,通过对待检测项目中各被测文件的文件元数据采用预设的至少两种不同维度的特征算法进行处理,得到各所述特征算法确定出的第三方组件初步识别结果,并进一步基于各特征算法对应的第三方组件初步识别结果,综合确定出待检测项目的第三方组件。这就使得最终的识别结果是综合不同维度的特征算法的第三方组件初步识别结果得到的,从而相较于仅考虑单一维度的软件成分分析方式而言,可以有效提高第三方组件的检出率与准确性。
在本申请实施例中,可以基于各处理后的文件元数据,得到各特征算法对应的第三方组件初步识别结果,然后根据各特征算法对应的第三方组件初步识别结果,确定待检测项目中是否包含第三方组件的被测文件。
示例性的,可以采用预设的至少两种不同维度的特征算法,对各文件元数据进行处理,得到不同维度的特征值。然后,将不同维度的特征值,在预先构建的文件元数据特征库中进行匹配,以确定是否存在与不同维度的特征值相匹配的第三方组件的组件信息。最后,基于匹配结果,得到第三方组件初步识别结果。其中,文件元数据特征库中关联保存有各第三方组件的组件信息和相应维度的特征值。
需要说明的是,匹配结果中可以包含匹配成功(此时表明着待检测项目中存在第三方组件的被测文件),或者全部匹配失败(待检测项目中不存在第三方组件的被测文件)两种情况。基于匹配结果,可以确定待检测项目中是否包含第三方组件的被测文件。此外,本申请实施例中的第三方组件的组件信息可以是但不限于第三方组件的名称等基础信息。
基于此,本申请实施例中,第三方组件初步识别结果可以包括:待检测项目中是否包含第三方组件的被测文件,以及在包含第三方组件的被测文件时,确定第三方组件的被测文件归属的第三方组件。
其中,文件元数据特征库可以通过如图2所示的特征库构建方法构建得到,包括:
S201:采集各第三方组件的特征文件。
需要说明的是,第三方组件的特征文件包括各第三方组件的源文件和/或二进制文件。
对于第三方组件的源文件,可以从GitHub、GitLab等代码托管站点获取。对于第三方组件的二进制文件,可以从Maven、PyPI等组件包托管站点获取。
S202:提取各特征文件的文件元数据。
S203:采用至少两种不同维度的特征算法,对各特征文件的文件元数据进行特征值计算,得到各第三方组件的不同维度的特征值。
应理解,构建文件元数据特征库时所采用的特征算法,应当与后续识别待检测项目中的第三方组件时所采用的特征算法一致。
S204:关联保存各第三方组件的组件信息以及各第三方组件对应的特征值。
当然,除了上述方式之外,在本申请实施例中,也可以不预先构建文件元数据特征库,而是在每一次需要进行软件成分分析时,才按照上述步骤S201至S203的过程,获取到各第三方组件的不同维度的特征值,进而结合各特征算法计算出的不同维度的特征值进行匹配,得到被测文件是否属于第三方组件,以及属于哪一个第三方组件的结果。
需要注意的是,在进行匹配时,应当将相同维度的特征进行匹配。
示例性的,采用的特征算法可以包括目录结构级特征算法、项目级特征算法、单文件特征算法中的至少两种。其中:
在采用的特征算法包括目录结构级特征算法时,文件元数据特征库中保存的特征值可以包括各第三方组件的目录级特征值(即基于目录结构级特征算法对各第三方组件的特征文件进行处理后得到的特征值)。此时,采用目录结构级特征算法对各文件元数据进行处理,得到目录结构级特征算法确定出的第三方组件初步识别结果的过程,可以包括:
步骤1,根据待检测项目中的目录结构,分别对待检测项目中的各目录对应的文件元数据进行特征计算,得到各目录对应的第一特征值。此时,针对任一目录下的所有被测文件,该目录对应的第一特征值即为该目录下的所有被测文件的第一特征值。
步骤2,将各目录对应的第一特征值,与各第三方组件的目录级特征值进行匹配操作,确定各第一特征值中是否存在目标第一特征值。其中,目标第一特征值为:存在匹配的目录级特征值的第一特征值。
应理解,在目录结构级特征算法中,可以根据各被测文件所属目录对应的文件元数据,计算出各被测文件对应的第一特征值。
例如,针对任一被测文件:目录结构级特征算法可以根据该被测文件所属的目录,通过将该目录中的所有被测文件的文件名和文件的大小拼接成一个字符串,对该字符串计算哈希值,得到该被测文件的第一特征值;或者,也可以通过将该目录中所有被测文件的文件名构成一个字符串,对该字符串计算哈希值,得到该被测文件的第一特征值;或者,对于被测文件所属的目录存在子目录的情况,可以按将各子目录文件夹名称和文件名以及文件大小构成一个字符串,对该字符串计算哈希值,得到该被测文件的第一特征值;但不作为限制。
还应理解,第三方组件的目录级特征值,可以是按照前文示例的方式,通过对该第三方组件的各目录对应的文件元数据进行特征计算得到。
步骤3,在存在目标第一特征值时,确定待检测项目中包含第三方组件的被测文件,并确定该目标第一特征值对应的目录下的所有被测文件,归属于所匹配的目录级特征值所属的第三方组件。在不存在目标第一特征值时,确定待检测项目中不包含第三方组件的被测文件。
例如,假设目录A下有被测文件1、被测文件2和被测文件3,假设目录A对应的第一特征值与文件元数据特征库中保存的一个目录级特征值a匹配,且目录级特征值a对应的第三方组件的组件信息为M(假设M为第三方组件的名称),则可以得到如下第三方组件初步识别结果:
待检测项目中包含第三方组件的被测文件,且被测文件1、被测文件2和被测文件3属于第三方组件M。
在采用的特征算法包括项目级特征算法时,文件元数据特征库中保存的特征值可以包括各第三方组件的项目级特征值集合(即基于项目级特征算法对各第三方组件的特征文件进行处理后得到的特征值构成的集合)。此时,采用项目级特征算法对各文件元数据进行处理,得到项目级特征算法确定出的第三方组件初步识别结果的过程,可以包括:
步骤1,根据待检测项目中每一个被测文件对应的文件元数据,计算每一个被测文件对应的第二特征值,得到第二特征值集合。
应理解,第二特征值可以是每一个被测文件对应的哈希值。
还应理解,第三方组件的项目级特征值集合可以是对第三方组件的各特征文件的文件元数据计算哈希值后,得到的项目级特征值集合。
需要理解的是,在实际应用过程中,第三方组件可能为多个,从而项目级特征值集合也可能为多个。
步骤2,将第二特征值集合与各第三方组件的项目级特征值集合进行匹配操作,确定是否存在目标项目级特征值集合。
应理解,目标项目级特征值集合是指:与第二特征值集合的整体匹配度大于预设匹配度阈值的项目级特征值集合。
在本申请实施例中,第二特征值集合与项目级特征值集合之间的整体匹配度,可以是该第二特征值集合中,与该项目级特征值集合中相同的特征值数量,占该项目级特征值集合中项目级特征值总数的比值。其中,预设匹配度阈值的可以由工程师设定。
例如,假设第二特征值集合中有100个第二特征值a,项目级特征值集合1中,有20个项目级特征值A,假设这100个第二特征值a中,有19个存在于20个项目级特征值A中,则该第二特征值集合与该项目级特征值集合1之间的整体匹配度即为(19/20)。假设预设匹配度阈值为80%,则由于19/20大于80%,则可以确定该项目级特征值集合1即为目标项目级特征值集合。
步骤3,在存在目标项目级特征值集合时,确定待检测项目中包含第三方组件的被测文件,并确定第二特征值集合中的目标第二特征值对应的被测文件,归属于该目标项目级特征值集合所属的第三方组件;在不存在目标项目级特征值集合时,确定待检测项目中不包含第三方组件的被测文件。
其中,目标第二特征值为:在目标项目级特征值集合中存在相匹配的项目级特征值的第二特征值。
例如,仍以上例为例,假设该项目级特征值集合1对应的第三方组件的组件信息为M(假设M为第三方组件的名称),则可以得到如下第三方组件初步识别结果:
待检测项目中包含第三方组件的被测文件。且第二特征值集合中,存在于该项目级特征值集合1之中的那19个第二特征值a所对应的被测文件属于第三方组件M。
在采用的特征算法包括单文件特征算法时,文件元数据特征库中保存的特征值可以包括各第三方组件的单文件特征值(即基于单文件特征算法对各第三方组件的特征文件进行处理后得到的特征值)。采用所述单文件特征算法对各所述文件元数据进行处理,得到所述单文件特征算法确定出的第三方组件初步识别结果的过程,可以包括:
步骤1,根据各被测文件对应的文件元数据,计算出各被测文件对应的第三特征值。
应理解,单文件特征算法根据各被测文件对应的文件元数据,计算出各被测文件对应的第三特征值的具体方式可以但不限于是:
针对任一被测文件,可以将该被测文件的所有元数据构成一个字符串,对该字符串计算哈希值,得到该被测文件的文件级特征值,但不作为限制。
步骤2,将第三特征值与各第三方组件的单文件特征值进行匹配操作,确定是否存在目标第三特征值。
其中,目标第三特征值为:存在匹配的单文件特征值的第三特征值。
步骤3,在存在目标第三特征值时,确定待检测项目中包含第三方组件的被测文件,并确定目标第三特征值对应的被测文件,归属于目标第三特征值所匹配的单文件特征值所属的第三方组件;在不存在目标第三特征值时,确定待检测项目中不包含第三方组件的被测文件。
例如,假设存在目标第三特征值A,假设目标第三特征值A对应的第三方组件的组件信息为M(假设M为第三方组件的名称),则可以得到如下第三方组件初步识别结果:
待检测项目中包含第三方组件的被测文件。目标第三特征值A所对应的被测文件属于第三方组件M。
显然,不同特征算法对应于不同的处理维度。目录结构级特征算法计算出的特征值反映的是被测文件所属目录这一目录级维度的特性,而项目级特征算法则是反映的待检测项目整体匹配度这一项目级维度的特性,而单文件特征算法计算出的特征值反映的是被测文件这一文件级维度的特性。
在本申请实施例中,不同维度的特征算法可以由工程师编写设定,也可以采用现有的一些特征算法,对此在本申请实施例中不做限制。
可选的,在本申请实施例中,可以遍历执行各特征算法对文件元数据进行处理,得到根据各特征算法对应的第三方组件初步识别结果。
示例性的,可以基于预设的至少两种不同维度的特征算法的优先级,按照优先级顺序进行各特征算法的遍历执行。也即,可以按照优先级顺序,先采用最高优先级的特征算法对文件元数据进行处理,得到最高优先级的特征算法对应的第三方组件初步识别结果。然后,采用次高优先级的特征算法对文件元数据进行处理,得到次高优先级的特征算法对应的第三方组件初步识别结果。以此类推,直至得到优先级最低的特征算法对应的第三方组件初步识别结果。
当然,也可以不设置各特征算法的优先级,而是依次遍历执行各特征算法对文件元数据进行处理,得到根据各特征算法对应的第三方组件初步识别结果。对于遍历处理的方式,在本申请实施例中不做限制。
而根据各特征算法对应的第三方组件初步识别结果,确定待检测项目中是否包含第三方组件的被测文件的具体实现方式,可以通过以下可行实施方式实现:
可行实施方式1:若各特征算法中的任一特征算法对应的第三方组件初步识别结果表征该被测文件为属于第三方组件的目标文件,则确定待检测项目中包含第三方组件的被测文件,并确定所述被测文件所归属的第三方组件;若所有特征算法对应的第三方组件初步识别结果均表征待检测项目中不包含第三方组件的被测文件,则确定待检测项目中不包含第三方组件的被测文件。
需要注意的是,在上述可行实施方式中,可以按照各不同维度的特征算法的优先级顺序,依次进行被测文件所归属的第三方组件的确定。
示例性的,针对任一被测文件:可以确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;若是,确定该被测文件属于该第三方组件;否则,将i值加1,重新确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件。
其中,i的值依次取1至n,n为预设的特征算法的数量。且i值越小,对应的优先级等级越高。
示例性的,在预设的特征算法包括目录结构级特征算法、项目级特征算法和单文件特征算法时,可以设置目录结构级特征算法的优先级高于项目级特征算法的优先级,且项目级特征算法的优先级高于单文件特征算法的优先级,从而在提供检出率的同时,保证识别的准确性。
需要注意的是,在上述可行实施方式中,针对不同特征算法所确定出的属于第三方组件的被测文件,可以采用不同的标记进行标识。
例如,通常目录结构级特征算法的检测准确性最高,项目级特征算法的检测准确性第二高,而单文件特征算法的检测准确性最低。那么,在上述示例性方案中,在直接基于目录结构级特征算法所计算得到的特征值,确定出被测文件所归属的第三方组件时,可以对该被测文件打上第一标识;在基于目录结构级特征算法所计算得到的特征值,没有确定出被测文件所归属的第三方组件,但是基于项目级特征算法所计算得到的特征值,确定出被测文件所归属的第三方组件时,可以对该被测文件打上第二标识;在基于目录结构级特征算法和项目级特征算法所计算得到的特征值,均没有确定出被测文件所归属的第三方组件,但是基于单文件特征算法所计算得到的特征值,确定出被测文件所归属的第三方组件时,可以对该被测文件打上第三标识。
这样,工程师基于被测文件所具有的标识,即可初步确定该被测文件属于第三方组件的可信度,从而便于后续进行分析处理。
可行实施方式2,针对任一被测文件,也可以根据不同特征算法处理得到的第三方组件初步识别结果中,表征该被测文件为属于第三方组件的目标文件的数量或占比,确定该被测文件是否属于第三方组件。
示例性的,假设采用了三种特征算法,那么针对任一被测文件,即会得到三个第三方组件初步识别结果。
此时,可以判断表征该被测文件为属于第三方组件的目标文件的第三方组件初步识别结果的数量是否大于预设数量阈值(例如1),或者可以判断表征该被测文件为属于第三方组件的目标文件的第三方组件初步识别结果的数量占第三方组件初步识别结果总数的比重是否大于预设比重阈值(例如1/3),当为是时,即可确定该被测文件属于第三方组件,否则确定该被测文件不属于第三方组件。
在确定该被测文件属于第三方组件时,可以按照各特征算法所确定出的该被测文件所归属的第三方组件,最终确定出该被测文件所归属的第三方组件。
示例性的,若各特征算法所确定出的该被测文件所归属的第三方组件相同,则可以直接确定该被测文件归属于各特征算法所确定出的第三方组件。若各特征算法所确定出的该被测文件所归属的第三方组件存在多个,则可以按照各特征算法优先级,确定该被测文件所归属的第三方组件为优先级最高的特征算法所确定出的第三方组件。
可行实施方式3,针对任一被测文件,也可以根据特征算法处理得到的第三方组件初步识别结果进行评价值计算,进而基于计算出的评价值确定该被测文件是否属于第三方组件。
示例性的,假设采用了三种特征算法,那么针对任一被测文件,即会得到三个第三方组件初步识别结果。
设第三方组件初步识别结果表征该被测文件为属于第三方组件的目标文件时,对应得分为1,否则对应得分为0。然后,计算三个第三方组件初步识别结果的总得分(即评价值),若总得分大于预设阈值(例如1),则确定该被测文件属于第三方组件,否则确定该被测文件不属于第三方组件。
此外,上述可行实施方式中,还可以为不同的特征算法配置不同的权重(例如可以将准确性高的特征算法配置更高的权重),从而对各特征算法相应的第三方组件初步识别结果的得分进行加权求和,得到总得分。这样,可以将最终的识别结果向准确性更高的特征算法倾斜,使得识别结果更为可靠。
类似的,在确定该被测文件属于第三方组件时,可以按照各特征算法所确定出的该被测文件所归属的第三方组件,最终确定出该被测文件所归属的第三方组件。
例如,若各特征算法所确定出的该被测文件所归属的第三方组件相同,则可以直接确定该被测文件归属于各特征算法所确定出的第三方组件。若各特征算法所确定出的该被测文件所归属的第三方组件存在多个,则可以按照各特征算法优先级,确定该被测文件所归属的第三方组件为优先级最高的特征算法所确定出的第三方组件。
在本申请实施例中,在确定出待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,还可以根据确定出的归属于第三方组件的各被测文件,识别出待检测项目中存在的第三方组件安全漏洞。
应理解,在本申请实施例中,可以采用各类已有或者未来将会出现的漏洞检测工具,对第三方组件的被测文件进行漏洞检测,识别出待检测项目中存在的第三方组件安全漏洞。
或者,在本申请实施例中,可以查询该第三方组件最新的漏洞库,通过预先关联漏洞库中各漏洞与第三方组件的文件(可以是源文件或二进制文件),进而可以根据待检测项目中归属于第三方组件的各被测文件,查询漏洞库,得到待检测项目中属于第三方组件的各被测文件对应的第三方组件安全漏洞(即待检测项目中存在的第三方组件安全漏洞)。
或者,在本申请实施例中,可以采用各类已有或者未来将会出现的漏洞检测工具,对待检测项目中的所有被测文件进行漏洞检测,识别出待检测项目中存在的所有安全漏洞,并得到各安全漏洞与各被测文件之间的对应关系。然后根据待检测项目中归属于第三方组件的各被测文件,从待检测项目中存在的所有安全漏洞中,识别出第三方组件的各被测文件所对应的安全漏洞(即待检测项目中存在的第三方组件安全漏洞)。
在本申请实施例中,在识别出待检测项目中存在的第三方组件安全漏洞之后,可以对第三方组件安全漏洞进行标记,从而便于工程师进行安全漏洞的区分。
此外,在识别出待检测项目中存在的第三方组件安全漏洞之后,也可以将第三方组件安全漏洞反馈至工程师,以提醒工程师该第三方组件可能存在的风险,或者供工程师尝试对其进行修复。
在针对第三方组件安全漏洞进行修复时,可以查找该第三方组件是否存在针对该第三方组件安全漏洞的补丁程序。若存在,则可以获取该补丁程序进行修复。若不存在,考虑到第三方组件是由第三方开发人员编写的,冒然修改可能会引起更大的风险,因此可以对其进行标记后,不做修复。
在本申请实施例中,在确定出待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,还可以对待检测项目中,除归属于第三方组件的被测文件外的其他被测文件进行漏洞分析,得到项目安全漏洞。
应理解,在本申请实施例中,可以采用各类已有或者未来将会出现的漏洞检测工具,对待检测项目中,除归属于第三方组件的被测文件外的其他被测文件进行漏洞分析,识别出项目安全漏洞。
或者,在本申请实施例中,可以采用各类已有或者未来将会出现的漏洞检测工具,对待检测项目中的所有被测文件进行漏洞检测,识别出待检测项目中存在的所有安全漏洞,并得到各安全漏洞与各被测文件之间的对应关系。然后根据待检测项目中归属于第三方组件的各被测文件,从待检测项目中存在的所有安全漏洞中,识别出第三方组件的各被测文件所对应的安全漏洞(即待检测项目中存在的第三方组件安全漏洞),以及除第三方组件安全漏洞以外的其他安全漏洞(即项目安全漏洞)。
考虑到待检测项目中,除归属于第三方组件的被测文件外的其他被测文件,基本都是由项目自身的开发工程师编写的,因此具有较高的可修复把握。因此,在识别出得到项目安全漏洞之后,可以将这些项目安全漏洞反馈给工程师进行修复。
本申请实施例所提供的软件成分分析方法,通过对待检测项目中各被测文件的文件元数据采用预设的至少两种不同维度的特征算法进行处理,进而基于处理结果,可以实现对于第三方组件的识别。且本申请从被测文件的文件元数据出发,识别出第三方组件,无需分析每个被测文件的具体内容,因此具有普适性强(针对源代码、二进制通用,各种编程语言通用)、检测效率高(无需对文件内容进行分析)等优点。且本申请实施例中,通过对待检测项目中各被测文件的文件元数据采用预设的至少两种不同维度的特征算法进行处理,这就使得最终的识别结果是综合不同维度的特征算法的处理结果得到的,从而相较于仅考虑单一维度的软件成分分析方式而言,可以有效提高第三方组件的检出率与准确性。
实施例二:
本实施例在实施例一的基础上,以一种具体的软件成分分析方法的具体实现情况为例,为本申请做进一步示例说明。
参见图3所示,本实施例中提供了一种软件成分分析系统,包括:文件元数据特征比对系统、文件元数据特征计算系统和文件元数据特征库。
其中:
参见图4所示,文件元数据特征计算系统,用于首先从GitHub、GitLab等代码托管站点获取开源软件(即第三方组件)的源文件,并从Maven、PyPI等组件包托管站点获取构建好的第三方组件的二进制文件。接着,文件元数据特征计算系统对于采集到的所有源文件和二进制文件,提取文件名、文件大小、哈希值等文件元数据。然后,文件元数据特征计算系统采用目录结构级特征算法、项目级特征算法、单文件特征算法对文件元数据进行计算和组织,得到不同维度的特征值。最后,将这些特征值和对应的第三方组件信息关联存储到文件元数据特征库中。
文件元数据特征库通过数据库实现,存储有第三方组件信息(例如第三方组件编号、名称等)、第三方组件所关联的不同维度的特征值。
参见图5所示,文件元数据特征比对系统用于,使用修改环境变量、预加载库等技术截获待检测项目在编译过程中的编译指令,从而根据编译指令收集此次编译过程中涉及的所有源文件或者lib、dll等二进制文件。接着,文件元数据特征比对系统对于用户输入的工程目录和收集的所有文件,提取文件名、文件大小、哈希值等文件元数据信息,然后根据前文的各特征算法,分别计算不同维度的特征值;最后,根据计算出的不同维度的特征值,与文件元数据特征库中关联存储的数据进行比对,识别出待检测项目中的第三方组件。
上述方案,通过截获编译指令,基于编译指令收集源文件或二进制文件的方式,能够弥补现有软件成分分析过程中,在收集源文件或二进制文件时的文件缺失、缺少组织等不足。通过基于不同维度的特征算法计算不同维度的特征值,进而综合不同维度的特征值进行比对,识别出第三方组件,能够有效地提升第三方组件识别的检出率和准确率。此外,在上述方案中,当有新的第三方组件版本发布时,文件元数据特征计算系统只需要重新采集源文件、二进制文件,并重新进行不同维度的特征值计算,并更新到特征库中,即可保证方案持续可靠。
实施例三:
基于同一发明构思,本申请实施例中还提供了一种软件成分分析装置600和特征库构建装置700。请参阅图6和图7所示,图6示出了采用图1所示的方法的软件成分分析装置,图7示出了采用图2所示的方法的特征库构建装置。应理解,装置600和装置700具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。装置600和装置700包括至少一个能以软件或固件的形式存储于存储器中或固化在装置600、装置700的操作系统中的软件功能模块。具体地:
参见图6所示,装置600包括:获取模块601,第一提取模块602和组件识别模块603。其中:
获取模块601,用于获取待检测项目的所有被测文件;
第一提取模块602,用于提取所述所有被测文件的文件元数据;
组件识别模块603,用于根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,基于处理后的文件元数据,确定所述待检测项目中是否包含第三方组件的被测文件。
在本申请实施例中,获取模块601具体用于,截获所述待检测项目在编译过程中的编译指令,获取各所述编译指令涉及到的所有被测文件。
在本申请实施例中,组件识别模块603具体用于,根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,得到各所述特征算法确定出的第三方组件初步识别结果,根据各所述特征算法对应的第三方组件初步识别结果,确定所述待检测项目中属于第三方组件的被测文件。
在本申请实施例中,组件识别模块603具体用于,基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,根据各所述特征算法对应的第三方组件初步识别结果,确定所述待检测项目中是否包含第三方组件的被测文件。
在本申请实施例中,组件识别模块603具体用于:
采用预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,得到不同维度的特征值;
将所述不同维度的特征值,在预先构建的文件元数据特征库中进行匹配,以确定是否存在与所述不同维度的特征值相匹配的第三方组件的组件信息;
基于匹配结果,得到所述第三方组件初步识别结果;所述第三方组件初步识别结果包括:所述待检测项目中是否包含第三方组件的被测文件,以及在包含第三方组件的被测文件时,确定所述第三方组件的被测文件归属的第三方组件;
其中,所述文件元数据特征库中关联保存有各第三方组件的组件信息和相应维度的特征值。
在本申请实施例中,装置600还包括构建模块,用于:采集各第三方组件的特征文件;提取所述特征文件的文件元数据;采用所述至少两种不同维度的特征算法,对各所述特征文件的文件元数据进行特征值计算,得到各所述第三方组件的不同维度的特征值;关联保存各所述第三方组件以及各所述第三方组件对应的特征值。
在本申请实施例中,采用的所述特征算法包括以下至少两种:目录结构级特征算法、项目级特征算法、单文件特征算法。
在本申请实施例的一种可行实施方式中,采用的所述特征算法包括目录结构级特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的目录级特征值;
所述组件识别模块603具体用于:
根据所述待检测项目中的目录结构,分别对所述待检测项目中的各目录对应的文件元数据进行特征计算,得到各所述目录对应的第一特征值;
将各所述目录对应的第一特征值,与各第三方组件的目录级特征值进行匹配操作,确定各所述第一特征值中是否存在目标第一特征值;所述目标第一特征值为:存在匹配的目录级特征值的第一特征值;
在存在所述目标第一特征值时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述目标第一特征值对应的目录下的所有被测文件,归属于所匹配的目录级特征值所属的第三方组件;
在不存在所述目标第一特征值时,确定所述待检测项目中不包含第三方组件的被测文件。
在本申请实施例的一种可行实施方式中,采用的所述特征算法包括项目级特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的项目级特征值集合;
所述组件识别模块603具体用于:
根据所述待检测项目中每一个被测文件对应的文件元数据,计算每一个被测文件对应的第二特征值,得到第二特征值集合;
将所述第二特征值集合与各第三方组件的项目级特征值集合进行匹配操作,确定是否存在目标项目级特征值集合;所述目标项目级特征值集合为:与所述第二特征值集合的整体匹配度大于预设匹配度阈值的项目级特征值集合;
在存在所述目标项目级特征值集合时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述第二特征值集合中的目标第二特征值对应的被测文件,归属于所述目标项目级特征值集合所属的第三方组件;所述目标第二特征值为:在所述目标项目级特征值集合中存在相匹配的项目级特征值的第二特征值;
在不存在所述目标项目级特征值集合时,确定所述待检测项目中不包含第三方组件的被测文件。
在本申请实施例的一种可行实施方式中,采用的所述特征算法包括单文件特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的单文件特征值;
所述组件识别模块603具体用于:
根据各被测文件对应的文件元数据,计算出各被测文件对应的第三特征值;
将所述第三特征值与各第三方组件的单文件特征值进行匹配操作,确定是否存在目标第三特征值;所述目标第三特征值为:存在匹配的单文件特征值的第三特征值;
在存在所述目标第三特征值时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述目标第三特征值对应的被测文件,归属于所述目标第三特征值所匹配的单文件特征值所属的第三方组件;
在不存在所述目标第三特征值时,确定所述待检测项目中不包含第三方组件的被测文件。
在本申请实施例的一种可行实施方式中,组件识别模块603具体用于,基于预设的至少两种不同维度的特征算法的优先级,遍历执行各所述特征算法对所述文件元数据进行处理,得到所述根据各所述特征算法对应的第三方组件初步识别结果。
在本可行实施方式中,组件识别模块603具体用于,若各所述特征算法中的任一特征算法对应的第三方组件初步识别结果表征所述待检测项目中包含第三方组件的被测文件,则确定所述待检测项目中包含第三方组件的被测文件,并确定所述被测文件所归属的第三方组件;若所有特征算法对应的第三方组件初步识别结果均表征所述待检测项目中不包含第三方组件的被测文件,则确定所述待检测项目中不包含第三方组件的被测文件。
在本可行实施方式中,组件识别模块603具体用于,确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;若是,确定该被测文件归属于该第三方组件;否则,将i值加1,重新确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;其中,i的值依次取1至n,n为预设的特征算法的数量;且i值越小,则优先级越高。
在本可行实施方式中,预设的所述特征算法包括目录结构级特征算法、项目级特征算法和单文件特征算法,且所述目录结构级特征算法的优先级高于所述项目级特征算法的优先级,所述项目级特征算法的优先级高于所述单文件特征算法的优先级。
在本申请实施例中,所述装置还包括第一漏洞识别模块,用于在确定出所述待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,根据确定出的归属于第三方组件的各被测文件,识别出所述待检测项目中存在的第三方组件安全漏洞。
在本申请实施例中,所述装置还包括第二漏洞识别模块,用于在确定出所述待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,对所述待检测项目中,除归属于第三方组件的被测文件外的其他被测文件进行漏洞分析,得到项目安全漏洞。
参见图7所示,装置700包括:采集模块701,第二提取模块702、特征值计算模块703和保存模块704。其中:
采集模块701,用于采集各第三方组件的特征文件;
第二提取模块702,用于提取所述特征文件的文件元数据;
特征值计算模块703,用于采用至少两种不同维度的特征算法,对各所述特征文件的文件元数据进行特征值计算,得到各所述第三方组件的不同维度的特征值;
保存模块704,用于关联保存各所述第三方组件的组件信息以及各所述第三方组件对应的特征值。
需要理解的是,出于描述简洁的考量,部分实施例一中描述过的内容在本实施例中不再赘述。
实施例四:
本实施例提供了一种电子设备,参见图8所示,其包括处理器801和存储器802。其中:
处理器801用于执行存储器802中存储的一个或多个程序,以实现上述实施例一和/或实施例二中的软件成分分析方法或特征库构建方法。
可以理解,图8所示的结构仅为示意,电子设备还可包括比图8中所示更多或者更少的组件,或者具有与图8所示不同的配置。例如,电子设备还可以具有无线通信模组、USB数据插口、显示器等组件。
本实施例还提供了一种计算机可读存储介质,如软盘、光盘、硬盘、闪存、U盘、SD(Secure Digital Memory Card,安全数码卡)卡、MMC(Multimedia Card,多媒体卡)卡等,在该计算机可读存储介质中存储有实现上述各个步骤的一个或者多个程序,这一个或者多个程序可被一个或者多个处理器执行,以实现上述实施例一和/或实施例二中业务分配设备所执行的软件成分分析方法的各步骤,或实现上述实施例一和/或实施例二中处理节点所执行的软件成分分析方法的各步骤。在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
在本文中,多个是指两个或两个以上。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (17)
1.一种软件成分分析方法,其特征在于,包括:
获取待检测项目的所有被测文件;
提取所述所有被测文件的文件元数据;
根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理;
基于处理后的文件元数据,确定所述待检测项目中是否包含第三方组件的被测文件;
其中,预设的所述特征算法包括以下至少两种:目录结构级特征算法、项目级特征算法和单文件特征算法;
其中,针对任一被测文件,所述目录结构级特征算法用于根据该被测文件所属目录对应的所有被测文件的文件元数据,计算出该目录对应的第一特征值;
所述项目级特征算法用于对各所述文件元数据进行处理得到每一个被测文件对应的第二特征值;所述第二特征值用于与预设的项目级特征值集合进行匹配操作;所述项目级特征值集合为对第三方组件的各特征文件的文件元数据计算哈希值后,得到的特征值集合;
所述单文件特征算法用于针对任一被测文件,将该被测文件的所有文件元数据构成一个字符串,对该字符串计算哈希值,得到该被测文件的第三特征值。
2.如权利要求1所述的软件成分分析方法,其特征在于,获取待检测项目的所有被测文件,包括:
截获所述待检测项目在编译过程中的编译指令;
获取各所述编译指令涉及到的所有被测文件。
3.如权利要求1所述的软件成分分析方法,其特征在于,基于各处理后的文件元数据,确定所述待检测项目中是否包含第三方组件的被测文件,包括:
基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果;
根据各所述特征算法对应的第三方组件初步识别结果,确定所述待检测项目中是否包含第三方组件的被测文件。
4.如权利要求3所述的软件成分分析方法,其特征在于,根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,包括:
采用预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,得到不同维度的特征值;
基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:
将所述不同维度的特征值,在预先构建的文件元数据特征库中进行匹配,以确定是否存在与所述不同维度的特征值相匹配的第三方组件的组件信息;
基于匹配结果,得到所述第三方组件初步识别结果;所述第三方组件初步识别结果包括:所述待检测项目中是否包含第三方组件的被测文件,以及在包含第三方组件的被测文件时,确定所述第三方组件的被测文件归属的第三方组件;
其中,所述文件元数据特征库中关联保存有各第三方组件的组件信息和相应维度的特征值。
5.如权利要求4所述的软件成分分析方法,其特征在于,所述文件元数据特征库通过以下过程构建得到:
采集各第三方组件的特征文件;
提取所述特征文件的文件元数据;
采用所述至少两种不同维度的特征算法,对各所述特征文件的文件元数据进行特征值计算,得到各所述第三方组件的不同维度的特征值;
关联保存各所述第三方组件的组件信息以及各所述第三方组件对应的特征值。
6.如权利要求4所述的软件成分分析方法,其特征在于,采用的所述特征算法包括目录结构级特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的目录级特征值;
基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:
根据所述待检测项目中的目录结构,分别对所述待检测项目中的各目录对应的文件元数据进行特征计算,得到各所述目录对应的第一特征值;
将各所述目录对应的第一特征值,与各第三方组件的目录级特征值进行匹配操作,确定各所述第一特征值中是否存在目标第一特征值;所述目标第一特征值为:存在匹配的目录级特征值的第一特征值;
在存在所述目标第一特征值时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述目标第一特征值对应的目录下的所有被测文件,归属于所匹配的目录级特征值所属的第三方组件;
在不存在所述目标第一特征值时,确定所述待检测项目中不包含第三方组件的被测文件。
7.如权利要求4所述的软件成分分析方法,其特征在于,采用的所述特征算法包括项目级特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的项目级特征值集合;
基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:
根据所述待检测项目中每一个被测文件对应的文件元数据,计算每一个被测文件对应的第二特征值,得到第二特征值集合;
将所述第二特征值集合与各第三方组件的项目级特征值集合进行匹配操作,确定是否存在目标项目级特征值集合;所述目标项目级特征值集合为:与所述第二特征值集合的整体匹配度大于预设匹配度阈值的项目级特征值集合;
在存在所述目标项目级特征值集合时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述第二特征值集合中的目标第二特征值对应的被测文件,归属于所述目标项目级特征值集合所属的第三方组件;所述目标第二特征值为:在所述目标项目级特征值集合中存在相匹配的项目级特征值的第二特征值;
在不存在所述目标项目级特征值集合时,确定所述待检测项目中不包含第三方组件的被测文件。
8.如权利要求4所述的软件成分分析方法,其特征在于,采用的所述特征算法包括单文件特征算法;所述文件元数据特征库中保存的特征值包括各第三方组件的单文件特征值;
基于各处理后的文件元数据,得到各所述特征算法对应的第三方组件初步识别结果,包括:
根据各被测文件对应的文件元数据,计算出各被测文件对应的第三特征值;
将所述第三特征值与各第三方组件的单文件特征值进行匹配操作,确定是否存在目标第三特征值;所述目标第三特征值为:存在匹配的单文件特征值的第三特征值;
在存在所述目标第三特征值时,确定所述待检测项目中包含第三方组件的被测文件,并确定所述目标第三特征值对应的被测文件,归属于所述目标第三特征值所匹配的单文件特征值所属的第三方组件;
在不存在所述目标第三特征值时,确定所述待检测项目中不包含第三方组件的被测文件。
9.如权利要求3-8任一项所述的软件成分分析方法,其特征在于,根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,包括:
基于预设的至少两种不同维度的特征算法的优先级,遍历执行各所述特征算法对所述文件元数据进行处理,得到所述根据各所述特征算法对应的第三方组件初步识别结果。
10.如权利要求9所述的软件成分分析方法,其特征在于,所述根据各所述特征算法对应的第三方组件初步识别结果,确定所述待检测项目中是否包含第三方组件的被测文件,包括:
若各所述特征算法中的任一特征算法对应的第三方组件初步识别结果表征所述待检测项目中包含第三方组件的被测文件,则确定所述待检测项目中包含第三方组件的被测文件,并确定所述被测文件所归属的第三方组件;
若所有特征算法对应的第三方组件初步识别结果均表征所述待检测项目中不包含第三方组件的被测文件,则确定所述待检测项目中不包含第三方组件的被测文件。
11.如权利要求10所述的软件成分分析方法,其特征在于,所述确定所述被测文件所归属的第三方组件,包括:
确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;
若是,确定该被测文件归属于该第三方组件;
否则,将i值加1,重新确定第i优先级的特征算法对应的第三方组件初步识别结果中,该被测文件是否为归属于某一第三方组件的目标文件;
其中,i的值依次取1至n,n为预设的特征算法的数量;且i值越小,则优先级越高。
12.如权利要求1-8任一项所述的软件成分分析方法,其特征在于,所述目录结构级特征算法的优先级高于所述项目级特征算法的优先级,所述项目级特征算法的优先级高于所述单文件特征算法的优先级。
13.如权利要求1-8任一项所述的软件成分分析方法,其特征在于,在确定出所述待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,所述方法还包括:
根据确定出的归属于第三方组件的各被测文件,识别出所述待检测项目中存在的第三方组件安全漏洞。
14.如权利要求1-8任一项所述的软件成分分析方法,其特征在于,在确定出所述待检测项目中包含第三方组件的被测文件,以及确定出各被测文件归属的第三方组件之后,所述方法还包括:
对所述待检测项目中,除归属于第三方组件的被测文件外的其他被测文件进行漏洞分析,得到项目安全漏洞。
15.一种软件成分分析装置,其特征在于,包括:
获取模块,用于获取待检测项目的所有被测文件;
第一提取模块,用于提取所述所有被测文件的文件元数据;
组件识别模块,用于根据预设的至少两种不同维度的特征算法,对各所述文件元数据进行处理,基于处理后的文件元数据,确定所述待检测项目中是否包含第三方组件的被测文件;
其中,预设的所述特征算法包括以下至少两种:目录结构级特征算法、项目级特征算法和单文件特征算法;
其中,针对任一被测文件,所述目录结构级特征算法用于根据该被测文件所属目录对应的所有被测文件的文件元数据,计算出该目录对应的第一特征值;
所述项目级特征算法用于对各所述文件元数据进行处理得到每一个被测文件对应的第二特征值;所述第二特征值用于与预设的项目级特征值集合进行匹配操作;所述项目级特征值集合为对第三方组件的各特征文件的文件元数据计算哈希值后,得到的特征值集合;
所述单文件特征算法用于针对任一被测文件,将该被测文件的所有文件元数据构成一个字符串,对该字符串计算哈希值,得到该被测文件的第三特征值。
16.一种电子设备,其特征在于,包括:处理器及存储器;所述处理器用于执行所述存储器中存储的程序,以实现如权利要求 1至14中任一项所述的软件成分分析方法。
17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求 1至14中任一项所述的软件成分分析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210352904.5A CN114489787B (zh) | 2022-04-06 | 2022-04-06 | 软件成分分析方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210352904.5A CN114489787B (zh) | 2022-04-06 | 2022-04-06 | 软件成分分析方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114489787A CN114489787A (zh) | 2022-05-13 |
CN114489787B true CN114489787B (zh) | 2022-07-01 |
Family
ID=81488377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210352904.5A Active CN114489787B (zh) | 2022-04-06 | 2022-04-06 | 软件成分分析方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114489787B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113987427A (zh) * | 2021-10-28 | 2022-01-28 | 苏州棱镜七彩信息科技有限公司 | 同源代码的溯源方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030200532A1 (en) * | 2002-04-17 | 2003-10-23 | Thomas Gensel | System and method for sharing reusable code base |
US20160019224A1 (en) * | 2014-07-18 | 2016-01-21 | Commvault Systems, Inc. | File system content archiving based on third-party application archiving rules and metadata |
US9471285B1 (en) * | 2015-07-09 | 2016-10-18 | Synopsys, Inc. | Identifying software components in a software codebase |
CN107844705B (zh) * | 2017-11-14 | 2021-04-02 | 苏州棱镜七彩信息科技有限公司 | 基于二进制代码特征的第三方组件漏洞检测方法 |
CN109828780B (zh) * | 2018-12-28 | 2022-09-16 | 奇安信科技集团股份有限公司 | 一种开源软件的识别方法及装置 |
CN111124486A (zh) * | 2019-12-05 | 2020-05-08 | 任子行网络技术股份有限公司 | 发现安卓应用引用第三方工具的方法、系统及存储介质 |
CN112084146A (zh) * | 2020-09-08 | 2020-12-15 | 国网上海市电力公司 | 基于多维特征的固件同源性检测方法 |
CN113961919B (zh) * | 2020-12-23 | 2023-01-31 | 奇安信网神信息技术(北京)股份有限公司 | 恶意软件检测方法和装置 |
-
2022
- 2022-04-06 CN CN202210352904.5A patent/CN114489787B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113987427A (zh) * | 2021-10-28 | 2022-01-28 | 苏州棱镜七彩信息科技有限公司 | 同源代码的溯源方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114489787A (zh) | 2022-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2693356B1 (en) | Detecting pirated applications | |
US9141796B2 (en) | System and method for detecting malware in file based on genetic map of file | |
US20200082083A1 (en) | Apparatus and method for verifying malicious code machine learning classification model | |
CN108985057B (zh) | 一种webshell检测方法及相关设备 | |
CN106484606A (zh) | 一种代码提交方法和设备 | |
US11036479B2 (en) | Devices, systems, and methods of program identification, isolation, and profile attachment | |
CN110866258A (zh) | 快速定位漏洞方法、电子装置及存储介质 | |
CN113901474B (zh) | 一种基于函数级代码相似性的漏洞检测方法 | |
CN109815697A (zh) | 误报行为处理方法及装置 | |
KR101803888B1 (ko) | 유사도 기반 악성 어플리케이션 탐지 방법 및 장치 | |
CN114139161A (zh) | 一种批量检测漏洞的方法、装置、电子设备及介质 | |
CN114489787B (zh) | 软件成分分析方法、装置、电子设备及存储介质 | |
US11487876B1 (en) | Robust whitelisting of legitimate files using similarity score and suspiciousness score | |
CN111930610B (zh) | 软件同源性检测方法、装置、设备及存储介质 | |
CN112698861A (zh) | 源代码克隆识别方法及系统 | |
CN110990202A (zh) | 识别Android模拟器的方法及相关设备 | |
CN106445737A (zh) | 一种多备份启动方法 | |
CN115600199A (zh) | 安全评估的方法、装置、电子设备及计算机可读存储介质 | |
CN114510717A (zh) | 一种elf文件的检测方法、装置、存储介质 | |
CN114021116A (zh) | 一种同源分析知识库的构建方法、同源分析方法及装置 | |
CN114254069A (zh) | 域名相似度的检测方法、装置和存储介质 | |
CN111931187A (zh) | 一种组件漏洞检测方法、装置、设备及可读存储介质 | |
JP4754007B2 (ja) | 情報処理装置、情報処理方法、プログラムおよび記録媒体 | |
US10726109B2 (en) | Method and system for identifying whether an application is genuine by means of digital watermarks | |
KR20180077397A (ko) | 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |