固件和软件中的安全漏洞对电网安全构成重大威胁,因此电力公司需要快速决定如何修复这些漏洞。考虑到需要权衡的因素众多,包括打补丁和服务可靠性的平衡,以及大量漏洞的处理,电力行业的补救决策一直是一项挑战。遗憾的是,目前的修复决策大多依靠人工,耗时且成本高昂。本文提出了一种基于机器学习的自动化框架,用于电力公司补救决策分析。该框架已在一家电力公司进行了测试,并使用其提供的真实数据集进行了多次实验。结果显示,该解决方案具有很高的有效性。
软件和固件中的漏洞对电网安全构成重大威胁,因为这些漏洞可能被对手利用,控制电力系统的计算机和设备,发动破坏性攻击。因此,漏洞管理和补丁管理(VPM)已成为电网安全的重要组成部分。电力公司需要迅速修复漏洞以降低安全风险。然而,做出修复决策并非易事。首先,尽管打补丁可以修复漏洞,但重新启动资产可能导致服务中断。因此,紧急补丁通常很快安装,但电力公司通常按照维护计划定期安装其他补丁。对于需要立即关注但补丁可能导致关键服务中断的漏洞,可以先进行缓解,然后在下一个维护周期中进行修复。其次,漏洞的安全风险各不相同。例如,应用于用户浏览器的SCADA操作员工作站漏洞与服务器上的浏览器漏洞风险不同。组织应优先处理前者,后者则可以暂时搁置。补救决策应根据漏洞的风险优先级进行,以优化有限的安全资源。第三,补救决策需考虑漏洞和资产的多种因素,如漏洞是否可利用、资产是否可从互联网访问、漏洞的影响以及补丁是否会中断电力传输服务。这是一个复杂的推理过程。第四,任何时刻可用的安全漏洞数量往往超过组织的风险分析能力。在过去两年中,美国国家标准与技术研究院(NIST)的国家漏洞数据库(NVD)显示,已发现和公开报道的软件安全漏洞数量翻了一番。对于电力企业而言,每月数百甚至数千个资产存在数百乃至上千个漏洞并不罕见。
遗憾的是,目前电力公司的补救决策大多是人工做出的,这导致了决策延迟,通常是几周时间。这种延迟不仅增加了安全风险,还增加了漏洞管理的成本。为解决这个问题,我们提出了一种基于机器学习的自动化框架,用于电力公司的补救决策分析。我们的目标是通过预测性机器学习模型来预测每个漏洞的补救决策,从而缩短决策时间,降低安全风险,并减少VPM的成本。值得注意的是,我们的机器学习方法只推荐补救决策,最终决策权仍由人类操作者掌握。
基于机器学习的自动化框架利用了电力行业的两个最新发展:一是北美电力可靠性公司(NERC)关键基础设施保护(CIP)第5版的监管要求,确保电力公司中软件资产信息的可用性;二是NIST NVD和第三方服务提供商提供的格式良好且机器可读的漏洞信息的改进。本文的主要贡献包括:
许多企业使用漏洞管理和补丁部署解决方案,如GFI LanGuard、ManageEngine的Patch Manager Plus和SolarWinds的Patch Manager。然而,这些解决方案侧重于漏洞发现和补丁部署,而非优化漏洞修复资源的必要决策。大多数为电力公司设计的VPM解决方案也属于这一类,如Doble Engineering的PatchAssure、Flexera或FoxGuard Solutions。它们无法针对运行环境进行漏洞分析,也无法做出如何处理漏洞的决策。
在处理漏洞时,有一些公开的信息来源,如NIST NVD提供了一个结构良好且可靠的漏洞数据源。Vulners有一个自由访问的API,用于搜索漏洞信息和发现可用的漏洞。Exploit Database也允许用户搜索可用的漏洞。学术界也有一些研究,如分析大型漏洞数据集和漏洞属性趋势,但这些研究并未将漏洞度量与组织的独特环境相结合,分析漏洞修复决策。我们之前的工作首次对电力企业的漏洞修复方式进行实证分析,但并未预测修复行动。机器学习已被用于发现软件和源代码中的漏洞,以及检测攻击,但我们的工作则是运用机器学习来确定如何修复漏洞。
本节介绍了目前电力行业组织的做法。根据美国国土安全部(DHS)对VPM的推荐做法,当发现漏洞时,组织首先需要从漏洞和资产信息两方面考虑,分析漏洞是否会对系统造成影响,并确定对漏洞的修复行动,如打补丁和缓解。对于公用事业单位来说,实际执行VPM并不容易。几乎每天都有新的漏洞被发现,新的补丁被发布。公用事业单位必须花费大量时间和人力资源来分析漏洞并决定补救措施。NERC CIP标准要求严格的月度任务,以确定和评估安全漏洞和补丁。违规行为会受到密切监控,并定期实施货币处罚。同样,电力行业也有惩罚性的动机来严格遵守这些规定。
为了更深入地了解当前的做法,我们在电力行业进行了一项调查。由于与违法法规密切相关的信息共享受到限制,调查通过国家关键基础设施保护组织向电力公司广泛发放,并以匿名方式进行。我们收到了16家电力公司的回复。所有回复的组织都对漏洞和补丁进行了人工分析。其中约60%的企业每年需要处理超过3000个安全漏洞,一半的受访企业每月在VPM上花费超过400人小时。他们都会保存漏洞和补丁的历史记录。调查显示,VPM对于公用事业单位来说确实是一项耗时耗力的工作。
安全操作人员需要考虑许多因素来决定如何修复漏洞。这些因素包括漏洞信息,如漏洞是否影响完整性、可用性或保密性,是否已有对该漏洞的应用,通用漏洞评分系统(CVSS)评分等。此外,这些因素还包括资产信息,如易损设备是否是电网运行的关键现场设备,易损设备对保密性/完整性/可用性攻击是否敏感,软件是什么等。例如,如果一个漏洞影响非关键设备,且影响不大,且尚未有可利用的漏洞,那么现在无需处理,可以在下一个计划周期内进行修补(表示为Patch-Later)。如果漏洞可以被利用,并且位于用户工作站,则决定立即打补丁(用Patch-Now表示);如果是在关键服务器,由于给服务器打补丁可能会影响电网服务,则决定先缓解,在下一个计划周期中再打补丁(用Mitigate-Now-Patch-Later表示)。
这个过程是繁琐且重复的,我们提出要自动进行补救行动分析。直观上,我们可以考虑手动创建一组规则(其中每条规则由所有因素的因子值组合和该组合的决策组成),并应用它们来完成类似专家系统的自动化补救行动分析。然而,基于规则的分析存在实际挑战:为了覆盖所有可能的情况,规则的数量将成倍增加。例如,在我们的一个公用事业合作伙伴那里,大约考虑了16个因素,每个因素都有若干值。因子值的可能组合总数约为2400亿。首先手动生成这么多规则是不可行的,更不用说动态维护和更新规则了。
我们采用了应用机器学习的方法。我们提出了一种基于机器学习的补救决策分析框架(见图2),根据漏洞和资产特征,自动分析漏洞并预测补救决策,例如,是立即打补丁还是推迟到下一个定期维护周期打补丁。该框架的核心是机器学习模型,不仅可以输入补救行动,还可以输入易于验证的原因代码,以防操作人员需要进一步验证预测。该模型可以从历史操作数据中进行训练,这些数据包含漏洞信息、资产信息以及针对一组漏洞的人工补救决策。我们在第三节中描述的行业调查表明,所有被调查的电力公司都保留了他们的历史运行数据。这在电力行业中是预料之中的,因为对VPM的监管要求。我们的框架与第三节所述的国土安全部指南一致,但引入了基于机器学习的自动化,并提供了更多细节。
这项工作的目的是使机器学习的预测与人工决策一样准确。这可以通过更快地对漏洞做出补救决策,并更快地采取行动,帮助降低安全风险。我们承认,人工决策可能不是最佳或正确的,并将研究如何做出比人类操作者更好的决策留待未来的工作。
为了研究基于机器学习的框架在现实世界中的表现,我们根据某电力公司的VPM运行实际和数据对其进行了应用和实例化。由于VPM运行信息的高度敏感性,该公司要求我们对其名称进行匿名处理,因此我们在本文中称其为OrgA。
在该框架实例中,使用的漏洞特征是CVSS目的中的9个属性(见表一)。使用的资产特征包括工作站用户登录、外部可访问性、保密性要求、完整性和可用性要求。这些特征是人类操作员在做出修复决策时使用的。操作员使用的可能的修复行动是“立即修复”、“立即缓解”、“当前修复”和“当前缓解”。
为了获取资产特征,首先从公司的基线配置管理工具中获得一个资产列表。然后根据资产的功能将其分为43个组。对于每个资产组,确定每个资产特征的值。对于公司来说,这些资产特征和特征值是相当稳定的,不需要在几年内改变。为了获得漏洞和漏洞特征,根据软件/固件的名称和版本,为每个软件/固件生成一个CPE,这些软件/固件的名称和版本在基线配置管理工具中也有。然后我们开发了一个Python程序,通过NVD的API自动查询NVD,从NVD中检索适用的漏洞,包括其CVE和CVSS向量。漏洞检索需要定期进行,但Python程序使其自动化。需要注意的是,为应用程序汇总漏洞的第三方服务也提供了相同的CVE和CVSS信息,可以在我们的框架中使用。
决策树是在Python中使用Scikit-learn库完成的。公用事业单位维护着VPM的运行数据,包括历史漏洞、相关资产以及操作人员对其做出的人工修复决策。这样就可以应用该程序的历史数据来训练决策树模型。除了CVSS评分外,所有的特征都是分类的。我们将这些分类值转换为二进制数据。CVSS得分通过在0和1之间缩放进行归一化。模型训练完成后,当获得一个新的漏洞时,其漏洞和资产特征将被输入到模型中进行分析。模型会输出三个信息:预测决策、置信度和原因代码。置信度值在0到1之间,表示模型对预测的信心程度。它可以指导操作者选择预测进行人工验证,例如,验证那些置信度低的预测。原因代码可以帮助人工操作者了解和验证预测。表二显示了三种不同漏洞的预测示例。第一个例子显示,预测的操作是“Patch Later”,置信度为100%。这个选择的理由是,该漏洞不可利用,CVSS评分小于4.2,这表明资产影响较小,而且它的保密性影响中等。其他两个预测也可以用类似的方式解释。
本节介绍第五节所述框架实例的实验结果。
A. 数据集
我们从OrgA收集了两个数据集,每个数据集包含一年的数据。其中一个数据集是在2016年6月至2017年5月期间收集的,共有3476条漏洞数据记录。另一个数据集是从2018年1月到2018年12月收集的,共有3660条记录。为方便起见,我们将这两个数据集分别称为2017A和2018A。每条漏洞数据记录包括以下信息:其相关软件、漏洞特征、其相关资产和资产特征。此外,每条记录还包括人为操作者针对该漏洞做出的修复决策。
B. 决策树参数调整
为了防止树的深度过大,避免过度拟合,应适当设置叶子节点的最小样本数(如果节点中的样本数不超过最小数,该节点将停止分裂)和树的最大深度。这两个参数可以根据部署环境进行调整。在我们的实施中,使用应用程序的2017A数据集来调整这两个参数。具体来说,随机抽取70%的数据集作为训练数据,另外30%作为测试数据,根据测试性能对这两个参数进行调优。
我们对叶子节点中不同的最小样本数进行了实验,结果如图4所示。“minsamplesleaf”是一个叶子节点所需的最小样本数。“minsamplesleaf”越小,树的分裂程度越高,树的深度越大。如图4所示,当“minsamplesleaf”为8时,其预测精度最高,为97.22%。这里,预测精度是指预测的决策中与人类操作者人工决策一致的部分。当“minsamplesleaf”降低时,预测精度会降低,因为树太特殊,无法对新样本进行泛化。如果“minsamplesleaf”过大,在树浅的地方,预测精度也会降低,因为树没有捕捉到训练数据足够细的信息。因此,我们将其他实验中叶子节点的最小样本数设置为8。
C. 预测精度
在这个实验中,我们分别在OrgA的两个数据集上测试模型。每个数据集被随机分成两部分,70%用于训练,30%用于测试。我们使用预测精度和假阴性率来描述性能。假阴性率定义为人工决策为Patch-Now或Mitigate-Now-Patch-Later,但预测结果为Patch Later的那部分预测。假阴性率应该被最小化,因为这会导致漏洞修复延迟。结果如图6所示。对于2017A数据集,预测准确率为97.02%,假阴性率为1.24%。对于2018A数据集,预测准确率为98.82%,假阴性为1.09%。准确率相当高,这意味着使用机器学习来预测补救行动是可行的。
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分钟。结果显示了原因码的效率。这是合理的,因为原因码是从决策树中推导出来的(并进行了优化),而决策树在一定程度上根据决策过程中的判断条件的重要性对其进行了优先级排序,并将不重要的要素隐藏起来不考虑。
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%。结果表明,漏洞特征和资产特征都很重要。
G. 与其他形式的比较
我们将决策树模型与其他流行的机器学习模型:逻辑回归、支持向量机(SVM)、朴素贝叶斯、k-最近邻(KNN)和神经网络进行比较。采用2017A数据集,随机抽取其中70%作为训练数据,其他30%作为测试数据。如图10所示,决策树模型的表现优于其他模型。逻辑回归和神经网络的表现与决策树接近。但是,它们不像决策树那样容易解释。
考虑到最近在神经网络合理化方面的工作,我们改编并完成了一个带有理由生成器的神经网络模型[37],以便与决策树进行综合比较。由于篇幅所限,本文省略了改编和完成的细节,将在本文的扩展版本中提供。如图10所示,决策树在预测方面也优于带理由生成器的神经网络。在原因码方面,决策树生成的原因码平均长度约为4个,而神经网络的原因码平均长度约为8.5个。当原因码足以支持预测时(见第VI-D节),决策树较短的原因码更容易解释/验证。
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流程的价值。