购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 漏洞

漏洞是一种可存在于硬件、软件、协议的具体实现或者系统安全策略上的缺陷。攻击者能够利用漏洞达到在未授权的情况下访问或破坏系统的恶意目的。维基百科对漏洞的定义为:漏洞,即脆弱性(Vulnerability),是指计算机系统安全方面的缺陷,使系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。

漏洞可能来自以下3个方面。

1)应用软件或操作系统设计时的缺陷。

2)应用软件或操作系统编码时的错误。

3)业务交互处理过程的设计缺陷或逻辑流程的不合理之处。

从国家信息安全漏洞库每月发布的漏洞报告中可以发现:应用软件中的漏洞远远多于操作系统中的漏洞,其中,Web应用系统的漏洞更是占信息系统漏洞的大多数。

1.2.1 漏洞生命周期

从安全攻防角度而言,典型的漏洞生命周期一般包括7个阶段,分别为安全漏洞研究与挖掘、渗透代码开发与测试、安全漏洞和渗透代码在封闭团队中流传、安全漏洞和渗透代码开始扩散、恶意程序出现并开始传播、渗透代码/恶意程序大规模传播并危害互联网、渗透攻击代码/攻击工具/恶意程序逐渐消亡,如图1-4所示。

图1-4 漏洞生命周期

1.安全漏洞研究与挖掘

安全漏洞研究与挖掘是一种通过渗透测试技术预先发现软件潜在安全漏洞的过程,主要分为两大部分:漏洞代码的粗定位和精确定位。粗定位侧重于全面,旨在发现被分析程序中所有可能存在安全漏洞的代码位置;精确定位侧重于精准,旨在通过各种分析方法判断粗定位的代码位置中是否存在真正的安全漏洞。精确定位可通过Fuzzing测试等技术实现。Fuzzing测试是一种软件测试技术,它的核心思想是自动或半自动地生成随机数据(即测试用例)并输入到一个程序中,然后监视程序的异常,从而发现安全漏洞,如图1-5所示。显然,该方法的缺点是要完整覆盖程序的所有分支和状态,构造的测试用例数据将指数增长。

图1-5 Fuzzing测试

2.渗透代码开发与测试

渗透代码是渗透测试人员为验证安全漏洞研究与挖掘中找到的安全漏洞是否确实存在并可被利用而开发的概念验证(Proof of Concept, PoC)代码。在开始编写PoC代码前,需进行3项准备工作:一是熟悉漏洞的详细情况,了解漏洞影响的程序或系统版本,复原漏洞的产生过程,深刻理解漏洞,为PoC的编写奠定良好基础;二是复现漏洞环境,可通过Docker(一种用于开发、部署、运行应用的虚拟化平台)来搭建渗透代码测试靶机(存在漏洞的系统),Docker作为一种模拟环境,搭建过程灵活方便、搭建周期短,不会对目标系统造成破坏;三是选择编写PoC使用的语言。这里需明确一点:任何语言都只是一种实现方式,PoC的目的是证明漏洞的存在,因此任何编程语言都是可行的。目前,Python语言因其入门简单、兼容平台众多以及第三方库丰富等特点在业界应用较广。编写PoC代码时,根据准备工作中对漏洞的分析过程,逐步实现验证思路即可。编写完PoC代码后,首先,需要在搭建的测试靶机中测试代码是否能触发漏洞;其次,需要在不含漏洞的系统中进行测试,以说明编写的PoC代码的误报情况。

PoC经常与EXP一起出现在各类安全报告中。PoC与EXP严格而言是两个概念,PoC译为概念验证,EXP(Exploit)译为漏洞利用,从其释义就可看出二者的侧重点不同。PoC强调概念验证,旨在证明漏洞的存在,不能被直接应用;EXP强调漏洞利用,旨在说明漏洞的利用方法,可被直接利用。简单而言,PoC说明了一个漏洞的存在,而EXP说明了该漏洞的利用方式,显然,后者的编写难度更大。

3.安全漏洞和渗透代码在封闭团队中流传

渗透测试人员在挖掘到漏洞并编写出渗透代码后,一般会通知相关系统或应用的厂商及时进行漏洞修补,在修补完成后公开漏洞详情,这种情况下,漏洞的危害性相对较小。然而,恶意攻击者在挖掘到漏洞并编写出渗透代码后,不会通知厂商修补,而是在有限团队内进行秘密共享,这种情况下,厂商及系统或应用的使用者并不知晓漏洞的存在,导致漏洞的危害性极大,这种漏洞可称为“0day”漏洞。

0day漏洞又称为Zero-day(零日漏洞),具体指已经被发现而信息还没有被公布的漏洞。其危害性在于部分0day漏洞有很长的潜伏期,比如腾讯安全反病毒实验室在2017年发布的一个Office漏洞,编号为CVE-2017-11882,其潜伏期达17年之久,严重威胁Office软件多个版本的安全。

与0day一起经常被提及的是1day和nday。1day指的是信息已经被公开而厂商还没有发布相关补丁的漏洞,这类漏洞会有敏感的部分人员关注并使用临时的漏洞修复手段,但是大部分人由于没有官方补丁而无法去除该漏洞导致的脆弱性。这类漏洞的危害性虽然没有0day漏洞高,但攻击者使用该类漏洞攻击的有效性却很高。nday指的是厂商已经发布了相关补丁的漏洞,这类漏洞被攻击者利用的有效性大大降低,只有部分没有安装补丁的目标系统能够被攻破。

最知名的漏洞利用数据库网址为https://www.exploit-db.com/,首页如图1-6所示。

图1-6 exploit-database首页

课外拓展

exploit-database网站是公共漏洞利用档案库,以供渗透测试人员和漏洞研究人员使用。它的目标是作为通过直接提交、邮件列表和其他公共来源收集的最全面的漏洞利用、ShellCode和论文的集合,将它们呈现在一个免费可用且易于导航的数据库中。

该档案库每天更新,包含最近提交的漏洞利用内容,出现漏洞的应用程序也可以在其二进制漏洞利用档案库中找到。

4.安全漏洞和渗透代码开始扩散

出于利益等原因,在小规模有限团队内进行秘密共享的漏洞以及渗透代码最终都会被披露出来,导致漏洞PoC代码或EXP代码在互联网中公布。此后,攻击者会迅速掌握并利用这些漏洞攻击还未修复的系统或应用。

5.恶意程序出现并开始传播

当攻击者对公开的漏洞更加熟悉后,他们会进一步地开发更易于使用且更能自动化传播的恶意程序或攻击工具,并通过互联网等途径进行传播。例如,2017年4月,黑客组织Shadow Brokers披露了一大批网络攻击工具,其中包括“永恒之蓝”(Eternal Blue)工具。该工具利用Windows系统的SMB漏洞获取系统最高权限。黑客通过改造“永恒之蓝”制作出WannaCry勒索病毒,造成严重后果:2017年5月12日,WannaCry勒索病毒在全球范围大爆发,至少150个国家、30万名用户遭受攻击,造成的损失达80亿美元,影响到上千家企业及公共组织。与中国教育网相连的中国高校网站也出现大规模的感染,感染甚至波及公安机关使用的内网。

6.渗透代码/恶意程序大规模传播并危害互联网

安全漏洞的危害峰值发生在厂商发布了官方补丁以及相应的安全告警后。此时,攻击者能够得到详细、准确的安全漏洞信息以及对应的渗透代码和恶意利用程序,这进一步降低了攻击的难度,加之用户安装补丁的不及时,导致安全漏洞对互联网的危害达到顶峰。

7.渗透攻击代码/攻击工具/恶意程序逐渐消亡

随着时间推移,用户普遍安装了厂商发布的补丁,安全公司对漏洞的检测及去除手段也已完善,前述阶段所公开的漏洞渗透代码、恶意利用程序或攻击工具的利用价值大大降低,攻击者不再利用其达到恶意目的,因此渗透测试代码、恶意利用程序或攻击工具将逐渐消亡。

1.2.2 漏洞危险等级划分

随着应用代码编写质量的降低、攻击者挖掘漏洞的能力不断提升,安全漏洞数量呈逐年上升趋势。根据美国国家漏洞库(National Vulnerability Database, NVD,徽标如图1-7所示)的数据,2020年,NVD共记录17447个漏洞,漏洞总数在保持4年连续增长的同时创下历史新高。如此庞大的数量对漏洞分析、漏洞管理与控制都提出了很大的挑战。为了更客观、更完整、更准确地认识以及跟踪安全漏洞,在漏洞被发现后,提供给用户更多的信息有助于更快地实现漏洞定位,并决定下一步应采取的措施,此时需要对漏洞进行分级分类。同时,漏洞危险等级划分对及时降低漏洞风险、保护系统或应用的安全有着重要意义。

漏洞危险等级划分让人们对漏洞的危险程度有了一个直观的认识。对漏洞进行危险等级划分的方法有定性评级和定量评分。在漏洞发现早期,安全公司及各大厂商(如IBM、微软等)对产品漏洞进行的是定性评级,确定漏洞的威胁、划分漏洞等级,然而,由于各个厂商使用不同的漏洞定性评级方案和方法,导致不同厂商对相同的漏洞进行定性评级的漏洞危害级别不同,这就增加了漏洞跟踪及漏洞管理的难度。因此,美国于2004年提出了通用漏洞评分系统(Common Vulnerability Scoring System, CVSS。徽标如图1-8所示),旨在提供一种定量的漏洞等级评估方法,统一各厂商及安全公司的评估系统。2007年,事件响应与安全组织论坛(Forum of Incident Response and Security Teams, FIRST)发布了CVSS 2.0,此后,NVD将其作为官方的漏洞危险等级评估方法进一步推广。由于CVSS通过量化公式计算得出评分结果,可操作性较强,评分过程更加客观,各大厂商(如微软、甲骨文、安全厂商赛门铁克等)都使用CVSS作为自己的漏洞评估方法。2021年,MITRE公司推出了CVSS 3.1版本。然而,仅仅依靠定量评分对漏洞进行危险等级划分存在着无法让人们直观认识漏洞危险程度的缺点,因此,NVD在CVSS评分结果的基础上自定义了与定性级别的映射规则,将CVSS定量评分分值和高危、中危、低危3个定性级别进行了对应。

图1-7 美国国家漏洞库徽标

图1-8 通用漏洞评分系统徽标

近几年,人工智能、物联网和区块链等计算机技术发展迅速,导致网络安全漏洞的相关研究工作发生了巨大变化,人们认识到漏洞的分类及分级是描述漏洞本质和情况的两个重要方面。因此,2018年,由中国信息安全测评中心牵头,将《信息安全技术 安全漏洞等级划分指南》(GB/T 30279—2013,现已作废)和《信息安全技术 安全漏洞分类》(GB/T 33561—2017,现已作废)进行了合并修订,形成了《信息安全技术 网络安全漏洞分类分级指南》(GB/T 30279—2020),该标准于2020年发布。

GB/T 30279—2020兼容了现有的国家信息安全漏洞库(China National Vulnerability Database of Information Security, CNNVD。徽标如图1-9所示)和CVSS 3.0版本,在漏洞分级指标中增加了环境因素。GB/T 30279—2020将网络安全漏洞根据分级的场景不同分为技术分级和综合分级两种分级方式,每种分级方式均包括超危、高危、中危和低危4个等级。标准同时将漏洞等级划分的分级指标分为三大类,分别为被利用性、影响程度和环境因素;将漏洞等级划分的分级方法分为三大类,分别为漏洞指标类的分级方法、漏洞技术分级方法和漏洞综合分级方法。

图1-9 国家信息安全漏洞库徽标

下面根据《信息安全技术 网络安全漏洞分类分级指南》(GB/T 30279—2020)的内容对漏洞的等级划分方法进行介绍。

1.漏洞等级划分分级指标

漏洞分级指标说明了反映漏洞特征的属性和赋值。

(1)漏洞的被利用性

漏洞的被利用性可从访问路径、触发要求、权限要求和交互条件4个角度进行评估。

1)漏洞的访问路径指的是触发漏洞的路径前提,说明了攻击者是通过互联网、共享网络、本地环境还是通过物理接触操作实现的攻击。显然,若一个漏洞的访问路径为互联网,则攻击者实现恶意目的的便利性最高,被利用程度也是最高的。

2)漏洞的触发要求指的是触发漏洞的系统、应用或组件版本、配置参数等因素的特定要求。触发要求低,表明该漏洞对组件的版本以及配置参数等无特殊要求,漏洞的前提条件宽松,这种漏洞的危害程度自然就比较高。因此,触发要求越低,漏洞的被利用性就越高,漏洞的危害程度也就越高。

3)漏洞的权限要求指的是触发漏洞需要的权限,包括公开或匿名访问的无特殊权限、普通用户访问的低权限和管理员访问的高权限。权限要求低,表明攻击者只要能访问到目标系统就可以触发漏洞,而无须利用其他漏洞进行权限提升。因此,权限要求越低,漏洞的被利用性就越高,漏洞的危害程度也就越高。

4)漏洞的交互条件指的是漏洞的触发是否需要系统用户、其他系统等其他主体的参与或配合。通常而言,无须其他主体介入的漏洞,触发漏洞的难度更低。因此,没有交互条件的漏洞的被利用性更高,漏洞危害程度也就更高。

(2)漏洞的影响程度

漏洞的影响程度说明了漏洞触发后对系统、应用或组件造成的损害程度。漏洞的影响程度评估对象包括系统、应用或组件所承载的信息的保密性、完整性和可用性。

1)信息的保密性指的是信息只能给已授权的用户使用,不会泄露给未授权的用户、实体或过程。当某个漏洞致使目标应用或组件的所有信息全部泄露给攻击者时,将严重影响信息的保密性,此时漏洞的影响程度最大,危害程度也最高。当造成部分信息泄露或无泄露时,对保密性的影响一般或无影响,漏洞的危害程度相对较低。

2)信息的完整性是指信息不会被非法授权修改或破坏,数据的一致性能够被保证。当某个漏洞致使目标应用、组件的任何信息都能被修改,或者虽然只能修改部分信息,但该信息会给目标组件或应用带来严重的后果时,将严重影响信息的完整性,此时漏洞的影响程度最大,危害程度也最高;当仅造成部分信息能够被修改且不会产生严重后果,或完全不会导致信息被修改时,漏洞对完整性的影响一般或无影响。

3)信息的可用性是指保证信息能被合法用户在任何需要的时间内使用。当某个漏洞致使目标系统、应用或组件的可用性完全丧失,或者虽然仅部分可用性丧失但造成的后果严重时,都将严重影响合法用户访问信息,此时漏洞的影响程度最大;当仅造成部分信息可用性丧失、信息资源的性能降低或未造成信息可用性丧失时,对可用性的影响一般或无影响。

(3)漏洞的环境因素

漏洞的环境因素从被利用成本、恢复难度和影响范围3个方面进行评估。

1)被利用成本指的是当时的互联网环境下是否有公开的漏洞触发利用工具,目标系统或应用是否从公开互联网上就可以直接访问(即目标应用为暴露面应用),攻击者是否需付出成本达到上述状态。当某个漏洞在互联网上已经有公开的触发工具或目标应用处于暴露面时,攻击者所付出的成本相当低,此时,漏洞的危害程度是最高的;当某个漏洞只是在互联网上公开了触发原理或触发漏洞需要一定的网络资源时,该漏洞的危害程度一般;当某个漏洞的触发工具难以获取或者目标应用位于内网时,该漏洞的危害程度相对较低。

2)恢复难度指的是在当时互联网的环境下修复漏洞所需要的成本。当某个漏洞目前缺少有效且可行的修复方案或修复方案难以执行(如获取不到相应补丁)时,漏洞的危害程度是最高的;当某个漏洞有可行的修复方案,但在执行修复方案时可能影响系统使用时,该漏洞的危害程度较高;当某个漏洞已有公开的补丁,存在完善的修复方案时,该漏洞的危害程度是相对最低的。

3)影响范围指的是漏洞触发后对环境的影响,这与目标系统、应用或组件在环境中的重要性密切相关。当漏洞触发后,环境中多于50%的资产都受到了影响或者受影响的资产处于环境的核心位置、起着重要作用时,漏洞的危害程度最高;当漏洞触发后,环境中10%~50%的资产会受到影响或者受影响的资产处于环境的比较核心的位置、起着比较重要的作用时,漏洞的危害程度中等;当漏洞触发后,环境中10%以下的资产会受到影响或者受影响的资产处于环境的非核心的位置、起着不重要的作用时,漏洞的危害程度低;当漏洞触发后不会对资产造成任何的损失时,该漏洞相对无危害。

2.漏洞等级划分分级方法

漏洞等级划分分级方法说明了漏洞技术分级、综合分级的实现步骤和实现方法,包含了漏洞指标的分级方法、漏洞技术分级方法和漏洞综合分级方法。技术分级方法和综合分级方法都包含超危、高危、中危和低危4个等级。

漏洞指标的分级方法对被利用性、影响程度和环境因素各自的属性与赋值进行组合,按照危害程度由高到低的方式从9级分级至1级。以被利用性指标为例,当某漏洞访问路径为网络远程方式、触发要求低、无权限要求、不需要交互条件时,该漏洞的被利用性被定为9级。

漏洞技术分级说明了某个特定产品或特定系统的漏洞危害程度,根据被利用性和影响程度两个指标类进行评估。技术分级的过程是先根据漏洞指标分级方法将被利用性和影响程度进行分析,然后将它们的分级结果进行组合,按照危害程度由高到低的方式分级为超危、高危、中危和低危4个等级。例如,如果某个漏洞的被利用性分级结果为9级、影响程度分级为7~9级,则该漏洞的技术分级为超危等级。

漏洞综合分级说明了特定时期特定环境下的漏洞危害程度,根据被利用性、影响程度和环境因素3个指标类进行评估。综合分级的过程是先根据漏洞指标分级方法对被利用性和影响程度进行分析,得到漏洞的技术分级结果,然后与环境因素指标分级结果进行组合,按照危害程度由高到低的方式分级为超危、高危、中危和低危4个等级。例如,如果某个漏洞的技术分级结果为超危、环境因素指标分级结果为7~9级,则该漏洞的综合分级等级为超危等级。

1.2.3 漏洞分类

漏洞分类指的是按照漏洞产生或者漏洞触发的技术原因对漏洞进行的划分。与漏洞危险等级划分类似,漏洞分类也是描述漏洞本质和情况的一个重要方面。

CNNVD将漏洞(包括采集的公开漏洞和收录的未公开漏洞、通用型漏洞和事件型漏洞)划分为26种类型,具体如下。

(1)配置错误

此类漏洞指软件配置过程中产生的漏洞。此类漏洞并非软件开发过程中造成的,不存在于软件的代码之中,而是由于软件使用过程中的不合理配置造成的。

(2)代码问题

此类漏洞指代码开发过程中产生的漏洞,包括软件的规范说明、设计和实现。

(3)资源管理错误

此类漏洞与系统资源的管理不当有关。该类漏洞是由于软件执行过程中对系统资源(如内存、磁盘空间、文件等)的错误管理造成的。

(4)数字错误

此类漏洞与不正确的数字计算或转换有关。此类漏洞主要是由于数字的不正确处理造成的,如整数溢出、符号错误、被零除等。

(5)信息泄露

信息泄露是指有意或无意地向没有访问该信息权限者泄露信息。此类漏洞是由于软件中的一些不正确的设置造成的。这里所讲的信息指产品自身功能的敏感信息(如私有消息)或者有关产品或其环境的信息。这些信息可能在攻击中很有用,但是攻击者通常不能获取这些信息。信息泄露涉及多种不同类型的问题,其严重程度依赖于泄露信息的类型。

(6)竞争条件

程序中包含可以与其他代码并发运行的代码序列,且该代码序列需要临时地、互斥地访问共享资源。但是存在一个时间窗口,在这个时间窗口内,另一段代码序列可以并发修改共享资源。

如果预期的同步活动位于安全关键代码,则可能带来安全隐患。安全关键代码用于记录用户是否被认证、修改重要状态信息等。竞争条件发生在并发环境中,根据上下文,代码序列可以以函数调用、少量指令、一系列程序调用等形式出现。

(7)输入验证

产品没有验证或者错误地验证可能影响程序的控制流或数据流的输入。如果有足够的信息,那么此类漏洞可进一步分为更低级别的类型。

当软件不能正确地验证输入时,攻击者就能够伪造非应用程序所期望的输入。这将导致系统接收部分非正常输入,攻击者可能利用该漏洞修改控制流、控制任意资源和执行任意代码。

(8)缓冲区错误

软件在内存缓冲区上执行操作,但是它可以读取或写入缓冲区的预定边界以外的内存位置。

某些语言允许直接访问内存地址,但是不能自动确认这些内存地址是有效的内存缓冲区。这可能导致在与其他变量、数据结构或内部程序数据相关联的内存位置上执行读/写操作。作为结果,攻击者可能执行任意代码、修改预定的控制流、读取敏感信息,从而导致系统崩溃。

(9)格式化字符串

软件使用的函数接收来自外部源代码提供的格式化字符串作为函数的参数。当攻击者能够修改外部控制的格式化字符串时,可能导致缓冲区溢出、拒绝服务攻击或者数据表示问题。

(10)跨站脚本

在将用户控制的输入放置到输出位置之前,软件没有对其中止或没有正确中止,这些输出用作向其他用户提供服务的网页。跨站脚本漏洞通常发生在以下几种情况:

1)不可信数据进入网络应用程序,通常通过网页请求。

2)网络应用程序动态地生成一个带有不可信数据的网页。

3)在网页生成期间,应用程序不能阻止Web浏览器可执行的内容数据,如JavaScript、HTML标签、HTML属性、鼠标事件、Flash、ActiveX等。

4)受害者通过浏览器访问的网页包含带有不可信数据的恶意脚本。

5)由于脚本来自通过Web服务器发送的网页,因此受害者的Web浏览器可能会在Web服务器域的上下文中执行恶意脚本。

6)违反Web浏览器的同源策略。同源策略指一个域中的脚本不能访问或运行其他域中的资源或代码。

(11)路径遍历

为了识别位于受限的父目录下的文件或目录,软件使用外部输入来构建路径。当软件不能正确地过滤路径中的特殊元素时,可导致访问受限目录之外的位置。

许多文件操作都发生在受限目录下。攻击者通过使用特殊元素(如“..”“/”)可到达受限目录之外的位置,从而获取系统中其他位置的文件或目录。相对路径遍历是指使用常用的特殊元素“../”来代表当前目录的父目录。绝对路径遍历(如“/usr/local/bin”)则可用于访问非预期的文件。

(12)后置链接

软件尝试使用文件名访问文件,但该软件没有正确阻止表示非预期资源的链接或者快捷方式的文件名。

(13)注入

软件使用来自上游组件的受外部影响的输入构造全部或部分命令、数据结构或记录,但是没有过滤或没有正确过滤其中的特殊元素,当发送给下游组件时,这些元素可以修改其解析或解释方式。

软件对于构成其数据和控制的内容有特定的假设,但是会由于缺乏对用户输入的验证而导致注入问题。

(14)代码注入

软件使用来自上游组件的受外部影响的输入构造全部或部分代码段,但是没有过滤或没有正确过滤其中的特殊元素,这些元素可以修改发送给下游组件的预期代码段。

当软件允许用户的输入包含代码语法时,攻击者可能会通过伪造代码修改软件的内部控制流。此类修改可能导致任意代码执行。

(15)命令注入

软件使用来自上游组件的受外部影响的输入构造全部或部分命令,但是没有过滤或没有正确过滤其中的特殊元素,这些元素可以修改发送给下游组件的预期命令。

命令注入漏洞通常发生在以下几种情况:

1)输入数据来自非可信源。

2)应用程序使用输入数据构造命令。

3)通过执行命令,应用程序向攻击者提供了其不该拥有的权限或功能。

(16)SQL注入

软件使用来自上游组件的受外部影响的输入构造全部或部分SQL命令,但是没有过滤或没有正确过滤其中的特殊元素,这些元素可以修改发送给下游组件的预期SQL命令。

如果在用户可控输入中没有充分删除或引用SQL语法,那么生成的SQL查询可能会导致这些输入被解释为SQL命令,而不是普通用户数据。利用SQL注入可以修改查询逻辑以绕过安全检查,或者插入修改后端数据库的其他语句,如执行系统命令。

(17)操作系统命令注入

软件使用来自上游组件的受外部影响的输入构造全部或部分操作系统命令,但是没有过滤或没有正确过滤其中的特殊元素,这些元素可以修改发送给下游组件的预期操作系统命令。此类漏洞允许攻击者在操作系统上直接执行意外的危险命令。

(18)安全特征问题

此类漏洞是指与身份验证、访问控制、机密性、密码学、权限管理等有关的漏洞,是一些与软件安全有关的漏洞。如果有足够的信息,那么此类漏洞可进一步分为更低级别的类型。

(19)授权问题

此类漏洞是与身份验证有关的漏洞。

(20)信任管理

此类漏洞是与证书管理有关的漏洞,包含此类漏洞的组件通常存在默认密码或者硬编码密码、硬编码证书。

(21)加密问题

此类漏洞是与加密使用有关的漏洞,涉及内容加密、密码算法、弱加密(弱口令)、明文存储敏感信息等。

(22)未充分验证数据可靠性

程序没有充分验证数据的来源或真实性,导致接收无效的数据。

(23)跨站请求伪造

Web应用程序没有或不能充分验证有效的请求是否来自可信用户。

如果Web服务器不能验证接收的请求是否是客户端特意提交的,则攻击者可以欺骗客户端向服务器发送非预期的请求,Web服务器会将其视为真实请求。这类攻击可以通过URL、图像加载、XMLHttpRequest等实现,可能导致数据暴露或意外的代码执行。

(24)权限许可和访问控制

此类漏洞是与许可、权限和其他用于执行访问控制的安全特征的管理有关的漏洞。

(25)访问控制错误

软件没有或者没有正确限制来自未授权角色的资源访问。

访问控制涉及若干保护机制,如认证(提供身份证明)、授权(确保特定的角色可以访问资源)与记录(跟踪执行的活动)。当未使用保护机制或保护机制失效时,攻击者可以通过获得权限、读取敏感信息、执行命令、规避检测等来危及软件的安全性。

(26)资料不足

这类漏洞指根据目前信息暂时无法将该漏洞归入上述任何类型,或者没有足够充分的信息对其进行分类,以及细节未指明的漏洞。

课外拓展

CNNVD漏洞分类指南中对26种漏洞进行了详细描述并对每一种漏洞都进行了漏洞实例分析。读者通过对漏洞实例的学习可以更好地理解漏洞。漏洞实例可以在CNNVD官网中找到,官网地址为http://123.124.177.30/web/wz/bzxqById.tag?id=3&mkid=3。CNNVD漏洞分类层次图如图1-10所示。

《信息安全技术 网络安全漏洞分类分级指南》(GB/T 30279—2020)根据近年来人工智能、物联网、区块链等计算机技术的快速发展背景,同时为进一步与主流的应用场景(如Web端、主机端、终端、工业控制等)相适应,将漏洞分为了四大类,即代码问题、配置错误、环境问题、其他,又对每大类进行了子类型划分,如图1-11所示。

1.2.4 漏洞披露方式

网络安全漏洞披露已成为网络安全风险控制的中心环节,不规范或非法的网络安全漏洞披露会危害网络空间整体安全。

漏洞披露是指当漏洞被安全研究人员、安全公司或黑客等挖掘出来后,基于不同的动机将漏洞公布。发现漏洞后,他们可选择的方式包括不披露、完全披露、负责任披露和协同披露4种。不恰当的披露方式可能造成严重的后果。例如,2017年,WannaCry勒索病毒(中毒界面如图1-12所示)在全球大面积爆发,造成约80亿美元损失。这与美国政府机构不披露CVE-2017-0144漏洞有一定关系,微软等厂商也对美国政府机构的这一披露方式表示了严厉的批评。

不披露是指漏洞的挖掘者在发现了漏洞后采取保密措施,不对厂商或者公众进行公布,他们可能通过交易漏洞谋取利益。

完全披露方式是指漏洞的挖掘者在发现了漏洞后不采取任何保密措施,无差别地将漏洞公布给任何人。虽然直接向大众披露漏洞可以让厂商和用户及时了解漏洞信息、及时禁用受影响的软件或硬件来降低损害,但同时也会让更多的攻击者了解到漏洞细节,这进一步增加了用户被攻击的风险,厂商也没有充分的时间来修复漏洞,从而造成“及时修复”与“恶意利用”的博弈局面。

图1-10 CNNVD漏洞分类层次图

图1-11 GB/T 30279—2020的漏洞分类

图1-12 WannaCry勒索病毒中毒界面

负责任披露方式又称为有限披露,在这种方式中,漏洞挖掘者发现漏洞后会以帮助厂商解决安全漏洞问题为出发点,将漏洞及时地报告给厂商。当厂商制定了完备的解决方案后,由厂商自己公布漏洞的同时将补丁发布给用户。这种披露方式既能让厂商有足够的时间来修复漏洞,又为用户提供了易用的修复工具,兼顾了二者的利益。但这种方式需要一个中立的第三方机构来作为漏洞挖掘者、用户和厂商之间的纽带,接收漏洞挖掘者发现的漏洞信息、厂商的反馈、协调各方的利益,CNNVD在我国就扮演着这样的角色。

协同披露是代替负责任披露而出现的一种漏洞披露方式,该方式将用户的利益放在首要位置,倡导漏洞的挖掘者、厂商以及协调者等共享漏洞相关信息、协同合作,以便及时有效地修复漏洞。在协同披露方式中,当漏洞挖掘者发现某个漏洞时,会通过协调者报告给厂商或直接报告给厂商,厂商接收报告后一般会先验证报告的准确度,确定漏洞的危害程度以及是否需要优先进行处理,然后厂商会尽快开发补丁或进行其他修复计划,测试补丁的有效性,最后将漏洞信息以及修复计划及方式公布给大众。

1.2.5 漏洞资源库

漏洞资源库主要对主流应用软件、操作系统以及网络设备等软硬件系统的信息安全漏洞开展采集收录、分析验证、预警通报和修复消控的工作,为关键信息基础设施等的安全保障工作提供数据支持,能够提升全行业的信息安全分析预警能力。常见的漏洞资源库包括CNNVD、CNVD、CVE以及NVD等。

(1)CNNVD

CNNVD成立于2009年10月18日,由中国信息安全测评中心负责建设运维,目前不开放新用户注册功能。CNNVD通过自主挖掘、社会提交、协作共享、网络搜集以及技术检测等方式发现漏洞,通过联合政府部门、行业用户、安全厂商、高校和科研机构等社会力量,对涉及国内外主流应用软件、操作系统和网络设备等软硬件系统的信息安全漏洞开展采集收录、分析验证、预警通报和修复消控的工作,建立起规范的漏洞研判处置流程、通畅的信息共享通报机制以及完善的技术协作体系。CNNVD的“漏洞信息”界面如图1-13所示。

图1-13 CNNVD的“漏洞信息”界面

目前,CNNVD涵盖了SQL注入、跨站脚本等26种漏洞类型,根据可利用性和影响性指标将漏洞分为超危、高危、中危和低危4个等级,每周以及每月都会分别发布信息安全漏洞周报和信息安全漏洞月报,可为我国重要行业和关键信息基础设施的安全保障工作提供技术支撑和数据支持,在提升全行业信息安全分析预警能力和提高我国网络及信息安全保障工作方面发挥了重要作用。

(2)CNVD

中国国家信息安全漏洞共享平台(China National Vulnerability Database, CNVD)由国家互联网应急中心(CNCERT/CC)牵头建立、运行和管理,目前开放新用户注册功能。在漏洞分类方面,CNVD根据漏洞的成因将其分为11种类型,包括输入验证错误、访问验证错误、意外情况处理错误数目、边界条件错误数目、配置错误、竞争条件、环境错误、设计错误、缓冲区错误、其他错误、未知错误;在漏洞分级方面,CNVD根据内部的漏洞分级标准将安全漏洞划分为高危、中危和低危3个等级。CNVD的“漏洞列表”界面如图1-14所示。CNVD与CNNVD相比,虽然提供了新用户注册功能,能够下载数据,但数据量较小,早期的漏洞信息也很少囊括其中。

图1-14 CNVD的“漏洞列表”界面

(3)CVE

通用漏洞披露(Common Vulnerabilities and Exposures, CVE)由MITRE公司运营维护。CVE对每个漏洞都赋予一个专属的编号,编号格式为CVE-YYYY-NNNN。其中,CVE是固定的前缀头;YYYY是西元纪年;NNNN是流水编号,流水编号一般为4位的数字,但也可能编到5位或更多位数字。例如,2017年在全球爆发的“永恒之蓝”工具利用的漏洞CVE编号为CVE-2017-0144。CVE站点的CVE-2017-0144漏洞详情如图1-15所示。

图1-15 CVE站点的CVE-2017-0144漏洞详情

(4)NVD

NVD成立于2005年,由美国国家标准与技术研究院(National Institute of Standards and Technology, NIST)推出。NVD是全球第一个国家级的安全漏洞数据库,其推出目的是协助实现对各类漏洞的统一描述、度量、评估和管理。NVD漏洞列表界面如图1-16所示。NVD兼容了CVSS评分标准和CVE命名方式。NVD兼容CVE是指可使用CVE编号在NVD数据库中搜索漏洞的修复信息、危害严重程度以及补丁信息等。我国的CNNVD和CNVD也实现了与CVE的完全同步。

图1-16 NVD漏洞列表界面

课外拓展

“黑客”一词源自英文Hacker,最初指热心于计算机技术、水平高超的计算机高手,尤其是程序设计人员,后来逐渐分为白帽、灰帽、黑帽等。其中,黑帽黑客(Black Hat Hacker)又称为黑帽子,专门研究病毒木马、操作系统,寻找漏洞,利用自身技术攻击网络或者计算机。灰帽黑客又称灰帽子,指那些懂得技术防御原理,并有实力突破网络安全防御(但一般情况下不会这样做)的黑客。灰帽子的行为没有任何恶意。白帽黑客(White Hat Hacker)也称为白帽子,是指那些专门研究或者从事网络、计算机技术防御的人。白帽子通常受雇于各大公司,是维护网络、计算机安全的主要力量,是互联网世界的“信息安全守护者”。在渗透测试过程中经常会挖掘一些0day漏洞,如果是常用系统或者应用软件的漏洞,那么危害性是非常大的,所以这也导致了一些人发现漏洞并不上报,而是用来获取利益。作为白帽子的网络安全工作者,必须具备无私开源的奉献精神,能够不为利益所诱惑,能坚守自己的底线,为国家网络安全贡献自己的一份力量。

本章小结

本章介绍了渗透测试和漏洞的基础知识。通过本章学习,读者能够了解渗透测试的定义、分类、流程、漏洞的概念、漏洞的生命周期、漏洞的危险等级划分方法、漏洞分类及漏洞披露方式等内容,为后续学习打下基础。 Vc+YjfRPTqgikXf3Eqn0GauEMX0yCxv72eVJwI8NpM1we9FJxnOJ1Ur5Nd54rp5C

点击中间区域
呼出菜单
上一章
目录
下一章
×