漏洞一般可以理解为脆弱性(Vulnerability),是计算机系统在硬件、软件、协议上的体现或系统安全策略上存在的缺陷和不足。漏洞一旦被发现,就可使用这个漏洞获得计算机系统的额外权限,使攻击者能够在未授权的情况下访问或破坏系统,从而导致危害计算机系统安全。
研究成果:
1975年,美国启动的PA(Protection Analysis Project工程分析)和RISOS(Research in Secured Operating Systems 操作系统安全研究)计划被公认为是计算机安全研究工作的起点。1980年,美国密执安大学的B.Hebbard小组使用“渗透分析”的方法成功地发现了系统程序中的部分漏洞。1990年,美国伊利诺斯大学的Marick发表了关于软件漏洞的调查报告。对软件漏洞的形成特点做了统计分析。1993年,美国海军研究实验室的Landwher等人收集了不同操作系统的安全缺陷,按照漏洞的来源、形成时间和分布位置建立了3种分类模型。普渡大学COAST实验室 的Aslam和Krsul在前人成果的基础上,提出了更为完整的漏洞分类模型,并建立了专用漏洞数据库。MTTRE公司从事的“公共漏洞列表”(Common Vulnerability Enumeration,CVE)项目,为每个漏洞建立了统一标识,方便了漏洞研究的信息共享及数据交换。
漏洞描述
丹宁在《Cryptograph and Data Security》一文中从访问控制的角度给出了漏洞的定义,他认为,系统中主体对对象的访问是通过访问控制矩阵实现的,这个访问控制矩阵就是安全策略的具体实现,当操作系统的操作和安全策略之间相冲突时,就产生了安全漏洞。
毕夏普和贝利在《A Critical Analysis of Vulnerability Taxonomies》中认为,计算机系统是由若干描述实体配置的当前状态所组成的,这些状态可分为授权状态,非授权状态以及易受攻击状态、不易受攻击状态。其中容易受攻击的状态是指通过授权的状态转变从非授权状态可以到达的授权状态。受损状态是指已完成这种转变的状态,攻击是非受损状态到受损状态的状态转变过程。漏洞就是指区别于所有非受损状态的容易受攻击的状态特征。
漏洞具有以下特点:
(1) 编译过程中出现逻辑错误是很普通的现象,这些绝大多数都是由于疏忽造成的。
(2) 数据处理(例如变量赋值)比数据计算更容易出现逻辑错误,过小和过大的程序模块都比中等程序模块更容易出现错误。
(3) 漏洞和具体的系统环境密切相关。在不同各类的软、硬件设备中,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。
(.
▲ 对计算机漏洞的描述
底层分析
由于对程序内部操作的不了解,或者是没有足够的重视,程序员总是假定他们的程序会在任何环境中正常地运行。当程序员的假设得不到满足,程序内部的相互作用和安全策略产生冲突时,便形成了安全漏洞。因此,研究漏洞的形成机制需要深入分析程序内部的相互作用和安全策略的关系。下图是漏洞分析的基本模型。
▲ 程序内部的相互作用
在这个分析模型中,我们将软件的运行抽象成程序的内部对象、运行环境和外部输入之间的相互作用。它包括环境、受影响的对象、对象所受的影响、影响对象的方式以及外部输入5个部门。通过分析每个作用是否和安全策略(或者是程序员的假设)相违背,就可以找到产生漏洞的深层原因。
(1) 环境 我们认为“系统”是由“应用程序”和“运行环境”组成的,这样,所有的被认为不属于运行程序的代码和部件就属于环境。环境是相对的,当针对运行程序中的某个操作时,该运行程序就被看成是内部环境,其它程序则认为是外部环境。内部对象以及外部输入之间的相互作用使环境具有动态特征和共享特征,这使程序的安全策略实行起来更加困难并容易发生错误。从安全策略的角度出发,执行每个操作时都需要考虑以下环境实体:环境名称、程序运行的目录、创建的临时项目、内存空间、输入的数据、存储的文件、对象的属性、对象性质、网络标志等。
(2) 对象 程序代码和数据空间中的任何一个元素都被认为是一个内部对象。对于一个特定的操作而言,这些对象又构成了内部环境,每个对象就是一个环境实体。这些内部对象有:命令提示、用户文件、系统相关文件、公共文件、系统目录、系统分区、堆中的数据和可执行代码、栈中的数据和可执行代码、栈中的返回地址、系统程序、用户程序、系统信息、系统函数或服务程序库、网络联接、用户名、域名、CPU时间、电子邮件、网络端口、网络数据包、内部系统名称、系统设备、地址映射等。
(.
分类模型
漏洞研究的抽象层次不同,会对同一个漏洞作出不同的分类。例如我们常说的“缓冲区溢出”漏洞,从最低层次上来说可能是访问校验错误;从高一些的层次看,是一个同步错误或同步校验错误;从更高的层次看,这是一个逻辑错误,至今为止还没有一个比较完美的漏洞分类方案,包括权威的漏洞信息发布网站www.securityfocus.com上的分类也不能让人满意。
美国海军研究实验室于1993年收集了当时主流操作系统的安全漏洞,并按照漏洞的来源,形成时间和漏洞代码的分布位置等条件进行了分类。尽管这些分类还不够准确,概念上存在交叉和模糊现象,但这种分类方法每一次引入了时间和空间的概念,有助于系统设计人员对安全漏洞的理解,有助于建立更加安全的软件系统。下图是美国海军研究实验室的分类模型。
▲ 漏洞分类
普渡大学COAST实验室则从漏洞的形成原因角度对Unix操作系统的漏洞进行了深入研究,并建立了较为详细的分类模型。后来,该实验室的Krsul对此分类做了进一步的修改完善。美国南科罗拉多州大学的Knight在前人成果的基础上,增加考虑了社会和人的因素对于计算机安全的影响。使计算机漏洞的研究更加科学、全面。
下图是目前较为广泛接受的漏洞分类模型。计算机系统的漏洞被划分为两个方面的因素和4个基本类别。从漏洞的利用时效上讲,社会工程和逻辑错误形成的漏洞可以很快地产生作用,而管理策略失误和系统弱点的影响过一段时间才能显现出来;从漏洞的利用需求来看,利用计算机本身的漏洞比和利用社会工程和策略失误的漏洞需要更多的专业技术知识。
(.
▲ 计算机漏洞的基本类型
计算机因素的漏洞分类如下图所示:
▲ 计算机因素的漏洞分类
逻辑错误
逻辑错误对计算机系统的安全有直接的影响,通常是软件程序或硬件设计上的“Bug”,也是漏洞研究的主要内容。这种类型的