C程序内存安全性的运行时验证研究与实现
本文关键词:C程序内存安全性的运行时验证研究与实现,,由笔耕文化传播整理发布。
【摘要】:C程序内存安全问题是指用C语言编写的程序中存在的非法操作内存区间引起的安全问题,常见的有数组和指针访问越界、缓存区溢出和C库函数的的非法操作等。产生问题的原因是C语言没有提供边界安全检测的机制,例如在访问数组元素时,下标不在正常范围(即不在0到max之间,max是数组的长度),程序也会执行。在用C语言编写的程序中大量存在这一类问题,并严重威胁着软件安全。现在已经有了很多技术能检测出这些问题,但它们或多或少存在些缺陷。如模型化技术,它在系统建模精简了问题的规模的同时也忽略了很多实现细节;又如路径分析技术,虽然它能综合上下文信息进行判断来减少误报,但它存在漏报的情况,且当路径过多时,会检测缓慢,等等。本文提出了一种基于程序自动化插桩进行数组越界检测的运行时验证方法。我们通过分析数组越界的错误类型,根据这些类型分别研究相应的处理方法,设计了基于程序自动化插桩进行数组越界动态检测的算法,用实验说明了该方法的可行性。在数组越界检测的基础上,本文还提出了一种改进的基于对象的自动化检测技术。该技术改进结构体变量、多维数组的地址范围记录方式,用两次地址查询操作检测指针访问从一个有效内存块偏移到另一个有效内存块的情形,用平衡二叉树优化记录存储结构。最后实验说明了插桩后程序的运行时负载由原来的19.8%减少为1.5%,大幅度地降低了桩函数对程序执行性能的影响。
【关键词】:内存安全 基于对象技术 运行时验证 数组越界 自动化插桩
【学位授予单位】:南京航空航天大学
【学位级别】:硕士
【学位授予年份】:2015
【分类号】:TP309
【目录】:
- 摘要4-5
- abstract5-12
- 第一章 绪论12-24
- 1.1 研究背景12-17
- 1.1.1 内存安全的定义与威胁12-14
- 1.1.2 内存安全的攻击方式14-17
- 1.2 国内外研究现状17-19
- 1.3 预备知识19-21
- 1.3.1 程序编译19
- 1.3.2 Clang编译器19-21
- 1.3.3 运行时验证21
- 1.4 本文的主要研究工作21-22
- 1.5 本文的内容安排22-24
- 第二章 内存安全性检测技术综述24-37
- 2.1 静态分析技术24-26
- 2.1.1 路径分析24-25
- 2.1.2 模型化方法25-26
- 2.1.3 句法分析26
- 2.2 运行时验证技术26-34
- 2.2.1 基于对象技术26-27
- 2.2.2 扩展指针技术27-29
- 2.2.3 值验证技术29-31
- 2.2.4 影子内存技术31
- 2.2.5 地址随机化31-32
- 2.2.6 动态数据流/污点/牧羊技术32-33
- 2.2.7 签名过滤技术33-34
- 2.2.8 程序执行流更改34
- 2.3 分析讨论34-36
- 2.4 本章小结36-37
- 第三章 数组越界检测37-43
- 3.1 数组越界检测原理分析37-39
- 3.1.1 常见数组越界的分类37-38
- 3.1.2 数组越界检测原理38-39
- 3.2 数组越界检测的设计细节39-42
- 3.2.1 数组访问越界39-40
- 3.2.2 指针访问越界40-41
- 3.2.3 函数间数组越界41
- 3.2.4 得到指针所指向空间的大小信息41-42
- 3.3 本章小结42-43
- 第四章 数组越界检测的实现与实验43-49
- 4.1 原型设计43-44
- 4.2 插桩算法44-46
- 4.2.1 数组访问44
- 4.2.2 指针访问44-45
- 4.2.3 函数声明、定义和调用45-46
- 4.3 实验分析46-48
- 4.4 本章小结48-49
- 第五章 改进的基于对象内存安全运行时验证技术49-58
- 5.1 传统基于对象检测技术分析49-51
- 5.1.1 技术原理49
- 5.1.2 技术缺陷49-51
- 5.2 改进的基于对象的内存安全运行时验证技术51-57
- 5.2.1 块地址范围记录技术描述51-53
- 5.2.2 块地址范围记录技术改进53
- 5.2.3 取值检测技术描述53-55
- 5.2.4 取值检测技术改进55
- 5.2.5 存储结构改进55-57
- 5.3 本章小结57-58
- 第六章 改进的基于对象内存安全运行时验证技术实现与实验58-66
- 6.1 原型设计58-59
- 6.2 插桩算法59-64
- 6.2.1 块地址范围记录59-60
- 6.2.2 数组引用检测60-61
- 6.2.3 指针引用检测61
- 6.2.4 指针赋值运算61-63
- 6.2.5 库函数检测63-64
- 6.3 实验分析64-65
- 6.4 本章小结65-66
- 第七章 总结与展望66-68
- 7.1 论文总结66-67
- 7.2 工作展望67-68
- 参考文献68-74
- 致谢74-75
- 在学期间的研究成果及发表的学术论文75
【相似文献】
中国期刊全文数据库 前10条
1 禹振;苏小红;王甜甜;马培军;;C程序隐式规则自动提取与反例检测[J];电子学报;2013年02期
2 龚冬梅;剖析C程序中的变量[J];福建电脑;2002年11期
3 李军;优化C程序的执行速度[J];电脑编程技巧与维护;1995年10期
4 赵延惠;C程序常见错误剖析[J];思茅师范高等专科学校学报;2003年03期
5 黄雪菊;无硬盘情况下调试、运行C程序[J];电脑;1995年11期
6 王向阳;杨红颖;;如何编制高质量的C程序[J];软件;1994年07期
7 赵洪明;提高C程序可移植性的几点建议[J];黄石高等专科学校学报;1999年04期
8 郑英;;C程序实现牛顿迭代法的教学探讨[J];内江师范学院学报;2006年04期
9 匡春光;张鲁峰;何蓉晖;;C程序中的脆弱性模式研究[J];计算机系统应用;2009年02期
10 牛连强,王溪波,陈昕;C程序中的特殊错误处理方法[J];沈阳工业大学学报;1999年01期
中国博士学位论文全文数据库 前1条
1 马晓东;C程序内存错误静态分析技术研究[D];国防科学技术大学;2009年
中国硕士学位论文全文数据库 前4条
1 李明晓;C程序数组越界检查技术研究[D];山东大学;2014年
2 李文明;C程序内存安全性的运行时验证研究与实现[D];南京航空航天大学;2015年
3 曲博婷;基于层次标签的C程序习题推荐研究[D];西北大学;2014年
4 陈桂茸;基于SUIF2的C程序循环特征分析技术研究与实现[D];国防科学技术大学;2006年
本文关键词:C程序内存安全性的运行时验证研究与实现,由笔耕文化传播整理发布。
本文编号:355022
本文链接:https://www.wllwen.com/shoufeilunwen/xixikjs/355022.html