CN114117445A - 漏洞分类方法、装置、设备及介质 - Google Patents

漏洞分类方法、装置、设备及介质 Download PDF

Info

Publication number
CN114117445A
CN114117445A CN202111381657.3A CN202111381657A CN114117445A CN 114117445 A CN114117445 A CN 114117445A CN 202111381657 A CN202111381657 A CN 202111381657A CN 114117445 A CN114117445 A CN 114117445A
Authority
CN
China
Prior art keywords
vulnerability
patch file
patch
vector
code segment
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
Application number
CN202111381657.3A
Other languages
English (en)
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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202111381657.3A priority Critical patent/CN114117445A/zh
Publication of CN114117445A publication Critical patent/CN114117445A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Computation (AREA)
  • Evolutionary Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Artificial Intelligence (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种漏洞分类方法、装置、设备、存储介质和程序产品,用于识别补丁文件修复的漏洞类型,可以应用于人工智能技术领域。该漏洞分类方法包括:获取待识别的第一补丁文件;按照预处理规则提取所述第一补丁文件中的第一更新代码片段;按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量;以及以所述第一向量作为预训练好的漏洞分类模型的输入,基于所述漏洞分类模型输出的漏洞分类结果,确定所述第一补丁文件所修复的漏洞类型。本公开还提供了一种训练漏洞分类模型的方法、装置、设备、存储介质和程序产品。

Description

漏洞分类方法、装置、设备及介质
技术领域
本公开涉及人工智能领域,更具体地涉及一种用于识别补丁文件修复的漏洞类型的漏洞分类方法、装置、设备、介质和程序产品。
背景技术
漏洞分类是进行漏洞管理的基础。目前的漏洞管理普遍依赖公共漏洞数据库(例如,国际安全组织维护的公共漏洞数据库)中的数据,例如,通过对公共漏洞数据库中的漏洞数据的统计、分析或学习,可以掌握当前出现的各种类型漏洞的分布、每种漏洞的特点、或者学习漏洞代码的特点以帮助发现程序代码中是否有漏洞等。然而公共漏洞数据库中的漏洞数据的录入和维护成本较高,而且漏洞数据从收录到公开有一定的周期,并且公共漏洞数据库中收录的数据的范围受限于数据库维护方的选择或权限,数据范围比较局限,从而会导致可供分析使用的漏洞数据集具有滞后性、数据不充分等问题。
发明内容
鉴于上述问题,本公开实施例提供了一种漏洞分类方法、装置、设备、介质和程序产品,以及训练漏洞分类模型的方法、装置、设备、介质和程序产品,可以提高可供分析使用的漏洞数据集的实时性,扩大可学习的漏洞数据集的数据范围。
本公开实施例的第一方面,提供了一种漏洞分类方法。所述漏洞分类方法用于识别补丁文件修复的漏洞类型。所述方法包括:获取待识别的第一补丁文件;按照预处理规则提取所述第一补丁文件中的第一更新代码片段,其中,所述第一更新代码片段是基于所述第一补丁文件相比于其所修复的原代码文件发生变化的代码得到的;按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量;以及以所述第一向量作为预训练好的漏洞分类模型的输入,基于所述漏洞分类模型输出的漏洞分类结果,确定所述第一补丁文件所修复的漏洞类型。
根据本公开的实施例,所述按照预处理规则提取所述第一补丁文件中的第一更新代码片段包括:从所述第一补丁文件中,删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留所述更改行中的代码;以及对所述更改行中的代码进行规范化处理,得到所述第一更新代码片段。
根据本公开的实施例,所述按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量包括:基于所述第一更新代码片段中的词序列,得到第一字典变量;以及按照预定义的映射函数中每个词的索引值,将所述第一字典变量中的每个词转换为对应的索引值,以生成所述第一向量。
根据本公开的实施例,所述映射函数是对训练所述漏洞分类模型所使用的数据集中的词生成索引值而得到的。
根据本公开的实施例,所述漏洞分类模型是通过如下方式训练得到的:获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数;按照所述预处理规则提取每个所述第二补丁文件中的第二更新代码片段,其中,所述第二更新代码片段是基于所述第二补丁文件相比于其所修复的原代码文件发生变化的代码得到的;按照所述向量转换规则将所述第二更新代码片段中的代码处理为第二向量;以每个所述第二补丁文件对应的漏洞类型的信息作为所述第二补丁文件对应的所述第二向量的标签,得一个样本数据;其中,N个所述第二补丁文件对应得到N个所述样本数据;以及利用N个所述样本数据组成的数据集,训练所述漏洞分类模型。
根据本公开的实施例,所述漏洞分类模型包括BERT模型。
根据本公开的实施例,所述漏洞分类模型输出的漏洞分类结果用于表示以下任意一种漏洞类型:未修复漏洞、权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞或输入校验漏洞。
本公开实施例的第二方面,提供了一种训练漏洞分类模型的方法。其中,所述漏洞分类模型用于对补丁文件修复的漏洞类型进行分类。所述方法包括:获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数;按照预处理规则提取每个所述第二补丁文件中的第二更新代码片段,其中,所述第二更新代码片段是基于所述第二补丁文件相比于其所修复的原代码文件发生变化的代码得到的;按照预定的向量转换规则将所述第二更新代码片段中的代码处理为第二向量;以每个所述第二补丁文件对应的漏洞类型的信息作为所述第二补丁文件对应的所述第二向量的标签,得一个样本数据;其中,N个所述第二补丁文件对应得到N个所述样本数据;以及利用N个所述样本数据组成的数据集,训练所述漏洞分类模型。
根据本公开的实施例,所述获取已知修复的漏洞类型的N个第二补丁文件之前,所述方法还包括:确定需要进行漏洞分类识别的软件清单;以及获取所述软件清单中每个软件对应的至少一个所述第二补丁文件。
根据本公开的实施例,所述按照预处理规则提取每个所述第二补丁文件中的第二更新代码片段包括:从所述第二补丁文件中删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留所述更改行中的代码;以及对所述更改行中的代码进行规范化处理,得到所述第二更新代码片段。
根据本公开的实施例,所述按照预定的向量转换规则将所述第二更新代码片段中的代码处理为第二向量包括:基于所述第二更新代码片段中的词序列,得到第二字典变量;以及按照预定义的映射函数中每个词的索引值,将所述第二字典变量中的每个词转换为对应的索引值,以生成所述第二向量。
根据本公开的实施例,在按照预定义的映射函数中每个词的索引值,将所述第二字典变量中的每个词转换为对应的索引值,以生成所述第二向量之前,所述方法还包括:为N个所述第二字典变量中涉及的每个词分别生成一个索引值,得到所述映射函数,其中,N个所述第二字典变量与N个所述第二补丁文件一一对应。
本公开实施例的第三方面,提供了一种漏洞分类装置。所述漏洞分类装置用于识别补丁文件修复的漏洞类型。所述装置包括第一获取模块、第一提取模块、第一向量化模块以及预测模块。第一获取模块用于获取待识别的第一补丁文件。第一提取模块用于按照预处理规则提取所述第一补丁文件中的第一更新代码片段,其中,所述第一更新代码片段是基于所述第一补丁文件中相比于其所修复的原代码文件发生变化的代码得到的。第一向量化模块用于按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量。预测模块用于以所述第一向量作为预训练好的漏洞分类模型的输入,基于所述漏洞分类模型输出的漏洞分类结果,确定所述第一补丁文件所修复的漏洞类型。
根据本公开的实施例,所述第一提取模块具体用于从所述第一补丁文件中,删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留所述更改行中的代码;以及对所述更改行中的代码进行规范化处理,得到所述第一更新代码片段。
根据本公开的实施例,所述第一向量化模块具体用于基于所述第一更新代码片段中的词序列,得到第一字典变量;以及按照预定义的映射函数中每个词的索引值,将所述第一字典变量中的每个词转换为对应的索引值,以生成所述第一向量。
本公开实施例的第四方面,提供了一种训练漏洞分类模型的装置。其中,所述漏洞分类模型用于对补丁文件修复的漏洞类型进行分类,所述装置包括第二获取模块、第二提取模块、第二向量化模块以及训练模块。第二获取模块用于获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数。第二提取模块用于按照预处理规则提取每个所述第二补丁文件中的第二更新代码片段,其中,所述第二更新代码片段是基于所述第二补丁文件中相比于其所修复的原代码文件发生变化的代码得到的。第二向量化模块用于按照预定的向量转换规则将所述第二更新代码片段中的代码处理为第二向量。训练模块用于以每个所述第二补丁文件对应的漏洞类型的信息作为所述第二补丁文件对应的所述第二向量的标签,得一个样本数据;其中,N个所述第二补丁文件对应得到N个所述样本数据,以及利用N个所述样本数据组成的数据集,训练所述漏洞分类模型。
根据本公开的实施例,所述第二获取模块具体用于确定需要进行漏洞分类识别的软件清单,以及获取所述软件清单中每个软件对应的至少一个所述第二补丁文件。
根据本公开的实施例,所述第二提取模块具体用于:从所述第二补丁文件中删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留所述更改行中的代码;以及对所述更改行中的代码进行规范化处理,得到所述第二更新代码片段。
根据本公开的实施例,所述第二向量化模块具体用于基于所述第二更新代码片段中的词序列,得到第二字典变量,以及按照预定义的映射函数中每个词的索引值,将所述第二字典变量中的每个词转换为对应的索引值,以生成所述第二向量。
根据本公开的实施例,所述第二向量化模块还用于在将所述第二字典变量中的每个词转换为对应的索引值,以生成所述第二向量之前,为N个所述第二字典变量中涉及的每个词分别生成一个索引值,得到所述映射函数,其中,N个所述第二字典变量与N个所述第二补丁文件一一对应。
本公开实施例的第五方面,提供了一种电子设备。所述电子设备包括一个或多个处理器、以及一个或多个存储器。所述一个或多个存储器用于存储一个或多个程序。其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述漏洞分类方法、或训练漏洞分类模型的方法。
本公开实施例的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述漏洞分类方法、或训练漏洞分类模型的方法。
本公开实施例的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述漏洞分类方法、或训练漏洞分类模型的方法。
上述一个或多个实施例具有如下优点或益效果:可以对公共漏洞库尚未公开的且没有未知修复漏洞类型的补丁文件的漏洞类型进行识别,其中,这些补丁文件可以来自于开源社区、或者任意用户(例如,软件厂商)在网络发布的代码更新文件等,从而可以获得比公共漏洞数据库中的数据更及时、且更广泛的漏洞数据,满足漏洞管理的实时性和准确性等要求。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的漏洞分类方法、装置、设备、介质和程序产品的应用场景图;
图2示意性示出了根据本公开实施例的漏洞分类方法总体框架图;
图3示意性示出了根据本公开实施例的训练漏洞分类模型的方法的流程图;
图4示意性示出了根据本公开实施例的训练漏洞分类模型的方法中获取补丁文件的流程图;
图5示意性示出了根据公开实施例的方法中从开源库获取的各种补丁文件的关系图;
图6示意性示出了根据本公开实施例的训练漏洞分类模型的方法中从补丁文件中提取更新代码片段的流程图;
图7示意性示出了一个补丁文件和从其中提取出的更新代码片段的对比示意;
图8示意性示出了根据本公开实施例的训练漏洞分类模型的方法中将更新代码片段转换为向量表示的流程图;
图9示意性示出了根据本公开实施例中通过映射函数将更新代码片段转换为向量表示的过程示意;
图10示意性示出了Transformer模型的编码器结构图;
图11示意性示出了根据本公开实施例的BERT神经网络漏洞分类模型的结构图;
图12示意性示出了根据本公开实施例的漏洞分类方法的流程图;
图13示意性示出了根据本公开实施例的训练漏洞分类装置的框图;
图14示意性示出了根据本公开实施例的漏洞分类装置的框图;以及
图15示意性示出了适于实现根据本公开实施例的漏洞分类方法或训练漏洞分类模型的方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
在本文中,需要理解的是,说明书及附图中的任何元素数量均用于示例而非限制,以及任何命名(例如,第一、第二)都仅用于区分,而不具有任何限制含义。例如,本文中第一补丁文件、第一更新代码片段、第一字典变量、以及第一向量用于对预测阶段涉及的术语进行命名,相应地第二补丁文件、第二更新代码片段、第二字典变量、以及第二向量用于对训练阶段涉及的术语进行命名。
本公开实施例提供了一种漏洞分类方法、装置、设备、介质和程序产品,用于识别补丁文件修复的漏洞类型。其中,该漏洞分类方法可以包括:首先获取待识别的第一补丁文件;然后按照预处理规则提取第一补丁文件中的第一更新代码片段,其中,第一更新代码片段是基于第一补丁文件相比于其所修复的原代码文件发生变化的代码得到的;接着按照预定的向量转换规则将第一更新代码片段中的代码处理为第一向量;最后以第一向量作为预训练好的漏洞分类模型的输入,基于漏洞分类模型输出的漏洞分类结果,确定第一补丁文件所修复的漏洞类型。以此方式,可以对公共漏洞数据库中尚未正式公开的、但是已经在网络中传播的未知修复漏洞的补丁文件(例如,软件厂商静默修复漏洞后发布的补丁文件)进行漏洞分类管理,从而可以有效提升漏洞数据的实时性和数据范围,满足漏洞管理的实时性和准确性等要求。
本公开的实施例还提供了一种训练漏洞分类模型的方法、装置、设备、介质和程序产品,该漏洞分类模型可以应用于上述漏洞分类方法、装置、设备、介质和程序产品中,用于对补丁文件修复的漏洞类型进行分类。其中,该训练漏洞分类模型的方法可以包括:首先获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数;然后按照预处理规则提取每个第二补丁文件中的第二更新代码片段,其中,第二更新代码片段是基于第二补丁文件相比于其所修复的原代码文件发生变化的代码得到的;接下来按照预定的向量转换规则将第二更新代码片段中的代码处理为第二向量;然后以每个第二补丁文件对应的漏洞类型的信息作为第二补丁文件对应的第二向量的标签,得一个样本数据,其中,N个第二补丁文件对应得到N个样本数据;最后利用N个样本数据组成的数据集,训练漏洞分类模型。
需要说明的是,本公开实施例确定的漏洞分类方法、装置、设备、介质和程序产品,或者训练漏洞分类模型的方法、装置、设备、介质和程序产品,可用于金融领域,也可用于除金融领域之外的任意领域,本公开对应用领域不做限定。
图1示意性示出了根据本公开实施例的漏洞分类方法、装置、设备、介质和程序产品的应用场景图。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103、网络104、以及服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。服务器105中可以部署有漏洞分类模型。
用户可以通过在终端设备101、102、103中的操作,来启动或控制服务器105对漏洞分类模型进行训练。
或者,用户可以通过在终端设备101、102、103中的操作来下载或选择待识别的补丁文件,然后通过与服务器105的交互控制服务器105对该补丁文件修复的漏洞类型进行识别,并将识别结构反馈给终端设备101、102、103。
需要说明的是,本公开实施例所提供的漏洞分类方法或者训练漏洞分类模型的方法一般可以由服务器105执行。相应地,本公开实施例所提供的漏洞分类装置、设备、介质和程序产品,或者训练漏洞分类模型的装置、设备、介质和程序产品一般可以设置于服务器105中。本公开实施例所提供的漏洞分类方法或者训练漏洞分类模型的方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的漏洞分类装置、设备、介质和程序产品,或者训练漏洞分类模型的装置、设备、介质和程序产品也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开实施例的漏洞分类方法总体框架图。
如图2所示,根据本公开实施例的漏洞分类方法总体框架可以包括代码提交、数据处理、以及模型分类等阶段。
在代码提交阶段可以根据需要分类的漏洞类型及软件应用,搜集相应的补丁文件,准备漏洞分类代码数据集。
在数据处理阶段可以提取每个补丁文件中的更新代码片段,并转换为向量表示。
在模型分类阶段可以预先构建漏洞分类模型,并训练该漏洞分类模型,然后使用预训练好的漏洞分类模型对从数据处理阶段传递过来的向量进行漏洞分类,以获取分类结果。
以此方式,本公开实施例可以根据分类结果对公共漏洞数据库尚未公布的补丁文件进行漏洞管理,扩充漏洞数据范围,提高漏洞数据的及时性。
以下将基于图1描述的场景和图2的总体框架,先结合图3~图11对本公开实施例的训练漏洞分类模型的方法进行详细描述,然后结合图12对本公开实施例的漏洞分类方法进行详细描述。
图3示意性示出了根据本公开实施例的训练漏洞分类模型的方法的流程图。
如图3所示,根据该实施例训练漏洞分类模型的方法可以包括操作S310~操作S350。
首先在操作S310,获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数。根据本公开实施例,可以从公共漏洞数据库、开源社区、或者软件厂商发布补丁的平台等多处获取补丁文件。
在一个实施例中,该第二补丁文件可以是修复了某一种类型的漏洞的补丁文件,也可以是仅对原代码文件的部分功能进行了改进的补丁文件。其中,对于仅对原代码文件的部分功能进行了改进的补丁文件,由于并未修复任何漏洞,可以视其所修复的漏洞类型为“未修复漏洞”。从而,根据本公开的实施例,该已知修复的漏洞类型可以包括未修复漏洞、以及任意一种具体的漏洞类型(例如,权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞、或者输入校验漏洞等)。
然后在操作S320,按照预处理规则提取每个第二补丁文件中的第二更新代码片段,其中,第二更新代码片段是基于第二补丁文件相比于其所修复的原代码文件发生变化的代码得到的。一般补丁文件中都会标识出其中修改的部分,本公开实施例可以对该部分修改的代码进行提取和处理。例如,可以将第二补丁文件中相较于原代码文件发生变动的部分代码提取出来,然后再根据后续数据处理所要求的格式等,加工为第二更新代码片段。
接下来在操作S330,按照预定的向量转换规则将第二更新代码片段中的代码处理为第二向量。向量转换规则可以根据文本处理需要自行定义,目的是要将以文本表示的代码转换为数值表示形式,且尽量便于模型的学习。
再然后在操作S340,以每个第二补丁文件对应的漏洞类型的信息作为第二补丁文件对应的第二向量的标签,得一个样本数据。例如,假设收集到的所有第二补丁文件所涉及的漏洞类型包括未修复漏洞、权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞和输入校验漏洞,则可以以0~6的数字分别表示这些漏洞类型的信息,从而可以以相应的数字作为标签标记对应的第二向量,得到一个样本数据。根据本公开的实施例,N个第二补丁文件可以对应得到N个样本数据。
最后在操作S350,利用N个样本数据组成的数据集,训练漏洞分类模型。漏洞分类模型用于对补丁文件修复的漏洞类型进行分类。
根据本公开的实施例,该漏洞分类模型可以利用神经网络模型通过深度学习来实现。例如,在一个实施例中,可以基于深度学习的BERT神经网络分类模型来实现对补丁文件所修复漏洞类型的准确分类,从而满足漏洞管理的实时性和准确性。
图4示意性示出了根据本公开实施例的训练漏洞分类模型的方法中操作S310获取补丁文件的流程图。
如图4所示,根据该实施例操作S310可以包括操作S401~操作S402。
首先在操作S401,确定需要进行漏洞分类识别的软件清单。例如,企业级用户可以对其内部使用的操作系统进行漏洞扫描,可以使用任意常见的漏洞扫描工具,统计其中常出现漏洞的软件应用形成软件清单。与此同时还可以统计常见的漏洞类型,以对训练漏洞分类模型时的样本数据进行标注。在一个实施例中,企业级用户的操作系统常见的安全漏洞类型可以包括有:权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞和输入校验漏洞。
然后在操作S402,获取软件清单中每个软件对应的至少一个第二补丁文件,以此获取到训练漏洞分类模型的数据集。目前已有大量的开源项目供人们进行漏洞管理研究,如openssh、squid。可以在开源代码存储库中下载软件清单中每个软件的更新代码文件(即,补丁文件)。
图5示意性示出了根据公开实施例的方法中从开源库获取的各种补丁文件的关系图。
如图5所示,从开源库获取的各种补丁文件可以包括用于修复漏洞的补丁文件、以及非用于修复漏洞的补丁文件。其中,用于修复漏洞的补丁文件中,有的补丁文件修复的漏洞的CVE编号(common vulnerabilities&exposures,通用漏洞批量)也同步公布。而有的补丁文件虽然修复了的漏洞,但CVE编号未知,这类补丁文件作为训练样本数据使用时其中修复的漏洞类型还需要进一步人工识别。各种文件关系图如图5所示。
图6示意性示出了根据本公开实施例的训练漏洞分类模型的方法中操作S320从补丁文件中提取更新代码片段的流程图。
如图6所示,根据本公开实施例操作S320中提取更新代码片段可以包括操作S601~操作S602。
首先在操作S601,从第二补丁文件中删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留更改行中的代码。
然后在操作S602,对更改行中的代码进行规范化处理,得到第二更新代码片段。
图7示意性示出了一个补丁文件和从其中提取出的更新代码片段的对比示意。
图7中(a)为从openssh下载的一个补丁文件,(b)为对该补丁文件经过操作S601和操作S602处理后,由补丁文件(a)中有意义字符得到的更新代码片段。
具体处理时,为了保留其补丁文件(a)相比于其所修复的原文件中有意义的更改行,可以首先删除了补丁文件(a)中除了代码发生过变动的更改行以外的上下文行,从而保留实际更改行。其次删除补丁文件(a)中的注释部分、停用字、非字母字符、数字字符、标点符号等。接下来通过规范化文本数据等处理,可以得到更新代码片段(b)。
图8示意性示出了根据本公开实施例的训练漏洞分类模型的方法中操作S330将更新代码片段转换为向量表示的流程图。
如图8所示,根据本公开的实施例操作S330可以包括操作S801~操作S803。
在操作S801,基于第二更新代码片段中的词序列,得到第二字典变量。
例如,可以将第二更新代码片段中的词序列存为一个python字典变量,形式为dict:{”text”:文本,”label”:分类标签},text的长度即为每一个补丁文件中词的个数,”label”为漏洞分类标签暂且初始化为0。其中,label的值将在后续处理中更新为每个代码文件所修复的漏洞类型的信息,作为向量的标签。
以图7中的更新代码片段(b)为例示例性说明dict的内容。该更新代码片段(b)转换得到的字典变量可以是dict:{text:”explicit_bzero greet password passwd lenBuild path...auth getstate as”,label:“0”}。
对于每个补丁文件的更新代码片段均按照操作S801进行处理,从而,N个第二补丁文件对应得到N个第二字典变量。
在一些实施例中,由于为训练漏洞分类模型收集的补丁文件数量比较大,不同补丁文件的更新代码片段中的字符量大小不一,因此,在获得上文所述的python字典变量dict后,还可以通过补足句长或超长截断来统一每个字典变量的长度。例如,可以统计N个补丁文件对应的N个dict的列表list中每个dict中的text的长度,并根据统计结果取其中90%的text长度作为统一的序列长度,并用sequence_length表示。例如,在一个实施例中,取sequence_length为300,从而text的长度在0~300之间时不足300的部分可以使用特殊字符(例如,#PAD#字符)填充使其长度达到300,而text的长度超过300的部分进行截断处理。将补足句长后的dict变量更新存为new_dict,相应地更新list变量为new_list。
在一些实施例中,还可以根据获得的大量dict中的词频,对出现频率降低的词进行删除,从而保留对漏洞分类模型训练影响更为显著的一些词。例如,可以统计list或new_list中出现的所有词,确定出其中出现次数少于阈值(例如,3次)的词,并把每个dict中该些词删掉。
在一些实施例中,还可以增加特殊词来规范字典变量dict。,例如使用#CLS#表示一句的起始字符,来区分不同的dict。或者如上文所述,使用#PAD#字符在不改变dict中词的先后顺序的情况下,填充使其长度达到sequence_length定义的长度。
此外,在每个dict中由于初始label值设置为0,需要根据每个补丁文件所修复的漏洞类型,设置label的值,这个过程也是操作S340中对样本进行标注的过程。在一个实施例中,对于用于修复漏洞且已知漏洞CVE编号的补丁文件转换得到的dict,可以根据CVE编号所对应的漏洞的类型直接设置label的值。对于用于修复漏洞但无漏洞CVE编号的补丁文件,可以人工识别所修复漏洞类型,然后设置label的值进行标注。对于非用于修复漏洞的补丁文件,其所对应的dict中的labe可以取值为0,表示未修复漏洞。在一个实施例中,label取值可以是:未修复漏洞取“0”,权限验证漏洞取“1”、代码注入漏洞取“2”、跨站脚本攻击漏洞取“3”、溢出漏洞取“4”、信息泄露漏洞取“5”和输入校验漏洞取“6”。
接下来在操作S802,为N个第二字典变量中涉及的每个词分别生成一个索引值,得到映射函数。例如将删除了低频词以后的new_list中的所有词以及添加的特殊字符(如,#CLS#、#PAD#)按序排列,然后为每一个字符生成一个索引值,得到映射函数,可以记为word2idx函数。
然后在操作S803,按照预定义的映射函数中每个词的索引值,将第二字典变量中的每个词转换为对应的索引值,以生成第二向量,具体过程可以参考图9的示意。
图9示意性示出了根据本公开实施例中通过映射函数将更新代码片段转换为向量表示的过程示意。
参考图9,可以将new_list中的每一个dict变量的”text”中的每个词输入到word2idx()函数,得到每一个字符的索引值,形成向量表示。
图9中示例的向量dict1的标签label的值为4,即该向量已经被标注过了,则可以作为一个样本数据进行漏洞分类模型的训练。在另一些实施例中,label的设置也可以是在生成dict的向量表示之后执行,对此本公开不予限定。
至此,本公开实施例可以将获取的N个第二补丁文件转换为标注了类别标签的N个第二向量,从而形成了可以用于训练漏洞分类模型的数据集。
接下来,结合图2的总体框架,在得到用于训练的数据集后,进入模型分类阶段。
根据本公开的一个实施例,可以利用BERT神经网络模型来构建漏洞分类模型,其中,BERT全称为Bidirectional EncoderRepresentations from Transformer。BERT神经网络模型可以利用大规模无标注语料训练、获得文本的包含丰富语义信息的表示。
利用BERT神经网络模型来构建漏洞分类模型时,首先初始化BERT网络结构,然后将用于训练的数据集划分为训练集和测试集,对BERT网络模型进行训练。
具体地,在初始化BERT网络结构时,可以使用基于PyTorch的深度学习框架构建基于BERT的神经网络模型。BERT模型可以利用若干个Transformer模型的编码器部分进行表示。
图10示意性示出了Transformer模型的编码器结构图。图11示意性示出了根据本公开实施例的BERT神经网络漏洞分类模型的结构图。
首先参考图10,Transformer模型的编码器结构包括:
1)位置编码层(Positional Embedding):位置编码层的作用是让模型捕捉到单词的顺序信息,添加位置编码向量信息;
2)多头注意机制(Multi-head Self-Attention):多头注意机制的作用是利用不同的Self-Attention模块获得文本中每个字在不同语义空间下的增强语义向量,并将每个字的多个增强语义向量进行线性组合,从而获得一个最终的与原始字向量长度相同的增强语义向量;
3)残差连接:将模块的输入与输出直接相加,作为最后的输出;
4)标准化(Layer Normalization):对某一层神经网络节点作均值为0方差为1的标准化;
5)线性转换(Feed Forward):对每个字的增强语义向量再做两次线性变换,以增强整个模型的表达能力。这里变换后的向量与原向量保持长度相同。
然后参考图11,BERT神经网络漏洞分类模型利用若干个(例如,6个)Transformer模型的编码器部分进行表示。其中,X_embedding为将原始代码文件经过预处理模块得到的向量表示。Trm即为图10中的Transformer编码器。输出层T1~TN输出的漏洞分类结果(例如,0~6的数字)。
BERT神经网络漏洞分类模型构建完成后,可以使用上文所得的数据集进行模型训练。其中,一个实施例的具体流程如下:
1)划分训练集和测试集:取操作S330和操作S340所得的向量表示中95%的样本数据作为训练样本,其余5%的样本数据作为测试样本。
2)设置预训练参数:优化器使用Adam优化器,dropout参数设为0.4。Adam优化器的任务就是在每一个epoch中计算损失函数的梯度,进而更新参数。Adam算法是一种对随机目标函数执行一阶梯度优化的算法,该算法基于适应性低阶矩估计。Epoch为使用训练集的全部数据对模型进行一次完整训练。Dropout技术是一种避免前馈神经网络中出现的过拟合现象的。在前馈传播的时候,让某个神经元的激活值以一定的概率(即Dropout参数)停止工作,从而增强模型泛化性能。
3)训练BERT神经网络漏洞分类模型:模型训练的衡量指标是AUC。当前epoch训练完毕之后,用测试集衡量当前训练结果,并记下当前epoch的AUC,如果当前的AUC较上一个epoch没有提升,那么降低学习率,实际操作时让当前的学习率降低1/5,直到10个epoch测试集的AUC都没有提升就停止训练。初始学习率可以设置为10-6
训练好的BERT神经网络漏洞分类模型就可以用于执行根据本公开实施例的漏洞分类任务,方便漏洞管理的实时性和准确性等要求。
图12示意性示出了根据本公开实施例的漏洞分类方法的流程图。
如图12所示,根据该实施例的漏洞分类方法可以包括操作S1210~操作S1240。
首先在操作S1210,获取待识别的第一补丁文件。可以从开源软件代码库中下载更新的代码文件。
然后在操作S1220,按照预处理规则提取第一补丁文件中的第一更新代码片段,其中,第一更新代码片段是基于第一补丁文件相比于其所修复的原代码文件发生变化的代码得到的。
例如,可以以类似于图6和图7所描述的提取更新代码片段的方式,从第一补丁文件中,删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留更改行中的代码,并对更改行中的代码进行规范化处理,得到第一更新代码片段。
接下来在操作S1230,按照预定的向量转换规则将第一更新代码片段中的代码处理为第一向量。
例如,可以以类似于图8和图9所描述转换过程,基于第一更新代码片段中的词序列,得到第一字典变量;然后按照训练阶段预定义的映射函数word2dix中每个词的索引值,将第一字典变量中的每个词转换为对应的索引值,以生成第一向量。
然后在操作S1240,以第一向量作为预训练好的漏洞分类模型的输入,基于漏洞分类模型输出的漏洞分类结果,确定第一补丁文件所修复的漏洞类型。
例如,当训练时所标注的漏洞类型包括未修复漏洞、权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞和输入校验漏洞,且分别以0~6的数字来表示时,则操作S1240中漏洞分类模型输出的值为0~6中的数字,分别表示:未修复漏洞、权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞和输入校验漏洞。
以此方式,本公开实施例的漏洞分类方法可以使用的源软件代码库中的代码提交文件。可以不依赖公共漏洞数据库的数据集,从而既能对公共漏洞数据库中已公布的漏洞进行分类,又能对公共漏洞数据库未公布而软件厂商静默修复后的漏洞进行分类,从而使得漏洞分类数据集充分。而且由于能够及时对软件厂商代码库中更新的文件进行漏洞分类,具有更高的时效性。
基于上述训练漏洞分类模型的方法和漏洞分类方法,本公开各个实施例还相应地提供了训练漏洞分类模型的装置和漏洞分类装置。以下将结合图13和图14对相应的装置进行详细描述。
图13示意性示出了根据本公开实施例的训练漏洞分类装置1300的框图。
如图13所示,根据本公开实施例该训练漏洞分类模型的装置1300可以包括第二获取模块1310、第二提取模块1320、第二向量化模块1330以及训练模块1340。
具体地,第二获取模块1310用于获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数。在一些实施例中,第二获取模块1310可以执行操作S310。在另一些实施例中,第二获取模块1310还可以执行操作S401~操作S402,例如用于用于确定需要进行漏洞分类识别的软件清单,以及获取软件清单中每个软件对应的至少一个第二补丁文件。
第二提取模块1320用于按照预处理规则提取每个第二补丁文件中的第二更新代码片段,其中,第二更新代码片段是基于第二补丁文件中相比于其所修复的原代码文件发生变化的代码得到的。在一些实施例中,第二提取模块1320可以用于执行操作S320。在另一些实施例中,第二提取模块1320还可以用于执行操作S601~操作S602,从第二补丁文件中删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留更改行中的代码,以及对更改行中的代码进行规范化处理,得到第二更新代码片段。
第二向量化模块1330用于按照预定的向量转换规则将第二更新代码片段中的代码处理为第二向量。在一些实施例中,第二向量化模块1330可以用于执行操作S330。在另一些实施例中,第二向量化模块1330还可以用于执行操作S801~操作S803,例如用于基于第二更新代码片段中的词序列,得到第二字典变量,然后为N个第二字典变量中涉及的每个词分别生成一个索引值,得到映射函数,接下来按照预定义的映射函数中每个词的索引值,将第二字典变量中的每个词转换为对应的索引值,以生成第二向量。
训练模块1340用于以每个第二补丁文件对应的漏洞类型的信息作为第二补丁文件对应的第二向量的标签,得一个样本数据;其中,N个第二补丁文件对应得到N个样本数据,以及利用N个样本数据组成的数据集,训练漏洞分类模型。
该装置1300可以用于实现参考图3~图11所描述的训练漏洞分类模型的方法,具体可以参考上文描述,此处不再赘述。
图14示意性示出了根据本公开实施例的漏洞分类装置1400的框图。
如图14所示,根据本公开实施例的漏洞分类装置1400可以包括可包括第一获取模块1410、第一提取模块1420、第一向量化模块1430以及预测模块1440。
第一获取模块1410用于获取待识别的第一补丁文件。在一个实施例中,第一获取模块1410可以执行操作S1210。
第一提取模块1420用于按照预处理规则提取第一补丁文件中的第一更新代码片段,其中,第一更新代码片段是基于第一补丁文件中相比于其所修复的原代码文件发生变化的代码得到的。在一个实施例中,第一提取模块1420可以执行操作S1220。在另一个实施例中,第一提取模块1420还可以用于从第一补丁文件中,删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留更改行中的代码;以及对更改行中的代码进行规范化处理,得到第一更新代码片段。
第一向量化模块1430用于按照预定的向量转换规则将第一更新代码片段中的代码处理为第一向量。在一个实施例中,第一向量化模块1430可以执行操作S1230。在另一个实施例中,第一向量化模块1430还可以用于于第一更新代码片段中的词序列,得到第一字典变量;以及按照预定义的映射函数中每个词的索引值,将第一字典变量中的每个词转换为对应的索引值,以生成第一向量。
预测模块1440用于以第一向量作为预训练好的漏洞分类模型的输入,基于漏洞分类模型输出的漏洞分类结果,确定第一补丁文件所修复的漏洞类型。
该漏洞分类装置1400可以用于实现参考图12所描述的漏洞分类方法,用于识别补丁文件所修复的漏洞类型,具体可以参考上文描述,此处不再赘述。
根据本公开的实施例,第二获取模块1310、第二提取模块1320、第二向量化模块1330、训练模块1340、第一获取模块1410、第一提取模块1420、第一向量化模块1430或者预测模块1440中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,第二获取模块1310、第二提取模块1320、第二向量化模块1330、训练模块1340、第一获取模块1410、第一提取模块1420、第一向量化模块1430或者预测模块1440中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第二获取模块1310、第二提取模块1320、第二向量化模块1330、训练模块1340、第一获取模块1410、第一提取模块1420、第一向量化模块1430或者预测模块1440中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图15示意性示出了适于实现根据本公开实施例的漏洞分类方法或训练漏洞分类模型的方法的电子设备1500的方框图。
如图15所示,根据本公开实施例的电子设备1500包括处理器1501,其可以根据存储在只读存储器(ROM)1502中的程序或者从存储部分1508加载到随机访问存储器(RAM)1503中的程序而执行各种适当的动作和处理。处理器1501例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1501还可以包括用于缓存用途的板载存储器。处理器1501可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 1503中,存储有电子设备1500操作所需的各种程序和数据。处理器1501、ROM 1502以及RAM 1503通过总线1504彼此相连。处理器1501通过执行ROM 1502和/或RAM1503中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 1502和RAM 1503以外的一个或多个存储器中。处理器1501也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备1500还可以包括输入/输出(I/O)接口1505,输入/输出(I/O)接口1505也连接至总线1504。电子设备1500还可以包括连接至I/O接口1505的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1507;包括硬盘等的存储部分1508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1509。通信部分1509经由诸如因特网的网络执行通信处理。驱动器1510也根据需要连接至I/O接口1505。可拆卸介质1511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1510上,以便于从其上读出的计算机程序根据需要被安装入存储部分1508。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1502和/或RAM 1503和/或ROM 1502和RAM1503以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器1501执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1509被下载和安装,和/或从可拆卸介质1511被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分1509从网络上被下载和安装,和/或从可拆卸介质1511被安装。在该计算机程序被处理器1501执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (17)

1.一种漏洞分类方法,用于识别补丁文件修复的漏洞类型,其中,所述方法包括:
获取待识别的第一补丁文件;
按照预处理规则提取所述第一补丁文件中的第一更新代码片段,其中,所述第一更新代码片段是基于所述第一补丁文件相比于其所修复的原代码文件发生变化的代码得到的;
按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量;以及
以所述第一向量作为预训练好的漏洞分类模型的输入,基于所述漏洞分类模型输出的漏洞分类结果,确定所述第一补丁文件所修复的漏洞类型。
2.根据权利要求1所述的方法,其中,所述按照预处理规则提取所述第一补丁文件中的第一更新代码片段包括:
从所述第一补丁文件中,删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留所述更改行中的代码;以及
对所述更改行中的代码进行规范化处理,得到所述第一更新代码片段。
3.根据权利要求2所述的方法,其中,所述按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量包括:
基于所述第一更新代码片段中的词序列,得到第一字典变量;以及
按照预定义的映射函数中每个词的索引值,将所述第一字典变量中的每个词转换为对应的索引值,以生成所述第一向量。
4.根据权利要求3所述的方法,其中,所述映射函数是对训练所述漏洞分类模型所使用的数据集中的词生成索引值而得到的。
5.根据权利要求1所述的方法,其中,所述漏洞分类模型是通过如下方式训练得到的:
获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数;
按照所述预处理规则提取每个所述第二补丁文件中的第二更新代码片段,其中,所述第二更新代码片段是基于所述第二补丁文件相比于其所修复的原代码文件发生变化的代码得到的;
按照所述向量转换规则将所述第二更新代码片段中的代码处理为第二向量;
以每个所述第二补丁文件对应的漏洞类型的信息作为所述第二补丁文件对应的所述第二向量的标签,得一个样本数据;其中,N个所述第二补丁文件对应得到N个所述样本数据;以及
利用N个所述样本数据组成的数据集,训练所述漏洞分类模型。
6.根据权利要求1~5任意一项所述的方法,其中,所述漏洞分类模型包括BERT模型。
7.根据权利要求1~5任意一项所述的方法,其中,所述漏洞分类模型输出的漏洞分类结果用于表示以下任意一种漏洞类型:
未修复漏洞、权限验证漏洞、代码注入漏洞、跨站脚本攻击漏洞、溢出漏洞、信息泄露漏洞或输入校验漏洞。
8.一种训练漏洞分类模型的方法,其中,所述漏洞分类模型用于对补丁文件修复的漏洞类型进行分类,所述方法包括:
获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数;
按照预处理规则提取每个所述第二补丁文件中的第二更新代码片段,其中,所述第二更新代码片段是基于所述第二补丁文件相比于其所修复的原代码文件发生变化的代码得到的;
按照预定的向量转换规则将所述第二更新代码片段中的代码处理为第二向量;
以每个所述第二补丁文件对应的漏洞类型的信息作为所述第二补丁文件对应的所述第二向量的标签,得一个样本数据;其中,N个所述第二补丁文件对应得到N个所述样本数据;以及
利用N个所述样本数据组成的数据集,训练所述漏洞分类模型。
9.根据权利要求8所述的方法,其中,所述获取已知修复的漏洞类型的N个第二补丁文件包括:
确定需要进行漏洞分类识别的软件清单;以及
获取所述软件清单中每个软件对应的至少一个所述第二补丁文件。
10.根据权利要求8所述的方法,其中,所述按照预处理规则提取每个所述第二补丁文件中的第二更新代码片段包括:
从所述第二补丁文件中删除相比于其所修复的原代码文件发生变化的更改行以外的文本行,以保留所述更改行中的代码;以及
对所述更改行中的代码进行规范化处理,得到所述第二更新代码片段。
11.根据权利要求8所述的方法,其中,所述按照预定的向量转换规则将所述第二更新代码片段中的代码处理为第二向量包括:
基于所述第二更新代码片段中的词序列,得到第二字典变量;以及
按照预定义的映射函数中每个词的索引值,将所述第二字典变量中的每个词转换为对应的索引值,以生成所述第二向量。
12.根据权利要求11所述的方法,其中,在按照预定义的映射函数中每个词的索引值,将所述第二字典变量中的每个词转换为对应的索引值,以生成所述第二向量之前,所述方法还包括:
为N个所述第二字典变量中涉及的每个词分别生成一个索引值,得到所述映射函数,其中,N个所述第二字典变量与N个所述第二补丁文件一一对应。
13.一种漏洞分类装置,用于识别补丁文件修复的漏洞类型,其中,所述装置包括:
第一获取模块,用于获取待识别的第一补丁文件;
第一提取模块,用于按照预处理规则提取所述第一补丁文件中的第一更新代码片段,其中,所述第一更新代码片段是基于所述第一补丁文件中相比于其所修复的原代码文件发生变化的代码得到的;
第一向量化模块,用于按照预定的向量转换规则将所述第一更新代码片段中的代码处理为第一向量;以及
预测模块,用于以所述第一向量作为预训练好的漏洞分类模型的输入,基于所述漏洞分类模型输出的漏洞分类结果,确定所述第一补丁文件所修复的漏洞类型。
14.一种训练漏洞分类模型的装置,其中,所述漏洞分类模型用于对补丁文件修复的漏洞类型进行分类,所述装置包括:
第二获取模块,用于获取已知修复的漏洞类型的N个第二补丁文件,其中,N为大于或等于1的整数;
第二提取模块,用于按照预处理规则提取每个所述第二补丁文件中的第二更新代码片段,其中,所述第二更新代码片段是基于所述第二补丁文件中相比于其所修复的原代码文件发生变化的代码得到的;
第二向量化模块,用于按照预定的向量转换规则将所述第二更新代码片段中的代码处理为第二向量;以及
训练模块,用于以每个所述第二补丁文件对应的漏洞类型的信息作为所述第二补丁文件对应的所述第二向量的标签,得一个样本数据;其中,N个所述第二补丁文件对应得到N个所述样本数据;以及利用N个所述样本数据组成的数据集,训练所述漏洞分类模型。
15.一种电子设备,包括:
一个或多个处理器;
一个或多个存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~12中任一项所述的方法。
16.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~12中任一项所述的方法。
17.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~12中任一项所述的方法。
CN202111381657.3A 2021-11-17 2021-11-17 漏洞分类方法、装置、设备及介质 Pending CN114117445A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111381657.3A CN114117445A (zh) 2021-11-17 2021-11-17 漏洞分类方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111381657.3A CN114117445A (zh) 2021-11-17 2021-11-17 漏洞分类方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN114117445A true CN114117445A (zh) 2022-03-01

Family

ID=80398134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111381657.3A Pending CN114117445A (zh) 2021-11-17 2021-11-17 漏洞分类方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN114117445A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117473511A (zh) * 2023-12-27 2024-01-30 中国联合网络通信集团有限公司 边缘节点漏洞数据处理方法、装置、设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117473511A (zh) * 2023-12-27 2024-01-30 中国联合网络通信集团有限公司 边缘节点漏洞数据处理方法、装置、设备及存储介质
CN117473511B (zh) * 2023-12-27 2024-04-02 中国联合网络通信集团有限公司 边缘节点漏洞数据处理方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US11157384B2 (en) Methods, systems, articles of manufacture and apparatus for code review assistance for dynamically typed languages
US11900261B2 (en) Transfer learning system for automated software engineering tasks
US11256879B2 (en) Translation synthesizer for analysis, amplification and remediation of linguistic data across a translation supply chain
KR20210092147A (ko) 텍스트의 엔티티 포커스의 마이닝 방법 및 장치
CN109977014B (zh) 基于区块链的代码错误识别方法、装置、设备及存储介质
US11615242B2 (en) Method and apparatus for structuring data, related computer device and medium
US11016740B2 (en) Systems and methods for virtual programming by artificial intelligence
US11675581B1 (en) Automated creation, testing, training, adaptation and deployment of new artificial intelligence (AI) models
US11176019B2 (en) Automated breakpoint creation
US11521087B2 (en) Method, electronic device, and computer program product for processing information
CN112860919A (zh) 基于生成模型的数据标注方法、装置、设备及存储介质
CN115062617A (zh) 基于提示学习的任务处理方法、装置、设备及介质
CN108932225B (zh) 用于将自然语言需求转换成为语义建模语言语句的方法和系统
CN114117445A (zh) 漏洞分类方法、装置、设备及介质
CN116720489B (zh) 页面填充方法及装置、电子设备和计算机可读存储介质
US20220051126A1 (en) Classification of erroneous cell data
US20230139642A1 (en) Method and apparatus for extracting skill label
US20230297784A1 (en) Automated decision modelling from text
CN114461499A (zh) 异常信息检测模型的构建方法和灰度环境异常检测方法
CN113448852A (zh) 一种测试案例的获取方法、装置、电子设备及存储介质
CN113806485B (zh) 一种基于小样本冷启动的意图识别方法、装置及可读介质
US20230325468A1 (en) Machine-learning system and method for predicting event tags
CN117290856B (zh) 基于软件自动化测试技术的智能测试管理系统
CN116302043B (zh) 代码维护问题检测方法、装置、电子设备及可读存储介质
US20240013004A1 (en) Automatic data card generation

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