




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 基于过程内路径补全 高覆盖率软件脆弱性分析工具的设计 摘 要 随着社会经济的高速发展以及信息技术的越发成熟,计算机已经深入到社会生产生活的各个方面 ,各种计算机软件呈智能化、复杂化发展,在各个领域发挥着举足轻重的作用。另一方面,软件规模的急剧扩大以及云计算等新型分布式技术的发展使得传统的测试手段越发力不从心,同时,从事开发工作的程序员迫于工程进度压力以及自身的疏忽或者不好的开发习惯使得软件中潜在的脆弱点越来越多, 黑客往往利用这些脆弱点对个人计算机、信息系统进行入侵破坏、盗取个人信息或者企业国家的机密数据 ,这些行为深刻威胁到软件的正常运行、信息安全乃至人身以及社会的安全。然而公布漏洞补丁等补救行为往往是发生在针对脆弱点的攻击发生之后,此时损失已经产生,补救显得相对滞后。因此,以 上种种原因便使得计算机安全技术越发重要,新的计算机软件脆弱点检测 技术的研究或者工具的开发显得迫不及待。 基于以上的社会背景以及计算机软件发展形势,本课题以设计与实现一软件脆弱性分析工具为目的,通过该工具可以对各种计算机软件进行分析,能够在被其他恶意软件或恶意黑客行为加以利用产生攻击前检测出所分析的计算机软件当中已知的或未知的潜在软件脆 弱点,并且能够产生软件脆弱点检测报告,以提供给该计算机软件的开发者、维护人员以及用户起到参考、开发、测试和维护作用。 动态污点分析 ,作为一种成熟的 动态程序分析技术,能够在目标程序运行时进行数据流跟踪 , 通过内存建模以及寄存器建模可以准确找出各内存数据与程序输入的联系,从而发现程序的潜在漏洞,目前被广泛应用到软件测试以及漏洞挖掘等计算机安全领域。动态污点分析的优点在于动态执行具有的上下文信息能够保证程序分析的准确性,同时不需要源代码的支持;但另一方面,动态污点分析依赖于动态程序执行路径,因此分析路径的覆盖率相对 静态分析而言较低,导致了相对较高的漏报率。 此外,动态分析需要在目标程序运行时需要额外的分析的代码进行分析工作,这往往会在目标程序与分析程序间产生上下文切换,从而导致了较高的性能消耗,给动态分析工具的实用性带来巨大的挑战。 目前存在的使用污点传播分析的一些工具能够对部分类型的软件脆弱点进行有效的检测,然而这些工具在各方面都具有不可忽视的缺点,使得其难以得到实际的使用。如一些工具需要结合源码的静态分析来支持动态的分析工作,一些工具在检测上局限性很大,只能检测一种或很有限的几种软件脆弱点,而一些工具则在性能上包括时 间开销以及空间开销上遇到瓶颈。 为了在新的形势下更好地检测计算机软件脆弱点,结合已经存在的各种脆弱点分析工具的优缺点, 本文 对一个新的软件脆弱性分析工具 行了阐述,该工具在缺乏目标程序源代码的情况下使用了动态污点分析技术对 进制可执行文件进行 数据流跟踪 分析, 能够在目标程序潜在的软件脆弱点被恶意软件或黑客利用产生攻击前就能被检测出来。其首先 根据目标程序的输入如所打开的文件内容进行污染源的确定,同时对 台的大部分常见指令,尤其是与字符串操作相关的指令建立起污点传播规则以进行 动态 污点传播 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 分析; 与 其他使用动态污点传播分析工具不一样的是, 用一些新的方法与技术在检测软件脆弱点的有效性以及减少性能消耗等方面得到改进。一方面, 过针对脆弱点特征建立对应规则, 能够有效挖掘目标程序中潜在的脆弱点;同时该工具针对程序各 过程进行了过程 内动态未执行的分支 路径的补全,提高了程序分析的覆盖率并降低了对脆弱点的漏报率,从而弥补了动态分析产生的缺点。 为了更好地提高性能尤其是时间上的开销,取了无关 滤等优化措施, 根据对 数行为的研究在分析过程中过滤掉对污点传播以及安全不会产生影响的 数不进行处理,这样便能进一步地提高本工具的性能。 此外 针对基本块处理以及过程内静态路径补全进行多种优化,进一步降低了 时间消耗。 本文还对 能开销、软件脆弱点检测、过程内静态路径补全等方面设计了实验进行评价,实验的目标程序选取了 具有一般性、有效性、通用性、对比性的软件,并将 实验数据与其他动态分析工具进行了横向比较从而得出较为客观的结果。 通过实验数据表明, 经过了多层优化之后 性能上相对与其他动态分析工具有着比较明显的优势,其中结合了无关 滤等优化措施后对 试程序的平均相对时间消耗为 ,同时只有 10 倍的相对空间消耗,这一数值远低于其他动态分析工具。另一方面,经过过程内静态路径补全后对目标程序分析的平均覆盖率为 88%,达到了提高分析覆盖率的目的。使用软件脆弱点检测规则的 够成功检测出多种 文字处理软件 中 的 多个 潜在软件脆弱点, 这 使得其在软件行业快速发展以及信息安全日益重要的大背景下具有较高的实用价值。 总的来说, 一个基于过程内路径补全方法的软件脆弱性分析工具,其采用动态污点传播分析的技术能够有效地 检测出目标程序中潜在的软件脆弱点,并且在对目标程序的分析上达到较高的覆盖率 ,在计算机软件安全、测试、维护等关键领域均具有较高的实用意义 。 关键词: 动态污点分析,脆弱点挖掘 ,路径补全,覆盖率 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 F A N s as we of is of of an in of in in of On or of to of of of as it it in of as a of of at of in be of to in to or or a to of or is a to be of is it or to be in on of of of is to a By to a of be by or to at a be to or as a is at in of by in to 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 in to as of of of is in On of on of in of s is on to is be of of is to a At on is in of of in to so in of of In to by of in of in a is 86 is to of by or to a by of by of as of is to of of 86 to in On be to to of of is to of in to up of On in to of PI is to PI is to be no on of to of PI be on to in In to at as so of in 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 of be in to a a 0X is of On on 8%, be to be a is to of in by it of in of of In a is a on is to of of be at of in of 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 目 录 第 1章 绪论 弱点挖掘的研究现状 静态分析方法 动态分析方法 采用的方法 动态污点分析技术 脆弱点检测规则 过程内路径补全 章小结 2章 系统总体设计 统设计原则 函数级脆弱点分析 间接污点分析 过程内路径补全 统总体架构 章小结 三章 各模块设计与 实现 态 污点传播分析 污染源 确定 内存模型 寄存器模型 污点传播规则 弱点检测规则 程内路径补全 章小结 四章 优化 支点精简 关 滤 本块处理优化 章小结 五 章 实验与评价 价目的 验设计与结果 性能开销 脆弱点检测 过程内路径补全 章小结 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 第五章 结论 考文献 辞 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 第 1 页 共 19 页 第一章 绪论 当今是 信息技术的快速发展 的时代 ,计 算机已经被普遍应用到人类生产生活的各个方面,无论是家庭、学校, 或者是企业、国防等关键领域或重要场所,都可以看见计算机的影子。随着计算机在社会生活的不断深入,人类对计算机的依赖程度也越来越高,因此,计算机软件的安全性与可靠性也得到越来 越多的关注与重视。这是因为一方面, 随着计算机行业的发展,软件的规模越来越大,其复杂程度也越来越高, 同时一些 新的技术的出现如云计算等,给 软件测试与维护工作带来了巨大的挑战,尽管有成熟的软件工程理论以及项目管理手段的支持,由于从事软件开发工作的程序自身由于项目进度压力或者其他原因产生的疏忽,软件中往往存在着许许多多各式各样的 脆弱点,而这些脆弱点很难在测试的时候就被完全发现,这些脆弱点便成为了黑客对个人计算机、信息系统进行入侵的后门,这不但会给个人、企业的财产带来损害,还会给社会的稳定、国家的安全带来巨大的威胁。 另一方面,计算机技术的发展也使得黑客的攻击技术更加先进以及攻击手段更显多样化,同时计算机技术的普及使得黑客的门槛越来越低 ,计算机安全显得越来越重要。 针对日益严峻的软件安全形势,信息安全技术也在不断地发展,主动防御、入侵检测、综合安全网关( 成熟技术在家庭和企业得到了广泛应用,同时也出现了云安全技术、深度包检测( 终端安全管控等新型信息安全技术。但对大多数安全软件来说,根据攻击者的行为发现软件漏洞是常见的模式,然而针对软件潜在漏洞的攻击行为无刻不在,这种漏洞发现模式发生在攻击行为之后,往往已 经造成不可忽视的损失。 这就使得漏洞挖掘工具的设计与实现更为重要。 弱点挖掘的 研究现状 当前对 软件脆弱点挖掘的研究主要集中于两个方向:静态分析方法与动态分析方法。 态分析方法 静态分析方法是指在目标程序不执行的情况下对程序进行分析的方法。在大多数情况下,静态分析方法的输入是目标程序的源代码, 采用模型检查、抽象解释等形式化方法 对程序进行分析。 目前存在不少静态分析工具用于软件脆弱点的挖掘。 学的 人研究开发过 ( ,该静态分析工具允许用户使用一种称作状态机语言编写自定义的时序规则,从而实现了静态分析工具的可扩展性。 实际效果非常优秀,号称在 核中找出来数百个安全漏洞。 工具是络研究中心和 间的合作项目,其在对 一些开放源码的系统进行测试中, 得了不错的效果。 静态分析方法的优点在于能够分析代码的完备性,能够利用严格的数学方法对程序进行验证,同时,源代码的存在可以使得函数原型、变量名、变量类型等 重要的 符 号信息能在分析过程得以 使用 。然而由于缺乏运行时上下文信息,因此其分析结果准确性较低,而大型程序往往源代码 相对 庞大, 因而 静态分析的工作量 也 相当 巨 大 。更重要的是,在大部分情况下,各种商业软件的代码是不能获得的,这就给 大部分的 静态分析 工具 带来了巨大的困难。 态分析方法 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 第 2 页 共 19 页 动态分析方法是指在实际执行目标程序的情况下对程序进行分析的方法。 与静态分析方法不一样的是,动态分析方法是通过程序执行进行动态的数据跟踪,因此往往只需要目标代码而不需要目标程序的源代码,这优点适用于软件脆弱点挖掘领域。另一方面,动态运行 时所具有的上下文信息如内存信息、寄存器信息等能够被应用于 脆弱点分析当中使得分析结果更为准确,降低了误报率 。 动态污点分析技术是一种成熟的动态分析技术,被应用到软件脆弱点分析 等领域 当中。通过确立污染源如程序的用户输入或者输入流等、建立内存模型和污点传播规则,以及数据流分析,能够发现目标中潜在的脆弱点。 但由于分析结果依赖于实际程序执行的路径,因此对程序分析的覆盖率较低,也导致了较高的漏报率。 同时,由于符号信息的缺乏使得变量、循环等信息的识别成为了动态分析中的难题。 目标存在着很多漏洞挖掘工具 使用动态分析方法特别 是动态污点分析方法。 是一个检测 C 程序安全攻击的动态数据流跟踪框架,但它的一个最大的缺点是需要源代码的支持,这在很大程序上限制了该工具的用途。 是一个能够检测各种基于破坏控制数据的攻击的动态数据流跟踪工具,其在性能上低开销的特点使得其实用性很好,然而它只能检测已经发生了的攻击,因此对于 0 未能在发布前被检测到)的软件脆弱点来说它是无能为力的 。 基于 二进制分析平台的 是另外一个动态分析工具,它 使用动态污点分析方法能够 自动、 准确 地 检测 到 软件中 潜在的漏洞,然而它的性能开销很大,数据显示它的平均时间开销为 30 倍,这就使得 它难以被应用到对商业软件的实时保护中。 为了解决动态分析时空间消耗过大的问题, 人提出了一种新的方法对非法内存访问 (行了检测 7,该方法是用动态污点传播分析,并且通过标记复用限制了内存标记的使用个数,同时通过修改硬件的相关部分使得污点标记的传播与污点数据的传播能够在同一指令周期内完成,这样便能够在一定程度上降低时间消耗。然而这种方法只能对 种特定的软件脆弱点进行检测。 采用的 方法 考虑到很多情况下目标程序的源代码是无法得到的,因此本脆弱点挖掘工具采取动态分析的方法, 并且在不修改硬件的情况下 针对 台上的目标二进制代码进行分析,同时结合 目前存在的各种脆弱点分析工具的优缺点,采用了以下的技术或方法: 态污点分析技术 程序的任何输入如用户文本框的输入或所打开的文件等,都是有可能带有威胁性的,比如通过打开含有恶意代码的文件使得目标程序运行时控制跳转的内存数据受文件数据的影响使得被迫跳转至攻击代码中从而导致程序崩溃。 过跟踪 I/O 流确立污染源,以污染源的数据(有 可能含有恶意代码)为初始污点,通过建立污点传播规则跟踪目标代码运行时各内存数据特别是与控制跳转等相关的关键数据与污点之间的数据依赖关系,这样便能进一步检测出潜在的软件脆弱点。 弱点检测规则 通过动态污点分析技术,我们便能掌握目标程序运行时的数据依赖关系,此时, 合污点传播关系建立起针对各类型脆弱点的脆弱点检测规则,便能在动态运行时发现潜在的软件脆弱点,从而能够在针对脆弱点的攻击发生前便能产生警告。由于具有动态运行上下文的支持,因此根据这种脆弱点检测规则所 检测的结果准确性很高,在实验中并没有产生脆弱点的误报。 程内路径补全 动态污点分析的结果与每次程序执行的路径有很大的依赖性,因此其分析结果具有较大的局限性,对目标程序的分析覆盖率较低,与静态分析方法相比具有较高的漏报率。而 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 第 3 页 共 19 页 另一方面,静态分析方法虽然不能在误报率上得到保证,但其在分析的完备性上具有较大的优越性。结合这两种方法的优缺点, 用了一种新的方法,即过程内路径补全。 过程内补全是指在各过程内部的各个跳转点补全动态执行时并没有被执行的另外几条路径。通过 过程内的 静态路径补全便能扩大对目标 程序分析的覆盖面,同时 能够发现原先动态执行路径未能发现的脆弱点,动态分析结果与静态分析结果结合起来便能降低脆弱点的漏报率。 章小节 本章主要介绍了本课题特别是脆弱点挖掘的背景以及当前世界对脆弱点挖掘的研究情况,同时,结合着当前 存在的各种脆弱点挖掘技术或工具的优缺点 以及实际需求对 采用的技术分成三部分进行了简要的介绍。 第二章 系统总体设计 统设计原则 与目前存在的一些动态脆弱点分析工具 特别是使用动态污点分析技术的工具 不同的是, 以下几个设计原则方面有所改进,使得 够更有效 率地对软件中潜在的脆弱点进行挖掘分析: 数级脆弱点分析 图 2侧部分 为一缓冲区溢出攻击的例子, 在函数 对字符串进行拷贝操作,如果源字符串 度超过目标字符串 度则会发生缓冲区溢出。 虽然 为了更好地进行描述,例子中以 C 语言源码的方式进行描述。目前大部分使用动态污点分析技术的软件脆弱点挖掘工具在处理类似图 2所显示的脆弱点时都遇到一个问题,即它们只关心 目标程序的控制流是否被修改,比如 、函数 指针 偏移量以及函数返回地址指针的行为进行检查,然而,对企图修改数据流信息的行为则缺乏相应的关注与处理手段 。因此,正如图 2侧部分所示,大部分的工具在检测此类脆弱点时存在检测空隙,即只有当函数指针、函数指针偏移量、函数返回地址指针 (蓝色区域) 被 缓冲区数据(红色区域) 确实修改了才能被工具检测出来,而仅仅修改了数据流信息的脆弱点是无法被检测出来的。 基于过程内路径补全的高覆盖率软件脆弱性分析工具的设计 第 4 页 共 19 页 图 2冲区溢出脆弱点与检测空隙 为了解决以上问题, 函数级脆弱点进行了分析,即对一些可能引起安全问题的数在被调用前进行检查,如对 数被调用前检查,对其两个参数的长度进行比较,从而便能在函数指针、函数指针偏移量、函数返回地址指针被修改前就能检测出 使用该 数的 潜在的缓冲区溢出脆弱点。 接污点分析 当前大部分使用动态污点分析技术的软件脆弱点挖掘工具遇到的另外一个问题是无法检测出不直接受污点数据影响的软件脆弱点。这是由于大部分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论