CN115659344B - 一种软件供应链检测方法及装置 - Google Patents

一种软件供应链检测方法及装置 Download PDF

Info

Publication number
CN115659344B
CN115659344B CN202211689506.9A CN202211689506A CN115659344B CN 115659344 B CN115659344 B CN 115659344B CN 202211689506 A CN202211689506 A CN 202211689506A CN 115659344 B CN115659344 B CN 115659344B
Authority
CN
China
Prior art keywords
packet
name
package
syntax tree
preset
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
Application number
CN202211689506.9A
Other languages
English (en)
Other versions
CN115659344A (zh
Inventor
柴志刚
涂腾飞
王森淼
陈淼
温巧燕
金正平
秦素娟
时忆杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN202211689506.9A priority Critical patent/CN115659344B/zh
Publication of CN115659344A publication Critical patent/CN115659344A/zh
Application granted granted Critical
Publication of CN115659344B publication Critical patent/CN115659344B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请实施例提供一种软件供应链检测方法及装置,包括:计算待检测包与预设的流行包列表中的各流行包之间的相似度;其中,所述流行包是根据包下载量和包的依赖关系所确定的;响应于所述待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;解析所述待检测包的自动安装脚本,生成抽象语法树;对所述抽象语法树进行预处理,得到抽象语法树的向量表示;将所述向量表示输入预设的恶意代码检测模型,由所述恶意代码检测模型输出第二检测结果。本申请能够对python软件供应链进行安全性检测,提高供应链安全性。

Description

一种软件供应链检测方法及装置
技术领域
本申请实施例涉及信息安全技术领域,尤其涉及一种软件供应链检测方法及装置。
背景技术
软件供应链是一个通过一级或多级软件设计、开发阶段编写软件, 并通过软件交付渠道将软件从软件供应商送往软件用户的系统。PyPI(Python Package Index)是python的官方仓库,是Python软件供应链中最重要的一环,所有人都可以从PyPI下载第三方库或者从PyPI发布自己开发的库。由于PyPI缺乏安全检测机制,且数据包之间存在依赖性的特点,攻击者会在其发布的库中植入恶意代码,对仓库中的数据造成威胁。
发明内容
有鉴于此,本申请实施例的目的在于提出一种软件供应链检测方法及装置,能够对供应链进行安全性检测。
基于上述目的,本申请实施例提供了一种软件供应链检测方法,包括:
计算待检测包与预设的流行包列表中的各流行包之间的相似度;其中,所述流行包是根据包下载量和包的依赖关系所确定的;
响应于所述待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;
解析所述待检测包的自动安装脚本,生成抽象语法树;
对所述抽象语法树进行预处理,得到抽象语法树的向量表示;
将所述向量表示输入预设的恶意代码检测模型,由所述恶意代码检测模型输出第二检测结果。
可选的,所述计算待检测包与预设的流行包列表中的各流行包之间的相似度之前,包括:
获取所有数据包的下载量;
解析各数据包的依赖关系字段,确定所依赖的数据包;
根据各数据包及所依赖的数据包,确定各数据包的依赖性指标;
根据各数据包的下载量和依赖性指标,确定各数据包的流行度;
将所述流行度大于预设的流行度阈值的数据包作为流行包,添加于所述流行包列表中。
可选的,所述解析各数据包的依赖关系字段,确定所依赖的数据包,包括:
对于每个数据包:
解析install_requires字段、确定该字段的值所对应的数据包;
解析ImportFrom和Import字段,确定相应字段的值所对应的多个模块;
从多个模块中筛选出与当前数据包内的模块不同的模块,并确定该不同的模块所属的数据包。
可选的,所述计算待检测包与预设的流行包列表中的各流行包之间的相似度,包括:
对待检测包的第一包名和流行包的第二包名进行预处理,得到预处理后的第一包名和第二包名;
按照预设的包名匹配规则,确定预处理后的第一包名与第二包名之间的相似度。
可选的,所述按照预设的包名匹配规则,确定预处理后的第一包名与第二包名之间的相似度,包括:
计算第一包名与第二包名的莱文斯坦编辑距离,如果所述莱文斯坦编辑距离小于预设的第一距离阈值,则第一包名与第二包名相似;或者,
如果第一包名是第二包名的子字符串,且第一包名的长度与第二包名的长度的比值大于等于预设的第一长度阈值,或者第二包名是第一包名的子字符串,且第二包名的长度与第一包名的长度的比值大于等于所述第一长度阈值,则第一包名与第二包名相似;或者,
如果第一包名和第二包名的莱文斯坦比大于等于预设的第二距离阈值,则第一包名和第二包名相似;或者,
将第一包名划分成多个连续的子字符串,如果第一包名的子字符串的任意组合是第二包名的子字符串,而且第一包名与第二包名中长度较小者与长度较大者的比值大于等于预设的第二长度阈值,则第一包名与第二包名相似;或者,
将第二包名划分成多个连续的子字符串,如果第二包名的子字符串的任意组合是第一包名的子字符串,而且第一包名与第二包名中长度较小者与长度较大者的比值大于等于预设的第二长度阈值,则第一包名与第二包名相似。
可选的,所述对待检测包的第一包名和流行包的第二包名进行预处理,包括:
将所述第一包名和第二包名的字符串转换为小写形式;
删除所述第一包名和第二包名中的特殊字符。
可选的,对所述抽象语法树进行预处理,得到抽象语法树的向量表示,包括:
对所述抽象语法树进行标准化处理,得到标准化的抽象语法树;
对所述标准化的抽象语法树进行序列化处理,得到语法树序列;
利用预设的词向量模型,将所述语法树序列转换为所述向量表示。
可选的,对所述抽象语法树进行标准化处理,包括:
删除非ASCII字符和注释;
将用于执行字符串表达式的函数的字符串属性值转换为子抽象语法树;
将自定义函数名称转换为标准化函数名称,将自定义变量名称转换为标准化变量名称。
可选的,所述恶意代码检测模型基于长短期记忆网络模型和注意力机制实现。
本申请实施例还提供一种软件供应链检测装置,包括:
计算模块,用于计算待检测包与预设的流行包列表中的各流行包之间的相似度;其中,所述流行包是根据包下载量和包的依赖关系所确定的;
域名抢注检测模块,用于响应于所述待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;
解析模块,用于解析所述待检测包的自动安装脚本,生成抽象语法树;
预处理模块,用于对所述抽象语法树进行预处理,得到抽象语法树的向量表示;
恶意代码检测模块,用于将所述向量表示输入预设的恶意代码检测模型,由所述恶意代码检测模型输出第二检测结果。
从上面所述可以看出,本申请实施例提供的软件供应链检测方法及装置,通过计算待检测包与预设的流行包列表中的各流行包之间的相似度,当待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出待检测包为域名抢注可疑包的第一检测结果;通过解析待检测包的自动安装脚本,生成抽象语法树,对抽象语法树进行预处理,得到抽象语法树的向量表示,将向量表示输入恶意代码检测模型,由恶意代码检测模型输出待检测包是否存在恶意代码的第二检测结果。本申请能够对python软件供应链进行域名抢注检测和恶意代码检测,提高供应链安全性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的方法流程示意图;
图2为本申请实施例的域名抢注检测方法流程示意图;
图3为本申请实施例的恶意代码检测方法流程示意图;
图4为本申请实施例的装置结构框图;
图5为本申请实施例的电子设备结构框图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本申请实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本申请实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
如背景技术部分所述,攻击者会利用PyPI缺乏安全检测机制和数据包之间的依赖关系在PyPI发布包含恶意代码的库,有些恶意代码会通过域名抢注方式诱使用户下载包含恶意代码的数据包,有些恶意代码窃取维护特定包的账户的凭据,将恶意代码植入已有代码中。相关技术中,可基于包下载量计算包流行度,根据包流行度和包名相似度确定是否存在域名抢注,由于未考虑数据包之间的依赖关系,无法准确的反映包流行度,影响检测准确性。采用静态分析方法检测是否存在恶意代码,容易被各种混淆技术绕过,而由于Python在沙盒中执行时存在不允许持续访问网络或本地文件系统等问题,动态分析也不具备可行性。
有鉴于此,本申请实施例提供一种软件供应链检测方法,结合包下载量和依赖关系确定包流行度,根据包流行度确定流行包列表,计算待检测包与流行包列表中的各流行包之间的相似度,如果相似度大于相似度阈值,可判定待检测包为域名抢注可疑包;同时,利用预先构建的恶意代码检测模型对待检测包进行检测,由模型输出是否为存在恶意代码的数据包。
以下,通过具体的实施例进一步详细说明本申请的技术方案。
如图1所示,本申请实施例提供一种软件供应链检测方法,包括:
S101:计算待检测包与预设的流行包列表中的各流行包之间的相似度;其中,流行包是根据包下载量和包的依赖关系所确定的;
S102:响应于待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;
结合图2所示,本实施例中,对待检测包进行域名抢注检测,计算待检测包与流行包列表中的每个流行包之间的相似度,如果待检测包与流行包列表中的任意一个流行包的相似度大于相似度阈值,可以判定该待检测包为域名抢注可疑包。
相关技术中,数据包的流行度依据数据包的下载量衡量,未考虑数据包之间的依赖关系,不能准确衡量流行度。本实施例中,结合数据包的下载量和依赖关系,确定数据包的流行度,再根据数据包的流行度构建流行包列表。具体的,构建流行包列表的方法包括:
获取所有数据包的下载量;
解析各数据包的依赖关系字段,确定所依赖的数据包;
根据各数据包及所依赖的数据包,确定各数据包的依赖性指标;
根据各数据包的下载量和依赖性指标,确定各数据包的流行度;
将流行度大于预设的流行度阈值的数据包作为流行包,添加于流行包列表中。
对于PyPI,获取PyPI包管理器中的所有数据包,利用PePy获取所有数据包的下载量。对于各数据包,通过解析源代码获取其中的依赖关系字段,根据依赖关系字段的取值确定数据包所依赖的其他数据包,确定依赖性指标,对于每个数据包,根据其下载量和依赖性指标,确定数据包的流行度。确定所有数据包的流行度之后,按照流行度从大到小排序,选取排名靠前的预定数量的数据包作为流行包,构建流行包列表。
一些方式中,为确定数据包所依赖的其他数据包,对于每个数据包,通过解析源代码,获得install_requires字段及该字段的值,将该字段的值所对应的数据包作为当前数据包所依赖的其他数据包。如果存在ImportFrom字段,则解析获得ImportFrom字段及该字段的值,确定该字段的值所对应的模块,将该模块与当前数据包中所包括的所有模块进行匹配,如果该模块不属于当前数据包中的模块,则该模块所属数据包为当前数据包所依赖的其他数据包,如果该模块属于当前数据包中的模块,则该模块为当前数据包的模块;如果存在Import字段,则解析获得Import字段及该字段的值,确定该字段的值所对应的模块,将该模块与当前数据包中所包括的所有模块进行匹配,如果该模块不属于当前数据包中的模块,则该模块所属数据包为当前数据包所依赖的其他数据包,如果该模块属于当前数据包中的模块,则该模块为当前数据包的模块。这样,通过对所有依赖关系字段的分析,能够全面、准确的确定数据包所依赖的所有其他的外部数据包,确定数据包之间完整的依赖关系。
通过解析源代码中的依赖关系字段,确定数据包所依赖的其他数据包之后,根据数据包之间的依赖关系,构建依赖关系图,同时可在依赖关系图中显示每个数据包的下载量,基于依赖关系图确定每个数据包的流行度。一些方式中,数据包的流行度根据数据包的下载量和依赖性指标所确定。其中,依赖性指标是数据包被依赖的程度,例如可以从被其他数据包依赖的数量上衡量,即,数据包的下载量越高,被依赖的其他数据包的数量越高,该数据包越流行。基于依赖关系图,按照数据包的下载量和被依赖的其他数据包的数量从大到小的顺序,对所有数据包进行流行度排序,得到排序后的数据包,再从中选取排在前面的预定数量(例如,前5%)的数据包作为流行包,由流行包构建流行包列表。可选的,综合下载量和依赖性指标进行排序时,还可设置二者的权重值,通过计算下载量及其权重值和依赖性指标及其权重值的加权求和,得到流行度。
一些实施方式中,对于待检测包,计算其包名与各流行包的包名之间的相似度,如果待检测包的包名与任意一个流行包的包名之间的相似度大于相似度阈值,可以确定待检测包为域名抢注可疑包,输出域名抢注可疑包的第一检测结果,第一检测结果可疑包括待检测包的包名、版本、上传者等相关信息,以及疑似抢注的流行包的相关信息。
一些方式中,通过对域名抢注的命名模式进行分析,确定域名抢注的命名规则包括增加字符、删除字符、修改字符、交换字符、增加前缀和增加后缀。例如,对于增加字符,setup-tools是流行包setuptools的域名抢注包;对于删除字符,virtualnv是流行包virtualenv的域名抢注包;对于修改字符,mumpy是流行包numpy的域名抢注包;对于交换字符,pysprak是流行包pyspark的域名抢注包;对于交换字符和删除字符组合,pythonkafka是kafka-python的域名抢注包;对于增加前缀,python-Django是流行包Django的域名抢注包;对于增加后缀,clases.git是clases的域名抢注包。
一些实施例中,计算待检测包与预设的流行包列表中的各流行包之间的相似度,包括:
对待检测包的第一包名和流行包的第二包名进行预处理,得到预处理后的第一包名和第二包名;
按照预设的包名匹配规则,确定预处理后的第一包名与第二包名之间的相似度。
本实施例中,根据域名抢注的命名模式,通过将待检测包的包名与流行包列表中各流行包的包名按照一定的包名匹配规则进行匹配,确定待检测包与流行包的相似度。
在包名匹配之前,先对待检测包的第一包名和流行包的第二包名进行预处理,得 到预处理后的第一包名和第二包名,然后基于预处理后的第一包名和第二包名进行包名匹 配。其中,第一包名和第二包名均为字符串,预处理包括将包名的字符串转换为小写形式, 然后删除其中的特殊字符,特殊字符包括
Figure DEST_PATH_IMAGE001
预处理之后,按照预设的包名匹配规则,确定预处理后的第一包名与第二包名之间的相似度,具体包括:
计算第一包名与第二包名的莱文斯坦编辑距离,如果莱文斯坦编辑距离小于预设的第一距离阈值,则第一包名与第二包名相似;或者,
如果第一包名是第二包名的子字符串,且第一包名的长度与第二包名的长度的比值大于等于预设的第一长度阈值,或者第二包名是第一包名的子字符串,且第二包名的长度与第一包名的长度的比值大于等于第一长度阈值,则第一包名与第二包名相似;或者,
如果第一包名和第二包名的莱文斯坦比大于等于预设的第二距离阈值,则第一包名和第二包名相似;或者,
将第一包名划分成多个连续的子字符串,如果第一包名的子字符串的任意组合是第二包名的子字符串,而且第一包名与第二包名中长度较小者与长度较大者的比值大于等于预设的第二长度阈值,则第一包名与第二包名相似;或者,
将第二包名划分成多个连续的子字符串,如果第二包名的子字符串的任意组合是第一包名的子字符串,而且第一包名与第二包名中长度较小者与长度较大者的比值大于等于预设的第二长度阈值,则第一包名与第二包名相似。可选的,第一长度阈值、第二长度阈值、第二距离阈值可以设置为0.8。
其中,莱文斯坦距离是指对于两个字符串,将一个字符串转换成另一个字符串所需的最少编辑操作次数。莱文斯坦比是根据两个字符串的长度之和与编辑距离计算得到的,计算公式为:
y=(sum-idist)/sum (1)
其中,sum为两个字符串的长度之和,idist为编辑距离。
S103:解析待检测包的自动安装脚本,生成抽象语法树;
S104:对抽象语法树进行预处理,得到抽象语法树的向量表示;
S105:将向量表示输入预设的恶意代码检测模型,由恶意代码检测模型输出第二检测结果。
结合图3所示步骤S301-305,本实施例中,对待检测包进行恶意代码检测,对待检测包的自动安装脚本进行解析生成抽象语法树,对抽象语法树进行预处理,得到适于输入恶意代码检测模型的向量表示,将向量表示输入恶意代码检测模型,由模型对输入向量进行处理,得到待检测包是否存在恶意代码的第二检测结果。
一些实施例中,对抽象语法树进行预处理,得到抽象语法树的向量表示,包括:
对抽象语法树进行标准化处理,得到标准化的抽象语法树;
对标准化的抽象语法树进行序列化处理,得到语法树序列;
利用预设的词向量模型,将语法树序列转换为向量表示。
本实施例中,利用Python的AST(Abstract Syntax Trees,抽象语法树)模块将待检测包的自动安装脚本(即setup.py文件)转换为抽象语法树,通过遍历setup.py文件的每行代码,进行语法分析,生成抽象语法树。抽象语法树中的每个节点都是源代码的一种结构,例如函数、变量等。
由于源代码中存在各种内容,为提高检测效率,基于源代码转换抽象语法树时,需要进行标准化处理。一方面,为减少冗余,将源代码中与恶意代码无关的非ASCII字符和注释删除,保证抽象语法树较为简洁,避免无用代码造成干扰。另一方面,考虑到源代码中可能存在用于执行字符串表达式的函数,例如eval()函数、exec()函数、加密函数(例如,base64等)等,恶意代码可能会以字符串参数的形式植入代码,从而破坏代码结构,因而,从源代码中解析出方法名为上述函数名时,将函数的字符串类型的s属性值递归转换为子AST树,并将生成的子AST树插入父节点。第三方面,考虑到源代码中可能存在用户自定义的函数和变量,且自定义的函数和变量与恶意代码无关,将自定义函数名称转换为预设的标准化函数名称,将自定义变量名称转换为预设的标准化变量名称。通过上述标准化处理后,能够生成简洁、标准化的抽象语法树。
基于标准化的抽象语法树,采用预定的遍历算法遍历抽象语法树的每个节点,将节点转换为相应的节点序列,由所有节点的节点序列构成语法树序列。可选的,可采用前序遍历算法遍历抽象语法树,相较于其他遍历算法具有较好的性能。一些方式中,利用AST模块对抽象语法树进行深度优先遍历,并按照遍历顺序依次输出遍历过程中遇到的具体节点的名称属性,从而获得节点序列(token序列)。
获得语法树序列之后,将语法树序列输入预设的词向量模型,由词向量模型将语法树序列转换为对应的向量表示。其中,词向量模型是通过收集所有语法树序列样本中的token作为单词语料库后经过训练得到的,模型输出的向量表示能够适于恶意代码检测模型的处理。可选的,词向量模型基于word2vec模型实现,能够将输入的序列映射为整数,然后将整数转换为固定长度的向量。
一些实施例中,将待检测包对应的向量表示输入预先构建的恶意代码检测模型中,由模型对向量表示进行处理后识别待检测包是否存在恶意代码。其中,恶意代码检测模型基于BiLSTM模型和注意力机制实现,利用数据包对应的向量表示样本对BiLSTM模型和注意力机制模型进行训练得到恶意代码检测模型。
LSTM(Long-Short Term Memory, 长短期记忆网络)通过门控概念来实现长期记忆,同时能够捕捉序列信息。LSTM网络主要包括遗忘门、记忆门、输入门和输出门,对于单向LSTM模型:
遗忘门
Figure 633297DEST_PATH_IMAGE002
Figure 284858DEST_PATH_IMAGE003
(2)
记忆门
Figure 595754DEST_PATH_IMAGE004
Figure 397488DEST_PATH_IMAGE005
(3)
临界细胞状态
Figure 8598DEST_PATH_IMAGE006
Figure 237585DEST_PATH_IMAGE007
(4)
当前时刻细胞状态
Figure 239039DEST_PATH_IMAGE008
Figure 969098DEST_PATH_IMAGE009
(5)
输出门
Figure 841239DEST_PATH_IMAGE010
Figure 569023DEST_PATH_IMAGE011
(6)
当前时刻隐层状态
Figure 729877DEST_PATH_IMAGE012
Figure 998048DEST_PATH_IMAGE013
(7)
上述公式中,
Figure 927957DEST_PATH_IMAGE014
为上个时刻的隐层状态,
Figure 154539DEST_PATH_IMAGE015
为当前时刻的输入词向量,
Figure 799760DEST_PATH_IMAGE016
为 上个时刻的细胞状态,
Figure 606042DEST_PATH_IMAGE017
是遗忘门的权重,
Figure 983934DEST_PATH_IMAGE018
是记忆门的权重,
Figure 725625DEST_PATH_IMAGE019
是输出门的权重,
Figure 251284DEST_PATH_IMAGE020
是遗忘门的偏置,
Figure 64519DEST_PATH_IMAGE021
是记忆门的偏置,
Figure 969021DEST_PATH_IMAGE022
是输出门的偏置,
Figure 537406DEST_PATH_IMAGE023
是sigmoid神经网络层。
上述单向LSTM模型只按正向处理序列,无法同时处理上下文信息。本实施例采用 BiLSTM模型,通过在第二层引入结构相同但序列处理方向相反的LSTM,然后将同一个时刻 的输出进行合并拼接。这样,BiLSTM所学到的语义信息中,单词既依赖于前面单词的意思也 依赖于后面单词的意思。因此对于每一个时刻而言, 都对应着前向与后向的信息。模型的 输出可表示为:
Figure 894569DEST_PATH_IMAGE024
对于BiLSTM模型每个时刻输出的序列,利用注意力机制对每个时刻的序列进行一定注意力范围的关注,确定下个时刻的状态需关注输入序列的关注部分,根据下个时刻的关注部分生成下个时刻的输出序列。输出序列最后经softmax函数处理后输出存在恶意代码或不存在恶意代码的检测结果。
本实施例中,对待检测包进行恶意代码检测时,先将setup.py文件转换为抽象语法树,然后将抽象语法树进行标准化处理,将标准化处理后的抽象语法树序列化,将抽象语法树序列转换为向量表示,之后将向量表示输入恶意代码检测模型中,由模型输出待检测包是否包含恶意代码的检测结果。
本申请的恶意代码检测模型的评估指标包括误报率FPR、漏报率FNR、召回率R(Recall)、准确率P(Precision)和F1值。其中:
误报率的计算公式为:FPR = FP/(TP + FP); (8)
漏报率的计算公式为:FNR = FN/(TP + FN); (9)
召回率R的计算公式为:R = TP/(TP + FN); (10)
精确率P的计算公式为:P = TP/(TP + FP); (11)
F1值的计算公式为:2× P× R/(P + R)。 (12)
其中,TP为将恶意包预测为恶意包的数量,TN为将良性包预测为良性包的数量,FP为将良性包预测为恶意包的误报数,FN为将恶意包预测为良性包的漏报数。
需要说明的是,上述步骤S101-102中进行域名抢注检测的方法和步骤S103-S105中进行进行恶意代码检测的方法可以同时进行,也可以先进行域名抢注检测再进行恶意代码检测,或者先进行恶意代码检测再进行域名抢注检测,执行顺序不做限定。
本申请实施例提供的软件供应链检测方法,一方面能够实现域名抢注攻击检测,结合下载量和包之间的依赖关系确定包流行度,将待检测包与流行包进行相似性检测,判断是否为域名抢注可疑包;另一方面能够实现恶意代码检测,通过对源代码解析生成抽象语法树,将抽象语法树进行标准化、序列化和向量化处理,得到向量表示,利用恶意代码检测模型对待检测包的向量表示进行预测,输出待检测包是否存在恶意代码的检测结果。本申请能够实现python软件供应链的安全性检测,提高检测准确性和检测效率。
需要说明的是,本申请实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本申请实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
如图4所示,本申请实施例还提供一种软件供应链检测装置,包括:
计算模块,用于计算待检测包与预设的流行包列表中的各流行包之间的相似度;其中,流行包是根据包下载量和包的依赖关系所确定的;
域名抢注检测模块,用于响应于待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;
解析模块,用于解析待检测包的自动安装脚本,生成抽象语法树;
预处理模块,用于对抽象语法树进行预处理,得到抽象语法树的向量表示;
恶意代码检测模块,用于将向量表示输入预设的恶意代码检测模型,由所述恶意代码检测模型输出第二检测结果。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
图5示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本申请实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本申请实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本申请实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本申请实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本申请实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本申请实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (8)

1.一种软件供应链检测方法,其特征在于,包括:
获取所有数据包的下载量;
解析各数据包的依赖关系字段,确定所依赖的数据包;
根据各数据包及所依赖的数据包,确定各数据包的依赖性指标;
根据各数据包的下载量和依赖性指标,确定各数据包的流行度;
将所述流行度大于预设的流行度阈值的数据包作为流行包,添加于流行包列表中;
计算待检测包与所述流行包列表中的各流行包之间的相似度,包括:对待检测包的第一包名和流行包的第二包名进行预处理,得到预处理后的第一包名和第二包名;通过计算预处理后的第一包名与第二包名的莱文斯坦编辑距离或子字符串计算相似度;
响应于所述待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;
解析所述待检测包的自动安装脚本,生成抽象语法树;
对所述抽象语法树进行预处理,得到抽象语法树的向量表示;
将所述向量表示输入预设的恶意代码检测模型,由所述恶意代码检测模型输出第二检测结果。
2.根据权利要求1所述的方法,其特征在于,所述解析各数据包的依赖关系字段,确定所依赖的数据包,包括:
对于每个数据包:
解析install_requires字段、确定该字段的值所对应的数据包;
解析ImportFrom和Import字段,确定相应字段的值所对应的多个模块;
从多个模块中筛选出与当前数据包内的模块不同的模块,并确定该不同的模块所属的数据包。
3.根据权利要求1所述的方法,其特征在于,所述通过计算预处理后的第一包名与第二包名的莱文斯坦编辑距离或子字符串计算相似度,包括:
计算第一包名与第二包名的莱文斯坦编辑距离,如果所述莱文斯坦编辑距离小于预设的第一距离阈值,则第一包名与第二包名相似;或者,
如果第一包名是第二包名的子字符串,且第一包名的长度与第二包名的长度的比值大于等于预设的第一长度阈值,或者第二包名是第一包名的子字符串,且第二包名的长度与第一包名的长度的比值大于等于所述第一长度阈值,则第一包名与第二包名相似;或者,
如果第一包名和第二包名的莱文斯坦比大于等于预设的第二距离阈值,则第一包名和第二包名相似;或者,
将第一包名划分成多个连续的子字符串,如果第一包名的子字符串的任意组合是第二包名的子字符串,而且第一包名与第二包名中长度较小者与长度较大者的比值大于等于预设的第二长度阈值,则第一包名与第二包名相似;或者,
将第二包名划分成多个连续的子字符串,如果第二包名的子字符串的任意组合是第一包名的子字符串,而且第一包名与第二包名中长度较小者与长度较大者的比值大于等于预设的第二长度阈值,则第一包名与第二包名相似。
4.根据权利要求1所述的方法,其特征在于,所述对待检测包的第一包名和流行包的第二包名进行预处理,包括:
将所述第一包名和第二包名的字符串转换为小写形式;
删除所述第一包名和第二包名中的特殊字符。
5.根据权利要求1所述的方法,其特征在于,对所述抽象语法树进行预处理,得到抽象语法树的向量表示,包括:
对所述抽象语法树进行标准化处理,得到标准化的抽象语法树;
对所述标准化的抽象语法树进行序列化处理,得到语法树序列;
利用预设的词向量模型,将所述语法树序列转换为所述向量表示。
6.根据权利要求5所述的方法,其特征在于,对所述抽象语法树进行标准化处理,包括:
删除非ASCII字符和注释;
将用于执行字符串表达式的函数的字符串属性值转换为子抽象语法树;
将自定义函数名称转换为标准化函数名称,将自定义变量名称转换为标准化变量名称。
7.根据权利要求1所述的方法,其特征在于,所述恶意代码检测模型基于长短期记忆网络模型和注意力机制实现。
8.一种软件供应链检测装置,其特征在于,包括:
构建模块,用于获取所有数据包的下载量;解析各数据包的依赖关系字段,确定所依赖的数据包;根据各数据包及所依赖的数据包,确定各数据包的依赖性指标;根据各数据包的下载量和依赖性指标,确定各数据包的流行度;将所述流行度大于预设的流行度阈值的数据包作为流行包,添加于流行包列表中;
计算模块,用于计算待检测包与所述流行包列表中的各流行包之间的相似度,包括:对待检测包的第一包名和流行包的第二包名进行预处理,得到预处理后的第一包名和第二包名;通过计算预处理后的第一包名与第二包名的莱文斯坦编辑距离或子字符串计算相似度;
域名抢注检测模块,用于响应于所述待检测包与任一流行包之间的相似度大于预设的相似度阈值,输出第一检测结果;
解析模块,用于解析所述待检测包的自动安装脚本,生成抽象语法树;
预处理模块,用于对所述抽象语法树进行预处理,得到抽象语法树的向量表示;
恶意代码检测模块,用于将所述向量表示输入预设的恶意代码检测模型,由所述恶意代码检测模型输出第二检测结果。
CN202211689506.9A 2022-12-28 2022-12-28 一种软件供应链检测方法及装置 Active CN115659344B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211689506.9A CN115659344B (zh) 2022-12-28 2022-12-28 一种软件供应链检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211689506.9A CN115659344B (zh) 2022-12-28 2022-12-28 一种软件供应链检测方法及装置

Publications (2)

Publication Number Publication Date
CN115659344A CN115659344A (zh) 2023-01-31
CN115659344B true CN115659344B (zh) 2023-03-10

Family

ID=85023535

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211689506.9A Active CN115659344B (zh) 2022-12-28 2022-12-28 一种软件供应链检测方法及装置

Country Status (1)

Country Link
CN (1) CN115659344B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661850B (zh) * 2023-07-31 2023-10-17 北京天防安全科技有限公司 一种设备固件及供应链检测方法、装置、设备及介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8499283B2 (en) * 2010-02-09 2013-07-30 Webroot Inc. Detection of scripting-language-based exploits using parse tree transformation
CN105630977B (zh) * 2015-12-25 2019-03-26 腾讯科技(深圳)有限公司 应用程序推荐方法、装置及系统
CN111290784B (zh) * 2020-01-21 2021-08-24 北京航空航天大学 适用于大规模样本的程序源代码相似度检测方法
CN112733156B (zh) * 2021-01-29 2024-04-12 中国人民解放军国防科技大学 基于代码属性图的软件脆弱性智能检测方法、系统及介质
CN115168865A (zh) * 2022-06-28 2022-10-11 南京大学 基于领域自适应的跨项目漏洞检测模型

Also Published As

Publication number Publication date
CN115659344A (zh) 2023-01-31

Similar Documents

Publication Publication Date Title
He et al. Learning to fuzz from symbolic execution with application to smart contracts
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
US11036614B1 (en) Data control-oriented smart contract static analysis method and system
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
CN112800427B (zh) webshell检测方法、装置、电子设备和存储介质
CN107659570A (zh) 基于机器学习与动静态分析的Webshell检测方法及系统
CN112733158B (zh) Android系统漏洞检测方法、电子设备及存储介质
CN114579969B (zh) 漏洞检测方法、装置、电子设备及存储介质
CN115659344B (zh) 一种软件供应链检测方法及装置
US11734061B2 (en) Automated software robot creation for robotic process automation
CN115659358B (zh) 一种智能合约模糊测试方法及装置
CN113312618A (zh) 程序漏洞检测方法、装置、电子设备及介质
KR102462541B1 (ko) 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템
CN112688966A (zh) webshell检测方法、装置、介质和设备
CN117113347A (zh) 一种大规模代码数据特征提取方法及系统
CN110851608A (zh) 基于区块链的侵权检测方法、装置、设备及存储介质
CN116383707A (zh) 恶意代码检测方法、装置、设备和介质
CN112632423B (zh) Url提取方法及装置
Fan et al. DroidARA: android application automatic categorization based on API relationship analysis
CN113076089B (zh) 一种基于对象类型的api补全方法
US8924924B2 (en) Representing the structure of a data format using a class-based representation
US10789067B2 (en) System and method for identifying open source usage
Moghaddas et al. Technical Report for HW2VEC--A Graph Learning Tool for Automating Hardware Security
Gong et al. SCGformer: Smart contract vulnerability detection based on control flow graph and transformer
Song et al. HGIVul: Detecting inter-procedural vulnerabilities based on hypergraph convolution

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