本节将介绍软件漏洞的分类和分级方法,以及软件漏洞管理的国际和国内标准。
对软件安全漏洞进行分类是搜集威胁信息、掌握安全威胁发展趋势的基础。更全面、精细的软件安全漏洞分类可以把安全事件、漏洞利用和软件平台等多方面组件在安全的视角下关联起来,从而帮助安全专家、分析人员等有效地进行分析,找到相应的解决方案。漏洞的分类是客观存在的,但不是一成不变的,而是根据需求变化的。
漏洞分类主要是从不同角度描述漏洞,是漏洞研究的基础之一。和其他事物一样,安全漏洞具有多方面的属性,也就可以从多个维度对其进行分类,如从漏洞的成因、漏洞被利用的技术及漏洞作用范围等方面进行分类研究。
(1)从对操作系统研究的角度提出的漏洞分类方法
操作系统安全性分析研究项目(Research in Secure Operating System,RISOS)将漏洞分为7类。
●不完整的参数合法性验证:参数使用前没有进行正确检查。
●不一致参数合法性验证:使用不一致的数据格式进行数据有效性检查。
●固有的机密数据共享:不能正确地隔离进程和用户。
●异步验证错误或不适当的序列:竞争条件错误。
●不适当的鉴别、认证和授权:不正确地认证用户。
●可违反的限制:处理边界条件错误。
●可利用的逻辑错误:不属于上述6类的其他错误。
(2)从软件错误角度的漏洞分类方法
T.Aslam等人将漏洞分为编码错误和意外错误等。由于该分类方法存在二义性和非穷举性,I.V.Krsul对该方法进行了扩展及修改,形成了完整的分类方法,将漏洞类型分为操作错误、编码错误、环境错误及其他错误四大类。
(3)多维度分类方法
M.Bishop等人根据时间、漏洞成因、利用方式、漏洞利用组件数、代码缺陷和作用域6个维度分别进行了分类。
(4)广义漏洞分类方法
E.Knight将网络漏洞分为策略疏忽、社会工程、技术缺陷和逻辑错误。
(5)抽象分类方法
美国MITRE公司的通用缺陷列表(Common Weakness Emulation,CWE)提供了根据漏洞机制进行分类的方法,它将漏洞大致分为十二大类,包括随机不充分、被索引资源的不当访问、在资源生命周期中的不当控制、相互作用错误、控制管理不充分、计算错误、不充分比较、保护机制失效、名称或引用的错误解析、异常处理失败、违反代码编写标准,以及消息或数据结构的不当处理等。
以上这些漏洞分类方法普遍存在量化模糊的问题,对于用户来说,清晰地了解漏洞是如何被利用的及产生何种危害是重要的。因此,通常可以从漏洞利用的成因、利用的位置和对系统造成的直接威胁这三个方面进行分类。
(1)基于漏洞成因的分类
基于漏洞成因的分类包括:内存破坏类、逻辑错误类、输入验证类、设计错误类和配置错误类。
1)内存破坏类。此类漏洞的共同特征是由于某种形式的非预期的内存越界访问(读、写或兼而有之),可控程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信息泄露。对内存破坏类漏洞再按来源细分,可以分出如下子类型:栈缓冲区溢出、堆缓冲区溢出、静态数据区溢出、格式串问题、越界内存访问、释放后重用和二次释放。
2)逻辑错误类。涉及安全检查的实现逻辑上存在的问题,导致设计的安全机制被绕过。
3)输入验证类。漏洞来源都是由于对来自用户输入没有做充分的检查过滤就用于后续操作,威胁较大的有以下几类:SQL注入、跨站脚本执行、远程或本地文件包含、命令注入和目录遍历。
4)设计错误类。系统设计上对安全机制的考虑不足导致在设计阶段就已经引入安全漏洞。
5)配置错误类。系统运行维护过程中以不正确的设置参数进行安装,或被安装在不正确的位置。
(2)基于漏洞利用位置的分类
1)本地漏洞。即需要操作系统级的有效账号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把自身的执行权限从普通用户级别提升到管理员级别。
2)远程漏洞。即无需系统级的账号验证即可通过网络访问目标进行利用的漏洞。
(3)基于威胁类型的分类
1)获取控制。即可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作系统。这种漏洞威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。主要来源为内存破坏类。
2)获取信息。即可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。主要来源为输入验证类和配置错误类漏洞。
3)拒绝服务。即可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。主要来源为内存破坏类和意外处理错误类漏洞。
对漏洞进行分级,有助于人们对数目众多的安全漏洞给予不同程度的关注并采取不同级别的措施,因此,建立一个灵活、协调一致的漏洞级别评价机制是非常必要的。
如今,各漏洞发布组织和技术公司都有自己的评级标准。目前主要的漏洞级别评价方式有按照漏洞严重等级和利用漏洞评分系统(CVSS)进行分级两类主要形式。
以微软、中国国家信息安全漏洞库(China National Vulnerability Database of Information Security,CNNVD)等为代表的机构按照严重等级进行分级。
微软是全球著名的软件厂商,它通常在每个月的第二个星期三发布其安全公告。在安全公告中会有对漏洞危急程度的描述,微软使用严重程度等级来确定漏洞及其相关软件更新的紧急性。表2-2列出了微软对漏洞严重程度分类的等级。
表2-2 微软漏洞分级情况
由中国信息安全测评中心负责建设运维的CNNVD,漏洞分级划分综合考虑访问路径、利用复杂度和影响程度3种因素,将漏洞按照危害程度从高至低分为超危、高危、中危和低危4种等级,并保持与CVSS的兼容。
访问路径的赋值包括本地、邻接和远程,通常可被远程利用的安全漏洞危害程度高于可被邻接利用的安全漏洞,可本地利用的安全漏洞次之。利用复杂度的赋值包括简单和复杂,通常利用复杂度为简单的安全漏洞危害程度高。影响程度的赋值包括完全、部分、轻微和无,通常影响程度为完全的安全漏洞危害程度高于影响程度为部分的安全漏洞,影响程度为轻微的安全漏洞次之,影响程度为无的安全漏洞可被忽略。影响程度的赋值由安全漏洞对目标的机密性、完整性和可用性三个方面的影响共同计算。
美国国家标准与技术研究院NIST于2007年发布了 The Common Vulnerability Scoring System ( CVSS ) and Its applicability to Federal Agency Systems (NIST IR 7435),中文名称为《通用漏洞评分系统(Common Vulnerability Scoring System,CVSS)及其在联邦系统的应用》。该标准旨在建立一种统一的漏洞危害评分系统,实现对漏洞危害程度评估的标准化。
该标准依据对基本度量(Base Metric Group)、时间度量(Temporal Metric Group)和环境度量(Environmental Metric Group)三种度量评价标准来对一个已知的安全漏洞危害程度进行打分。
●基本度量用于描述漏洞的固有基本特性,这些特性不随时间和用户环境的变化而改变。
●时间度量用于描述漏洞随时间而改变的特性,这些特性不随用户环境的变化而改变。
●环境度量用于描述漏洞与特殊用户环境相关的特性。
一般情况下,用于评价基本度量和时间度量的度量标准由漏洞公告分析师、安全产品厂商或应用程序提供商指定,而用于评价环境度量的度量标准由用户指定。
该标准定义的评估过程将基本评价、生命周期评价和环境评价所得到的结果综合起来,得到一个最终的分数。具体而言,即是先根据基本度量标准计算得到基础评分,再将基础评分和时间度量标准结合起来计算暂时评分,最后结合环境度量标准和暂时评分得到最终的分数。分数越高,漏洞的威胁性越大。
CVSS的意义如下。
●统一评估方法代替专用评估方法。CVSS对软件的安全漏洞进行标准评估,取代了此前由软件提供厂商各自评级的混乱状况。
●统一对安全漏洞的描述语言。CVSS系统提供了一种通用的语言,用于描述安全漏洞的严重性,以代替不同的软件厂商的漏洞描述。
●提供良好的优先级排序方法。IT安全产品厂商可以使用CVSS体系对自己的产品进行评估,并对软件的安全性进行排序。
CVSS作为国际标准提供了一个开放的框架,它使得通用漏洞等级定义在信息产业得到广泛使用,但是其自身也存在一些不足。其自身度量标准具有很大的主观性,对于同一个安全漏洞,不同的人可能会得出不同的分值,不同的安全组织或技术公司对其的级别评价也有区别,即可重复性较差;而且,攻击技术的发展及恶意攻击者对于不同安全漏洞的关注度的影响也没有考虑进去;此外,同一系统可能存在多个不同的安全漏洞,攻击者同时利用多个漏洞进行深入攻击所达到的危害程度会远远高于单个漏洞。这些情况如何在评分中表现出来,都是CVSS所欠缺的。
为了实现对漏洞的合理、有效管控,除了研究前沿的漏洞分析技术以快速发现漏洞之外,还需要根据漏洞发展变化,研究各种漏洞的管理方法、策略和准则,制定漏洞相关标准和规范,为国家在漏洞的管理措施制定、管理机制运行和管理部门协作等方面提供参考和依据,为漏洞资源的行政管理提供辅助手段,为信息安全测评和风险评估提供基础。漏洞标准是关于漏洞命名、评级、检测及管理的一系列规则和规范。
美国的安全研究机构与组织先后推出了一系列有影响力的标准,其中,通用漏洞和披露CVE、通用漏洞评分系统CVSS等6个标准已被国际电信联盟(ITU)的电信标准化部门(ITU-T)纳入到了其X系列(数据网、开放系统通信和安全性)建议书中,成为ITU-T推荐的国际漏洞标准。表2-3列出了这6个标准及其建议书编号。
表2-3 ITU-T推荐的漏洞标准
通用漏洞评分系统CVSS已经在2.2.2节中介绍过了,下面简要介绍其他5类标准。
(1)通用漏洞和披露(Common Vulnerabilities and Exposures,CVE)
CVE是美国MITRE公司于1999年9月建立的一个为公开的信息安全漏洞或者披露进行命名的国际标准。所谓披露,是指发布那些在一些安全策略中认为有问题,在另一些安全策略中可以被接受的问题,是指仅仅让攻击者获得一些边缘性的信息,隐藏一些行为,或是仅仅为攻击者提供一些尝试攻击的可能性。
CVE官网是http://cve.mitre.org。CVE为每个公开的漏洞和披露分配一个唯一的编号,并给每个漏洞和披露一个标准化的描述及有关参考信息。如图2-5所示,漏洞编号CVE-2015-8153是一个SQL注入型漏洞,存在于SEPM RU6-MP4之前12.1版本中,远程攻击者可利用该漏洞执行任意SQL命令。
图2-5 CVE漏洞示例
CVE不是一个数据库,而是一个字典。由于采用标准漏洞描述语言,可以使得安全事件报告更好地被理解,更好地实现协同工作。国际上很多组织机构都采用了CVE作为标识漏洞的统一标准。
(2)通用缺陷枚举/评分系统(Common Weakness Enumeration/Common Weakness Scoring System,CWE/CWSS)
CWE也是由MITRE公司建立和维护的,定位于创建一个软件缺陷的树状枚举列表,使得程序员和安全从业者能够更好地理解软件的缺陷,并创建能够识别、修复及阻止此类缺陷的自动化工具。
CWE官网是http://cwe.mitre.org。CWE为每一个条目或名词都分配了一个唯一的编号,其基本形式是CWE-XXX,如“基于堆栈的缓冲区溢出”的编号为CWE-121。
CWE对于列出的每一个缺陷,都列举了缺陷的成因描述、对应的语言和其他缺陷的关系等相关信息,有的甚至给出了缺陷代码的例子、对应的攻击模式和防护措施。
CWE VIEW 734是由美国卡内基梅隆大学软件工程学院的CERT团队制订的CERT C Secure Coding Standard,它包括了CWE中的103项,列举了由C语言编码引起的软件缺陷。
CWE VIEW 844是由美国卡内基梅隆大学软件工程学院的CERT团队制订的CERT Java Secure Coding Standard,它包括CWE中的124项,列举了由Java语言编码引起的软件缺陷。
CWE VIEW 868是由美国卡内基梅隆大学软件工程学院的CERT团队制订的《CERT C++ Secure Coding Standard》,它包括CWE中的111项,列举了由C++语言编码引起的软件缺陷。
CWE可以帮助程序员认识到自己编程中的问题,从而编写出更安全的代码;也可以帮助软件设计师、架构师甚至首席信息官了解软件中可能出现的弱点,并采取恰当的措施;还能帮助安全测试人员迅速查找分析源代码中的潜在缺陷。
CWSS是一个度量软件缺陷等级的开放标准,它是CWE项目的一部分。
(3)通用平台枚举(Common Platform Enumeration,CPE)
CPE是一种对应用程序、操作系统及硬件设备进行描述和标识的标准化方案,它提供了一个标准的机器可读的格式,利用这个格式可以对IT产品和平台进行编码。
(4)开放漏洞评估语言(Open Vulnerability and Assessment Language,OVAL)
OVAL是由MITRE公司开发的一种用来定义检查项、漏洞等技术细节的描述语言,它能够根据系统的配置信息,分析系统的安全状态(包括漏洞、配置和系统补丁版本等),形成评估结果报告。OVAL通过XML来描述检测系统中与安全相关的软件缺陷、配置问题和补丁实现。并且这种描述是机器可读的,能够直接应用到自动化的安全扫描中。
除了表2-3中所列出的标准,美国国家标准与技术研究院(NIST)、国际标准化组织(ISO)和国际电工委员会(IEC)的联合技术委员会先后发布了若干有关漏洞管理的国际标准。
(1) Guide to Using Vulnerability Naming Schemes (NIST SP 800—51 Rev.1)
NIST于2011年2月发布了该标准,中文名称为《漏洞命名机制指南》。该标准为使用统一的漏洞、配置错误和产品的命名方法提出建议。
美国国家漏洞库、美国国家信息安全应急小组、国际权威漏洞机构Secunia、Security Focus和开源漏洞库OSVDB等多个漏洞库对漏洞的命名及描述方式都遵循该标准。
(2) The Technical Specification for the Security Content Automation Protocol ( SCAP ):SCAP Version 1.2(NIST SP 800—126 Rev.2)
NIST于2011年发布了该标准,中文名称为《安全内容自动化协议(SCAP)安全指南:SCAP 1.2版》,该标准的1.0和1.1版本分别于2009年11月和2011年2月发布。SCAP是当前比较成熟的一套信息安全评估标准体系,其标准化、自动化的思想对信息安全行业产生了深远影响。
(3) Guide to Enterprise Patch Management Technologies (NIST SP 800—40 Rev.3)
该标准的中文名称为《企业安全补丁管理技术指南》,由NIST于2013年发布了第3版。本指南可用于安全管理人员、工程师、管理员和其他人员进行安全补丁的采集、检测、优先管理、实施和验证。本指南旨在帮助用户了解补丁管理技术的基本知识,向读者阐述补丁管理的重要性,并探讨在执行补丁管理时面临的挑战,同时也简要介绍了补丁管理的成效。
(4) Source Code Security Analysis Tool Functional Specification (NIST SP 500-268)
NIST于2007年7月发布了NIST SP 500-268,中文名称为《源代码安全分析工具功能规范》,于2011年2月更新了1.1版本。该规范可作为衡量源代码安全分析工具缺陷分析能力的指南,其目的不是规定所有源代码安全分析工具必备的特性和功能,而是找出会显著影响软件安全性的源代码缺陷,并帮助源代码分析工具的用户衡量这一工具识别这些缺陷的能力。
(5) Information Technology— Security Techniques—Vulnerability Disclosure (ISO/IEC 29147)
国际标准化组织和国际电工委员会(ISO/IEC)于2014年发布了该标准,中文名称为《 信息技术—安全技术—漏洞发布 》。 该标准通过规范漏洞发现者 、 漏洞厂商及第三方安全漏洞管理组织在漏洞披露过程中所应承担的角色及标准操作 , 从而保护受影响厂商及漏洞提交者的利益 。 该标准描述了厂商应该如何响应外界对其产品和服务的漏洞报告 。
(6) Information Technology—Security Techniques—Vulnerability Handling Processes (ISO/IEC 30111)
ISO/IEC于2013年发布了该标准,中文名称为《信息技术—安全技术—漏洞处理流程》,该标准与漏洞发布标准(ISO/IEC 29147)是相关的。该标准描述了厂商处理和解决产品或在线服务中潜在漏洞信息的标准流程,其目标是要求厂商为潜在的漏洞提供及时的解决方案。
国内的安全漏洞标准化工作也在建设中,在中国信息安全测评中心与其他政府及学术机构的共同努力下,迄今已相继制定了关于漏洞标识与描述、漏洞分类、漏洞等级划分和漏洞管理4项国家标准。
《信息安全技术 安全漏洞标识与描述规范》(GB/T 28458—2012)规定了计算机信息系统安全漏洞的标识和描述规范,适用于计算机信息系统安全管理部门进行安全漏洞信息发布和漏洞库建设。
该标准规定了漏洞描述的简明原则和客观原则。简明原则是指对漏洞信息进行筛选,提炼漏洞管理所需的基本内容,保障漏洞描述简洁明确;客观原则是指漏洞描述应便于漏洞发布和漏洞库建设等的管理。根据以上原则,该标准对安全漏洞标识和描述做出了明确的规范,包括标识号、名称、发布时间、发布单位、类别、等级和影响系统等必需的描述项,并可根据需要扩充(但不限于)相关编号、利用方法、解决方案建议和其他描述等描述项。
《信息安全技术 安全漏洞等级划分指南》(GB/T 30279—2013)规定了信息系统安全漏洞的等级划分要素和危害等级程度,适用于信息安全漏洞管理组织和信息安全漏洞发布机构对信息安全漏洞危害程度的评估和认定,也适用于信息安全产品生产、技术研发和系统运营等组织、机构在相关工作中的参考。
该标准给出了安全漏洞等级划分方法,用户根据受影响系统的具体部署情况,结合该指南给出的漏洞危害等级综合判断漏洞的危害程度。该标准中,安全漏洞等级划分要素包括访问路径、利用复杂度和影响程度三个方面。访问路径的赋值包括本地、邻接和远程,通常可被远程利用的漏洞危害程度高于可被邻接利用的漏洞,可被本地利用的漏洞次之。利用复杂度的赋值包括简单和复杂,通常利用复杂度简单的漏洞危害程度高。影响程度的赋值包括完全、部分、轻微和无,通常影响程度越大的漏洞的危害程度越高。
安全漏洞的危害程度从低至高依次为低危、中危、高危和超危,具体的危害等级由三个要素的不同取值共同决定。
《信息安全技术 安全漏洞分类》(GB/T 33561—2017)规定了计算机信息系统安全漏洞的分类规范,适用于计算机信息系统安全管理部门进行安全漏洞管理和技术研究部门开展安全漏洞分析研究工作。
该标准遵循互斥性原则和扩展性原则,根据漏洞形成的原因、漏洞所处空间和时间对安全漏洞进行分类。按照安全漏洞的形成原因可分为:边界条件错误、数据验证错误、访问验证错误、处理逻辑错误、同步错误、意外处理错误、对象验证错误、配置错误、设计缺陷、环境错误或其他等。按照安全漏洞在计算机信息系统所处的位置可分为:应用层、系统层和网络层。按照安全漏洞在软件生命周期的时间关系可分为:生成阶段、发现阶段、利用阶段和修复阶段。
(1)《信息安全技术 信息安全漏洞管理规范》(GB/T 30276—2013)
《信息安全技术 信息安全漏洞管理规范》规范了安全漏洞的有效预防与管理过程,适用于用户、厂商和漏洞管理组织对信息安全漏洞的管理。
根据安全漏洞生命周期中漏洞所处的发现、利用、修复和公开4个阶段,该标准将漏洞管理行为分为预防、收集、消减和发布等实施活动。
●在漏洞预防阶段,厂商应采取相应手段来提高产品安全水平;用户应对使用的计算机系统进行安全加固、安装安全防护产品和开启相应的安全配置。
●在漏洞收集阶段,漏洞管理组织与漏洞管理中涉及的各方进行沟通与协调,广泛收集并及时处置漏洞;厂商应提供接收漏洞信息的渠道,确认所提交漏洞的真实存在性,并回复报告方。
●在漏洞消减阶段,厂商依据消减处理策略在规定时间内修复漏洞,依据漏洞类型和危害程度,优先开发高危漏洞的修复措施。同时,厂商应保证补丁的有效性和安全性,并进行兼容性测试;用户应及时跟踪公布的漏洞信息和相关厂商的安全公告,进行及时修复。
●在漏洞发布阶段,漏洞管理组织应在规定时间内发布漏洞及修复措施等信息(参见《信息安全技术 安全漏洞标识与描述规范(GB/T 28458—2012)》);厂商应建立发布渠道,发布漏洞信息及修复措施,并通知用户。
同时该标准还规定了信息安全漏洞的管理要求,涉及漏洞的产生、发现、利用、公开和修复等环节,根据漏洞管理活动的实施情况,定期对实施方案和实施效果进行检查、评审,并针对方案与相关文档做出有效改进,保障被发现的漏洞得到有效处置。
(2)CNNVD漏洞管理规范
经过多年的工作积累,中国国家信息安全漏洞库(CNNVD)形成了一套自己的漏洞管理规范,包括《CNNVD漏洞编码规范》《CNNVD漏洞命名规范》《CNNVD漏洞内容描述规范》《CNNVD漏洞分类描述规范》《CNNVD漏洞分级规范》和《CNNVD漏洞影响实体描述规范》。
在漏洞标识方面,CNNVD使用自己的编号,并建立了与CVE编号的关联。例如,2.2.3节中图2-5所示的CVE-2015-8153漏洞在CNNVD中对应的编号是CNNVD-201603-272。
在漏洞数据方面,除收录CVE漏洞数据外,CNNVD还收录了中国主流信息技术产品的重要安全漏洞。CNNVD还向信息安全产品厂商提供了兼容性服务,通过CNNVD兼容性服务,进一步提高了CNNVD的影响力,推动了CNNVD漏洞编号的使用范围和认知度。
在漏洞信息方面,与CVE只记录漏洞的简要信息相比,CNNVD包含更加丰富的内容,如危害等级、漏洞类型和威胁类型等。漏洞CNNVD-201603-272的详细信息如图2-6所示。
图2-6 CNNVD漏洞示例