CN117616439A - 用于检测软件漏洞修复的系统和方法 - Google Patents

用于检测软件漏洞修复的系统和方法 Download PDF

Info

Publication number
CN117616439A
CN117616439A CN202180100312.8A CN202180100312A CN117616439A CN 117616439 A CN117616439 A CN 117616439A CN 202180100312 A CN202180100312 A CN 202180100312A CN 117616439 A CN117616439 A CN 117616439A
Authority
CN
China
Prior art keywords
file
level
code
commit
vector
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
CN202180100312.8A
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN117616439A publication Critical patent/CN117616439A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0455Auto-encoder networks; Encoder-decoder networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

描述了用于检测和报告代码仓库中漏洞修复的方法和系统。从所述代码仓库获得的提交经过预处理以生成文件级令牌序列,每个令牌序列表示相应文件的文件级代码更改。通过将每个文件级令牌序列输入到转换器模型中,生成相应的文件级代码更改嵌入向量,每个文件级代码更改嵌入向量是所述相应文件的所述文件级代码更改的向量表示。所述文件级代码更改嵌入向量被组合成提交级代码更改嵌入向量,所述提交级代码更改嵌入向量表示包括在所述提交中的所有代码更改。通过将所述提交级代码更改嵌入向量输入分类器,生成预测的提交级漏洞修复分数。输出漏洞修复报告,所述漏洞修复报告包括所述提交的标识和所述预测的提交级漏洞修复分数。

Description

用于检测软件漏洞修复的系统和方法
技术领域
本发明涉及用于检测软件漏洞修复,尤其是用于自动检测代码仓库中的提交是否包括用于修复软件漏洞的代码的系统和方法。
背景技术
软件开发人员经常利用开源软件(open source software,OSS)作为开发新软件的基础。但是,任何OSS文件(例如,任何独立OSS软件、任何OSS例程或任何OSS子例程)中的任何漏洞也可能传播到使用该文件开发的任何软件。重要的是,在发现OSS文件中的漏洞之后,应尽快开发该漏洞的软件修复(也称为漏洞修复),提交到代码仓库,并将应用于所有受影响的软件(例如,使用该OSS代码开发的所有软件)。应用软件修复时的任何延迟都可能导致恶意方利用漏洞攻击受影响的软件。
现有的OSS漏洞管理方法称为响应披露模型。在这种方法中,文件的用户(即,使用OSS文件开发软件的用户)通常依赖于文件的开发人员(例如,OSS供应商)通过漏洞公告报告漏洞修复,以便可以向用户警报代码仓库中存在漏洞修复,并将漏洞修复应用于用户受影响的软件。当文件的用户不知道漏洞修复,或者对漏洞修复的了解不够快,无法避免对漏洞的可能利用时,就会出现问题。由于并非报告所有漏洞修复,这一问题会加剧。
因此,有用的是提供一个方案,可以检测代码仓库中是否存在漏洞修复,而不依赖漏洞公告。
发明内容
在各种示例中,本发明描述了能够自动检测和标识漏洞修复的系统和方法。特别是,漏洞修复是直接从提交中的代码行检测和标识的,而不是依赖漏洞公告或提交中的工件(artefact)。
所公开的系统和方法利用转换器模型来生成表示提交中的代码更改的嵌入向量。使用嵌入向量,分类器神经网络可以对提交是否为漏洞修复进行分类,并生成漏洞修复报告。这提供了如下技术优势:可以监控代码仓库,并且一旦漏洞修复提交到代码仓库,就可以从提交中的代码行中自动检测漏洞修复。
在一些示例中,所公开的系统和方法使用转换器模型来生成文件级代码更改嵌入向量,所述文件级代码更改嵌入向量表示提交中的文件级代码更改的语义含义。然后,文件级代码更改嵌入向量被组合成提交级代码更改嵌入向量,所述提交级代码更改嵌入向量表示提交中所有代码更改的语义含义。然后,经过训练的分类器处理提交级代码更改嵌入向量,以生成预测的漏洞修复分数,指示提交是漏洞修复的可能性。这样一来,给定提交是漏洞修复的可能性可以基于提交中的代码确定,而不是依赖漏洞公告或提交中的工件。
在一些示例中,可以生成漏洞修复报告,所述漏洞修复报告报告给定提交的预测的漏洞修复分数。漏洞修复报告还可以包括给定提交的漏洞修复信息,基于给定提交与已知漏洞修复(例如,从已知漏洞修复数据库中标识)的相似性。这可以提供如下技术优势:漏洞修复报告可以使用有用的信息自动填充,用户可以使用这些有用的信息来决定是否应用提交。
在一些示例中,所公开的系统和方法可以基于与已知漏洞修复的相似性来确定关于检测到的漏洞修复的信息。这提供了不仅可以自动检测漏洞修复,还可以自动标识检测到的漏洞修复的技术优势。
在示例性方面,本发明描述了一种方法,包括:从代码仓库获得提交;预处理所述提交以生成一个或多个文件级令牌序列,每个文件级令牌序列表示相应的一个或多个文件的至少一个文件级代码更改;通过将所述一个或多个文件级令牌序列中的每一个输入到转换器模型中,生成相应的一个或多个文件级代码更改嵌入向量,每个相应的文件级代码更改嵌入向量是所述相应文件的所述至少一个文件级代码更改的向量表示;将所述一个或多个文件级代码更改嵌入向量组合成提交级代码更改嵌入向量,所述提交级代码更改嵌入向量是包括在所述提交中的所有代码更改的向量表示;通过将所述提交级代码更改嵌入向量输入分类器,生成预测的提交级漏洞修复分数;输出漏洞修复报告,所述漏洞修复报告包括所述提交的标识和与所述提交关联的所述预测的提交级漏洞修复分数。
在所述方法的上述示例性方面中,所述方法还可以包括:从嵌入向量数据库中标识与所述提交级代码更改嵌入向量最相似的一个或多个嵌入向量,所述一个或多个标识的嵌入向量与相应的一个或多个唯一标识符关联;从已知漏洞修复数据库中标识对应于所述相应的一个或多个唯一标识符的一个或多个已知漏洞修复;从所述已知漏洞修复数据库中提取所述标识的一个或多个已知漏洞修复中的每一个的漏洞修复信息。所述提取的漏洞修复信息可以与所述提交关联,并包括在所述漏洞修复报告中。
在所述方法的任何上述示例性方面中,所述一个或多个文件级令牌序列中的每一个可以包括密钥令牌;所述转换器模型可以通过将给定文件级令牌序列中的每个令牌编码为相应的嵌入向量来处理每个给定的文件级令牌序列,其中,从所述密钥令牌编码的所述嵌入向量可以是所述给定文件级令牌序列的所述文件级代码更改嵌入向量。
在所述方法的上述示例性方面中,预处理所述提交可以包括:解析所述提交以提取给定文件的任何添加代码行,并将任何添加代码行令牌化为添加代码令牌序列;解析所述提交以提取所述给定文件的任何删除代码行,并将任何删除代码行令牌化为删除代码令牌序列;解析所述提交以提取任何代码描述,并将任何代码描述令牌化为描述令牌序列;级联所述描述令牌序列、所述添加代码令牌序列和所述删除代码令牌序列,并附加所述密钥令牌,以生成表示所述给定文件的代码更改的所述文件级令牌序列。
在所述方法的任何上述示例性方面中,所述方法还可以包括:监控所述代码仓库以检测对所述代码仓库新提交的任何提交;响应于检测到所述提交是新提交,从所述代码仓库获得所述提交。
在所述方法的任何上述示例性方面中,所述转换器模型可以从预训练的语言模型中微调,所述预训练的语言模型已经过预训练以生成表示人类语言的嵌入向量。所述转换器模型可以经过微调以生成表示软件代码更改的所述一个或多个文件级代码更改嵌入向量。
在所述方法的上述示例性方面中,所述方法还可以包括,在从所述代码仓库获得所述提交之前:从所述预训练的语言模型微调所述转换器模型,以使用训练数据集生成文件级代码更改嵌入向量;使用所述训练数据集训练所述分类器以生成提交级漏洞修复分数。
在所述方法的任何上述示例性方面中,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量可以包括对所述一个或多个文件级代码更改嵌入向量进行平均。
在所述方法的任何上述示例性方面中,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量可以包括:对于所述提交级代码更改嵌入向量的每个向量元素,在所有所述一个或多个文件级代码更改嵌入向量中取对应向量元素的最大值。
在另一示例性方面,本发明描述了一种系统,包括:处理单元,用于执行指令以使所述系统:从代码仓库获得提交;预处理所述提交以生成一个或多个文件级令牌序列,每个文件级令牌序列表示相应的一个或多个文件的至少一个文件级代码更改;通过将所述一个或多个文件级令牌序列中的每一个输入到转换器模型中,生成相应的一个或多个文件级代码更改嵌入向量,每个相应的文件级代码更改嵌入向量是所述相应文件的所述至少一个文件级代码更改的向量表示;将所述一个或多个文件级代码更改嵌入向量组合成提交级代码更改嵌入向量,所述提交级代码更改嵌入向量是包括在所述提交中的所有代码更改的向量表示;通过将所述提交级代码更改嵌入向量输入分类器,生成预测的提交级漏洞修复分数;输出漏洞修复报告,所述漏洞修复报告包括所述提交的标识和与所述提交关联的所述预测的提交级漏洞修复分数。
在所述系统的上述示例性方面中,所述处理单元还可以用于执行指令以使所述系统:从嵌入向量数据库中标识与所述提交级代码更改嵌入向量最相似的一个或多个嵌入向量,所述一个或多个标识的嵌入向量与相应的一个或多个唯一标识符关联;从已知漏洞修复数据库中标识对应于所述相应的一个或多个唯一标识符的一个或多个已知漏洞修复;从所述已知漏洞修复数据库中提取所述标识的一个或多个已知漏洞修复中的每一个的漏洞修复信息。所述提取的漏洞修复信息可以与所述提交关联,并包括在所述漏洞修复报告中。
在所述系统的任何上述示例性方面中,所述一个或多个文件级令牌序列中的每一个可以包括密钥令牌;所述转换器模型可以通过将给定文件级令牌序列中的每个令牌编码为相应的嵌入向量来处理每个给定的文件级令牌序列。从所述密钥令牌编码的所述嵌入向量可以是所述给定文件级令牌序列的所述文件级代码更改嵌入向量。
在所述系统的上述示例性方面中,所述处理单元还可以用于执行指令以使所述系统通过以下方式预处理所述提交:解析所述提交以提取给定文件的任何添加代码行,并将任何添加代码行令牌化为添加代码令牌序列;解析所述提交以提取所述给定文件的任何删除代码行,并将任何删除代码行令牌化为删除代码令牌序列;解析所述提交以提取任何代码描述,并将任何代码描述令牌化为描述令牌序列;级联所述描述令牌序列、所述添加代码令牌序列和所述删除代码令牌序列,并附加所述密钥令牌,以生成表示所述给定文件的代码更改的所述文件级令牌序列。
在所述系统的任何上述示例性方面中,所述处理单元还可以用于执行指令以使所述系统:监控所述代码仓库以检测对所述代码仓库新提交的任何提交;响应于检测到所述提交是新提交,从所述代码仓库获得所述提交。
在所述系统的上述示例性方面中,所述系统可以是用于监控所述代码仓库的监控系统的一部分。
在所述系统的任何上述示例性方面中,所述转换器模型可以从预训练的语言模型中微调,所述预训练的语言模型已经过预训练以生成表示人类语言的嵌入向量。所述转换器模型可以经过微调以生成表示软件代码更改的所述一个或多个文件级代码更改嵌入向量。
在所述系统的上述示例性方面中,所述处理单元还可以用于执行指令以使所述系统在从所述代码仓库获得所述提交之前:从所述预训练的语言模型微调所述转换器模型,以使用训练数据集生成文件级代码更改嵌入向量;使用所述训练数据集训练所述分类器以生成提交级漏洞修复分数。
在所述系统的任何上述示例性方面中,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量可以包括对所述一个或多个文件级代码更改嵌入向量进行平均。
在所述系统的任何上述示例性方面中,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量可以包括:对于所述提交级代码更改嵌入向量的每个向量元素,在所有所述一个或多个文件级代码更改嵌入向量中取对应向量元素的最大值。
在另一个示例性方面中,本发明描述了一种计算机可读介质,其上编码指令,其中,所述指令由系统的处理单元执行时,使所述系统执行所述方法的任何上述示例性方面。
在另一个示例性方面中,本发明描述了一种计算机程序,包括指令,所述指令由计算机执行时,使所述计算机执行所述方法的任何上述示例性方面。
附图说明
现在将通过示例参考示出本申请的示例性实施例的附图,其中:
图1是本发明的示例提供的示例性漏洞修复检测系统的示例性框图;
图2是本发明的示例提供的可用于实现漏洞修复检测系统的示例性计算系统的框图;
图3是本发明的示例提供的用于训练漏洞修复检测系统的转换器模型的示例性方法的流程图;
图4是根据本发明的示例,文件级令牌序列如何由转换器模型处理为嵌入向量的示例的简化图;
图5是本发明的示例提供的用于训练漏洞修复检测系统的分类器的示例性方法的流程图;
图6是本发明的示例提供的用于检测和报告漏洞修复的示例性方法的流程图。
不同附图中可以使用相同的附图标记来表示相同的组件。
具体实施方式
为了帮助理解本发明,首先介绍一些术语。开源软件(open source software,OSS)也可以称为开源组件或开源库,是指公开供任何人使用的文件(例如,一个软件、例程、子例程等)。文件通常包括一行或多行代码。OSS通常可通过代码仓库公开访问。
在代码仓库的上下文中,提交是指对仓库中文件的更新。提交通常包括:提交消息,所述提交消息可以包括关于提交目的的信息;正在更新的文件的标识(例如,文件名);以及提交正在应用的代码更改。例如,提交中包括的代码更改可以是要添加到文件中的一行代码,也可以是要从文件中删除的一行代码。提交通常仅包括受更新影响的一个或多个代码行(例如,仅包括从文件中删除的一个或多个代码行和/或添加到文件中的一个或多个代码行)。需要说明的是,提交中包括的一个或多个代码行通常不能用作独立代码。提交还可以包括工件(artefact/artifact)。在软件开发中,工件是指与软件开发相关的信息,但不是软件本身。例如,软件文档是一种工件。在提交的情况下,提交相关工件可以包括提交本身中包括的提交消息,以及描述提交修复的漏洞的任何报告。
现在提供OSS中漏洞管理的一些背景。为修复特定文件中的给定漏洞而开发的提交可以称为漏洞修复。使用该特定文件开发的任何软件都可能受到给定漏洞的影响。将漏洞修复应用于受影响的软件会导致应用提交中的代码更改。应用漏洞修复可能要求特定文件的用户首先知道代码仓库中漏洞修复的可用性。响应披露(也称为协调漏洞披露)是一种现有的漏洞披露方法,在这种方法中,只有在允许开发和发布漏洞修复的一段时间后,漏洞(或其它待修复的问题)才会向用户(可能还有其他公众成员)披露。
在OSS漏洞管理的背景下,响应披露方法可以从文件的开发人员(例如OSS供应商)标识该文件中的漏洞开始。在开发漏洞修复之前,漏洞的标识是保密的(即不向公众披露)。漏洞修复集成到文件的新版本中,并提交到代码仓库。开发人员发布公告,以披露漏洞和相关漏洞修复。受影响文件的用户依赖漏洞公告来了解漏洞和相关漏洞修复。然后,用户将漏洞修复应用于他们自己的受影响软件(即,使用受影响文件开发的软件)。响应披露方法的一个问题是,用户必须监控漏洞公告(例如,使用美国国家漏洞数据库(NationalVulnerability Database,NVD)),以了解漏洞和相关漏洞修复。如果恶意方比用户更密切地监控漏洞公告,或者能够在漏洞公告中披露之前标识代码仓库中的漏洞修复,则恶意方可能会在用户之前就知道漏洞,并可能会在用户应用相关漏洞修复之前利用漏洞。并非所有漏洞修复都在公告中披露,这意味着用户可能不知道未报告的漏洞和相关漏洞修复,从而加剧此问题。
另一种现有的漏洞管理方法是使用指示漏洞的提交相关工件来标识漏洞修复。例如,给定提交的提交消息中存在漏洞相关或安全相关词语可用于将给定提交标识为漏洞修复。但是,这种方法的缺点是,并非所有漏洞修复都提交了包括漏洞相关信息的相关工件。特别是,由于响应披露方法中漏洞应秘密修复的原则,通常做法是提交消息不包括任何安全相关或漏洞相关词语。
在各种示例中,本发明能够检测代码仓库中的漏洞修复,而不依赖于安全公告或提交相关的工件。而是,本文描述的系统和方法能够通过直接分析提交中包括的代码更改,将代码仓库中的提交检测为漏洞修复。
图1是示例性漏洞修复检测系统100的框图。漏洞修复检测系统100可以在单个物理机或设备中实现(例如,实现为单个计算设备,例如单个工作站、单个服务器等),或者可以使用多个物理机或设备实现(例如,实现为服务器集群)。例如,漏洞修复检测系统100可以实现为虚拟机或基于云的服务(例如,使用提供计算资源虚拟化池的云计算平台实现)。
漏洞修复检测系统100与代码仓库10、已知漏洞修复数据库20、漏洞修复嵌入向量数据库160以及可选的一个或多个用户设备(未示出)通信(例如,通过网络)。
代码仓库10存储用户可以访问的文件(例如,在OSS仓库的情况下,可公开访问),用户可以使用任何文件来开发自己的软件。对文件的更新可以以提交的形式提交到代码仓库10。虽然图1中示出了单个代码仓库10,但应当理解,漏洞修复检测系统100可以与多个代码仓库10中的漏洞修复通信并检测漏洞修复。
已知漏洞修复数据库20包括关于已知漏洞修复的信息(例如,以存储关于相应漏洞修复的信息的记录的形式)。关于每个已知漏洞修复的信息可以包括标识相应漏洞修复的唯一标识符(identifier,ID)(例如,唯一记录ID),以及描述由相应漏洞修复应用的相关漏洞和/或修复的信息(例如,以文本串的形式)。已知漏洞修复数据库20还可以包括关于没有相关漏洞修复的已知漏洞的信息。虽然图1中示出了单个已知漏洞修复数据库20,但应当理解,漏洞修复检测系统100可以与多个已知漏洞修复数据库20通信并从多个已知漏洞修复数据库20中提取信息。已知漏洞修复数据库20的示例包括NVD和通用漏洞披露(CommonVulnerabilities and Exposures,CVE)系统等等。包括在已知漏洞修复数据库20中的信息可以是任何合适的格式。
漏洞修复嵌入向量数据库160包括表示已知漏洞修复的嵌入向量。存储在漏洞修复嵌入向量数据库160中的每个嵌入向量表示已知(例如,在已知漏洞修复数据库20中标识)为漏洞修复的相应提交中代码更改的语义含义。在向量空间中彼此接近的嵌入向量可以被认为是相似的嵌入向量,并表示语义相似的代码更改。如下文将进一步讨论的,漏洞修复嵌入向量数据库160中的嵌入向量可以由漏洞修复检测系统100生成,例如在训练阶段期间(即,在漏洞修复检测系统100的训练期间,特别是如下所述的转换器模型和分类器的训练)和/或在应用阶段期间(即,在执行训练的漏洞修复检测系统100期间)生成。漏洞修复嵌入向量数据库160中的每个嵌入向量与唯一ID(其可以与已知漏洞修复数据库20中使用的记录ID相同)关联,该ID可用于引用已知漏洞修复数据库20。
在本示例中,漏洞修复检测系统100包括子系统,所述子系统包括代码更改预处理器110、转换器模型120、聚合器130、分类器140和报告生成器150。虽然图1示出了漏洞修复检测系统100的某些子系统,但应当理解,这并不意欲限制,并且漏洞修复检测系统100可以包括更多或更少数量的子系统(并且可以根本不包括任何子系统)。描述为由特定子系统执行的功能可以由不同子系统执行,和/或可以是整个漏洞修复检测系统100的功能。下文将更详细地讨论漏洞修复检测系统100的操作。
图2是在一些实施例中可用于实现漏洞修复检测系统100的简化示例性计算系统200的框图。例如,计算系统200可以表示服务器或工作站。如前所述,漏洞修复检测系统100可以在其它硬件配置中实现,包括使用多个计算机系统的实现。虽然图2示出了每个组件的单个实例,但是在计算系统200中可能存在每个组件的多个实例。计算系统200可用于执行用于训练神经网络和/或用于执行训练的神经网络的指令,如下文进一步讨论。
在本示例中,计算系统200包括至少一个处理单元202,例如处理器、微处理器、数字信号处理器、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)、专用逻辑电路、专用人工智能处理单元、图形处理单元(graphics processing unit,GPU)、张量处理单元(tensorprocessing unit,TPU)、神经处理单元(neural processing unit,NPU)、硬件加速器,或其组合。
计算系统200可以包括输入/输出(input/output,I/O)接口204,所述I/O接口204可以支持与输入设备和/或输出设备(未示出)连接。
计算系统100可以包括用于与其它计算系统(例如,代码仓库10、已知漏洞修复数据库20、漏洞修复嵌入向量数据库160等)进行有线或无线通信的网络接口206。网络接口206可以包括用于网络内和/或网络间通信的有线链路(例如,以太网线)和/或无线链路(例如,一个或多个天线)。网络接口206还可以使计算系统200能够将生成的报告发送到另一个计算系统(例如,发送到用户设备)。
计算系统200可以包括存储单元208,所述存储单元208可以包括固态驱动器、硬盘驱动器、磁盘驱动器和/或光盘驱动器等大容量存储单元。
计算系统200可以包括存储器210,所述存储器210可以包括易失性或非易失性存储器(例如,闪存、随机存取存储器(random access memory,RAM)和/或只读存储器(read-only memory,ROM))。非瞬时性存储器210可以存储由处理单元202执行的指令,例如,以执行本发明中描述的示例性实施例。例如,存储器210可以存储用于实现漏洞修复检测系统100以及本文公开的任何方法的指令212。存储器210还可以存储神经网络参数214,所述神经网络参数214可以是从训练神经网络学习到的参数,如下文进一步描述。存储器210可以包括其它软件指令,例如用于实现操作系统和其它应用/函数的软件指令。
另外或或者,计算系统200可以执行来自外部存储器(例如,与服务器有线或无线通信的外部驱动器)的指令,或者可以由瞬时性或非瞬时性计算机可读介质提供可执行指令。非瞬时性计算机可读介质的示例包括RAM、ROM、可擦除可编程ROM(erasableprogrammable ROM,EPROM)、电可擦除可编程ROM(electrically erasable programmableROM,EEPROM)、闪存、CD-ROM或其它便携式存储器。
再次参考图1。漏洞修复检测系统100的一些子系统可以使用神经网络实现,所述神经网络使用机器学习技术进行训练。例如,转换器模型120可以使用神经网络实现,分类器140可以使用另一个神经网络实现。在应用漏洞修复检测系统100之前(即,在使用漏洞修复检测系统100检测代码仓库10中的漏洞修复之前),可以使用机器学习技术训练漏洞修复检测系统100。
漏洞修复检测系统100的训练可以被认为分两个阶段进行,其中,首先训练转换器模型120,然后训练分类器140。漏洞修复检测系统100的训练可以由计算系统(例如,计算系统200)执行,在同一计算系统上,在应用阶段执行训练的漏洞修复检测系统100。或者,漏洞修复检测系统100的训练和应用可以由不同的计算系统执行。
图3是用于训练转换器模型120的示例性方法300的流程图。方法300可以由用于执行训练神经网络所需的计算的任何计算系统(例如,计算系统200)执行。转换器模型120的训练可以涉及微调(即,训练)预训练的语言模型(例如,先前已经过训练以生成人类语言的语义表示的神经网络)以生成表示提交中的文件级代码更改的嵌入向量(即,潜在向量空间中的向量表示)。文件级代码更改是指影响给定文件的给定提交中的所有代码更改(因为给定提交可能包括一个或多个文件的代码更改)。
在302中,接收到与地面真相标签关联的提交。接收到的提交可以是地面真相标签可用的任何提交,以指示提交是否为漏洞修复。例如,来自已知漏洞修复数据库20的信息可用于创建训练数据集,所述训练数据集包括已知是漏洞修复的提交和已知不是漏洞修复的提交。然后,可以在302中对训练数据集中的提交进行采样。
在304中,执行预处理(例如,使用代码更改预处理器110),以从提交生成表示一个或多个文件级代码更改的文件级令牌序列。如果有多个受提交影响的文件,则可以生成相应的多个文件级令牌序列。
预处理可以涉及首先从提交中提取一个或多个文件级代码更改。例如,代码更改预处理器110可以解析提交以标识(例如,基于已知代码语法)并提取与一个或多个代码更改相关的一个或多个代码行。一个或多个提取的代码行可以由受影响的文件分隔(例如,分组到单独的代码更改文档中,其中,每个代码更改文档包括提交中影响单个文件的所有代码更改)。此外,给定文件的一个或多个文件级代码更改可以被分组(例如,级联)为文件级添加代码行(也称为添加代码段)和文件级删除代码行(也称为删除代码段)。
然后,对添加代码段和删除代码段执行令牌化(例如,类似于通常在自然语言处理(natural language processing,NLP)算法中执行的令牌化,但适于包括编码中使用的符号),以分别为受提交影响的每个文件生成添加代码令牌和删除代码令牌的序列。为了考虑编码中通常使用的语法,令牌化可以将单个驼峰命名法样式令牌(即,从单个驼峰命名法词语生成的单个令牌,例如“addData”)拆分为单独的令牌(例如,“addData”可以拆分为两个令牌“add”和“Data”),类似地,单个蛇形命名法样式令牌(即,从单个蛇形命名法词语生成的单个令牌,例如“add_data”)也可以被拆分为单独的令牌(例如,“add_data”可以被拆分为两个令牌“add”和“data”)。应当理解,根据提交的已知代码语法,可以使用其它令牌化技术将代码段令牌化。
可以提取描述代码更改的信息。例如,可以提取提交中包括的代码注释和提交消息。在一些提交中,提交消息可以包括指向可用问题报告的链接(或其它引用)。可以使用链接(或其它引用)访问问题报告,也可以提取问题报告中包括的描述。提取的代码注释和提交消息(以及可选的问题报告描述)可以合并(例如,级联)作为代码更改的描述。需要说明的是,描述可以是对提交的一般描述,并且可以不是针对每个受影响的文件的特定描述(即,描述可以不是文件级描述)。然后,将描述令牌化为描述令牌序列。
然后,将与单个文件相关的描述令牌序列、添加代码令牌序列和删除代码令牌序列组合起来,以生成该文件的文件级令牌序列。如果有多个受提交影响的文件,则生成相应的多个文件级令牌序列。
在一个示例中,添加特殊令牌(例如,分类令牌[CLS]、分隔符令牌[SEP]和句末令牌[EOS])以分离描述令牌序列、添加代码令牌序列和删除代码令牌序列中的每一个,如图4所示(下文进一步讨论)。例如,[CLS]令牌可以附加到文件级令牌序列的前面;[SEP]令牌可以插入描述令牌序列与添加代码令牌序列之间,以及添加代码令牌序列与删除代码令牌序列之间;[EOS]令牌可以附加到文件级令牌序列的末尾。应当理解,这是示例性的,并且可以采用组合描述令牌序列、添加代码令牌序列和删除代码令牌序列的其它方式(例如,级联的其它方式)。所得到的文件级令牌序列可以包括至少一个密钥令牌(例如,不是提交的令牌化结果的令牌,例如附加的[CLS]令牌),所述至少一个密钥令牌可以编码到表示整个文件级令牌序列的语义含义的嵌入向量中,如下面进一步讨论的。
在306中,将每个文件级令牌序列输入到转换器模型120中,以生成相应的文件级代码更改嵌入向量(也称为文件级上下文嵌入或文件级上下文嵌入向量)。在一些示例中,转换器令牌器可用于将文件级令牌序列预处理为输入嵌入向量,该输入嵌入向量被输入到转换器模型120。
转换器模型120可以是预训练的神经网络模型,例如预训练的语言模型(例如,来自转换器的双向编码器表示(bidirectional encoder representations fromtransformers,BERT))。预训练的语言模型已经在人类语言语料库上训练,将令牌化句子编码为表示句子语义含义的嵌入向量。但是,由于软件代码的语法和语义含义不等同于人类语言,因此应进一步训练(或微调)预训练的语言模型,以正确地将令牌化代码段编码为表示代码段的语义含义的嵌入向量。此外,应当理解,本发明中的转换器模型120经过训练以生成表示提交中文件级代码更改的语义含义的嵌入向量,这是与生成表示软件功能的语义含义的嵌入向量不同的任务。
转换器模型120对输入的文件级令牌序列进行编码,并生成嵌入向量序列(例如,为文件级令牌序列中的每个令牌生成嵌入向量)。特别是,文件级令牌序列中的密钥令牌(例如,[CLS]令牌)被编码为嵌入向量,所述嵌入向量表示由文件级令牌序列表示的文件级代码更改的总体语义含义。相应地,从密钥令牌生成的嵌入向量可以称为文件级代码更改嵌入向量。文件级代码更改嵌入向量表示提交的文件级代码更改中任何删除代码行与任何添加代码行之间的语义相关性。图4中示出了这方面的一个示例。
在图4的示例中,转换器模型120的输入是文件级令牌序列410,所述文件级令牌序列410包括由特殊令牌418(包括密钥令牌[CLS])分隔的描述令牌序列412、添加代码令牌序列414和删除代码令牌序列416。应当理解,文件级令牌序列410中的令牌可以以与本示例中所示的顺序不同的顺序排列。转换器模型120处理(例如,前向传播)文件级令牌序列410并输出嵌入向量序列420(也称为上下文嵌入(contextual embedding,CE))。在本示例中,表示为CET1……CETi的嵌入向量对应于描述令牌序列412的每个令牌(表示为T1……Ti);表示为CETi+1……CETn的嵌入向量对应于添加代码令牌序列414的每个令牌(表示为Ti+1……Tj);表示为CETj+1……CETk的嵌入向量对应于删除代码令牌序列416的每个令牌(表示为Tj+1……Tk);表示为CEf、CE[SEP]和CE[EOS]的嵌入向量对应于每个相应的特殊令牌418(即,[CLS]、[SEP]和[EOS]令牌)。特别是,编码密钥令牌[CLS]的嵌入向量CEf被认为表示文件级代码更改(由文件级令牌序列410表示)的总体语义含义。因此,向量表示CEf在本文称为文件级代码更改嵌入向量422。
再次参考图3。在308中,将文件级代码更改嵌入向量输入到生成预测的漏洞修复分数的至少一个神经网络层。如果存在多个文件级代码更改嵌入向量(对应于多个受提交影响的文件),则为每个文件级代码更改嵌入向量生成相应预测的漏洞修复分数。
在一个示例中,文件级代码更改嵌入向量被输入到全连接层,然后是输出层(例如,softmax层)。输出层的输出是一个分数,它表示由文件级代码更改嵌入向量表示的文件级代码更改用于修复相关文件中的漏洞的概率。
在310中,使用预测的漏洞修复分数和与提交关联的地面真相标签计算交叉熵损失。然后,反向传播算法用于基于计算损失的梯度更新转换器模型120的参数(例如,权重)(即,最小化计算损失)。如果已经为提交中的相应多个文件级代码更改预测多个漏洞修复分数,则可以为每个预测的漏洞修复分数计算交叉熵损失,或者可以使用聚合(例如,平均)的预测的漏洞修复分数计算聚合交叉熵损失。
步骤302至310可以迭代(每次迭代都从训练数据集采样新提交),直到满足收敛条件。例如,收敛条件可以是交叉熵损失收敛、转换器模型120的参数收敛和/或已经达到最大迭代次数。
在满足收敛条件之后,方法300进行到312。在312中,存储转换器模型120的学习参数(例如,作为神经网络参数214存储在计算系统200的存储器210中)。在一些示例中,如果执行训练的计算系统不同于执行训练的转换器模型120的计算系统,则学习参数可以(例如,通过网络)发送到执行训练的转换器模型120的计算系统。
在转换器模型120被充分训练之后(例如,使用方法300),转换器模型120的学习参数被固定。然后训练分类器140。
图5是用于训练分类器140的示例性方法500的流程图。方法500可以由用于执行训练神经网络所需的计算的任何计算系统(例如,计算系统200)执行。分类器140经过训练以预测给定的提交是否用于修复漏洞。
步骤502至506与前面描述的步骤302至306类似,在此不再赘述。
在508中,给定提交(即,在步骤502中接收的给定提交)的所有文件级代码更改嵌入向量被组合成单个提交级代码更改嵌入向量。例如,步骤508可以使用聚合器130执行。
可以使用各种技术来组合一个或多个文件级代码更改嵌入向量。例如,可以定义代码更改嵌入矩阵,其中,每个文件级代码更改嵌入向量形成代码更改嵌入矩阵的相应行(需要说明的是,由转换器模型120生成的所有文件级代码更改嵌入向量具有相同的向量长度)。然后,提交级代码更改嵌入向量可以通过取代码更改嵌入矩阵的每列的平均值来生成(因此,提交级代码更改嵌入向量是对一个或多个文件级代码更改嵌入向量平均的结果);或通过取代码更改嵌入矩阵的每列中的最大值来生成(因此,提交级代码更改嵌入向量的每个向量元素是所有文件级代码更改嵌入向量中对应向量元素的最大值)。其它聚合技术可用于生成提交级代码更改嵌入向量。此外,提交级代码更改嵌入向量可以具有,也可以不具有与一个或多个文件级代码更改嵌入向量相同的向量长度。例如,可以通过将一个或多个文件级代码更改嵌入向量的平均列值与一个或多个文件级代码更改嵌入向量的最大列值级联来生成提交级代码更改嵌入向量。
如果已知提交是漏洞修复(例如,在步骤502中接收的与提交关联的地面真相标签指示漏洞修复),则在步骤508中生成的提交级代码更改嵌入向量也可以存储在漏洞修复嵌入向量数据库160中。
在510中,将提交级代码更改嵌入向量输入到分类器140,以生成预测的提交级漏洞修复分数。分类器140可以具有适合执行分类任务的任何神经网络架构(例如,全连接神经网络(fully connected neural network,FCNN))。预测的提交级漏洞修复分数可以是数值(例如,从0.00到1.00),所述数值表示提交(在步骤502中接收)包括修复至少一个受影响文件的漏洞的代码更改的概率;分数越高,提交是漏洞修复的可能性越高。
在512中,使用预测的提交级漏洞修复分数和与提交关联的地面真相标签计算交叉熵损失。然后,反向传播算法用于基于计算损失的梯度更新分类器140的参数(例如,权重)(即,最小化计算损失)。
步骤502至512可以迭代(每次迭代都从训练数据集采样新提交),直到满足收敛条件。例如,收敛条件可以是交叉熵损失收敛、分类器140的参数收敛和/或已经达到最大迭代次数。
在满足收敛条件之后,方法500进行到514。在514中,存储分类器140的学习参数(例如,作为神经网络参数214存储在计算系统200的存储器210中)。在一些示例中,如果执行训练的计算系统不同于执行训练的分类器140的计算系统,则学习参数可以(例如,通过网络)发送到执行训练的分类器140的计算系统。
在转换器模型120和分类器140都被充分训练之后(例如,分别使用方法300和500),转换器模型120和分类器140的学习参数被固定。漏洞修复检测系统100现在被认为经过充分训练,并且可以在应用阶段用来检测代码仓库10中存在的漏洞修复。
图6是用于检测和报告代码仓库10中的提交是否为漏洞修复的示例性方法600的流程图。方法600可以由用于执行计算的任何计算系统(例如,计算系统200)执行,所述计算是执行神经网络(例如,用于执行漏洞修复检测系统100中的转换器模型120和分类器140)所需的。
可选地,在602中,可以监控代码仓库10中添加到代码仓库10的任何新提交。例如,漏洞修复检测系统100可以集成到自动监控服务(例如,基于云的服务)中,以监控添加到OSS仓库的每个新提交。可以使用各种技术来监控代码仓库10的新提交,并且不需要详细讨论。可以监控一个或多个代码仓库10;但是,为了简单起见,下面的讨论将参考单个代码仓库10。
在一些示例中,可以不执行步骤602。例如,漏洞修复检测系统100可以不是自动监控服务的一部分,但当在代码仓库10中检测到新提交时,可以由自动监控服务调用。在另一个示例中,用户可以标识代码仓库10中的新提交,并使用漏洞修复检测系统100来确定新提交是否为漏洞修复。
在604中,从代码仓库10获得提交。例如,从步骤602中的监控中发现的新提交可以从代码仓库10获得(例如,下载)。在另一个示例中,用户已经从代码仓库10下载的新提交可以被提供(例如,上传)到漏洞修复检测系统100。与用于训练的提交(例如,在方法300和500中)不同,在步骤604中获得的提交缺少指示提交是否为漏洞修复的任何标签。
在一些示例中,在步骤604中从代码仓库10获得多个提交(或提交集合)。例如,如果代码仓库10的监控以规律的间隔(例如,每天在预定义的时间)执行,则在每个间隔发现的所有新提交可以作为新提交集合获得。为简单起见,下面的讨论描述了用于处理单个提交的操作,但应当理解,这可以推广到处理提交集合。
在606中,执行预处理(例如,使用代码更改预处理器110),以从提交生成表示一个或多个文件级代码更改的文件级令牌序列。如果有多个受提交影响的文件,则可以生成相应的多个文件级令牌序列。例如,每个文件级令牌序列可以包括描述令牌序列、添加代码令牌序列和删除代码令牌序列,这些序列从提交中被令牌化。特别是,由预处理生成的每个文件级令牌序列包括密钥令牌(例如,附加到每个文件级令牌序列前面的[CLS]令牌)。该预处理可以使用与上文关于步骤304描述的操作类似的操作来执行,其细节在此不需要重复。
在608中,将每个文件级令牌序列输入到转换器模型120中(例如,使用来自方法300的学习参数执行),以生成相应的文件级代码更改嵌入向量。在一些示例中,转换器令牌器可用于将文件级令牌序列预处理为输入嵌入向量,该输入嵌入向量被输入到转换器模型120。如果提交影响多个文件,则生成相应的多个文件级代码更改嵌入向量。每个文件级代码更改嵌入向量是提交中相应的文件级代码更改的向量表示,并编码影响相关文件的代码更改的语义含义。
特别是,文件级令牌序列中的密钥令牌(例如,[CLS]令牌)由转换器模型120编码为文件级代码更改嵌入向量,所述文件级代码更改嵌入向量表示由文件级令牌序列表示的文件级代码更改的总体语义含义。
在610中,将在步骤604中获得的每个给定提交的所有文件级代码更改嵌入向量组合成单个提交级代码更改嵌入向量。例如,步骤610可以使用聚合器130,使用任何合适的组合技术(例如,如上文关于步骤508讨论的)执行。提交级代码更改嵌入向量是提交中包括的所有代码更改(即,对所有受影响文件的所有代码更改)的向量表示。提交级代码更改嵌入向量对提交中代码更改的语义含义进行编码。
在612中,将提交级代码更改嵌入向量输入到分类器140中(例如,使用来自方法500的学习参数执行),从而为在步骤604中获得的每个给定提交生成预测的提交级漏洞修复分数。预测的提交级漏洞修复分数可以是数值(例如,从0.00到1.00),所述数值表示提交包括修复至少一个受影响文件的漏洞的代码更改的概率;分数越高,提交是漏洞修复的可能性越高。
可选地,可以执行步骤614至616以提取漏洞修复信息,所述漏洞修复信息可以包括在漏洞修复报告中。在一些示例中,步骤614至616可以仅针对具有超过预定义阈值(例如,具有高于0.50或高于0.75的分数)的预测的漏洞修复分数的提交执行。如果省略步骤614至616,则漏洞修复报告可以仅提供预测的漏洞修复分数。
在614中,标识与每个给定提交最相似的一个或多个已知漏洞修复。特别是,基于给定提交的提交级代码更改嵌入向量与存储在漏洞修复嵌入向量数据库160中的嵌入向量之间的相似性,标识与给定提交最相似的一个或多个已知漏洞修复。
存储在漏洞修复嵌入向量数据库160中的嵌入向量,是从已知漏洞修复(例如,在已知漏洞修复数据库20中标识的漏洞修复)生成的提交级代码更改嵌入向量。例如,已知漏洞修复数据库20中的提交可以由漏洞修复检测系统100处理,以生成相应的提交级代码更改嵌入向量,然后将其存储在漏洞修复嵌入向量数据库160中。在一些示例中,存储在漏洞修复嵌入向量数据库160中的嵌入向量可以作为训练分类器140的一部分(例如,在上述步骤508中)生成。
给定提交的提交级代码更改嵌入向量与漏洞修复嵌入向量数据库160中的嵌入向量之间的相似性可以使用任何合适的技术来计算,例如基于向量之间的距离(例如,欧几里德距离)或基于向量之间的相关性(例如,点积),等等。
如果漏洞修复嵌入向量数据库160中的嵌入向量被标识为类似于提交级代码更改嵌入向量,这表示标识的嵌入向量表示具有代码更改的提交,所述代码更改在语义上类似于由给定提交的提交级代码更改嵌入向量所表示的代码更改。可以标识漏洞修复嵌入向量数据库160中前N个(其中,N是预选的非零正整数)最相似的嵌入向量。每个标识的最相似的嵌入向量与相应的唯一ID关联,所述唯一ID可用于引用已知漏洞修复数据库20,以便标识对应的已知漏洞修复。通过这种方式,可以为每个给定提交标识一个或多个(例如,前N个)最相似的已知漏洞修复。
在616中,从已知漏洞修复数据库20中提取关于标识的一个或多个最相似的已知漏洞修复的信息。如前所述,每个标识的最相似的嵌入向量都与相应的唯一ID关联。这些唯一ID可用于引用已知漏洞修复数据库20,以提取对应的漏洞修复信息(例如,正在修复的漏洞的文本描述和修复的方式)。如果为给定的提交标识了一个以上最相似的已知漏洞修复,则可以从对应的一个以上已知漏洞修复记录中提取漏洞修复信息。
在618中,漏洞修复检测系统100生成并输出漏洞修复报告(例如,使用报告生成器150)。例如,漏洞修复报告可以输出到与OSS用户关联的终端。在一些示例中,漏洞修复报告可以输出到报告仓库(例如,漏洞披露公告的仓库),并且可以被视为等同于通常由OSS供应商发布的漏洞公告。
漏洞修复报告可以格式化为表,其中,表中的每一行对应于给定的提交。如果漏洞修复检测系统100处理多个提交(例如,在步骤604中获得了新提交集合),则每个提交可以是表中的相应行。对于每个提交,漏洞修复报告可以包括标识代码仓库10中的提交的唯一ID,以及该提交的预测的漏洞修复分数。如果在步骤604中获得多个提交(例如,新提交集合),则可以按照预测的漏洞修复分数的顺序在报告中对提交排名。在另一个示例中,预测的漏洞修复分数高于预定义阈值(例如,高于0.50分、高于0.75分或更高)的任何提交都可以在报告中指示(例如,使用二进制标志或标签)为可能的漏洞修复。可以使用其它方法来指示检测到可能的漏洞修复。
如果提取了关于一个或多个相似的已知漏洞修复的信息(例如,使用步骤614至616),则漏洞修复信息也可以包括在报告中(例如,如果报告是表格式,则表可以包括列,所述列包括每个相应行中提交的漏洞修复信息)。在报告中包括漏洞修复信息可以帮助用户了解给定提交正在修复的漏洞和/或修复漏洞的方式。漏洞修复信息可以使用户决定是否将给定的提交应用于用户受影响的软件。
在一些示例中,如果在步骤612中已经预测给定提交的高提交级漏洞修复分数,则该给定提交的提交级代码更改嵌入向量也可以添加到漏洞修复嵌入向量数据库160中。
例如,方法600可以连续和/或周期性地执行,以自动监控代码仓库10的新漏洞修复。在一些示例中,监控可以实时或接近实时地执行,使得提交到代码仓库10的新提交可以被检测为漏洞修复,并在提交新提交时立即报告。
因此,漏洞修复检测系统100可以使代码仓库10中的漏洞修复能够被及时地检测和报告,而不依赖于披露公告或提交相关的工件(例如,提交消息或问题报告)。特别是,可以检测到未披露的漏洞修复并报告给用户,以使用户能够迅速采取行动修复受影响软件中的漏洞。
在一些示例中,代码更改预处理器110可以将代码解析为文件级抽象语法树(abstract syntax tree,AST),而不是将提交中的代码解析为文件级令牌序列。AST是一种树状数据结构,用于表示代码结构。例如,以给定条件为条件的“if-else”代码可以被解析为AST,其中,条件是一个节点,其中“if”代码是一个分支,“else”代码是另一个分支。文件级AST可以用作转换器模型120的输入,而不是文件级令牌序列,转换器模型120的训练如上所述进行。为了将提交中的代码正确地解析为文件级AST,代码更改预处理器110可能需要访问和提取源代码中在受代码更改影响的一个或多个代码行之前和/或之后的部分。
漏洞修复检测系统100可以容易地适应于与代码更改相关的其它软件工程任务,并且不一定限于检测漏洞修复。例如,任何类型的代码更改(例如,代码重构、软件修订等)可以作为输入提供给漏洞修复检测系统100,而不是提交。漏洞修复检测系统100可以经过训练以检测代码更改是否为缺陷修复、性能改进代码更改、代码重构活动等。本领域技术人员应当理解,可以训练转换器模型120和分类器140以适合所需的代码更改检测任务,而不脱离本发明的范围。
一般而言,本发明提供了能够理解代码更改的语义含义(例如,表示为代码更改嵌入向量)并用于对代码更改的目的进行分类(例如,预测代码更改是否为漏洞修复、缺陷修复等)的系统和方法。
需要说明的是,虽然本发明的一些示例是在OSS的上下文中描述的,但本发明可以适用于OSS的上下文之外。例如,对于闭源软件,代码更改可能不会显式指示为提交中的添加代码行或删除代码行,但是可以进行直接比较,以标识新版本与上一个版本之间二进制代码中的代码差异(例如,删除代码和/或添加代码)。该代码差异可以用作漏洞修复检测系统的输入,以代替提交,例如,为了检测新版本是否包括安全更新(即,漏洞修复)。此信息可以使用户更好地决定是否升级到新版本(因为有时安全更新可能不会被披露)。
尽管本发明通过按照一定的顺序的步骤描述方法和过程,但是可以视情况省略或改变方法和过程中的一个或多个步骤。一个或多个步骤视情况可以按除了所描述顺序以外的顺序进行。
尽管描述了本发明,但至少部分地,就方法而言,本领域普通技术人员将理解,本发明还涉及各种组件,用于通过硬件组件、软件或两者的任何组合执行所描述的方法的至少一些方面和特征。相应地,本发明的技术方案可以通过软件产品的形式体现。合适的软件产品可以存储在预先记录的存储设备或其它类似的非易失性或非瞬时性计算机可读介质中,包括DVD、CD-ROM、USB闪存盘、可移动硬盘或其它存储介质等。软件产品包括有形地存储在其上的指令,所述指令使得处理器设备(例如,个人计算机、服务器或网络设备)能够执行本文中公开的方法的示例。
在不脱离权利要求书的主题的前提下,本发明可以通过其它特定形式实现。所描述的示例性实施例在所有方面均被视为仅是说明性的而非限制性的。可以组合从一个或多个上述实施例中选择的特征,以创建未明确描述的可选实施例,在本发明的范围内可以理解适合于此类组合的特征。
还公开了所公开范围内的所有值和子范围。此外,虽然本文所公开和示出的系统、设备和过程可以包括特定数量的元件/组件,但是可以修改这些系统、设备和组件以包括更多或更少此类元件/组件。例如,虽然所公开的任何元件/组件可以引用为单数,但是可以修改本文所公开的实施例以包括多个此类元件/组件。本文所描述的主题旨在覆盖和涵盖所有适当的技术变更。

Claims (21)

1.一种方法,其特征在于,包括:
从代码仓库获得提交;
预处理所述提交以生成一个或多个文件级令牌序列,每个文件级令牌序列表示相应的一个或多个文件的至少一个文件级代码更改;
通过将所述一个或多个文件级令牌序列中的每一个输入到转换器模型中,生成相应的一个或多个文件级代码更改嵌入向量,每个相应的文件级代码更改嵌入向量是所述相应文件的所述至少一个文件级代码更改的向量表示;
将所述一个或多个文件级代码更改嵌入向量组合成提交级代码更改嵌入向量,所述提交级代码更改嵌入向量是包括在所述提交中的所有代码更改的向量表示;
通过将所述提交级代码更改嵌入向量输入分类器,生成预测的提交级漏洞修复分数;
输出漏洞修复报告,所述漏洞修复报告包括所述提交的标识和与所述提交关联的所述预测的提交级漏洞修复分数。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
从嵌入向量数据库中标识与所述提交级代码更改嵌入向量最相似的一个或多个嵌入向量,所述一个或多个标识的嵌入向量与相应的一个或多个唯一标识符关联;
从已知漏洞修复数据库中标识对应于所述相应的一个或多个唯一标识符的一个或多个已知漏洞修复;
从所述已知漏洞修复数据库中提取所述标识的一个或多个已知漏洞修复中的每一个的漏洞修复信息;
其中,所述提取的漏洞修复信息与所述提交关联,并包括在所述漏洞修复报告中。
3.根据权利要求1或权利要求2所述的方法,其特征在于:
所述一个或多个文件级令牌序列中的每一个包括密钥令牌;
所述转换器模型通过将给定文件级令牌序列中的每个令牌编码为相应的嵌入向量来处理每个给定的文件级令牌序列,从所述密钥令牌编码的所述嵌入向量是所述给定文件级令牌序列的所述文件级代码更改嵌入向量。
4.根据权利要求3所述的方法,其特征在于,预处理所述提交包括:
解析所述提交以提取给定文件的任何添加代码行,并将任何添加代码行令牌化为添加代码令牌序列;
解析所述提交以提取所述给定文件的任何删除代码行,并将任何删除代码行令牌化为删除代码令牌序列;解析所述提交以提取任何代码描述,并将任何代码描述令牌化为描述令牌序列;
级联所述描述令牌序列、所述添加代码令牌序列和所述删除代码令牌序列,并附加所述密钥令牌,以生成表示所述给定文件的代码更改的所述文件级令牌序列。
5.根据权利要求1至4中任一项所述的方法,其特征在于,还包括:
监控所述代码仓库以检测对所述代码仓库新提交的任何提交;
响应于检测到所述提交是新提交,从所述代码仓库获得所述提交。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述转换器模型从预训练的语言模型中微调,所述预训练的语言模型已经过预训练以生成表示人类语言的嵌入向量,所述转换器模型经过微调以生成表示软件代码更改的所述一个或多个文件级代码更改嵌入向量。
7.根据权利要求6所述的方法,其特征在于,还包括,在从所述代码仓库获得所述提交之前:
从所述预训练的语言模型微调所述转换器模型,以使用训练数据集生成文件级代码更改嵌入向量;
使用所述训练数据集训练所述分类器以生成提交级漏洞修复分数。
8.根据权利要求1至7中任一项所述的方法,其特征在于,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量包括对所述一个或多个文件级代码更改嵌入向量进行平均。
9.根据权利要求1至8中任一项所述的方法,其特征在于,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量包括:对于所述提交级代码更改嵌入向量的每个向量元素,在所有所述一个或多个文件级代码更改嵌入向量中取对应向量元素的最大值。
10.一种系统,其特征在于,包括:
处理单元,用于执行指令以使所述系统:
从代码仓库获得提交;
预处理所述提交以生成一个或多个文件级令牌序列,每个文件级令牌序列表示相应的一个或多个文件的至少一个文件级代码更改;
通过将所述一个或多个文件级令牌序列中的每一个输入到转换器模型中,生成相应的一个或多个文件级代码更改嵌入向量,每个相应的文件级代码更改嵌入向量是所述相应文件的所述至少一个文件级代码更改的向量表示;
将所述一个或多个文件级代码更改嵌入向量组合成提交级代码更改嵌入向量,所述提交级代码更改嵌入向量是包括在所述提交中的所有代码更改的向量表示;
通过将所述提交级代码更改嵌入向量输入分类器,生成预测的提交级漏洞修复分数;
输出漏洞修复报告,所述漏洞修复报告包括所述提交的标识和与所述提交关联的所述预测的提交级漏洞修复分数。
11.根据权利要求10所述的系统,其特征在于,所述处理单元还用于执行指令以使所述系统:
从嵌入向量数据库中标识与所述提交级代码更改嵌入向量最相似的一个或多个嵌入向量,所述一个或多个标识的嵌入向量与相应的一个或多个唯一标识符关联;
从已知漏洞修复数据库中标识对应于所述相应的一个或多个唯一标识符的一个或多个已知漏洞修复;
从所述已知漏洞修复数据库中提取所述标识的一个或多个已知漏洞修复中的每一个的漏洞修复信息;
其中,所述提取的漏洞修复信息与所述提交关联,并包括在所述漏洞修复报告中。
12.根据权利要求10或权利要求11所述的系统,其特征在于:
所述一个或多个文件级令牌序列中的每一个包括密钥令牌;
所述转换器模型通过将给定文件级令牌序列中的每个令牌编码为相应的嵌入向量来处理每个给定的文件级令牌序列,从所述密钥令牌编码的所述嵌入向量是所述给定文件级令牌序列的所述文件级代码更改嵌入向量。
13.根据权利要求12所述的系统,其特征在于,所述处理单元还用于执行指令以使所述系统通过以下方式预处理所述提交:
解析所述提交以提取给定文件的任何添加代码行,并将任何添加代码行令牌化为添加代码令牌序列;
解析所述提交以提取所述给定文件的任何删除代码行,并将任何删除代码行令牌化为删除代码令牌序列;解析所述提交以提取任何代码描述,并将任何代码描述令牌化为描述令牌序列;
级联所述描述令牌序列、所述添加代码令牌序列和所述删除代码令牌序列,并附加所述密钥令牌,以生成表示所述给定文件的代码更改的所述文件级令牌序列。
14.根据权利要求10至13中任一项所述的系统,其特征在于,所述处理单元还用于执行指令以使所述系统:
监控所述代码仓库以检测对所述代码仓库新提交的任何提交;
响应于检测到所述提交是新提交,从所述代码仓库获得所述提交。
15.根据权利要求14所述的系统,其特征在于,所述系统是用于监控所述代码仓库的监控系统的一部分。
16.根据权利要求10至15中任一项所述的系统,其特征在于,所述转换器模型从预训练的语言模型中微调,所述预训练的语言模型已经过预训练以生成表示人类语言的嵌入向量,所述转换器模型经过微调以生成表示软件代码更改的所述一个或多个文件级代码更改嵌入向量。
17.根据权利要求16所述的系统,其特征在于,所述处理单元还用于执行指令以使所述系统在从所述代码仓库获得所述提交之前:
从所述预训练的语言模型微调所述转换器模型,以使用训练数据集生成文件级代码更改嵌入向量;
使用所述训练数据集训练所述分类器以生成提交级漏洞修复分数。
18.根据权利要求10至17中任一项所述的系统,其特征在于,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量包括对所述一个或多个文件级代码更改嵌入向量进行平均。
19.根据权利要求10至18中任一项所述的系统,其特征在于,将所述一个或多个文件级代码更改嵌入向量组合成所述提交级代码更改嵌入向量包括:对于所述提交级代码更改嵌入向量的每个向量元素,在所有所述一个或多个文件级代码更改嵌入向量中取对应向量元素的最大值。
20.一种计算机可读介质,其特征在于,其上编码指令,其中,所述指令由系统的处理单元执行时,使所述系统执行根据权利要求1至9中任一项所述的方法。
21.一种计算机程序产品,其特征在于,所述计算机程序产品包括指令,所述指令由计算机执行时,使所述计算机执行根据权利要求1至9中任一项所述的方法。
CN202180100312.8A 2021-07-06 2021-07-06 用于检测软件漏洞修复的系统和方法 Pending CN117616439A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/104675 WO2023279254A1 (en) 2021-07-06 2021-07-06 Systems and methods for detection of software vulnerability fix

Publications (1)

Publication Number Publication Date
CN117616439A true CN117616439A (zh) 2024-02-27

Family

ID=84801109

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180100312.8A Pending CN117616439A (zh) 2021-07-06 2021-07-06 用于检测软件漏洞修复的系统和方法

Country Status (3)

Country Link
US (1) US20240004638A1 (zh)
CN (1) CN117616439A (zh)
WO (1) WO2023279254A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230169175A1 (en) * 2021-11-29 2023-06-01 International Business Machines Corporation Managing Zero-Day Vulnerabilities
WO2024158524A1 (en) * 2023-01-25 2024-08-02 Microsoft Technology Licensing, Llc Performance bug repair via retrieval-augmented neural code generation model

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017181286A1 (en) * 2016-04-22 2017-10-26 Lin Tan Method for determining defects and vulnerabilities in software code
US11455566B2 (en) * 2018-03-16 2022-09-27 International Business Machines Corporation Classifying code as introducing a bug or not introducing a bug to train a bug detection algorithm
CN109376092B (zh) * 2018-11-26 2021-07-13 扬州大学 一种面向缺陷补丁代码的软件缺陷原因自动分析方法
CN111459799B (zh) * 2020-03-03 2023-03-10 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN112685739B (zh) * 2020-12-31 2022-11-04 卓尔智联(武汉)研究院有限公司 恶意代码检测方法、数据交互方法及相关设备

Also Published As

Publication number Publication date
WO2023279254A1 (en) 2023-01-12
US20240004638A1 (en) 2024-01-04

Similar Documents

Publication Publication Date Title
US11720804B2 (en) Data-driven automatic code review
US10984032B2 (en) Relation extraction using co-training with distant supervision
CN110941716B (zh) 一种基于深度学习的信息安全知识图谱的自动构建方法
US11349845B2 (en) Website verification platform
US11061805B2 (en) Code dependency influenced bug localization
US11972216B2 (en) Autonomous detection of compound issue requests in an issue tracking system
US20190258648A1 (en) Generating asset level classifications using machine learning
US20240004638A1 (en) Systems and methods for detection of software vulnerability fix
US10210455B2 (en) Relation extraction using co-training with distant supervision
US11262985B2 (en) Pretraining utilizing software dependencies
CN116151132B (zh) 一种编程学习场景的智能代码补全方法、系统及储存介质
US11281999B2 (en) Predictive accuracy of classifiers using balanced training sets
US11954202B2 (en) Deep learning based detection of malicious shell scripts
US20210342247A1 (en) Mathematical models of graphical user interfaces
CN114375447A (zh) 计算系统中的语言语句处理
CN109299470A (zh) 文本公告中触发词的抽取方法及系统
CN116361788A (zh) 一种基于机器学习的二进制软件漏洞预测方法
CN117454382A (zh) 基于神经网络和函数调用图的二进制成分检测方法及系统
US12014142B2 (en) Machine learning for training NLP agent
US11941124B2 (en) Systems and methods for detecting malware using static and dynamic malware models
US20240296231A1 (en) Automated attribute scraping for security feature implementation prediction
CN117896136A (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