IT技术互动交流平台

IT人员应该知道的计算机漏洞知识

作者:杜飞   发布日期:2012-04-13 16:22:50
  漏洞一般可以理解为脆弱性(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) 漏洞和具体的系统环境密切相关。在不同各类的软、硬件设备中,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。

  (4) 漏洞问题与时间紧密相关,随着时间的失衡,旧的漏洞会不断得到修补或纠正,新的漏洞会不断出现,因而漏洞问题会长期存在。漏洞的上述特点决定了漏洞完整描述的独特性。在对漏洞进行研究时,除了需要掌握漏洞本身的特性属性,还要了解与漏洞密切相关的其他对象的特点。漏洞的基本属性有:漏洞类型、造成的后果、严重程序、利用需求、环境特性等。与漏洞相关的对象包括:存在漏洞的软(硬)件、操作系统、相应的补丁程序和修补漏洞的方法等。下衅是一个典型的漏洞库所包含的漏洞信息。

计算机漏洞


  ▲ 对计算机漏洞的描述

  底层分析

  由于对程序内部操作的不了解,或者是没有足够的重视,程序员总是假定他们的程序会在任何环境中正常地运行。当程序员的假设得不到满足,程序内部的相互作用和安全策略产生冲突时,便形成了安全漏洞。因此,研究漏洞的形成机制需要深入分析程序内部的相互作用和安全策略的关系。下图是漏洞分析的基本模型。

计算机漏洞


  ▲ 程序内部的相互作用

  在这个分析模型中,我们将软件的运行抽象成程序的内部对象、运行环境和外部输入之间的相互作用。它包括环境、受影响的对象、对象所受的影响、影响对象的方式以及外部输入5个部门。通过分析每个作用是否和安全策略(或者是程序员的假设)相违背,就可以找到产生漏洞的深层原因。

  (1) 环境 我们认为“系统”是由“应用程序”和“运行环境”组成的,这样,所有的被认为不属于运行程序的代码和部件就属于环境。环境是相对的,当针对运行程序中的某个操作时,该运行程序就被看成是内部环境,其它程序则认为是外部环境。内部对象以及外部输入之间的相互作用使环境具有动态特征和共享特征,这使程序的安全策略实行起来更加困难并容易发生错误。从安全策略的角度出发,执行每个操作时都需要考虑以下环境实体:环境名称、程序运行的目录、创建的临时项目、内存空间、输入的数据、存储的文件、对象的属性、对象性质、网络标志等。

  (2) 对象 程序代码和数据空间中的任何一个元素都被认为是一个内部对象。对于一个特定的操作而言,这些对象又构成了内部环境,每个对象就是一个环境实体。这些内部对象有:命令提示、用户文件、系统相关文件、公共文件、系统目录、系统分区、堆中的数据和可执行代码、栈中的数据和可执行代码、栈中的返回地址、系统程序、用户程序、系统信息、系统函数或服务程序库、网络联接、用户名、域名、CPU时间、电子邮件、网络端口、网络数据包、内部系统名称、系统设备、地址映射等。

  (3) 对象所受的影响 程序内部的相互作用导致内部对象的改变,变化包括:完全取代、可写、可读、可追加、被创建、被显示、所有权被改变、权限被改变、可预测、能够动态加载和连接、被耗尽、被毁坏、被导出、被锁、被调试、被关闭、被终止等。

  (4) 影响对象的方式 包括:连接或绑定连接,向堆栈缓冲区拷贝数据、配置错误、使用特殊字符、修改环境变量、修改编码、改变对象名字、继承不必需的特权、提供不适当的权限、系统调用泄露敏感信息、访问相关路径、不能正确完成保护机制、使用代理绕过保护机制、使用死循环消耗资源、临界选择错误等。

  (5) 外部输入 用户通过外部输入直接或间接地影响程序的内部操作、操控程序的运行步骤,从而完成需要的程序功能。一般的输入类型有:环境变量、命令行选项、网络数据、临时文件、配置文件、数据文件、系统用户信息、系统调用的参数、库调用的参数、可移动介质等。

延伸阅读:

  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规