软件漏洞分析技术

软件漏洞分析技术
作者: 吴世忠,郭涛,董国伟,张普含
出版社: 科学
原售价: 128.00
折扣价: 89.60
折扣购买: 软件漏洞分析技术
ISBN: 9787030418906

作者简介

内容简介

第1部分 漏洞分析基础
  随着全球信息化的迅猛发展,计算机软件已成为世界经济、科技、军事和社会发展的重要引擎。在当前日益严峻的信息安全大环境下,信息窃取、资源被控、系统崩溃等各类信息安全事件层出不穷,给国民经济、国家安全、社会稳定等带来严重威胁。究其根源,所有这些信息安全事件都存在一个共同点,那就是信息系统或软件自身存在可被利用的漏洞。因此,漏洞分析日益成为信息安全领域理论研究和实践工作的焦点,越来越引起世界各国的关注与重视。
  软件产业的蓬勃发展是信息化应用能够如此丰富的主要原因,但同时也带来了软件漏洞数量的激增,近年来,由于软件漏洞被恶意利用而引发的重大信息安全事件越来越多。因此,了解软件中漏洞的基本概念和特性,熟悉漏洞分析的经验和方法,对减少漏洞的危害、降低信息系统运营成本将会起到良好作用,进而尽量降低重大信息安全事件发生的概率。
  本部分从定义、分类、分级、管理及所具备的突出特点等方面介绍软件漏洞的基本概念,并说明软件漏洞的巨大危害;在此基础上,分四个阶段说明学术界、企业界、各国政府机构等一直以来在漏洞挖掘、检测、消除和管控等方面进行的研究和开展的工作;最后分别以软件架构、源代码、二进制代玛和运行系统为对象,从整体上分析现有漏洞分析技术的框架,并从基本原理、优缺点和应用范围等方面对它们进行对比。
  第1章 软件中的漏洞
  自从1946年第一台数字计算机ENIAC问世起,人类社会逐渐进入信息时代。如今,信息技术已经充斥于个人、社会和国家的方方面面。根据中国互联网络信息中心(CNNIC)2014年1月16日发布的报告显示,截至2013年12月,中国网民规模已达6.18亿,互联网普及率为45.8%;手机网民规模也已达5亿。社会信息化的快速发展给人们的工作和生活带来了巨大的便利,但同时,对信息技术逐渐增强的依赖也带来了许多新的安全问题:攻击者可以通过网络进入用户银行账户或电子购物账户,给用户带来经济损失;攻击^者还可以攻人重要的信息系统,窃取用户的机密信息,造成不良的社会影响;更有甚者,攻击者入侵某些国家重要的工业控制和军事系统,给国家安全带来巨大威胁。凡此种种,都是在信息化应用极大丰富的背景下出现的,而软件开发方法论、产业化和服务的飞速发展推动了信息化应用的前进。
  由此可见,软件是当前信息系统、信息化产品中最为重要的组成部分,而软件中的安全漏洞也就成了直接影响信息系统安全性的决定性因素。实践证明,绝大部分的信息安全事件都是攻击者借助软件漏洞发起的,并日.近些年来此类事件有愈演愈烈的态势,严生的影响也越来越大。因此,深入研究软件中安全漏洞的内涵与外延、特点与性质、种类与影响等内容,对把握软件漏洞的发展规律、快速有效地发现和减缓软件中的安全问题,进而尽早定位和控制我国信息化系统所面临的安全威胁至关重要。
  本章是对软件漏洞的基本概述。首先在总结学术界和国际组织机构漏洞相关概念的基础上,给出本书关于漏洞的定义;其次,介绍国际上普遍采用的漏洞分类和分级的力‘式、方法;最后,说明囚利用漏洞而引发的信息安全事件的严重性,以及漏洞分析在安全保障中的核心地位。
  1.1 漏洞概述
  漏洞(vulnerability)又叫脆弱性,通常指计算机系统中存在的缺陷,或者是系统使用过程中产生的问题。随着计算机系统的广泛使用,漏洞可能会存在于信息化社会的各个角落。本节首先归纳学术界和国际组织对漏洞的定义,在此基础上总结本书关于漏洞的定义;而后深入分析漏洞的特点。
  1.1.1漏洞定义
  在30多年的研究过程中,学术和产业界、国际组织及机构均从不同角度给出了漏洞的不同定义,但至今尚未形成广泛共识。漏洞定义本身也随着信息技术的发展而具有不同的含义和范畴,从最初的基于访问控制的定义发展到现阶段的涉及系统安全建模、系统设计、实施、内部控制等全过程的定义。在柯林斯高阶英汉词典中, “vulnerability”是指弱点、脆弱性,是由“vulnerable”转化而成的名词, “vulnerable”一词的意思为“因自身虚弱和没有适当的保护而脆弱的、易受伤害的”。因此,在软件安全领域,一般将“vulnerability”称为漏洞,以着重指出软件自身存在的脆弱性,而非软件受到的伤害或攻击(attack)。
  1.理论化定义
  在漏洞研究的初期,漏洞的定义主要是由学术界的学者或产业界的工作人员归纳出来的,这些概念大多是从计算机系统的角度研究漏洞的定义。
  1982年,Dorothy从操作系统访问控制机制的角度给出了漏洞的定义,认为操作系统中主体对客体的访问控制机制是通过访问控制矩阵来实现的,如果能使操作系统执行违反访问控制矩阵规定的操作,即表明该访问控制机制存在漏洞'3';1992年,Longley等给出了一个内容较为广泛的漏洞定义,认为漏洞是自动化的系统安全流程、管理控制、网络控制中存在的脆弱点,威胁源能够利用它获得非授权的访问权限从而可以破坏正常的进程,是在物理层、组织、工序、个人、管理、维护中朐弱点,可能导致硬件或软件被利用,从而给自动化数据处理(automatic data processing,ADP)系统或活动造成损害;1996年,Bishop和Bailey指出计算机系统是由若干描述实体配置的当前状态所组成的,这些状态可分为授权状态、非授权状态、易受攻击状态和不易受攻击状态,易受攻击状态是指从非授权状态可以到达的授权状态。授权状态是指已完成这种转变的状态,攻击是从非授权状态到授权状态的状态转变过程,而漏洞是指区别于所有非授权状态的易受攻击状态的特征;1998年,Krsul指出漏洞是软件规范设计、开发或配置中的错误实例,它的执行能违反安全策略;2000年,Arbaugh等将漏洞定义为在系统的开发中,由于设计或实现中而产生的可被利用的弱点,可以引起安全或残存的影响;微软公司2003年出版的“Microsoft Encyclopedia of Security”(《微软安全百科全书》)中认为漏洞是指所有给攻击者提供攻击^机会的对象,包括目标机器上所运行服务的配置错误、目标操作系统或应用中的缺陷和目标服务所使用协}义的弱点。国内方面,本书作者曾提出信息安全漏洞是信患技术、信息产品、信息系统在需求、设计、实现、配置、维护和使用等过程中,有意或无意产生的缺陷,这些缺陷一旦被恶意主体所利用,就会造成对信息产品或系统的安全损害,从而影响构建于信息产晶或系统之上正常服务的运行,危害信息产占占或系统及信息的安全属性;2006年,蒋儿等提出安全漏洞是指计算机系统在硬件、软件和协议的设计与实现过程中或系统安全策略上存在的缺陷和不足,导致非法用户利用这些缺陷获得计算机系统的额外权限,提高其访问权,破坏系统,危害计算机系统安全;2012年,张玉清等提出,漏洞是计算机信息系统在需求、设计、实现、配置、运行等过程中,有意或无意产生的缺陷。这些缺陷以不同形式存在于计算机信息系统的各个层次和环节之中,一旦被恶意主体所利用,就会对计算机信息系统的安全造成损害,从而影响计算机信息系统的正常运行。这些学术研究大多从计算机系统的角度出发,给出了漏洞这一名词初始的概念,较为直观,但缺少对漏洞本质的描述。
  2.标准化定义
  进入21世纪,随着计算机技术和漏洞相关学术研究的日益成熟,许多国际标准组织和安全研究机构通过标准或技术报告对漏洞进行了较为严谨的定义。同时伴随着人们对漏洞及其相关知识认知的成熟,漏洞相关的研究也由探索性发展成为了一类较为系统的理论。
  2000年5月,互联网工程任务组(Internet Engineering Task Force,IETF)给m的定义表明漏洞是在系统设计、完成、操作、管理中出现的缺陷或弱点,能够被利用以违反系统的安全策略;2002年4月,美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)发布的《关键信息安全术语词汇表(NIST IR 7298)认为漏洞是威胁源可以攻击或触发的信息系统、系统安全流程、内部控制或实施中的脆弱点;2004年出版的“Information Security Dictionary”(《信息安全宁典》)中定义漏洞是系统安全流程、系统设计、实施、内部控制等过程中的脆弱点,这些脆弱点可以被攻击以违反系统安全策略;2006年欧洲网络和信息安全局(European Network and Information Security Agency.ENISA)提出漏洞是设计或实施中存在的弱点或错误,可以导致计算机系统、网络或协议等安全目标出现非预期的结果;2008年国际标准化组织和国际电工委员会(International Organization for Standardization/lnternational Electro Technical Commission, ISO/IEC)发布的国际标准《信息技术一安全技术一信息安全风险管理(ISO/IEC27005: 2008》>中指出漏洞是一个或一组资产的弱点,通过利用它可以威胁到拥有该资产的机构的事务运营和持续性,包括支持机构计划的信息资源阻叫;2010年4月,美国国家安全系统委员会(Committee on National Security Systems,CNSS)发布的《信息系统安全词汇表(NSTISSI No.4009)》指出漏洞是可被利用的信息系统、系统安全流程、内部控制或实施中存在的脆弱点;2011年7月美国发布的“通用漏洞及暴露”(Common Vulnerabilities and Exposures,CVE)中定义漏洞是软件中的错误,能够被攻击者利用而获得对系统或网络的访问权,具体形式包括:攻击者能够以另一用户身份执行命令,能够访问已制订了严格访问规则的数据,能够假冒另一用户的身份或者能够实施拒绝式服务阻剐;2011年9月发布的“开放式Web应用安全项目”(The Open Web Application Security Project,OWASP)中定义漏洞是应用中的弱点,可能是设计或完成过程中引入的Bug,可以被攻击者用来对应用的相关用户实施攻击,从而造成损失。
  3.本书的定义
  通过这些研究分析可以看出,在软件生命周期的不同阶段,漏洞呈现出不同的表现形式,并日.经常易与错误(error)、瑕疵(bug)、缺陷(defect)、故障(fault)、失效(failure)等词汇混淆。经过软件工程领域学者的研究,以上名词实际上具有差别,其具体定义如下。
  定义1.1:软件错误在软件生命周期过程中不希望或不可接受的人为差错,其结果将可能导致软件缺陷的产生。在软件开发过程中,人是主体,难免会犯错误。软件错误主要是一种人为错误,相对于软件本身而言,是一种外部行为。对于软件错误,通常用初始软件错误数、剩余软件错误数以及每千(百)行代码错误数等来度量。
  定义1.2:较件瑕疵软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。
  定义1.3:软件缺陷由于人为差错或其他客观原因,导致软件隐含能导致其在运行过程中出现不希望或不可接受的偏差的软件需求定义以及设计、实现等错误。在这种意义下,软件缺陷和软件错误有着相近的含义。当软件运行于某一特定的环境条件时出现故障,这时称软件缺陷被激活。软件缺陷存在于软件内部,是一种静态形式口叫。
  定义1.4:软件故障在规定的运行条件下,导致软件出现可感知的不正常、不正确或不按规范执行的状态。即软件设计过程中所造成的与设计要求的不一致,它在数据结构或软件输出中的表现称为软件差错。软件故障只与设计和编码实现有关。
  定义1.5:软件失效软件在运行过程中的规定功能的终止。软件失效通常包含三方而的含义:软件或其构成单元不能在规定的时间内和条件