编译 编译者按:瑞士联邦理工学院计算机工程与网络安全实验室Stefan Frei博士发表了一篇关于大规模漏洞分析的研究报告,介绍了漏洞生命周期以及如何大规模处理漏洞的基本情况,现编译如下,供参考。 摘要 网络和系统的安全程度由其自身组成元素软件漏洞所决定。防御大规模攻击需要对漏洞生命周期有一定的了解。特别需要了解的是,利用和修补漏洞以及其中的信息发布在行业内是如何处理的。
本文研究如何大规模处理漏洞,分析了从1995年以来发布的超过80000条安全建议,量化了利用和补丁前后出现的差距,并提供了一个数据分析报告,为将来的漏洞分析和风险管理奠定了基础。
一、 简介
大多数软件的缺陷是在设计和实现阶段引入的,这些缺陷将会导致潜在的针对操作系统和应用程序的攻击和滥用的漏洞。当程序包含的缺陷在网络环境或可以访问互联网的环境中运行时,漏洞将会带来重大的影响。漏洞被发现、发布和利用后,将会导致独立的和大规模的攻击。
安全行业和软件厂商尝试通过提供相应对策来跟上新发现漏洞的速度,如病毒特征、入侵防御系统和软件补丁等等。现今庞大复杂的信息通讯系统的使用和操作存在内在所固有的安全风险,为了防止风险,仅仅分析漏洞的技术细节是远远不够的。想要了解网络的安全风险,就必须知道和理解漏洞的生命周期和演变过程。
随着时间推移,发布漏洞的累积数量(见图一)是一个有趣的指示器,它不仅仅是一个分析,同时标志着大规模攻击风险的逐渐增加。但是当漏洞为众人所知或补丁可用时,下面图表的数字并不包含此时系统潜在的暴露风险信息。
图一 1996到2006年间漏洞发布累积数量和每日发布速率
我们通过研究如何大规模处理漏洞来解决这个问题。因此,我们正在收集已知漏洞数据,并根据发现、发布、利用和补丁日期来分析它们。特别地,我们在寻找以下问题的答案:
1.在大量漏洞数据分析的基础上,发现和发布漏洞时间关系是什么?如何关联安全补丁的出现时间和漏洞利用的出现时间?
2.安全行业作为一个整体如何应对安全威胁?并且随着时间的推移,应对机制如何发展?
3.我们如何提供必要的数据来进行风险管理研究? 为了分析,我们从公开可用数据源收集了发现、利用和补丁日期的相关信息,如漏洞数据库和安全建议。我们把这些日期和漏洞的发布日期关联起来,并为之提出了严格的定义。
这个分析的关键方面是数据质量。为了获得一个全面的数据集,我们使用了两个公开可用漏洞数据库中的漏洞信息:国家漏洞数据库(NVD)和开源漏洞数据库(OSVDB)。遗憾的是,这些数据对我们的分析来说并不足够精确:其中一个数据库不提供利用日期信息,两个数据库都不提供补丁日期信息,且两个数据源中的发布日期并不一致。为了克服这个限制,我们从公开可用数据源系统地收集和检查了超过80000条建议,如:Security Information Providers(SIP’s)即CERT、SecurityFocus、ISS x-Force、Secunia、FrSirt、厂商和邮件列表。
我们规范化了与发布日期有关的发现、利用和补丁可用日期,并分析了这些时间点的分布。因而我们能够量化漏洞生命周期之间的时间差别,并确定趋势。我们发现0-day利用的数量在迅速增加。0-day利用是在补丁发布前可用的利用。对比补丁可用日期和发布日期,我们也可以测量软件公司为已知漏洞提供补丁的效率或速度。最后,我们观察到,漏洞利用要早于补丁出现。
在整个数据分析过程中,我们也检查了利用的分布和补丁的可用性。此外,我们给出了分布函数,如Pareto和Weibull,都与数据相匹配。我们为其他人提供了一个简单的方法在他们自己的分析中使用我们的数据。例如,这些函数可以用来评估和优化在各种成本损失假设下的补丁策略。 总结一下,本文做出了以下贡献:
对超过14000个漏洞做出了全面的研究,关于他们的发现、发布、利用和补丁日期。并且量化了被称为0-day漏洞的增长数量。 量化了漏洞发布之后的漏洞利用和补丁时间间隔。 整理数据并生成了常用统计分布函数,从而奠定了进一步研究和风险管理的基础。
二、 漏洞生命周期
这一节中我们引入了本文所用的基本概念和术语。首先,我们对图二所示漏洞生命周期进行了描述。具体来说,我们重温了发现、利用以及补丁时间的概念,提出了公布时间的概念。我们还对漏洞生命周期各阶段及其中涉及到的参与方进行了解释。
1. 发现时间、公布、利用及补丁的概念
在不同的时间点把一个漏洞的生命周期分为若干阶段,每个阶段都反映出各自的状态及所伴随的风险。为把握这些状态,我们提出了以下4个时间点:漏洞的发现、发布、利用和补丁时间。图二时间线上方表示的就是这些时间点。图中时间线下方显示的是生命周期中的重要阶段。关于发现、利用以及补丁时间的解释均是出自直觉推测,因此我们为漏洞发布时间提出了一种新的概念。
图二 漏洞生命周期
需要注意的是,利用、发布以及补丁时间的顺序并不是固定的。利用和补丁时间可能在发现时间之前或之后,也可能同时发生。
发现时间指的是某软件漏洞被发现并被认为可构成安全风险的最早报告时间。通常在漏洞发布之前,发现时间始终不为公众所知。须注意的是,漏洞在被发现之前就已经存在,但只要未被发现就不构成安全风险。
利用时间指的是某漏洞最早出现利用方案的时间。我们把所有能够利用该漏洞的黑客工具、病毒、数据或命令行等都视为利用方案。
补丁出现时间指的是厂商或软件创始人最早发布能够抵御漏洞遭利用的修复方案、应急方案或补丁的时间。由第三方推出的修复方案和补丁不认为属于正式补丁,因为企业不允许在其系统中安装第三方补丁。补丁的形式可以非常简单,可以是厂商对于某种配置变动的说明。须注意的是,其他安全机制的出现不可以算作补丁时间,如入侵防御系统的签名或反病毒工具。
不同的作者对于一个漏洞的发布时间有着不同的定义。最常见的一种说法是:由某团体公开发布安全信息。通常,漏洞信息是在邮件列表和安全网站中进行讨论的,然后再据此形成一份安全报告。为确保相关安全信息能够出现并保证质量,我们提出了一种更严格的发布时间定义。
发布时间指某漏洞首次通过某种渠道出现,在该渠道中被发布的漏洞信息须满足下列条件: 可由公众自由获取 由独立且可信赖的渠道公布 经过专家分析,应包括风险级别信息
要求1:从安全的角度来看,只有自由和公开地公布才能保证所有感兴趣的和涉及到的团体获取相关信息。“封闭实现安全”是永远不会生效的概念:“认为保密会有助于安全的看法是天真的,保密只在有限环境中才对安全有益,而这必然不包括漏洞或可靠性信息等方面。”
要求2:只有独立于厂商或政府的渠道才是无偏见的,才能够公平传播安全信息。只有在业界被认可,属于可接受的安全信息来源的渠道,才能被视为是一个可信赖的渠道(例如,长期以来一直都在提供可靠的安全信息)。
要求3:分析和风险级别能够保证所发布信息的质量。仅仅是在邮件列表中讨论某个可能的缺陷或来自厂商的模糊信息并不具质量可言。分析必须包括足够的细节,能使相关软件用户评估其个人风险或立即采取资产保护措施。在本文中,为提供漏洞发布时间相关数据,我们分析了以下5个来源的安全报告:CERT、FrSirt、ISSx-force、Secunia和SecurityFocus。
2. 风险暴露期
不同的时间点在漏洞生命周期中划分出了不同的阶段。在发布和补丁时间之间,系统(以及最终的整个网络)都处于风险之中。这一风险暴露期可分为3个阶段:黑色风险期、灰色风险期以及白色风险期。
黑色风险期:在这一时期,只有有限的一个团体知道某漏洞。该团体可能是任何人群的组成,可以是黑客,也可以是妄图滥用漏洞知识的有组织犯罪团体。另一方面,他们也可能是正在合作修复漏洞的研究人员和厂商。我们把这段时期称为黑色风险期是因为已知漏洞具有一定的安全影响,但公众对此尚不知情。 灰色风险期:从漏洞发布到补丁发布这段时期,软件用户在等待厂商发布补丁。我们将这段风险暴露时期称为灰色风险期,这段时期内公众知道漏洞风险,但厂商或创始人尚未提供修复方案。但是,用户可以通过漏洞发布信息评估自己所面临的风险,也可能在补丁发布之前采取其他安全机制。
白色风险期:用户未及时安装补丁导致出现的风险期。
SIP指的是监控安全(以及不安全)情况的实体。当前,某利用方案被公开或开始传播之后,通常会立即被分析,导致漏洞被发布。漏洞发布信息中包含重要的技术和风险信息,能帮助公众评估个人风险、计划应对措施。这一看法也有另一方面的结果,黑客也可以对被发布的漏洞进行分析,进而利用方案可能很快便会出现。
3. 风险测度
利用方案的出现会对系统构成威胁,补丁虽能起到一定的中和作用,但漏洞的威胁依然存在。假设利用方案和补丁都照其创始人之意能够发生效用,结果出现的安全风险将在很大程度上依赖于这二者出现的时间或动态状况。
基本来说,我们关注的是漏洞发布之后,安全速度(指补丁的应用)和不安全速度(指利用方案的应用)之间的比较。该测度允许我们从全局安全风险角度测量行业趋势和状态。
三、 方法论
本节首先描述了我们研究所使用的数据源,然后分析了关于发现、发布、利用和补丁日期的数据集合。
1. 数据源
为了建立漏洞分析数据库,必须先确定在第二节中定义的漏洞生命周期的时间点。也就是说,对任何一个已识别的漏洞,我们必须确定相应的发现、发布、利用和补丁日期。由于没有任何数据源提供这些信息,所以这项工作的难度在于:
识别合适的数据源 收集可用信息 以简洁方式关联信息
(1) 漏洞数据库
我们从OSVDB和NVD这两个公开可用的漏洞数据库开始分析。在这项研究中,我们只考虑有CVE条目的漏洞。CVE是公共漏洞和暴露的缩写,它是一个标准化的漏洞和信息安全发布名称列表。
通过评估OSVDB和NVD数据库的内容是否符合我们的目标,我们发现了它们所包含的生命周期信息有相当多的区别。两个数据库都不包含补丁日期,并且只有OSVDB提供了利用日期。然而,两个数据库对每一个漏洞都提供了一个全面的外部引用列表。除此以外,从2006年二月开始,NVD为所有的漏洞提供了一个CVSS向量。CVSS即公共漏洞评价系统,一个新等级系统,设计用来针对软件漏洞提供相应的开放而标准的严重程度等级。
(2) 数据库和相关性
我们选择NVD作为我们漏洞信息的核心是基于以下原因:它可以自由获取,包含CVE和CVSS条目以及外部信息源的引用。我们从OSVDB导入利用日期和额外的外部引用。基于NVD和OSVDB的外部引用的扩展集,我们从不同的数据源下载和分析了超过80,000条安全信息建议。这些数据通过CVE条目或各自建议中给出的链接与我们数据库中的信息相关联。
(3) 发布日期数据源
为了选择一个发布日期数据源,我们分析了下列安全信息提供者所公布的发布日期:CERT、FrSirt、ISS X-Force、Secunia和SecurityFocus。这些都是NVD和CVE数据库中最常参考的安全信息提供者。
为了本文的分析需要,我们从SecurityFocus或者ISS X-Force收集发布日期,条件是看哪一个的发布日期更早。选择的根据包括历史、频率和引用数量。SecurityFocus和ISS X-Force都从1996年就开始提供安全建议,并且是NVD中引用最多的数据源。Secunia和FrSirt分别从2002年和2003年开始提供,因此他们都缺乏历史。然而,考虑到最近公布的建议的数量和质量,他们同SecurityFocus和ISS是同一级别的,并且因此成为将来研究的可能候选。CERT从1988年开始提供安全建议,然而,和其他数据源相比,CERT公布安全建议的速度较低,他们只涵盖了少数漏洞并且也很少被引用。
(4) 我们分析的数据
我们的最终数据库包含14,326个漏洞,任何一个漏洞都包含CVE条目和发布日期。本文中所有的数据都基于这个漏洞集。这些漏洞中,有11,697个包含发现日期,3,420个包含利用日期,1,551个包含补丁日期,其中有332个漏洞同时包含利用和补丁日期。
2. 发现、利用和补丁时间VS发布时间
我们观测了发现、利用和补丁时间同发布时间之间的关系,对漏洞生命周期进行了分析。下面给出漏洞生命周期中各时间点的散点图和分布状况。 散点图 图三(a)、四(a)和五(a)中的散点表示的是: X轴表示的是漏洞发布的时间。 Y轴表示的是发现、利用及补丁时间与发布时间之间的时间差。 发布时间同上述三个事件之间的时间差在本文的分析中属漏洞生命周期的关键所在。 在图三(a)、四(a)和五(a)散点图中我们使用了相同的尺度,以方便进行直接比较。在从1996年到2006年期间,这些散点显示了漏洞发现时间以及利用方案或补丁出现时间同漏洞发布时间的关系。 累计分布函数图 图三(b)、四(b)和五(b)表示的是2001年到2005年间,图三(a)、四(a)和五(a)中相同数据的累计漏洞分布函数(CDF)图。通过分布函数进行标准化,这使得我们可以比较不同时期的不同漏洞数量。在这些图形中: X轴显示的是发布时间同不同事件时间之间的时间差。负值表明该事件发生在漏洞发布之前,正值表明该事件发生在漏洞发布之后。 Y轴表示的是已知事件的累计分布。 通过CDF我们可以对基础数据进行更加详细的分析。
(1) 发现时间VS发布时间
在开始研究利用时间和补丁时间同相应发布时间之间的关系之前,我们首先分析了所有已确认漏洞的发现时间和发布时间之间的关系。 图三(a)表示的是1996年-2006年漏洞的“发现-发布”时间差。该时间是发现时间减去发布时间得出的天数。NGS Security、Eeye和iDefense等安全研究人员通常都把某漏洞的第一份报告发布时间作为发现时间。另一个来源则是CVE文档,通常会把某漏洞首次向CVE团体报告的时间作为发现时间。根据发布,该日期可与一个具体的漏洞相关联。 从定义上来说,发现时间指的是漏洞生命周期中最早的时间。因此图三(a)中y > 0时,即漏洞发布之后,事件数为0。可以看出,被发现的漏洞数量从1996年到2006年期间在上升,这一点在图一的漏洞统计中也有所体现。 发现vs 发布的CDF图形表示的是漏洞在发现之后多久时间内被发布。我们发现,自2003年起,超过20%的漏洞在公开发布之前在内部人员手中掌控了至少20天。它测量的是我们在第2节曾定义过的黑色风险期。 接下来我们分析了漏洞发布时间与利用方案出现时间之间的比较。 图三 发现vs发布时间
图四 利用vs发布时间
(2) 利用方案出现时间 图四(a)显示的是1996年到2006年间漏洞发布和利用方案出现时间之间的时间差,即利用方案时间减发布时间得出的天数。利用信息和攻击代码可能源自某些网站,如milw0rm、Packetstorm、Metaspoit Framework、FrSirt或来自FullDisclosure之类的安全邮件列表。 我们从图中得出两个重要结论: 0 day利用的数量在急剧增加; 漏洞发布之前和之后利用方案均可能出现。 发现vs发布方案出现时间的CDF图形可以表示0 day利用现象。漏洞发布2天前利用方案数量低于20%,发布日这个数字升为70%,2001年之后情况一直都是这样。近年来,95%的利用方案都是在发布之后1个月内出现的。这一趋势还在上升,2005年曲线达到最高点,x > -3。然而,在漏洞发布很长时间之前,2004年和2005年明显比其他年份低很多。 通过SIPs检测安全(不安全)状况的效率已有改进。某个利用方案将不会长期不被人察觉,它可能会被SIPs发现并进行分析。因而利用方案很快就会导致受影响漏洞的发布,所以图四(b)中近期CDF在发布之前很短的时间内会急剧上升。另一方面来说,黑帽也改进了分析漏洞信息和对补丁进行逆向工程的能力。黑帽可以迅速形成利用方案。综合效果即是发布日活动数量的增加。
图四(a)证实了黑帽的表现,下一张图将描绘软件厂商的表现。
(3) 补丁出现时间 图五(a)表示的是1996年到2006年间补丁出现时间和漏洞发布时间之间的时间差,即补丁时间减发布时间得出的天数。补丁信息从厂商和软件作者的安全公告中抽取而出。通常,这一信息是人工与对应漏洞相关联的。
图五 补丁vs发布时间 补丁vs发布时间的CDF图形表示的是软件厂商提供补丁的表现,测量的是图二中的灰色风险期。大多数补丁是在发布日推出的,或反过来,补丁的公开公布会导致SIPs立即开始分析,随后出现我们在第二节中定义过的漏洞的“发布”。然而,从2001年到2006年,只有55%到85%的补丁是在漏洞发布时推出的,而且在接下来的30天里,这个数字并不会有太大的变动。对比利用方案vs补丁,我们会发现不安全的速度已经超过了安全速度。形成一个补丁要比形成一个利用方案困难。
3. 讨论 目前为止,我们已经研究了补丁时间和利用方案出现时间的分布。一个很有趣的方面是这两个分布之间的直接比较。如第二节中所讨论,这一差别可以用来作为风险暴露的一个测度。 图六 漏洞发布后的漏洞利用与补丁发布时间差 图六描绘的是发现时间、利用方案出现时间以及补丁时间的CDF之间的直接比较。我们看到,在发布之后的300天里,利用方案CDF始终高于补丁CDF。这一差别量化了利用方案出现时间和补丁出现时间之间的差,成为了风险暴露及其随时间发展趋势的指示器。该测度能使我们以经验方式测量和评估安全业界状态。
四、 数据与未来分析和风险管理的相符情况
下面给出与利用方案以及补丁这二者的分布相符的函数。我们提供一种简单的方式,能使他人使用我们的数据以进行其分析。首先,这些函数在风险管理中有着很重要的价值。例如,可以使用这些函数来评估和优化补丁策略或入侵防御投资。 我们把数据组在发布日一分为二。这一决策的依据是,漏洞一旦被发布,将会极大地改变利用方案和补丁发布的动态状态。之后我们试图把各种常用的统计分布,如指数、Pareto、Weibull与数据相对照。我们发现发布前和发布后的利用方案出现情况最符合Pareto分布。发布之前补丁的出现情况最符合Pareto分布,然而,发布之后的补丁情况可以用Weibull分布来进行合理的表示。图七表明,最小次方与利用方案出现情况相符,与Pareto公式相符 (1)F(x)=1-( )a 参数α有时也称为形状参数,在漏洞发布前为0.40,发布后为0.26。形状参数的下降量化了发布之后利用方案的减缓程度。参数k(分布中的最小值)在两种情况下都足够小,使匹配能够用于风险建模。 图八表明,最小次方同整个补丁过程都相符。有趣的是,在漏洞发布之前,α=0.663,k=0.0487时,补丁出现情况符合Pareto分布。发布之后,(2)的Weibull分布则比较相符,其中λ=0.209,k=4.040。 (2)F(x)=1-exp( )k 然而,比较好的相符情况是通过Pareto和重新调节后的指数分布进行线性组合后形成的,下面公式中34%为Pareto,66%为指数。 (3)F(x)=1-c*exp(-ax) 除了分析利用方案和补丁的相符情况外,我们还分析了2003年到2005年利用方案和补丁的相符情况。表1、表2(利用方案出现情况)、表3和表4(补丁方案情况)中列出了其中最相符的参数。
图七 利用可用性变化匹配了一个Pareto分布, 漏洞发布之后,a从0.43降低到了0.27反映了漏洞发布有效率的最终结果。
图八 在漏洞发布前的补丁可用率匹配了一个Pareto分布,a=0.62反映了发布前很短时间内,补丁可用率要高于漏洞利用率。漏洞发布之后,补丁可用率匹配了一个Weibull分布。一个好的匹配也能通过线性混合Pareto和Exponential分布来获得。 表1 (发布前)最相符的利用方案 表1中α的值反应了漏洞发布之前利用方案的出现率,并没有显示出清晰的趋势。但是表2中自2001年起α的值在明显上升。这些值量化了2001年起漏洞发布之前利用方案的出现情况。 表3中只有一个条目,即发布之前补丁整体分布的最佳相符状况。这个Pareto分布代表了28个数据点。由于数据样本极小,因此并没有分析每一年的相符情况。 表3 (发布前)最相符的补丁方案 表4列出了发布之后补丁的最优相符情况。这些Weibull分布是很合理的相符状态。规模参数λ在0.2上下浮动。然而,形状参数k和伴随的失败率并没有表现出清晰的趋势。 表4 (发布后)最相符的补丁方案 最后强调一下,所有的函数只覆盖了漏洞发布日前后300天这样一个有限的时间,因此并不能代表利用方案以及补丁的传播、存活可能性的动态变化。
五、 结论
我们对超过14,000个漏洞进行了全面的分析(发布于1996年至2006年之间), 来研究安全漏洞的生命周期。我们提出了一个“漏洞发布日期”的定义, 在超过80,000条安全建议的帮助下,确定了漏洞的发现、发布、利用和补丁日期。据我们所知,这是第一个在这种规模下系统的基于实验的研究。分析这些数据,我们确认并量化了0-day利用的趋势。 我们还提供了工具来衡量安全的动态变化,并量化了漏洞和补丁可用性之间的差距。当确定一个系统和他附属的网络的暴露程度的时候,这项措施具有重大的意义。 我们统计分析了数据,并提供了一般分布函数的参数(如Pareto和Weibull)以备进一步分析。我们的研究结果建立了一个实验基础,来模拟暴露风险并支持安全投资方面的商业决定。