具体实施方式
尽管软件和应用使能的针对它们的安全攻击的频率不断增加,但是难以确定软件中存在的所有的安全漏洞。安全是软件的突现特征,这在于它是软件的设计和工程的副产品,而非建立到软件中的有意设计的方面。由于这个原因,软件开发和安全团队依赖尝试但经常不能在系统的完全覆盖和结果中的高保真精度之间达到平衡的分析技术和手动测试。大多数的分析和测试是在软件已经建立以后进行的,这时候,它太晚了,太贵了,或是组织上难以自圆其说修复安全漏洞。为了预测安全缺陷将出现在哪里,软件开发和安全团队将从具有一种理解软件的安全性如何随时间演变的方式中受益。如果可以得到这样的理解,那么软件和开发团队就能够优先考虑把他们补救这些安全缺陷的时间和精力集中到哪里。
目前,软件开发和安全团队盲目地作业,连同解决潜在的安全缺陷同时与软件的开发。这产生了这样一种环境,在此环境中,软件开发和安全团队依赖对何时何地要专注于解决正在开发的软件中的安全缺陷的猜测。几乎每一个现在部署的主要的关键业务应用都包含可以被用来造成对业务或对其管理资产相当大的危害的漏洞。这些漏洞可以被利用来盗取重要信息,破坏计算机系统,或影响对利润或攻击者的恶意的处理。
对于一个有经验的黑客或恶意业内人士来说,由于可在线获得多种信息和工具,为此目的操纵软件变得特别容易。攻击者面临的最大挑战是简单地在大型业务应用环境中找到漏洞。另外,主流的计算机安全解决方案,如防火墙,是基于这样的前提:暴露的和脆弱的软件可以通过把它与外界的危险隔离而被保护。业务需求决定了很少关键业务应用能真正地被隔离。大多数关键业务应用具有通过数据传输接口、远程过程调用以及内部和远程用户的许多接入点。防火墙和其它面向网络的安全解决方案不会阻止关键业务应用需要的访问类型。事实上,今天的业务功能依赖于这种访问到了这样的程度:如果访问被拒绝,那么它们将不能运行。攻击者利用这些事实,来每天攻击系统。
综上,一个问题自然地把它自己提出来:为什么基于网络的计算机安全解决方案被应用到显然是一个软件问题的问题中?一个答案是,大多数信息安全从业人员具有网络安全背景,并且由于解决运营安全问题都变瘦了,留下很少时间来与核心软件开发过程进行交互。与此同时,在投入很少的资源给安全考虑的同时,应用程序开发人员由于在时间紧迫的情况下生产新功能而被奖励。很少有任何一个人拥有对应用本身的安全元素的责任。在大多数情况下,软件开发使得关键业务应用被装运,而网络运营团队将保护它。这些角色的二分法为攻击者创造了一个非同寻常的优势,具有讽刺意味的是,攻击者可能是仅有的真正经历了并专注于软件安全和关键业务应用的漏洞的人。
软件开发内和周围的专家们越来越认识到,关于软件安全必须采取一些措施。然而,尚未确定连贯和实用的解决方案。有使得解决方案难以确定的若干因素。例如,软件安全漏洞是难以描述的,逻辑错误可能跨越数千行代码,使得具有合理性能的精确检测极其困难。乍一看,技术挑战使得这样的解决方案看起来更像是编译器或定位开发工具。但是,大型的软件开发工具供应商还没有使得安全称为其产品的核心部分。它们的客户群仍主要集中在如何提高特性和功能的创造,并且供应商的内部团队在它们工作以改进其单一用途的产品的功能集时,不能轻易地认识到变化的模式。这是一个常见的软件创新者的困境。此外,大量的开发工具提供商并不擅长提供风险管理体系要求的企业级的解决方案,或承受支持这样的解决方案所需的价格点。事实上,开发工具定价的当前状态已普遍阻碍了安全团体构建面向开发人员的解决方案。
除了软件开发工具中固有的不足之处,软件安全可能需要一个不断变化的领域中的专门知识。问题不只是寻找用于扫描代码的技术,还包括创建和不断地更新用于检测漏洞的规则。提出规则需要不断增长的研究主体的专业知识和导致关键业务应用中的漏洞的现实世界体系结构、框架、使用模式等诸多其它因素。例如,操作系统或库应用程序编程接口(API)的每一个版本都引入新的使得导致安全漏洞的错误的方式。
此外,软件安全能够由单点解决方案来完成,这不太可能。同样,软件安全能够单独在开发者一级加以解决,这不太可能。软件安全在很大程度上是风险管理问题。解决上述情况可能包括随时间收集的详细信息和保持软件开发人员象以前一样富有成效,还要使得安全度量在开发、测试和部署期间对管理可见的方法。解决上述情况还可以包括给管理人员和组织的企业软件式的解决方案。
本发明公开用于通过在一段时间分析和关联若干软件信息的来源,来预测软件安全缺陷并把软件安全缺陷区分优先次序的方法和系统。这些软件信息的来源可以包括例如静态分析安全漏洞的结果、软件代码复杂性和稳定性度量以及关于漏洞、访问频率和攻击频率的运行时安全信息等。
如在本说明书和所附权利要求书中所使用地,术语“目标软件”或类似的语言旨在被广泛地理解为被分析以检测安全缺陷的任何软件及其相关联的代码。
更进一步地,如在本说明书和所附权利要求书中使用的,术语“若干”或类似语言旨在被广义地理解为任何正数,包括1到无限大;零不是数字而是没有数字。
在接下来的说明书中,出于说明目的,阐述了大量的具体细节从而提供对本发明的系统和方法的全面理解。但是,对本领域技术人员来说将是很明显的,可以在没有这些具体细节的情况下,实践本发明的装置、系统和方法。说明书中提及“示例”或类似语言表示如所说明地,包括了连同这个示例所说明的特定特征、结构或特性,而这一特定特征、结构或特性可能没有被包括在其它示例中。
图1为根据本发明所述的原理的一个示例的、用于预测软件安全缺陷的系统(100)的框图。系统可以包括计算设备(102)、应用服务器(106)和历史扫描数据库(108)。在一个示例中,计算设备(102)、应用服务器(106)和历史扫描数据库(108)可以通过网络(104)彼此通信。在另一示例中,计算设备(102)、应用服务器(106)和历史扫描数据库(108)可以被在没有中间网络(104)的情况下,与彼此直接联接。在又一示例中,计算设备(102)、应用服务器(106)和历史扫描数据库(108)可以被在若干设备中集成到一起。网络(104)可以是局域网,内联网,或因特网等其它形式的网络。
该系统(100)可以被用在包括例如,诸如软件即服务(SaaS)的云计算服务,平台即服务(PaaS),基础设施即服务(IaaS),应用程序接口(API)即服务(APIaaS),其它形式的网络服务,或其组合的任何数据处理方案中。此外,系统(100)可以被用在公共云网络,私有云网络,混合云网络,其它形式的网络,或其组合中。在一个示例中,由系统(100)提供的方法被提供为例如第三方的通过网络的服务。在另一示例中,由系统(100)提供的方法由本地管理员执行。此外,系统(100)可以被用在单个计算设备中。在这一数据处理方案中,单个计算装置可以利用本发明所述装置和相关联的方法在软件开发期间和开发后,确定、按优先顺序列出和预测安全缺陷。
为了实现其想要的功能性,计算设备(102)包括各种硬件组件。这些硬件组件中可以有若干处理器(121)、若干数据存储设备(122)、若干外围设备适配器(127)和若干网络适配器(126)。这些硬件组件可以通过使用若干总线和/或网络连接互连。在一个示例中,处理器(121)、数据存储设备(122)、外围设备适配器(127)和网络适配器(126)可以通过总线(128)通信联接。
处理器(121)可以包括从数据存储设备(122)检索可执行代码并执行可执行代码的硬件架构。当被处理器(121)执行时,可执行代码可以使得处理器(121)根据本发明所述的本说明书的方法,在软件的开发期间和开发后,至少实现确定、按优先顺序列出和预测安全缺陷的功能性。在执行代码的过程中,处理器(121)可以从若干其余的硬件单元接收输入并向它们提供输出。
数据存储设备(122)可以存储诸如由处理器(121)或其它处理设备执行的可执行程序代码的数据。如将要讨论的,数据存储设备(122)可以具体地存储被处理器(121)执行以至少实现本发明所述功能性的多个应用。
数据存储设备(122)可以包括各种类型的存储器模块,包括易失性和非易失性存储器。例如,本示例的数据存储设备(122)包括随机存取存储器(RAM)(123)、只读存储器(ROM)(124)和硬盘驱动器(HDD)存储器(125)。也可以使用很多其它类型的存储器,只要可以适应本发明所述的原理的特定应用程序,本说明书考虑在数据存储设备(122)中使用许多不同类型的存储器。在某些示例中,数据存储设备(122)中的不同类型的存储器可以被用于不同的数据存储需要。例如,在某些示例中,处理器(121)可以从只读存储器(ROM)(124)启动,在硬盘驱动器(HDD)存储器(125)中保持非易失性存储,并且执行随机存取存储器(RAM)(123)中存储的程序代码。
一般而言,数据存储设备(122)可以包括计算机可读介质,计算机可读存储介质,或非暂时性计算机可读介质等。例如,数据存储设备(122)可以是,但不限于,电的、磁的、光的、电磁的、红外的或半导体系统、装置或设备,或上述的任何合适的组合。例如,计算机可读存储介质的更多具体例子包括如下:具有若干导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或Flash存储器)、便携式光盘只读存储器(CD-ROM)、光存储设备、磁存储设备,或者上述的任何合适的组合。在本发明的上下文中,计算机可读存储介质可以是任何能够包含或存储由指令执行系统、装置或设备使用或与之有关的程序的有形介质。在另一示例中,计算机可读存储介质可以是任何能够包含或存储由指令执行系统、装置或设备使用或与之有关的程序的非暂时性介质。
系统(100)中的硬件适配器(126,127)使处理器(121)能够与系统(100)的外部和内部的各种其它的硬件元素接合。例如,外围设备适配器(127)可以提供到诸如,例如键盘、鼠标、打印设备、和显示设备,以及其它输入/输出设备的输入设备(130)和输出设备(131)的接口。此外,外围设备适配器(127)可以提供接口来访问其它外部设备,例如外部存储设备。输入设备(130)和输出设备(131)可以被提供来允许用户与系统(100)的功能性交互并实现该功能性。网络适配器(126)可以提供到例如网络内的其它计算设备的接口,从而实现位于网络内的计算设备(102)和其它设备之间的数据传输。
计算设备(102)进一步包括用于在软件的开发期间和开发后,确定、按优先顺序列出和预测安全缺陷的若干模块(140,142,144,146,148,150)。计算设备(102)内的各个模块可以被单独地执行。在此示例中,各个模块可以被存储为分离的计算机程序产品。在另一示例中,计算设备(102)内的各个模块可以被结合在若干计算机程序产品内,每个计算机程序产品都包括若干模块。在一个示例中,模块(140,142,144,146,148,150)被存储在系统(100)的数据存储设备(122)内,并且可由处理器(121)访问和执行。在另一示例中,如上所述,为了系统(100)的用户的利益,模块(140,142,144,146,148,150)通过云计算设备,在例如服务器设备,诸如服务器(108)上被存储并执行。在又一示例中,模块(140,142,144,146,148,150)在诸如,例如历史扫描数据库(108)的数据存储设备上被存储并执行。在又一示例中,模块(140,142,144,146,148,150)在诸如计算设备(102),服务器(108)或历史扫描数据库(108)的各种计算设备上,作为一组模块(140,142,144,146,148,150),或作为分离的多组模块或单独模块,被存储和执行。然而,为了便于解释,模块(140,142,144,146,148,150)在这里将被说明为在计算设备(102)上被存储和执行。
计算设备(102)可以包括用于当被处理器(121)执行时,在不执行软件的情况下,分析目标软件的安全漏洞的静态分析模块(140)。在一个示例中,静态分析模块(140)对目标软件的代码库进行数据流分析,以确定从外界取得输入的若干程序位置,诸如,例如通过用户输入。静态分析模块(140)通过由目标软件进行的分配、函数调用和操作来跟踪输入的实例。这一过程可以被称为“污点传播”。若干代码规则可以与数据流分析一起被应用。这些代码规则指示数据流分析内的污染值的安全违规。计算设备(102)报告根据数据流分析和代码规则得到的安全违规的数目。在一个示例中,静态分析模块(140)获得的静态分析扫描被存储在诸如,例如历史扫描数据库(108)的数据存储设备中。
计算设备(102)可以进一步包括用于当被处理器(121)执行时,测量若干代码度量的代码度量模块(142)。在一个示例中,代码度量模块(142)测量程序复杂度,诸如,例如圈复杂度、被定义为代码的一部分被再次使用或被其它部分调用有多频繁的代码重用,定义代码随时间的改变的测量的代码搅动(codechurn),其它代码度量,及其组合。在另一示例中,代码度量是代码库的非安全相关的属性。这些代码度量表明不相称的复杂度,暴露,或代码的特定部分中的不稳定性。计算设备(102)把代码度量模块(142)测量的代码度量存储到诸如,例如历史扫描数据库(108)的数据存储设备中。
计算设备(102)可以进一步包括用于当被处理器(121)执行时,从一个版本的目标软件的运行时环境获得运行时安全信息的运行时安全模块(144)。运行时安全信息可以包括通过正在运行的应用,环境配置和运行时环境中应用的行为特征的动态分析或手动测试,检测到的安全漏洞,诸如,例如测试软件的特定区域被访问或攻击的频率,其它运行时安全信息,及其组合。在一个示例中,运行时安全模块(144)获得的运行时安全信息被存储在诸如,例如历史扫描数据库(108)的数据存储设备中。
计算设备(102)可以进一步包括用于当被处理器(121)执行时,分析由静态分析模块(140)和运行时安全模块(144)获得的数据所示的安全缺陷演变与代码度量模块(142)获得的若干代码度量之间的若干相关的安全相关模块(146)。如上所述,静态分析模块(140)获得的静态分析扫描、运行时安全模块(144)获得的运行时安全信息和代码度量模块(142)获得的代码度量被存储在诸如,例如历史扫描数据库(108)的数据存储设备中。安全相关模块(146)在一段时间的若干扫描中,结合这三个安全数据源中的每个数据源、静态分析结果、软件代码度量和运行时安全信息。把此信息结合进单一分析平台将使得本系统和方法能够实现本发明所述的若干目标。
计算设备(102)可以进一步包括安全缺陷优先级处理模块(148),当被处理器(121)执行时,安全缺陷优先级处理模块(148)通过把安全漏洞与已知是复杂或不稳定的目标软件的区域相关而按优先顺序列出静态分析中发现的安全漏洞,观察一段时间安全缺陷的模式,以把诸如,例如似乎来来去去的问题的、不能持续确定的问题除去或不再优先考虑(de-prioritize),提高出现在展示了显著的再利用的目标软件的区域中的问题的优先级,并提高出现在已知被频繁地访问或者在运行时环境中脆弱的目标软件的区域中的问题的优先级。在一个示例中,安全缺陷优先级处理模块(148)获得的安全缺陷优先级处理信息被存储到诸如,例如计算设备(102)的数据存储设备(122)或历史扫描数据库(108)的数据存储设备中。
计算设备(102)可以进一步包括安全缺陷预测模块(150),当被处理器(121)执行时,安全缺陷预测模块(150)把展示了高复杂度或搅动(churn)的目标软件的代码的区域中的安全漏洞的出现率相关,来预测并警告代码的区域正在趋向于变得更加有风险,把展示了运行时环境中的频繁访问或安全攻击的目标软件的代码的区域中的安全漏洞的出现率相关,并且根据软件代码复杂度和稳定性度量与过去分析中发现的安全缺陷之间的相关的模式,预测目标软件中的安全缺陷。在一个示例中,安全缺陷预测模块(150)获得的安全缺陷预测信息被存储到诸如,例如计算设备(102)的数据存储设备(122)或历史扫描数据库(108)的数据存储设备中。
图2为示出根据本发明所述的原理的一个示例的、分析目标软件的安全漏洞的方法(200)的流程图。图2的方法(200)可以通过以处理器(图1,121)执行静态分析模块(140),利用静态分析扫描,在一段时间,若干次迭代扫描(块202)代码库,而开始。如上所述,静态分析模块(图1,140)对代码库进行数据流分析,以确定从外界取得输入的若干程序位置,诸如,例如通过用户输入。静态分析模块(图1,140)通过由目标软件进行的分配、函数调用和操作来跟踪输入的实例。若干代码规则可以与数据流分析一起被应用。这些代码规则指示数据流分析内的污染值的安全违规。在一个示例中,计算设备(图1,102)报告根据数据流分析和代码规则得到的安全违规的数目。
方法(200)可以通过以处理器(图1,121)执行代码度量模块(142),在一段时间,若干次迭代计算(块204)代码库的若干代码度量,而继续。在一个示例中,处理器(图1,121)计算(块204)整个代码库的若干代码度量。在一个示例中,代码度量可以是指示代码的复杂度、可理解性、可测试性、说明和代码复杂性的任何软件代码质量的测量。在一个示例中,代码度量可以包括目标软件的圈复杂度、被定义为代码的一部分被再次使用或被其它部分调用有多频繁的代码重用,定义代码随时间的改变的测量的代码搅动,其它代码度量,及其组合。在另一示例中,代码度量是代码库的非安全相关的属性。
处理器(图1,121)执行安全相关模块(146),分析(块206)安全缺陷演变和若干代码度量之间的若干相关。安全相关模块(146)在一段时间的若干扫描中,结合这三个安全数据源中的每个数据源、静态分析结果、软件代码度量和运行时安全信息。在一个示例中,处理器(图1,121)把安全相关模块(146)决定的分析输出给输出设备(图1,130)以供用户检查。以这种方式,为例如目标软件的开发者的用户可以使用安全相关模块(146)提供的分析来按优先顺序列出与安全缺陷相关联的目标软件代码改变,预测目标软件代码中的软件安全缺陷,或其组合。
图3为示出根据本发明所述的原理的另一示例的、分析目标软件的安全漏洞的方法(300)的流程图。如上面连同图2所述地,图3的方法(300)可以通过以处理器(图1,121)执行静态分析模块(140),利用静态分析扫描,在一段时间,若干次迭代扫描(块302)代码库,而开始。
如上面连同图2所述地,处理器(图1,121)执行运行时安全模块(144),从一个版本的目标软件的运行时环境获得(块304)运行时安全信息。在一个示例中,如包围块304的虚线所示,从一个版本的目标软件的运行时环境获得(块304)运行时安全信息是可选的。从一个版本的目标软件的运行时环境获得(块304)运行时安全信息通过提供另外的分析数据,增强了本系统和方法的功能性,但是如下面将更详细地讨论地,安全缺陷的优先级处理(图3,块314)和与代码库相关联的风险的预测(图3,块316)不需要从一个版本的目标软件的运行时环境获得(块304)运行时安全信息。
如上面连同图2所述地,方法(300)可以通过以处理器(图1,121)执行代码度量模块(142),在一段时间,若干次迭代计算(块306)代码库的若干代码度量,而继续。计算设备(102)确定(块308)是否已经达到通过块302、304和308获得统计数据(即,静态分析结果、软件代码度量和运行时安全信息)的迭代的目标次数。在一个示例中,用户可以定义计算设备(102)将在获得统计数据中使用的迭代的次数。在另一示例中,计算设备(102)将在获得统计数据中使用的迭代的次数由安全相关模块(图1,146)定义。可以进行任何次数的迭代,以获得静态分析结果、软件代码度量和运行时安全信息。在一个示例中,迭代的次数为多次迭代。在一个示例中,迭代的次数可以在1和1000之间。在另一示例中,迭代的次数可以在10和100之间。然而,可以进行通过块302、304和306获得统计数据的任何次数的迭代。
在另一示例中,计算设备(102)将在获得统计数据中使用的迭代的次数可以以用户或安全相关模块(图1,146)定义的迭代之间的时段进行。在此示例中,可以在若干规则的或不规则的事件中进行若干次迭代的通过块302、304和306获得统计数据,事件之间的中间时间段是规则的或不规则的。在一个示例中,若干次迭代的通过块302、304和306获得统计数据可以按例如诸如每天,每周,每月或每年的规则的时间表进行。在另一示例中,若干次迭代的通过块302、304和306获得统计数据可以在不规则的时间进行,例如当处理资源可用时的实例。在另一示例中,若干次迭代的通过块302、304和306获得统计数据可以以规则的间隔进行,实例之间为若干秒,若干分,若干小时,若干天,若干周,若干月,或其部分。在又一示例中,若干次迭代的通过块302、304和306获得统计数据可以根据上述时间参数的组合来进行。在又一示例中,若干次迭代的通过块302、304和306获得统计数据可以根据定义的迭代次数和定义的一段时间的组合来进行。
如果不满足(块308,确定为否)目标迭代次数,那么方法返回到块302。然而,如果满足(块308,确定为是)目标迭代次数,那么方法继续进行另外的处理。在一个示例中,方法可以以计算设备(102)把统计数据存储(块310)到数据库中,而继续。统计数据可以被称为历史扫描。在一个示例中,历史扫描被存储到历史扫描数据库(108)中以进行之后的处理。在一个示例中,块310的过程可以在系统(图1,100)获得数据的任何时间进行。在一个示例中,历史扫描可以在块302、304和306的各个迭代之后,或在分别获得静态分析结果、软件代码度量和运行时安全信息之后,被存储。
如上面连同图2的块206所述地,处理器(图1,121)执行安全相关模块(图1,146),分析(块312)安全缺陷演变和若干代码度量之间的若干相关。安全相关模块(148)在一段时间的若干扫描中,结合三个安全数据源中的每个数据源、静态分析结果、软件代码度量和运行时安全信息。
当被处理器(图1,121)执行时,安全缺陷优先级处理模块(148)按优先顺序列出(框314)由安全相关模块(146)在框312处确定的安全缺陷,以协助目标软件的开发者确定出现在目标软件中或由目标软件产生的最大的安全威胁。在一个示例中,被按优先顺序列出的安全缺陷通过输出设备(130)被呈现给用户。在此示例中,安全缺陷可以以指示最高优先级的安全缺陷的顺序,被呈现在输出设备(130)上。安全缺陷优先级处理模块(148)通过把安全漏洞与已知是复杂或不稳定的目标软件的区域相关,来按优先顺序列出静态分析模块(140)获得的静态分析扫描中发现的漏洞。此外,安全缺陷优先级处理模块(148)观察安全缺陷的模式一段时间,以把不能持续确定的安全缺陷,那些来来去去的问题的安全缺陷除去或不再优先考虑。更进一步地,安全缺陷优先级处理模块(148)提高出现在展示了显著的再利用的目标软件的区域中的问题的优先级。再更进一步地,安全缺陷优先级处理模块(148)提高出现在被频繁地访问或者在运行时环境中脆弱的目标软件的区域中的问题的优先级。
该方法可以以处理器(121)执行安全缺陷预测模块(15),预测目标软件的代码内的若干安全缺陷,而继续。在一个示例中,安全相关模块(146)把安全漏洞在展示了高复杂度或搅动的代码的区域中的出现率相关,安全缺陷预测模块(150)使用此信息来预测和警告用户代码的区域正在趋向于变得更加有风险。在另一示例中,安全相关模块(146)把安全漏洞的在展示了运行时环境中的频繁访问或安全攻击的代码的区域中的出现率相关,安全缺陷预测模块(150)使用此信息来预测和警告用户代码的区域正在趋向于变得更加有风险。在又一示例中,根据软件代码复杂度和稳定性度量与历史扫描数据库(108)中包含的数据内发现的安全缺陷之间的相关的模式,安全缺陷预测模块(150)预测软件中的安全缺陷。
在这里参照根据本发明所述原理的示例的方法、装置(系统)和计算机程序产品的流程图和/或框图,说明了本系统和方法的各个方面。流程图和框图的各个块,与流程图和框图中块的组合可以由计算机可用程序代码实现。计算机可用程序代码可以被提供给通用计算机,专用计算机,或其它可编程数据处理装置的处理器以产生机器,致使当被通过例如计算设备(102)的处理器(121)或其它可编程数据处理装置执行时,计算机可用程序代码实现流程图和/或框图的块或多个块中指定的功能或动作。在一个示例中,计算机可用程序代码可以被体现在计算机可读存储介质内,计算机可读存储介质是计算机程序产品的一部分。在一个示例中,计算机可读存储介质是非暂时性计算机可读介质。
说明书和附图说明用于分析目标软件的安全漏洞的方法和系统。本系统和方法利用静态分析扫描扫描目标软件的代码库以确定若干安全缺陷,和在一段时间,若干次迭代计算该目标软件的该代码库的若干代码度量以获取若干历史扫描。安全缺陷演变和若干代码度量之间的若干相关被分析来根据安全缺陷演变和代码度量之间的相关,按优先顺序列出若干安全缺陷,并且根据安全缺陷演变和代码度量之间的相关,预测与代码库相关联的风险。
本系统和方法可以具有若干优点,包括:(1)通过把安全漏洞与已知是复杂或不稳定的应用的区域关联,为按优先顺序列出静态分析中发现的漏洞的能力作准备;(2)为观察一段时间安全缺陷的模式,以把诸如,例如难以找到的或似乎来来去去的问题的、不能持续确定的问题除去或不再优先考虑的能力作准备;(3)为提高出现在展示了显著的再利用的应用的区域中的问题的优先级的能力作准备;(4)为提高出现在已知被频繁地访问或者在运行时环境中脆弱的应用的区域中的问题的优先级的能力作准备;(5)把展示了高复杂度或搅动的代码的区域中的安全漏洞的出现率相关,来预测并警告代码的区域正在趋向于变得更加有风险;(6)把展示了运行时环境中的频繁访问或安全攻击的代码的区域中的安全漏洞的出现率相关;和(7)根据软件代码复杂度和稳定性度量、过去分析中发现的安全缺陷等之间的相关的模式,预测软件中的安全缺陷。
已经给出了前述说明来示出并描述所述原理的示例。此说明并不旨在是穷尽的或将这些原理限制为所公开的任何精确形式。根据上述教导,可以有很多修改和变型。