基于机器学习的自动漏洞修复分析方法

 

摘要

固件/软件中的安全漏洞对电网安全构成了重要的威胁,因此电力公司在发现漏洞后应迅速决定如何补救。由于要考虑的因素很多,要在打补丁和服务可靠性之间保持平衡,以及要处理大量的漏洞,因此做出补救决策在电力行业是一项具有挑战性的任务。遗憾的是,目前的修复决策都是人工做出的,需要很长的时间。这增加了安全风险,也带来了高昂的漏洞管理成本。在本文中,我们提出了一个基于机器学习的自动化框架来自动化电力公司的修复决策分析。我们将其应用于一家电力公司,并对从该公司获得的两个真实运行数据集进行了大量实验。结果表明,该解决方案具有很高的有效性。

 

第一节. 导言

软件/固件中的漏洞对电网安全构成了重要的威胁,因为这些漏洞可能会被对手利用,控制电力系统的计算机和设备,并发动破坏性的攻击。为此,安全漏洞和补丁管理(VPM)是目前电网安全不可或缺的重要组成部分之一[1]。每个电力公司(发电、输电和/或配电的公司)都在其安全运营中心部署了VPM机制。当发现其资产存在安全漏洞时,电力公司需要决定如何快速修复漏洞以降低安全风险。

对于电力公司来说,做出修复决策并不容易。首先,虽然打补丁可以修复漏洞,但由于打补丁通常需要重新启动资产并导致服务中断,因此并不总是能够或最好给易受攻击的资产打补丁。因此,虽然紧急补丁的安装速度很快,但电力公司通常会按照一定的维护计划,如每季度对资产安装其他补丁。对于一些需要及时关注,但打补丁可能会造成关键服务中断的漏洞,可以先进行缓解,然后再在下一个维护周期中进行修补。其次,漏洞的安全风险远非同等。举例来说,应用于用户浏览器持续活动的监督控制和数据采集(SCADA)操作员工作站的谷歌浏览器漏洞与应用服务器上没有互联网访问的互联网浏览器漏洞的风险就大不相同。组织应立即对前者作出反应,但可以安全地暂时搁置后者。补救决定应该根据漏洞的风险反映出漏洞的优先级,以优化有限安全资源的使用。第三,补救决策应考虑漏洞和资产的诸多因素,如漏洞是否有可利用的代码,漏洞资产是否可以从互联网上到达,漏洞的影响,以及修补是否会中断电力传输服务等,因此是一个复杂的推理过程。第四,任何时候适用的安全漏洞数量往往超过组织的应用风险分析能力。在过去的两年里,美国国家标准与技术研究所(NIST)国家漏洞数据库(NVD)显示,发现和公开报道的软件安全漏洞数量增加了一倍多[2]。对于一个电力企业来说,每月数百个甚至更多的资产存在数百甚至上千个漏洞并不罕见。

遗憾的是,目前电力公司的补救决策大多是人工做出的。这就导致了在决定漏洞修复行动时的长时间延迟(通常是几周的时间)。这种漫长的延迟延迟了补救行动的应用,并带来了高安全风险。人工分析也消耗了大量的人力时间,这增加了VPM的成本。

为了解决这个问题,我们提出了一个基于机器学习的框架来自动化电力公司的补救决策分析。我们的想法是在漏洞特征和资产特征上应用一个预测性的机器学习模型来预测每个漏洞的修复决策。该模型可以建立在历史的、人工的修复决策数据上,以捕捉和模仿人类操作者如何做出决策,但它可以比人工分析更快地做出决策。因此,它的修复决策的延迟时间要短得多,这可以降低安全风险,同时由于减少了人工努力,降低了VPM的成本。值得注意的是,我们的机器学习方法只推荐补救决策,人类操作者拥有接受或不接受预测决策的最终权力。

基于机器学习的自动化框架利用了两个与电力行业相关的最新发展。首先,北美电力可靠性公司(NERC)关键基础设施保护(CIP)第5版[3]的监管要求,以维护基线配置,确保电力公司中形成良好的软件资产信息的可用性。其次,在过去的几年里,通过NIST NVD和第三方服务提供商提供的格式良好和机器可读的漏洞信息的可用性有了显著的改善[2]。

本文的贡献总结如下:

据我们所知,这是第一项研究在VPM中实现修复决策分析自动化的可行性的工作,目前在电力公司和许多其他组织中,修复决策分析是手工完成的。这种自动化不仅可以通过更及时地修复漏洞来提高安全性,而且还可以通过减少VPM所需的人力时间来降低成本。这项工作也证明了在安全操作中应用机器学习的价值。

我们提出了一个基于机器学习的框架,基于运营环境中的漏洞特征和资产特征进行自动化修复动作分析。我们选择决策树作为学习模型,因为它类似于人类的推理,并且可以生成推理代码,供操作人员在需要时验证预测。我们还设计了简化推理代码的方法,以方便验证,并提出了一种基于组的资产管理方法,以简化资产特征维护。虽然这个框架是在电力公司的背景下提出的,但这个框架可以应用于许多其他组织。

我们为一家电力公司实例化了该框架,并基于从该电力公司获得的两个一年期数据集进行了大量的实验评估。评估结果表明,该方法是非常有效的。

本文的其余部分组织如下。第二节回顾了相关工作。第三节介绍了当前电力公司VPM的实践,并介绍了一项调查的结果。第四节介绍了基于机器学习的自动化框架。第五节介绍了该框架在某电力公司的实例。第六节介绍了评估结果。最后两节提出讨论并作为本文的结论。

 

第二节. 相关工作

有许多供企业使用的 VPM 解决方案,如 GFI LanGuard [4]、ManageEngine 的 Patch Manager Plus [5]和 SolarWinds 的 Patch Manager [6]。然而,这些解决方案侧重于漏洞发现和补丁部署,而不是优化漏洞修复资源的必要决策。大多数为电力公司VPM设计的解决方案也属于这一类,如Doble Engineering的PatchAssure[7]、Flexera[8]或FoxGuard Solutions[9]。它们无法针对运行环境进行漏洞分析,也无法做出如何解决漏洞的决策。

在解决漏洞时,有一些公开的信息来源。NIST NVD[10]提供了一个结构良好、可靠的漏洞数据源,以及它们所报告的相应信息。Vulners[11]有一个可自由访问的API,用于搜索漏洞信息和发现可用的漏洞;Exploit Database[12]也允许用户搜索可用的漏洞。

学术界也有这方面的研究。[13] 和 [14]分析了大型漏洞数据集,并报告了漏洞属性和披露日期的趋势。[15]、[16]和[17]分析了补丁和补丁行为,比如从发布补丁到安装补丁或有效保护漏洞的时间窗口。[18]、[19]、[20]和[21]描述了优先打补丁的方法。[22]和[23]基于攻击图分析了网络攻击的风险。但是,这些作品并没有将漏洞度量与组织的独特环境相结合,分析漏洞修复决策。我们之前的工作[24]首次对电力企业的漏洞修复方式进行了实证分析,但并没有预测修复行动。机器学习已经被应用于发现软件和源代码中的漏洞[25][26][27][28][29]-[30]和检测攻击[31]、[32],但我们的工作使用机器学习来确定如何补救漏洞。

图1.漏洞和补丁管理流程

 

第三节.电力事业中的Vpm现行做法

本节介绍目前电力行业组织的做法。按照美国国土安全部(DHS)[33]对VPM的推荐做法,如图1所示,当发现漏洞时,组织首先需要从漏洞和资产信息两方面考虑,分析漏洞是否会对系统造成影响,并确定对漏洞的修复行动,如打补丁和缓解。

对于事业单位来说,在实践中进行VPM并不容易。几乎每天都有新的漏洞被发现,新的补丁被发布。公用事业单位必须花费大量的时间和人力资源来分析漏洞并决定补救措施。NERC CIP标准要求严格的月度义务,以确定和评估安全漏洞和补丁。通过NERC对标准的遵守情况进行密切监控,并定期实施货币处罚。同样,电力行业也有惩罚性的动机来严格遵守这些规定。

为了更深入地了解当前的做法,我们在电力行业进行了一项调查。由于与遵守法规密切相关的信息共享受到限制,调查通过国家关键基础设施保护组织向电力公司广泛发放,并以匿名方式进行。我们收到了16家电力公司的答复。100%的回复组织对漏洞和补丁进行人工分析。其中约60%的企业每年需要处理超过3000个安全漏洞,一半的受访企业每月在VPM上花费超过400人小时。他们都会保存漏洞和补丁的历史记录。调查显示,VPM对于公用事业单位来说确实是一项耗时耗力的工作。

 

第四节 基于机器学习的整治行动分析框架

安全操作人员会考虑很多因素来决定对漏洞的补救行动。这些因素包括漏洞信息,如该漏洞是否影响完整性、可用性或保密性,是否已经有了对该漏洞的利用,通用漏洞评分系统(CVSS)评分是多少[34]等。此外,这些因素还包括资产信息,如易损设备是否是电网运行的关键现场设备,易损设备对保密性/完整性/可用性攻击是否敏感,软件是什么等等。例如,如果一个漏洞在非关键设备,只是影响不大,而且还没有可利用的漏洞,那么现在不需要处理,可以在下一个计划周期内进行修补(表示为Patch-Later)。如果漏洞可以被利用,而且是在用户工作站,则决定立即打补丁(用Patch-Now表示);如果是在关键服务器,因为给服务器打补丁可能会影响电网服务,则决定先缓解,在下一个计划周期中再打补丁(用Mitigate-Now-Patch-Later表示)。

这个过程是繁琐和重复的,我们提出要自动进行补救行动分析。直观上,我们可以考虑手动制作一组规则(其中每条规则由所有因素的因子值组合和这个组合的决策组成),并利用它们来实现类似专家系统的自动化补救行动分析[35]。然而,基于规则的分析存在着实际的挑战:为了覆盖所有可能的情况,规则的数量将成倍增长。例如,在我们的一个公用事业合作伙伴那里,大约考虑了16个因素,每个因素都有一些值。因子值的可能组合总数约为2400亿。首先手动生成这么多规则是不可行的,更不用说动态维护和更新规则了。

图2:基于机器学习的框架

我们采用了一种利用机器学习来自动分析的方法。我们提出了一个基于机器学习的补救决策分析框架(见图2),根据漏洞和资产特征,自动分析漏洞并预测补救决策,例如,是现在打补丁还是推迟到下一个定期维护周期打补丁。该框架的核心是机器学习模型,它不仅可以输出补救行动,而且还可以输出一个易于验证的原因代码,以防操作人员想要非常一些预测。该模型可以从历史操作数据中进行训练,这些数据包含漏洞信息、资产信息以及针对一组漏洞的人工补救决策。我们在第三节中描述的行业调查表明,所有被调查的电力公司都保留了他们的历史运行数据。这在电力行业是意料之中的,因为对VPM的监管要求。我们的框架与第三节所述的国土安全部指南一致,但将基于机器学习的自动化引入其中,并提供了更多细节。

这项工作的目标是使机器学习的预测与人工决策一样准确。这可以通过更快地对漏洞做出补救决定,并更快地采取行动,帮助降低安全风险(分析见第六-H节)。我们承认,人工决策可能不是最佳或正确的,并将研究如何做出比人类操作者更好的决策留待未来的工作。

表一-:漏洞特征

A. 脆弱性特征和管理

NVD已经很好地确立了漏洞特征。在NVD中,每个漏洞都带有一套CVSS指标,从不同方面描述漏洞的特征。在我们的框架中,我们使用CVSS指标作为漏洞特征,因为它们与风险评估和修复决策分析相关。这些特征及其可能的值如表I所示。CVSS得分是由指标确定的0到10之间的数字,一般来说,用来描述一个漏洞的整体严重程度。攻击向量表示漏洞如何被利用,如通过网络或本地访问。Exploitability表示漏洞被利用的可能性。高为最高级别,表示漏洞代码已经广泛存在,未被证实为最低级别,表示没有漏洞代码,中间还有两个级别。用户交互(权限,resp.)表示攻击者利用该漏洞所需的用户交互量(权限级别,resp.)。其他四个指标描述了攻击的复杂性以及攻击在保密性、完整性和可用性方面的影响。这些指标的详细解释可以在[34]中找到。

NVD每天都会公布各种软件产品的漏洞。每个漏洞由一个独特的通用漏洞和暴露(CVE)ID识别,如CVE-2016-8882。组织可以通过识别其资产的通用平台枚举(CPE)名称[10]来检索其资产的漏洞(包括CVE和漏洞特征),然后使用CPE向NVD查询(NVD提供API进行此类查询)。CPE是一种表示软件的命名标准,其结构方式使其能够自动搜索适用的漏洞[36]。一个组织可以手动识别一次资产的CPE,并使用多年而不需要更新,因此维护成本很低。

值得注意的是,该学习框架是通用的,可以支持公司可能使用的其他漏洞功能(例如,第三方服务提供的其他功能)。另外,如果公司在补救决策分析中只使用部分CVSS指标,那么学习模型可以建立在这些指标上。

B. 资产特点和管理

虽然脆弱性特征在维护公开披露的脆弱性信息方面有一个完善的CVE标准,但脆弱性特征本身并不能提供足够的信息来对个别网络资产进行有意义的补救分析。人们对待在互联网上提供直接服务的脆弱系统(如网络服务器)与对待应用于高度控制的本地网络中的孤立系统的同样的脆弱性是截然不同的。同样,浏览器的弱点对不同的网络资产的适用性也非常不同。很明显,一台主要用于电子邮件和网页浏览的办公室电脑,比一台几乎没有用户交互的服务器,恰好安装了相同的浏览器,其脆弱性要明显高得多。NVD CVSS系统建议使用保密性要求、完整性要求和可用性要求三个资产特征来计算环境得分。但是,仅仅使用这三个特征是不够的,安全运营者还要考虑其他特征。例如,当一个漏洞可以通过网络发起时,资产是否可以被外部访问是一个关键因素。因此我们又确定了两个资产特征来补充这三个特征。与环境CVSS系统的另一个不同之处在于,我们的方法使用机器学习将这些特征整合到一个决策模型中,而不是使用简单的公式计算环境得分。这五个特征描述如下。

工作站用户登录。(是或否)—与漏洞的用户交互特征相关联,它意味着网络资产是否为人类操作者提供了交互式工作站。如果该资产不具备交互式使用功能,那么影响Web浏览器等应用的漏洞影响将大大降低。

外部可访问性。(High, Authenticated-Only or Limited) – 与漏洞的攻击向量特征相关联,它指的是网络资产在网络系统之外的外部可访问程度。例如,”高 “可能是指提供公共内容的网络服务器,而 “认证-仅 “可能是一组远程访问的应用服务器,在使用前需要登录。Limit指的是不能直接连接到外部网络。

保密性要求。(高、中、低) – 与漏洞的保密性影响特征相关联,指资产的保密性要求是否很高。

完整性要求:(Integrity Requirement)。与保密性要求类似,但侧重于完整性。

可用性要求。与保密性要求类似,但侧重于可用性。

企业可以根据自己的实际情况,增加/删除一些资产功能,以满足自己的需求。

基于群体的资产特征管理 而软件漏洞特征集有一个世界性的社区来维护一致的机器可读特征(即通过NVD),网络资产特征必须由组织来维护。根据我们的调查,一个组织可能有数千种资产,而且资产可能会经常变化(即一种资产可能会被删除或增加)。由于资产数量庞大,且动态变化,对每项资产的特征值进行分析和维护非常繁琐。为了降低维护成本,我们根据资产的作用或功能,将资产划分为资产组。例如,特定厂商和功能的所有远程终端设备(RTU)都可以归入一个组,因为它们具有相似的功能。同样,所有的防火墙也可以归入一个组。同一组中的资产共享同一组资产特征值。那么人类操作员就可以确定和维护每组的特征值。在我们对电力公司的实验中,通过资产数量的大幅增加,分类组别基本保持一致。例如,控制中心的操作员工作站无论有5个还是100个,其特征都是一样的。虽然资产可能会来来去去,但我们发现出现一个全新的资产组的情况要少得多。由于组的数量远小于资产的数量,所以分组将大大减少维护特征值所需的工作量。

C. 机器学习算法选择

今天有很多机器学习算法,我们需要确定一个最好的算法来解决我们的问题。在这个框架中,我们采用决策树模型来实现整治行动分析的自动化,原因如下。(1)基于决策树的决策类似于人类的推理。在树的每个层次上,模型选择最重要的因素,并根据因素的价值将问题空间分割成多个分支。与许多其他机器学习模型如神经网络和逻辑回归等不太透明不同,决策树模型可以让我们看到模型每一步的工作,知道模型是如何做决策的。因此可以对决策树的预测进行解释,并推导出一个原因代码来解释预测。人工操作者可以根据理由代码来验证预测结果。(2)对于这个VPM自动化问题,在我们的实验中,决策树与其他几种机器学习算法相比,被证明具有非常好的性能。

为了便于说明,图3显示了在修复行动分析背景下,训练出来的决策树模型样本。基于该树的漏洞预测过程如下。当一个新的漏洞数据记录被输入到模型中进行预测时,模型将首先查看根节点的可利用性特征。如果该漏洞性不是Unproven,则会去检查资产特征 “工作站登录”。如果工作站允许用户登录,说明它面临的风险较大,必须立即打补丁。其他树枝也可以通过其他记录进行类似的遍历。

图 3: 训练好的决策树模型的一个例子

D. 原因代码生成

对于一个预测性的机器学习工具来说,很难做到100%准确。为了提高预测决策的透明度,我们的方法为人类操作者提供了预测置信度和模型选择决策的原因的可读性描述(称为原因代码)。决策树的使用使得理由代码的生成是可行的。训练好的决策树模型是一个以树形结构组织起来的连接节点和分割规则的集合。那么通过遍历树的路径,结合路径中节点的拆分规则,就可以得出foreach叶子节点(决策节点)的理由代码。但是,对于一些长的路径(例如,我们在一个公用事业的数据上建立的一棵树有18个节点的路径),如果简单地组合拆分规则,理由代码可能会变得非常长,冗余,而且难以阅读。为了解决这个问题,我们使用两种规则来简化和缩短从决策路径中得出的原始理由代码。

交集:我们可以通过寻找范围交集来减少冗余。例如,对于CVSS分数这样的连续数据,如果理由码中一个条件是 “CVSS分数大于5.0”,另一个条件是 “CVSS分数大于7.0”,那么我们就可以找到交集,理由码就可以简化为 “CVSS分数大于7.0”。

补全:对于一些特征在一个路径的几个条件中出现的,我们可以用它的补全条件来代替这些条件。例如,对于完整性影响,可能的值集是完整、部分、无。如原因码为 “完整性影响不为None,完整性影响不为Partial”,由于Partial、None的补足条件为Complete,所以原因码可以简化为 “完整性为Complete”。

 

第五节.框架的实例。一个电力公司的案例研究

为了研究基于机器学习的框架在现实世界中的工作情况,我们根据某电力公司的VPM运行实践和数据,对其应用并实例化了该框架。由于VPM运行信息的高度敏感性,该公司要求我们对其名称进行匿名化处理,因此我们在本文中称其为OrgA。

在本框架实例中,使用的漏洞特征是CVSS指标中的9个属性(见表一)。使用的资产特征是工作站用户登录、外部可访问性、保密性要求、完整性要求和可用性要求。这些特征是人类操作员在做出修复决策时使用的。操作员使用的可能的修复行动是 “现在修补”、”现在缓解”、”以后修补 “和 “以后修补”。

为了获得资产特征,首先从公司的基线配置管理工具中获得一个资产列表。然后根据资产的功能将其分为43个组。对于每个资产组,确定每个资产特征的值。对于公司来说,这些资产特征和特征值是相当稳定的,不需要在几年内改变。为了得到漏洞和漏洞特征,根据软件/固件的名称和版本,为每个软件/固件生成一个CPE,这些软件/固件的名称和版本在基线配置管理工具中也有。然后我们开发了一个Python程序,利用CPE作为参数,通过NVD的API自动查询NVD,从NVD中检索出适用的漏洞,包括其CVE和CVSS向量。漏洞检索需要经常进行,但Python程序使其自动化。需要注意的是,为实用程序汇总漏洞的第三方服务也提供了同样的CVE和CVSS信息,可以在我们的框架中使用。

决策树是基于库Scikit-learn用Python实现的。公用事业单位维护着VPM的运行数据,包括历史漏洞、其相关资产,以及操作人员对其做出的人工修复决策。这样就可以利用该实用程序的历史数据来训练决策树模型。除了CVSS评分之外,所有的特征都是分类的。我们将这些分类值用一个热编码转换为二进制数据。CVSS得分通过在0和1之间的缩放进行归一化,Gini被用作衡量树的分裂的指标。值得注意的是,应根据数据集对一些决策树参数进行调整,以达到最佳性能(详见第六节B)。模型训练完成后,当获得一个新的漏洞时,其漏洞和资产特征将被输入到模型中进行分析。

模型会输出三个信息:预测决策、置信度和原因代码。信度值在0到1之间,表明模型对预测的信心程度。它可以指导操作者选择预测进行人工验证,例如,验证那些置信度低的预测。理由代码可以帮助人工操作者理解和验证预测。表二显示了三种不同漏洞的预测实例。第一个例子显示,预测的操作是 “Patch Later”,置信度为100%。这个选择的理由是,该漏洞不可利用,CVSS评分小于4.2,这表明资产影响较小,而且它的保密性影响中等。其他两个预测也可以用类似的方式来解释。

表二:三个漏洞的样本预测结果

 

第六节. 评价

本节介绍第五节所述框架实例的实验结果。

A. 资料集

我们从OrgA收集了两个数据集,每个数据集包含一年的数据。其中一个数据集是在2016年6月至2017年5月收集的,有3,476条脆弱性数据记录。另一个数据集是从2018年1月到2018年12月收集的,有3,660条记录。为方便起见,我们将这两个数据集分别称为2017A和2018A。每条漏洞数据记录包括以下信息:其相关软件、漏洞特征、其相关资产和资产特征。此外,每条记录还包括人为操作者针对该漏洞做出的修复决定。

B. 决策树的参数调整

为了防止树的深度过大,避免过度拟合,应适当设置叶子节点的最小样本数(如果节点中的样本数不超过最小数,该节点将停止分裂)和树的最大深度。这两个参数可以根据部署环境进行调整。在我们的实施中,使用实用程序的2017A数据集来调整这两个参数。具体来说,随机抽取70%的数据集作为训练数据,另外30%作为测试数据,根据测试性能对这两个参数进行调优。

我们对叶子节点中不同的最小样本数进行了实验,结果如图4所示。”min_samples_leaf “是一个叶子节点所需的最小样本数。”min_samples_leaf “越小,树的分裂程度越高,树的深度越大。如图4所示,当 “min_samples_leaf “为8时,其预测精度最高,为97.22%。这里,预测精度是指预测的决策中与人类操作者人工决策相同的部分。当 “min_samples_leaf “降低时,预测精度会降低,因为树太特殊,无法对新样本进行泛化。如果 “min_samples_leaf “过大,在树短的地方,预测精度也会降低,因为树没有捕捉到训练数据足够细的信息。因此,我们将其余实验中叶子节点的最小样本数设置为8。

图4:在min_leaf_samples上的预测情况。

图5:对树的深度进行预测

不同最大树深下的预测精度如图5所示。当树深超过25时,预测精度不再变化。通常情况下,当最大深度较大时,允许树更深,会出现过拟合问题。但是,在这种情况下,由于最小叶子数设置为8,当叶子样本等于或小于8时,树就会停止分裂,因此不能太深。我们将其余实验中的树最大深度设置为50。

C. 预测精度

在这个实验中,我们分别在组织OrgA的两个数据集上测试模型。每个数据集被随机分成两部分,70%用于训练,30%用于测试。我们使用预测精度和假阴性率来描述性能。误判率定义为人工决策为Patch-Now或Mitigate-Now-Patch-Later,但预测结果为Patch Later的那部分预测。误报率应该被最小化,因为它延迟了漏洞的修复,而漏洞应该更及时地被处理。结果如图6所示。对于2017A数据集,预测准确率为97.02%,假阴性率为1.24%。对于2018A数据集,预测准确率为98.82%,假阴性为1.09%。准确率相当高,这意味着使用机器学习来预测补救行动是可行的。

虚假预测的探索 虽然机器学习预测的准确率已经很高了,但我们还是想弄清楚是什么原因导致了虚假预测。对于2017A数据集,在探究了2.98%的错误预测后,我们发现这些错误预测主要是由于历史数据集中的人工补救决策不一致造成的,一些具有相同特征的漏洞被赋予了不同的人工决策,这会让决策树(其实也包括其他任何学习算法)感到困惑。同样的问题也导致了2018A数据集上的预测错误。

这种情况的发生有几个原因。一家公用事业公司可能有多个安全操作员分析漏洞并做出补救决策。不同的操作员可能会对具有相同特征的漏洞,甚至对相同的漏洞做出不同的决定。即使只有一個操作員,對於兩個具有相同特徵的保安漏洞,他/她可能在不同時間(例如上月和本月)處理時作出不同的決定。尤其是对于风险等级不在明显的高风险端(通常会进入Patch-Now和Mitigate-Now-Patch-Later)或明显的低风险端(通常会进入Patch Later),而是在中间的漏洞,更是可能出现这种情况。这是一种人为的错误,操作者无法完全避免。

对于每一组特征相同但人工决策不同的漏洞记录,如果我们假设这组记录中的多数决策是正确的决策,而将少数决策的记录视为错误并从数据集中删除(2017A数据集约有3%的记录被删除),那么2017A数据集的预测准确率达到99.8%,假阴性率达到0.20%,2018A数据集也有类似的提升。这个结果表明,如果训练数据集中的人工决策不一致的情况较少,那么预测性能可以得到显著提升。

我们还发现,对于特征相同但人工决策不同的记录,其预测置信度会相对较低。例如,假设决策树的一个叶子节点包含四条特征完全相同的记录,其中三条被Patch-Now补救,一条被Mitigate-Now-Patch-Later补救。那么决策树将输出Patch-Now作为预测决策,置信度为0.75。如果操作者能够以相对较低的置信度(即低于0.9)来验证/纠正预测,那么可以将2017A数据集的性能提高到99.42%的准确率和0.38%的假阴性,2018A数据集的准确率为99.45%,假阴性为0.09%。由于只有10%左右的预测置信度在0.9以下,所以人工验证的时间将比人工做出所有的补救决策要短得多。

D. 原因代码验证

每一个预测都会附带一个理由码,以便用户在需要的时候可以对预测进行验证。在这里,我们首先研究一下理由码的长度。我们用一个理由码所具备的条件数来表示其长度。例如,理由码 “未经证实的可利用性,CVSS评分小于4.2,保密性影响中等 “的长度为3,因为它包含了3个条件。对于第六节-C所述的预测,原因代码的平均长度为6.9个条件。应用第四节-D中提出的长度减少规则后,平均长度减少到3.6个条件。例如,原因代码 “未经证实的可利用性,CVSS得分小于9.15,外部可访问性不高,CVSS得分小于6.30,外部可访问性未经过认证,可用性影响中等 “可以减少为 “未经证实的可利用性,CVSS得分小于6.3,外部可访问性有限,可用性影响中等”。长度缩减规则可以大大缩短理由码的长度,使其更容易理解和验证。

然后,我们测试理由代码是否足以验证预测决策,检查验证理由代码所需的时间,并与根据相应漏洞的原始特征验证预测所需的时间进行比较。为此,我们从测试数据中随机选取了100个预测,并请组织OrgA的安全操作员根据理由代码和基于原始特征验证这些预测。

结果显示,100个理由代码中,有98个足以验证预测决策。通过原因代码验证,发现有一个预测是错误的。另外一个原因码不足以验证预测。

理由码验证和基于原始特征的验证所花费的时间如图7所示。大部分原因码可以在很短的时间内完成验证。35%的理由码可以在5秒内完成验证,90%的理由码可以在45秒内完成验证。平均验证时间为28.8秒。从图中可以看出,基于原始特征的验证比基于理由码的验证需要更多的时间。只有35%的预测可以在60秒内完成验证,约40%的预测需要4分钟以上的验证时间。基于原始特征验证的平均时间为7分钟。结果显示了理由代码的效率。这是合理的,因为理由代码是从决策树中推导出来的(并进行了优化),而决策树在一定程度上根据决策过程中的判断条件的重要性对其进行了优先级排序,并将不重要的因素隐藏起来不考虑。

图7:基于理由代码和基于特征的验证时间

图8:每月预测精度

E. 用动态训练进行预测

在上述实验中,将十二个月的数据随机分为训练数据和测试数据。在实际操作中,决策树模型应该动态更新,并使用近期的历史数据进行训练,如第四节-E所讨论的那样。在本实验中,我们通过动态训练来测试模型的预测精度。特别是,我们假设操作者随机选取每个月10%的预测结果进行检查和验证。在每个月的时候,我们将最近6个月被操作者手动检查过的漏洞和决策作为训练数据,训练出一个新的决策树模型,并用它来预测下个月的情况。2018A数据集上的预测结果如图8所示。x轴表示预测的是哪个月,y轴是预测精度。例如,当x轴为7时,它用前6个月数据的10%来训练模型,预测第7个月的决策,然后用第二个月到第7个月数据的10%来训练模型,预测第8个月的漏洞。可以看出,不同月份的预测准确率不一样,但总体上是很高的。2017A数据集在动态训练下的预测性能也有类似趋势。因此,动态训练是可行的。

F. 不同特征集的预测

上述实验使用了16个特征,包括软件名称、漏洞特征、资产名称和资产特征。在此,我们评估了不同特征对预测的有用性,并在图9中显示了2017A数据集上的结果。在没有软件名称和资产名称作为特征的情况下,预测精度只是略有下降。但是,如果没有软件名称、资产名称和资产特征(即只有漏洞特征),预测准确率下降到83.78%;如果没有软件名称、资产名称和漏洞特征(即只有资产特征),预测准确率下降到68.33%。结果表明,漏洞特征和资产特征都很重要。

图9:不同特征集的预测情况

G. 与其他模式的比较

我们将决策树模型与其他流行的机器学习模型:逻辑回归、支持向量机(SVM)、奈夫贝叶斯、k-最近邻(KNN)和神经网络进行比较。采用2017A数据集,随机抽取其中70%作为训练数据,其余30%作为测试数据。如图10所示,决策树模型的表现优于其他模型。Logistic回归和神经网络的表现与决策树接近。然而,它们不像决策树那样容易解释。

考虑到最近在神经网络合理化方面的工作,我们改编并实现了一个带有理由生成器的神经网络模型[37],以便与决策树进行综合比较。由于篇幅所限,本文省略了改编和实现的细节,将在本文的扩展版本中提供。如图10所示,决策树在预测方面也优于带理由生成器的神经网络。在理由码方面,决策树生成的理由码平均长度约为4个,而神经网络的理由码平均长度约为8.5个。当理由码足以支持预测时(见第VI-D节),决策树较短的理由码更容易解释/验证。

图10:与其他机器学习模型的比较

H. 补救分析延迟和成本

补救决策分析的延迟 这里,我们分析了通过自动化决策分析为OrgA节省的时间。我们首先计算了基于机器学习的框架所需的时间。漏洞分析和决策预测的时间是以毫秒级为单位的,可以忽略不计。当机器学习模型被动态训练时,它将需要操作者验证10%的漏洞预测,如第六节-E所讨论的那样。如第六节-D所示,预测验证的平均时间为28.8秒。对于2017A数据集所覆盖的3476个漏洞,OrgA的平均验证时间为2.3个人小时/月(这是典型的决策周期)。假设只有一个运营商。可以在2.3小时内完成,使得决策延迟为2.3小时。

根据第六节-D中的测试,手动分析每个漏洞的平均时间为7分钟。OrgA的人工分析总时间为每月33.8人小时。同样,假设只有一个操作员。理论上,这个任务可以在33.8小时内完成,使得决策延迟33.8小时。但在实际工作中,当一项任务所需时间较长时,完成任务的总时间跨度将不仅仅是人时那么简单。人的操作者不可能像机器一样24小时工作,可能会时不时地休息一下,还需要执行很多其他的任务,比如开会、汇报、培训等,也可能会因为其他事情而分心,比如互相聊天。这些因素都会产生额外的补救决策的延迟。这可能会使分析过程跨越几天甚至几周的时间。我们在第三节中描述的调查也验证了这一点,50%的参与者表示他们需要16天以上的时间来完成每个周期的补救行动分析。

根据这个草图分析,用机器学习完成补救决策分析的延迟可能是几个小时,但用人工决策的延迟可能是几天甚至几周。如果能更早地做出漏洞的修复决策,就能更早地发现那些高风险的漏洞(现在需要修补或缓解的漏洞),从而更早地进行修复,这将大大降低电力企业的安全风险。因此,使用我们的机器学习框架的公用事业公司面临的风险将大大降低。

补救成本决策分析 由于安全运营的VPM问题是一个人力资源配置的问题,我们分析机器学习带来的人员成本节约。从上面的延迟分析可以看出,通过机器学习,每个月可以为OrgA节省31.5人小时。这样算下来,每年可以节省378人小时。对于规模较大、资产较多的公用事业单位,节省的费用就更多了。例如,在我们的调查中,一家参与公司表示它每年有12000个漏洞。这样一来,总共可以节省1305人小时。

 

第七部分:讨论

尽管拟议的框架只在电力公司上进行了测试,但与国土安全部的准则是一致的,它具有普遍性,可适用于许多其他组织,特别是关键基础设施,因为它们面临着类似的风险防范管理挑战和制约因素。将该框架应用于其他组织的方式与应用于电力公司的方式类似,但所确定的资产特征和补救决定可能有所不同。

在某些情况下,操作环境可能会影响补救行动。例如,当一个漏洞爆发并成为头条新闻时(如Meltdown漏洞),公司的管理员可能会因为公众声誉的压力而希望尽快对其进行修复。那么运营者可能会选择 “现在修补 “或 “现在缓解”—“以后修补”,而不是 “以后修补”,即使基于漏洞/资产特征的决策树预测是 “以后修补”。在这种情况下,操作者可以使用他们的决策来覆盖决策树的预测。

 

第八节. 结论

本文解决了需要更有效的决策支持来解决VPM挑战的问题,并提出了一个基于决策树的框架来自动分析漏洞的补救决策。我们对为一家电力公司定制的框架实例进行了测试,测试了从该公司获得的两个数据集。结果显示出较高的预测精度和时间节省。这些结果证明了应用机器学习来自动化VPM流程的价值。

(完)