一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

软件开发工具包漏洞检测方法、系统和存储介质与流程

2022-08-31 04:21:53 来源:中国专利 TAG:


1.本公开涉及信息安全技术领域,特别是一种软件开发工具包漏洞检测方法、系统和存储介质。


背景技术:

2.随着应用软件数量的增多,以及应用开发的复杂性增加,越来越多的开发者会选择在开发过程中使用第三方sdk(software development kit,软件开发工具包)来辅助开发。随着第三方sdk的广泛使用,其安全危险性也日益突出,一旦某一sdk存在安全漏洞,那集成该sdk的app的安全问题也不可避免。与此同时,开发者在选择第三方sdk时更多的关注功能本身,容易忽略第三方sdk的安全性,再加上第三方sdk提供商提供给开发者的信息也只是接口配置等信息,开发者对sdk的安全性也无从知晓。
3.目前普遍的sdk漏洞检测方法是基于静态分析的方法,主要是依据sdk漏洞库的单一匹配,例如利用sdk黑名单、sdk代码与漏洞库进行匹配等方法,缺乏灵活性,并且依赖漏洞库的更新。


技术实现要素:

4.本公开的一个目的在于提高sdk漏洞检测的准确度和灵活性。
5.根据本公开的一些实施例的一个方面,提出一种软件开发工具包漏洞检测方法,包括:获取目标sdk的特征信息;根据特征信息,基于深度学习模型,获取漏洞分析结果,漏洞分析结果为有漏洞或无漏洞;其中,深度学习模型为基于深度学习算法和损失函数,采用样本sdk的特征信息和已知的漏洞存在状态训练生成。
6.在一些实施例中,特征信息包括目标软件的权限特征、接口类特征、代码特征和程序函数库文件特征。
7.在一些实施例中,获取目标sdk的特征信息包括:通过反向编译目标sdk,获取全局配置文件、源代码和程序函数库文件特征;基于预存权限字典,根据全局配置文件获取权限特征;从源代码中,通过代码关键字匹配获取接口类特征和代码特征。
8.在一些实施例中,根据特征信息,基于深度学习模型,获取漏洞分析结果包括:将获取的每项特征进行预处理,获取数值特征,并生成特征矩阵;根据特征矩阵生成灰度图像;将灰度图像输入深度学习模型中,获取漏洞分析结果。
9.在一些实施例中,将获取的每项特征进行预处理,获取数值特征,并生成特征矩阵包括:将代码特征进行布尔特征处理,获取代码数值特征,包括:通过预定第一长度的预定二进制数标识存在对应的代码特征,代码数值特征的维数与代码特征的种类数量相匹配;将权限特征进行one-hot(一位有效)编码,获取权限数值特征,包括:通过对应二进制位的值标识目标sdk是否要求对应权限,其中,每一个二进制位对应一种权限种类,编码后的二进制位数与预定权限种类相匹配;根据接口类特征获取接口数值特征,包括:通过预定第二长度的二进制数代表每项api出现的次数,生成与预定接口的数量相匹配的预定第二长度
的二进制数;将代码数值特征、权限数值特征和接口数值特征,结合程序函数库文件特征,生成特征矩阵。
10.在一些实施例中,深度学习模型中包括attention(注意力)机制。
11.在一些实施例中,损失函数为focalloss(焦点损失)函数。
12.在一些实施例中,focal loss函数为:
[0013][0014]
其中,loss
fl
为损失函数值,α为平衡因子,y为深度学习模型的输出结果,y

为深度学习模型经过激活函数的输出,γ为可调因子。
[0015]
在一些实施例中,sdk漏洞检测方法还包括:构建包括attention机制的基于深度学习算法的模型和损失函数;结合损失函数,利用样本sdk的特征信息和样本sdk的已知的漏洞存在状态训练构建的模型,更新模型参数,直至达到预定训练次数或准确度达到预定值,获取深度学习模型。
[0016]
通过这样的方法,能够通过特征提取和深度神经网络分析的方式判断sdk中是否具有漏洞,无需依赖于漏洞库的更新,提高sdk漏洞发现的灵活度和及时性,提高sdk漏洞检测的准确度。
[0017]
根据本公开的一些实施例的一个方面,提出一种软件开发工具包漏洞检测系统,包括:特征获取单元,被配置为获取目标软件开发工具包sdk的特征信息;漏洞分析单元,被配置为根据特征信息,基于深度学习模型获取漏洞分析结果,漏洞分析结果为有漏洞或无漏洞;其中,深度学习模型为基于深度学习算法和损失函数,采用样本sdk的特征信息和已知的漏洞存在状态训练生成。
[0018]
在一些实施例中,漏洞分析单元包括:预处理子单元,被配置为将获取的每项特征进行预处理,获取数值特征,并生成特征矩阵;根据特征矩阵生成灰度图像;其中,特征信息包括目标软件的权限特征,接口类特征、代码特征和程序函数库文件特征;深度学习单元,被配置为基于深度学习模型根据灰度图像获取漏洞分析结果。
[0019]
在一些实施例中,sdk漏洞检测系统还包括:损失函数单元,被配置为在根据样本sdk的特征信息和已知的漏洞存在状态训练基于深度学习算法构建的模型的过程中,确定深度学习模型的训练效果,以便深度学习单元修改模型参数,直至达到预定训练次数或准确度达到预定值。
[0020]
根据本公开的一些实施例的一个方面,提出一种软件开发工具包漏洞检测系统,包括:存储器;以及耦接至存储器的处理器,处理器被配置为基于存储在存储器的指令执行如上文中任意一种sdk漏洞检测方法。
[0021]
这样的sdk漏洞检测系统能够通过特征提取和深度神经网络分析的方式判断sdk中是否具有漏洞,无需依赖于漏洞库的更新,提高sdk漏洞发现的灵活度和及时性,提高sdk漏洞检测的准确度。
[0022]
根据本公开的一些实施例的一个方面,提出一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现上文中任意一种sdk漏洞检测方法的步骤。
[0023]
通过执行这样的存储介质上的指令,能够通过特征提取和深度神经网络分析的方式判断sdk中是否具有漏洞,无需依赖于漏洞库的更新,提高sdk漏洞发现的灵活度和及时
性,提高sdk漏洞检测的准确度。
附图说明
[0024]
此处所说明的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
[0025]
图1为本公开的sdk漏洞检测方法的一些实施例的流程图。
[0026]
图2a为本公开的sdk漏洞检测方法的另一些实施例的流程图。
[0027]
图2b为本公开的sdk漏洞检测方法中特征预处理的一些实施例的示意图。
[0028]
图2c为本公开的sdk漏洞检测方法中深度学习模型的一些实施例的示意图。
[0029]
图3a为本公开的sdk漏洞检测方法的又一些实施例的流程图。
[0030]
图3b为本公开的sdk漏洞检测方法中损失函数可调因子选择的一些实施例的示意图。
[0031]
图3c为本公开的sdk漏洞检测方法中训练过程中准确度变化的一些实施例的示意图。
[0032]
图4为本公开的sdk漏洞检测系统的一些实施例的示意图。
[0033]
图5为本公开的sdk漏洞检测系统的另一些实施例的示意图。
[0034]
图6为本公开的sdk漏洞检测系统的又一些实施例的示意图。
具体实施方式
[0035]
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
[0036]
本公开的sdk漏洞检测方法的一些实施例的流程图如图1所示。
[0037]
在步骤101中,获取目标sdk的特征信息。在一些实施例中,特征信息可以包括目标软件的权限特征、接口类特征、代码特征和程序函数库文件特征。
[0038]
在一些实施例中,可以通过sdk代码和特征与预存特征的匹配,获取目标sdk的特征信息。
[0039]
在步骤102中,根据特征信息,基于深度学习模型,获取漏洞分析结果,漏洞分析结果为有漏洞或无漏洞;其中,深度学习模型为基于深度学习算法和损失函数,采用样本sdk的特征信息和已知的漏洞存在状态训练生成。在一些实施例中,深度学习算法可以为cnn(convolution neural network,卷积神经网络)。在一些实施例中,可以构建cnn和损失函数,进而进行训练,生成所需的深度学习模型。
[0040]
在一些实施例中,可以先对特征信息进行预处理,生成适合深度学习算法处理的图像文件,提高处理的便捷度和准确度。
[0041]
在一些实施例中,可以预先构建深度学习算法和损失函数,进而采用样本sdk数据训练深度学习算法构建的模型,直至样本数据使用完,或达到预定训练次数,或达到预定的准确度。
[0042]
通过这样的方法,能够通过特征提取和深度神经网络分析的方式判断sdk中是否具有漏洞,无需依赖于漏洞库的更新,提高sdk漏洞发现的灵活度和及时性,提高sdk漏洞检测的准确度。
[0043]
在一些实施例中,可以将sdk漏洞过检测方法集成在移动应用全生命周期管理平
台中,通过检测app中的第三方sdk安全情况为应用的安全提供评价依据;也可以单独的对sdk进行检测,为应用开发者提供sdk安全评估,供app开发者参考,从而减少因集成含有高危漏洞的第三方sdk的app的安全问题。
[0044]
本公开的sdk漏洞检测方法的另一些实施例的流程图如图2a所示。
[0045]
在步骤201中,通过反向编译目标sdk,获取全局配置文件androidmanifest.xml、源代码(例如java源代码)和程序函数库文件特征(如so文件的特征)。
[0046]
在步骤202中,基于预存权限字典,根据全局配置文件获取权限特征。在一些实施例中,可以构建包括纳入考虑范围的各个权限的配置信息、标识信息的权限字典,利用权限字典对全局配置文件中各个字段进行匹配,获得权限特征。
[0047]
在步骤203中,从源代码中,通过代码关键字匹配获取接口类特征和代码特征。在一些实施例中,可以预先构建代码关键字信息库,以便执行与源代码的代码匹配、特征提取。
[0048]
在后续步骤204~207中,基于上述步骤201~203获取的特征信息,执行特征信息的预处理,进而生成特征矩阵,如图2b中所示。
[0049]
在步骤204中,将权限特征进行one-hot(一位有效)编码,获取权限数值特征,包括:通过对应二进制位的值标识目标sdk是否要求对应权限,其中,每一个二进制位对应一种权限种类,编码后的二进制位数与预定权限种类相匹配。如图2b中所示,选取320项权限纳入考虑范围,即需要320位的二进制数,每一位标识一项权限,当sdk要求该权限时,对应的二进制位为1,否则对应的二进制位为0。
[0050]
在步骤205中,通过预定第一长度的预定二进制数标识存在对应的代码特征,代码数值特征的维数与代码特征的种类数量相匹配。在一些实施例中,如图2b中所示,将代码特征进行布尔特征处理,当存在时标识为1,不存在时标识为0,每一个代码特征采用8位二进制数标识(00000001或00000000),二进制数的数量与代码特征的种类数量相等。
[0051]
在步骤206中,根据接口类特征获取接口数值特征,包括:通过预定第二长度的二进制数代表每项api出现的次数,生成与预定接口的数量相匹配的预定第二长度的二进制数。例如,选取70项api(application programming interface,应用程序接口)类,用8位二进制数代表每项api出现的次数,如图2b中所示。
[0052]
在步骤207中,将代码数值特征、权限数值特征和接口数值特征,结合程序函数库文件特征,生成特征矩阵。由于so文件(程序函数库文件)是二进制文件,不需做数值转换的处理,可以直接与预处理后的其他特征结合生成特征矩阵。
[0053]
在步骤208中,根据特征矩阵生成灰度图像。
[0054]
在一些实施例中,深度学习模型输入图片大小是固定的,特征转换后的灰度图片可以通过reshape(重塑)转换成如224
×
224
×
1尺寸的灰度图像,作为cnn骨干网络的输入。
[0055]
在一些实施例中,向深度学习模型输入图片的尺寸可以根据sdk的特征数量、长度确定。若尺寸过大,则参数量和浮点运算过大,影响处理效率;而尺寸过小,特征不够明显,sdk漏洞检测效果不佳,因此,根据sdk的特征数量、长度确定灰度图像的尺寸,在保证检测准确度的情况下尽可能压缩图像尺寸,提高处理效率。
[0056]
在步骤209中,将灰度图像输入深度学习模型中,获取漏洞分析结果。在一些实施例中,深度学习模型可以基于cnn网络,如图2c所示,融合卷积、bn、残差、深度可分离卷积和
attention机制。
[0057]
在一些实施例中,attention机制的引入能够使cnn学习每个通道的权重,使得能够从sdk特征转换的灰度图中尽可能多的提取到特征信息,提高网络的准确率。在一些实施例中,cnn的输出为二分类的结果,即为有漏洞和无漏洞。
[0058]
通过这样的方法,能够通过将sdk反向编译的方式提取其中的特征,保证特征获取的可靠性;通过匹配提取,可以将可靠的特征(不会导致产生漏洞的特征)排除在后续处理之外,降低了数据处理量和处理负担,提高了漏洞检测效率;通过将特征统一形式处理后生成灰度图片的方式,能够在不损失信息的前提下将数据形式统一化,降低深度学习算法的处理难度,提高利用深度学习算法提取漏洞的适用程度,进一步提高漏洞检测的准确度和效率。
[0059]
本公开的sdk漏洞检测方法的又一些实施例的流程图如图3a所示。
[0060]
在步骤301中,构建包括attention机制的深度学习算法和损失函数。
[0061]
在一些实施例中,可以搭建cnn骨干网络,并且融合卷积、bn、残差、深度可分离卷积、attention机制,如图2c所示。
[0062]
在一些实施例中,损失函数可以基于focal loss函数构建,focal loss函数为:
[0063][0064]
其中,loss
fl
为损失函数值,α为平衡因子,y为深度学习算法的输出结果,y

为深度学习模型经过激活函数的输出,γ为可调因子。
[0065]
在一些实施例中,损失函数随可调因子、分类正确的类的概率的变化可以如图3b所示。将表达式中的γ设置大于0,从而减少易分类样本的损失,使得更关注于困难的、错分的样本,当样本属于简单易分类样本时,损失更小。在一些实施例中,结合本技术sdk漏洞检测中的数据测试,选择设置γ=2。
[0066]
在一些实施例中,由于有漏洞的sdk多于无漏洞的sdk,导致sdk样本不均衡。为了解决sdk样本不均衡的问题,加入平衡因子α。根据本技术的sdk样本分布的不均衡情况,设置α=0.7。
[0067]
在步骤302中,结合损失函数,利用样本sdk的特征信息和样本sdk的已知的漏洞存在状态训练基于深度学习算法构建的模型,直至达到预定训练次数或准确度达到预定值,完成深度学习模型的训练。在一些实施例中,如图3c所示,在训练100次后,准确率达到95.98%。
[0068]
在后续步骤303、304中,采用如图1、2中任一实施例中的方式检测目标sdk是否具有漏洞。
[0069]
通过这样的方法,采用了融合卷积、bn、残差、深度可分离卷积、attention机制构建的sdk检测模型,使用focal loss构建损失函数,通过数据训练,确定了sdk漏洞检测模型的相关参数,提高了sdk漏洞检测的准确性。
[0070]
本公开的sdk漏洞检测系统的一些实施例的示意图如图4所示。
[0071]
特征获取单元401能够获取目标sdk的特征信息。在一些实施例中,特征信息可以包括目标软件的权限特征、接口类特征、代码特征和程序函数库文件特征。在一些实施例中,可以通过sdk代码和特征与预存特征的匹配,获取目标sdk的特征信息。
[0072]
漏洞分析单元402能够根据特征信息,基于深度学习模型,获取漏洞分析结果,漏洞分析结果为有漏洞或无漏洞;其中,深度学习模型为基于深度学习算法和损失函数,采用样本sdk的特征信息和已知的漏洞存在状态训练生成。
[0073]
这样的sdk漏洞检测系统能够通过特征提取和深度神经网络分析的方式判断sdk中是否具有漏洞,无需依赖于漏洞库的更新,提高sdk漏洞发现的灵活度和及时性,提高sdk漏洞检测的准确度。
[0074]
在一些实施例中,特征获取单元401能够通过反向编译目标sdk,获取全局配置文件androidmanifest.xml、源代码(例如java源代码)和程序函数库文件特征(如so文件的特征);基于预存权限字典,根据全局配置文件获取权限特征;从源代码中,通过代码关键字匹配获取接口类特征和代码特征。在一些实施例中,可以预先构建代码关键字信息库,以便执行与源代码的代码匹配、特征提取。
[0075]
这样的系统能够通过将sdk反向编译的方式提取其中的特征,保证特征获取的可靠性;通过匹配提取,可以将可靠的特征(不会导致产生漏洞的特征)排除在后续处理之外,降低了数据处理量和处理负担,提高了漏洞检测效率。
[0076]
在一些实施例中,如图4所示,漏洞分析单元402可以包括预处理子单元412和深度学习单元422。
[0077]
预处理子单元412能够获取特征获取单元401得到的特征信息,执行特征信息的预处理,进而生成特征矩阵,并将特征矩阵转化为灰度图像。在一些实施例中,预处理子单元412可以执行上述实施例中204~208之间的步骤。
[0078]
深度学习单元422能够基于深度学习模型,对预处理子单元412输出的图像进行分析,获取漏洞分析结果。在一些实施例中,深度学习单元422可以为cnn网络,融合卷积、bn(batch normalization,批量归一化)、残差、深度可分离卷积、和attention机制。
[0079]
这样的系统通过将特征统一形式处理后生成灰度图片的方式,能够在不损失信息的前提下将数据形式统一化,降低深度学习模型的处理难度,提高利用深度学习模型提取漏洞的适用程度,进一步提高漏洞检测的准确度和效率。
[0080]
在一些实施例中,sdk漏洞检测系统还包括损失函数单元403,能够在根据样本sdk的特征信息和已知的漏洞存在状态训练基于深度学习算法构建的模型过程中,确定模型参数,直至达到预定训练次数或准确度达到预定值。在一些实施例中,损失函数单元403的具体函数可以如上文步骤301中所示。
[0081]
这样的系统使用focal loss构建损失函数,通过数据训练,确定了sdk漏洞检测模型的相关参数,提高了sdk漏洞检测的准确性。
[0082]
本公开sdk漏洞检测系统的一个实施例的结构示意图如图5所示。sdk漏洞检测系统包括存储器501和处理器502。其中:存储器501可以是磁盘、闪存或其它任何非易失性存储介质。存储器用于存储上文中sdk漏洞检测方法的对应实施例中的指令。处理器502耦接至存储器501,可以作为一个或多个集成电路来实施,例如微处理器或微控制器。该处理器502用于执行存储器中存储的指令,能够提高sdk漏洞发现的灵活度和及时性,提高sdk漏洞检测的准确度。
[0083]
在一个实施例中,还可以如图6所示,sdk漏洞检测系统600包括存储器601和处理器602。处理器602通过bus总线603耦合至存储器601。该sdk漏洞检测系统600还可以通过存
储接口604连接至外部存储装置605以便调用外部数据,还可以通过网络接口606连接至网络或者另外一台计算机系统(未标出)。此处不再进行详细介绍。
[0084]
在该实施例中,通过存储器存储数据指令,再通过处理器处理上述指令,能够提高sdk漏洞发现的灵活度和及时性,提高sdk漏洞检测的准确度。
[0085]
在另一个实施例中,一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现sdk漏洞检测方法对应实施例中的方法的步骤。本领域内的技术人员应明白,本公开的实施例可提供为方法、装置、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0086]
本公开是参照根据本公开实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0087]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0088]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0089]
至此,已经详细描述了本公开。为了避免遮蔽本公开的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。
[0090]
可能以许多方式来实现本公开的方法以及装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法以及装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
[0091]
最后应当说明的是:以上实施例仅用以说明本公开的技术方案而非对其限制;尽管参照较佳实施例对本公开进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本公开的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本公开技术方案的精神,其均应涵盖在本公开请求保护的技术方案范围当中。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献