基于动态方法之嵌入软件缺陷检验技术概述与实现

论文价格:免费 论文用途:其他 编辑:lgg 点击次数:183
论文字数:35100 论文编号:sb2014091011183510406 日期:2014-09-10 来源:硕博论文网

第 1 章 绪 论


1.1 课题研究背景与意义
近些年来,随着以计算机技术、软件技术和通讯技术为主的现代信息技术产业的发展以及因特网的广泛使用,传统的控制学科正发生着巨大的变革。后 PC 时代,即非 PC 信息设备大显神通的时代,不再只是以纯 PC 设备的形式出现,更多的是以非PC 智能设备形式出现,而嵌入式系统正是非 PC 设备的主体。如今,嵌入式系统无处不在,已广泛应用于国防、医疗、家庭、商用等诸多领域,如生活中常见的移动电话、数码相机、机顶盒、掌上电脑、智能洗衣机等都是由嵌入式技术对传统产品进行智能化开发和改造的产品。由于嵌入式系统应用推广、领域特色突出,并不断渗入到各个行业,嵌入式软件作为包含在这些硬件产品中的特殊软件形态,其产业增幅不断加大,而且在整个软件产业中的比重日趋提高[2],现在它已成为一颗耀眼的“新星”,在整个信息产业的夜空中愈发光亮。随着嵌入式系统应用的不断深入和硬件技术的不断革新,嵌入式软件的规模和复杂度也与日俱增。然而,伴随而来的大量的软件缺陷成为隐藏在高度智能化和信息化系统中的一颗定时炸弹,对各类系统造成直接的威胁。因此,保证嵌入式软件的可靠性成为当前面临的严峻挑战。往往一个软件的开发不可能达到十全十美,由于个人疏忽、外部环境或技术瓶颈等原因都会使软件在某种程度上达不到预期理想的结果,甚至有可能造成系统崩溃。由于嵌入式软件缺陷而造成重大经济损失、导致灾难性后果的事例屡见不鲜,例如,因为阿丽亚娜 5 型火箭未发射成功,而推迟了整个欧洲的航天计划;巴拿马市中心医院出现医疗事故造成 8 人死亡;由于美国航空公司的机票系统出错造成数百万美元的损失。这就要求对隐藏在各类嵌入式系统和软件中的缺陷进行严格的检测和修正,确保软件质量以及各类系统的安全和稳定运行。
…………


1.2 相关工作
目前,我国大部分的嵌入式软件都是用 C 语言开发的,而 C 语言的最大特点是使用灵活、方便,其代码效率很高。因此,在工作中主要分析使用 C/C++这类提供很少保护措施语言的软件缺陷。一般认为,普通 C 代码主要的安全隐患集中在内存访问、指针引用、缓冲区溢出、整数溢出等几个方面[4]。在嵌入式代码中,由于资源受限等原因,使得这些缺陷更易产生,特别是运行时缺陷,且引发的危害性更大。C/C++语言程序中引发的安全问题绝大多数属于内存管理缺陷,内存管理缺陷可能由数组、指针或内存管理过程造成。内存管理缺陷在编译时期不被编译器自动捕捉到,通常是在程序运行过程中才被发现。内存管理缺陷主要又细分为以下几种类型[5]:缓冲区溢出即是越过预先分配空间边界读写内存。标准 C 库中提供有许多诸如gets()、strcpy()、strcmp()、sprinf()等字符串函数,它们在被编译时会分配连续的存储空间。但由于程序员不能预先确定缓冲区大小,如果读入的字符串长度超出给定的存储区的最大长度,则超出的部分字符会覆盖给定区域的后续相邻空间,由此会引起[7]:被覆盖区域的内容非常关键,从而产生严重的安全隐患;通过覆盖运行栈中函数的返回地址,可能导致程序执行任意代码。
………..


第 2 章 动态插桩框架介绍


2.1 几种主流框架分析
一些类似分析器和检查器之类的程序分析工具使得编程更加容易,并能有效提高软件质量。动态二进制分析(Dynamic Binary analysis,DBA)工具就是这样一类工具,它们在客户端程序运行时对低级别的机器代码进行分析。可以从头开始实现 DBA 工具,但是会很费时,也比较困难。在过去几年里,一种新起的动态代码分析方法出现了,即动态二进制插桩(Dynamic Binary Instrumentation,DBI)框架,它们使得构建DBA 工具变得更加简单,获得了信息安全等领域的很大关注。如今,基于 DBI 框架建立的工具能够执行许多不同任务的工作,如 shellcode 检测、污点分析、指令跟踪、自动解包、自修改代码分析等等。目前运用比较广泛也比较成熟的 DBI 框架有:Pin,DynamoRIO,DynInst 以及 Valgrind。下面就对这些主流框架做详细介绍。Pin 是 Intel 公司开发出来的一个 DBI 框架。目前,Pin 支持 Android*、Linux*、OSX*和 Window*操作系统,以及 IA-32、IA-64、Intel(R)64 和 Intel(R)等许多集成系统架构。在 Pin 基础上创建的工具称为 Pintools,可以对 Linux 和 Window 用户空间下的应用程序进行分析。作为一个动态插桩工具,Pintools 可以在已编译的二进制文件运行时对其进行插桩,并且可在任何地方插入任意代码(由 C/C++编写的代码)。因此,它不需要重新编译源代码,并支持插桩动态生成代码的程序。
……….


2.2 Valgrind 插桩平台
Valgrind 比其他类似的程序插桩框架更容易编写强大的工具。主要是由于 Valgrind最初设计的时候就是作为一个插桩框架,而不是一个后面再加入插桩功能的动态翻译框架。还有一点,Valgrind 使用一个平台独立的中间表示形式 VEX IR(使用虚拟寄存器来表示)。这层抽象允许工具在插桩的时候不需要考虑客户端代码(如是否有足够的空闲寄存器问题),也不需要担心会改变客户端代码的结果(例如是否插桩会改变原机器代码的条件码问题)。Valgrind 支持细粒度插桩,因此,工具不仅可以对每个块进行插桩,还可以小到针对每条指令进行插桩。由于 Valgrind 在动态插桩方面提供了非常完善的技术支持,方便创建各类基于不同分析目的而需特定功能的工具。本小节主要介绍 Valgrind 工作流程,然后介绍内核对工具运行和插桩的支持,包含了动态插桩框架中主要运用的一些相关概念和技术,以及在内核与工具间提供的接口,方便工具开发。由于后面将会在 Valgrind 框架基础上进行原型工具设计,因此在章节最后对 Valgrind 工具的编写方法做相应介绍。首先启动 Valgrind,然后由内核做一些初始化工作,包括:启动日志调试器,初始化地址空间管理器和内核内部内存分配器,加载客户端可执行程序,建立客户端的堆栈和数据段,初始化工具部分,命令行选项处理,初始化翻译表和翻译缓存,初始化信号处理机制和线程调度器等。在完成这些之后,Valgrind 工具(core + tool)得到完全的控制,开始启动根线程来翻译和执行客户端程序,一次一个基本块,以实时的执行驱动方式进行。下面将整个 Valgrind 工作流程分两部分来讲:启动过程和执行过程。
……….


第 3 章 缓冲区溢出缺陷检测方法 .........253.1 概述........25
3.2 缓冲区溢出检测工具设计.........26
3.3 缓冲区溢出检测工具实现.........32
3.4 实验分析......35
3.5 本章小结......36
第 4 章 整型符号转换缺陷检测方法 .....37
4.1 概述........37
4.2 相关工作......39
4.3 整型符号转换缺陷检测工具设计....40
4.4 整型符号转换缺陷检测工具实现....46
4.5 实验分析......49
4.6 本章小结......50
第 5 章 嵌入式软件缺陷动态检测系统........51
5.1 系统总体设计 ....51
5.1.1 最初设计.........51
5.1.2 总体架构.........52
5.2 系统的实现........53
5.3 系统测试......55
5.3.1 测试平台.........55
5.3.2 实验设计.........55
5.3.3 实验结果分析.......56
5.4 本章小结......60


第 5 章 嵌入式软件缺陷动态检测系统


5.1 系统总体设计
系统设计的对象不只是一般的软件缺陷,而是具备实时性、资源有限等特性嵌入式软件的缺陷。虽然 Valgrind 插桩平台支持 arm 指令集,但是由于它需要在源平台与目标平台一致时才可以工作,因此,并不能在普通 PC 机上对 arm 嵌入式软件进行检测。由此可知,系统需要先在普通 PC 机上建立嵌入式软件可以运行的虚拟仿真环境,然后将 Valgrind 运行在这个虚拟仿真平台上来检测嵌入式软件缺陷。下面是系统设计与实现的详细介绍。系统最初以嵌入式二进制软件缺陷为检测对象,由于嵌入式计算机系统可能没有通常的外围设备以及系统资源有限等原因,从而导致很难在测试过程中进行检测和观察,以及限制了嵌入式软件运行状况的监控。针对嵌入式软件运行平台的特定性,通过在普通 PC 机上建立嵌入式软件运行和测试的仿真环境,应用动态检测技术来检测嵌入式软件缺陷。


………..


结论


本文围绕嵌入式软件缺陷检测这一课题展开,由于嵌入式软件具有一定特殊性、实时性、平台受限性、以及运行平台资源有限等原因导致无法开展有效的有关测试和检测工作,而且由于很多商用企业出于保护知识产权和商业机密等原因无法提供源代码,只提供二进制形式代码,使得检测工作更加困难。目前,在静态方法无法有效检测运行时程序缺陷情况下,基于动态分析方法的嵌入式缺陷检测技术已成为一个热点研究对象。然而,在这方面的研究还有很多不足地方,对二进制程序分析的难度也比较高,检测效率不是很理想,本文主要针对该课题内容研究了软件缺陷检测技术、动态插桩框架 Valgrind 开发技术等,提出缓冲区溢出检测方法和整型符号转换缺陷检测方法,并设计和实现原型工具和嵌入式软件缺陷动态检测系统。本文的研究内容总结为以下几点:
(1) 研究了软件缺陷类型情况和软件缺陷检测技术的一些原理和优缺点,以及当前主流插桩框架 Pin、DynamoRIO、DynInst 和 Valgrind 的插桩技术和实现原理,并在支持平台、运行性能等方面对各平台进行比较分析。
(2) 研究了 Valgrind 框架工作流程和基于 Valgrind 的工具开发方法,以及该框架内核提供的一些支持如超级块划分、VEX IR、JIT 即时编译、C 库重写等方面,工具可通过简洁强大的接口来实现不同的分析目的。
…………
参考文献(略) 


QQ 1429724474 电话 18964107217