Transcript 答辩PPT

在此输入文字标题
模型检测技术在程序内存泄漏检测中的应用
答辩人:陈宇星
指导老师:洪玫
学号:1043111331
目
1、研究背景和研究意义
录
2、主要工作
3、系统化文献综述和文献计量分析方法
4、文献计量分析结果
5、文献综述
6、面临的挑战与总结
研
究
背
景
和
研
究
意
义
研究背景:
软件开发常用的动态内存管理技术,使得程序的设计更自由更灵活,但是,它也很容易造成内
存管理漏洞,特别是内存泄漏问题。内存泄漏的堆积会导致程序运行异常甚至崩溃,并且在调试
过程中是很难定位和解决的,因此内存泄漏检测是一个长期热门的研究课题。而模型检测技术是
基于对程序所有可能执行路径的尽可能的仿真,从而检测出程序中潜在的漏洞,所以可以将模型
检测技术用于程序内存泄漏检测中。
研究意义:
国内外学者们针对内存泄漏检测这一课题作出了大量的研究,因此这篇论文主要关注于模型检
测技术在程序内存泄漏检测上的应用,通过整理学者们历年来在这方面的研究成果,来给出“现已
有的应用了模型检测技术的内存泄漏检测方法和工具有哪些?”、“其他流行的内存泄漏检测方法
和工具”等问题的回答。
这篇论文明确了学者们正在研究关于这个领域的什么问题、有何研究成果以及尚未解决的问题
。因此,可以为研究学者们下一步的研究课题提供综合性的参考,也能为工业界应用这个领域的
技术提出一个决策的依据。
主
要
工
作
1. 明确研究问题,制定综述方案
2. 检索相关文献
3. 文献筛选
4. 提取并分析数据(文献计量分析)
5. 阅读文献,整理归纳,完成综述
系统化文献综述(systematic literature review)是一种针对某一研究问题开展的基于
文献的系统化综述方法。一开始主要用于医学领域以及社会学研究领域,在2004年
被引入了软件工程领域,主要包含了制定综述方案、展开文献综述、完成综述报告等
三个阶段。
数据来源
文 系
献 统
计 文
量和献
分 综
析 述
搜索引擎:Google Scholar 数据库:IEEE Digital Library,Web of Science,CNKI
筛选原则
1. 消重
2. 阅读题目和摘要
3. 精筛
采用EndNote来管理论文库,经过消重后,论文库中共155篇文献,经过精筛后,
还剩53篇论文。
文献计量学(Bibliometrics)方法是利用数理统计学方法来定量的描述、评价以及预
测学术现状及其发展趋势的图书情报学。
分析工具:
BibExcel、 Pajek、VOSViewer
4、文献计量分析结果——年限分析
。
结论:论文发表情
况总体呈增长趋势
,尤其是在2007-2009年是关于这
个主题的发表的论
文是最多的时期,
而2014年由于正
处于年初,因此发
表论文篇数暂时只
有一篇,造成了下
降的趋势。
年限分析图
4、文献计量分析结果——文献类型及期刊来源分析
文献类型分析图
文献来源期刊分析图
结论: (图示省略
了仅发表了一篇论文
结论:文献类型主
的期刊),从图中可
要是期刊文章和会
以看出IEEE这个组
议论文
织对这个研究主题很
感兴趣,《IEEE
Transaction》、《
IEEE Journal》等期
刊发表了多篇这方面
的论文。绝大部分期
刊只发表了1篇相关
研究的论文。
4、文献计量分析结果——作者及作者共现分析
结论:用于分析的
155篇论文共有398
位作者。这个研究
领域的高产作者较
少,发表文献最多
的作者也仅发表了
4篇论文而且只有
一位。91%的作者
都只发表了一篇论
文。
作者发文量分析图
作者共现分析图
作者结论:合作度为作者总
发文量
数与论文总数之比,合
Engler, Dawson
作率为合著论文总数与 4
Zadok,
E.
3
论文总数之比。论文作
者的合作度越高论文或
Srirama,
Satish
期刊的质量也就会越高 3
Narayana
。关于模型检测技术在
Smolka, S. A.
3
程序内存泄漏检测的应
Musuvathi,
Madanlal
3
用的研究的合作度为
398/155=2.57,
Grosu,
R.
3
合作率为
Callanan, S.
3
139/155=89.67%。该研
表4-1 发文3篇以上的作者
究领域的整体合作程度
较高。
4、文献计量分析结果——引用分析
结论:横坐标表示
被引用次数,纵坐
标代表的是对应被
引用次数的文献篇
数。需要说明的是
,被引用次数分析
使用的数据源是经
过精筛后的53篇论
文。图示可以看出
大部分文献的被引
用次数都在30以下
。
文献引用分析图
4、文献计量分析结果——关键词分析
结论:颜色越深代
表该词的频次越高
。图示可以看出,
model checking,
model checker,
verification,leak
,memory等词为
高频词汇。
文献引用分析图
5、文献综述——基本概念
2、内存泄漏(Memory Leak)
1、模型检测(Model Checking):一种自动验
证理论,主要解决如下问题:给定一个系统的模型,详尽
及自动地检查该模型是否满足给定的规范,模型检测是自
动验证有限状态系统的正确性性能的技术。
是指由于一些原因没有将程序运行
过程中分配的内存块及时释放,从
而导致那些内存块无法被再次利用
,随着程序的运行,这样的内存积
累,可用内存减少甚至会被耗尽,
最终影响程序的正常运行。
内存泄漏检测:静态内存泄漏
检测以及动态内存泄漏检测,这两
种方法的根本区别在于检测时是否
需要执行被检测程序。静态内存泄
漏检测不用运行目标程序,而动态
内存泄漏检测则需要运行被测程序
。
5、文献综述——模型检测技术在程序内存泄漏检测上的应用
基于模型检测的内存泄漏检测通常是将被测程序进行语法、词法分析,然后使用模型检
测算法来判断分析后的结果。而各种方法用于分析的程序的形式不同,有些方法是直接分
析被测程序的源代码,有些方法是分析被测程序的汇编语言形式的代码,但他们获得汇编
代码的方式又可能不同,例如MLAB框架和X86EBMC工具,它们分析的汇编代码是由被
测程序的可执行文件经过反汇编后获得的,而LLBMC工具则是通过编译被测程序的源代
码来获得汇编代码的。各种内存泄漏检测方法使用的模型检测方法和工具也不尽相同。
5、文献综述——基于模型检测的内存泄漏检测方法
1.TMC方法
2.MLAB框架
3.基于SMT的有界模型检测方法
5、文献综述——基于模型检测的内存泄漏检测方法
1.TMC方法
TMC算法的形式:
Foreach plland
in pll_set
TMC(Type
Model do
If(modelCheck(pll)
Checking)是一种结合了类型
=NotSafe)
分析技术和模型检测技术的检
Leak_list.add(pll)
测内存泄漏的静态分析方法,
Foreach leak in Leak_list
利用模型检测来对使用类型分
Print_error_path(leak)
析方法得出的结果进行更仔细
别名分析
C源程序
语法分析
程序分析
其中PLL代表被测源代码中可能造
的检查
成内存泄漏的代码,pll_set由类型
分析方法创建。
模型检测
谓词分析
TMC工作流程图
检测结果
5、文献综述——基于模型检测的内存泄漏检测方法
2.MLAB框架
MLAB (memory leak analysis for
binaries)是用于检测二进制可执行文件中
的内存泄漏漏洞的框架方案。MLAB的内存
泄漏分析算法就是TMC算法。
MLAB工作流程图
5、文献综述——基于模型检测的内存泄漏检测方法
3.基于SMT的有界模型检测方法
这个方法包含了一个由LLVM
(Low
优点:不是直接在C源码上
Level Virtual
Machine)编译器框架以及其
检测,而是检测一种由LLVM
抽象中间汇编语言组成的前
产生的类似RISC汇编语言的
端,和一个应用了SMT(
中介码。因此这个方法的分
Satisfiability modulo
析结果就跟实际运行程序检
theories)求解技术的有界
测到的结果相近。
模型检测器处理产生的决策
问题的后端。
基于SMT的有界模型检测方法的框架结构
5、文献综述——基于模型检测的内存泄漏检测工具
1.F-soft工具
F-soft是一种模型检测工具,使
用了针对软件的自定义的基于SAT(
satisfiability)和基于BDD(
Binary Decision Diagrams)的有
界模型检测技术。
漏洞类型:内存泄漏漏洞、数组边
界违规、空指针引用、除零等。
F-soft工作流程图
5、文献综述——基于模型检测的内存泄漏检测工具
2.X86EBMC工具
X86EBMC(X86 Executable Bounded
Model Check)是一个使用了有界模型检
测方法的针对可执行文件的模型检测工
具,反汇编工具IDA Pro的插件
漏洞类型:
内存泄漏、缓存溢出
优点:
可扩展性和跨平台性的较强
X86EBMC工作流程图
5、文献综述——基于模型检测的内存泄漏检测工具
3.WBoxTool与Blast工具的结合使用
一种结合了静态分析、代码插装以
及模型检测技术的内存泄漏故障的静
态检测系统。
WBoxTool工具用于静态语义信息的
提取。
Blast工具是模型检测模块使用的工
具。
检测系统流程图
5、文献综述——基于模型检测的内存泄漏检测工具
4.CodeAuditor
一个包含了前端预处理模块和后端模
型检测模块的内存泄漏检测原型工具。
程序切片(program slicing)是指从
程序中提取涉及漏洞的语句。程序系统
状态的组合爆炸会给模型检测带来负担
,因此对插入了断言的代码进行程序切
片从而减小程序程序的状态数量,从而
提高工具的性能。
后端采用Blast工具实现。
CodeAuditor的框架结构
5、文献综述——基于模型检测的内存泄漏检测工具
5. 其他工具
工具
年份
技术
检测程序
漏洞类型
备注
非法内存方法、堆栈
溢出、内存泄漏、非
法释放等
内存泄漏、重复释放
、空指针错误、字符
串溢出等
内存泄漏、非法访问
内存等
用到了编译器
LLVM、SMT求解
器STP
应用了模型检测器
NuSMV
LLBMC
2013
SMT、BMC、静态分析
C程序
Goanna
2012
静态分析、模型检测
C/C++程序
FixD
2007
模型检测、记日志(logging)、检 分布式系统
查点回滚、推测(Speculation)
CMC
2006
模型检测
C\C++
指针访问违规、程序 可以保存状态以避
断言失败、内存泄漏 免重复的状态探索
CBMC
2004
形式化验证、SAT、BMC
ANSI-C
内存泄漏、指针安全 验证过程是高度自
、数组越界
动的,用户仅需要
输入BMC的边界
用到了ModelD、
LibLog等工具
5、文献综述——其他内存泄漏检测工具(静态)
lint及其系列工具
Lint是针对C程序的内存行为分析工具,目前有两个流行的Lint工具:PCITS4,RATS和Flawfinder:
Clouseau:
lint和Splint(原LClint)。
都是发展较成熟的针对C\C++的源代码扫描工具。
用于检测 C/C++程序中安全性问题的工具。
漏洞类型:内存泄漏、对象被多次删除
漏洞类型:
漏洞类型:内存泄漏、缓冲区溢出等
内存泄漏、缓冲区溢出、空指针解引用、变量初始化、内存错误释放
PREfix和Metal:
优势:实现简单、算法效率高、代码覆盖率高
都是全自动静态分析工具,用于帮助开发者寻找程序中的内存泄漏。
缺陷:
缺陷:只能发现那些发生在分配位置附近的内存泄漏,会错过很多在实
①需要手工对代码进行标记,然后进行内存分析,这对使用人员的要求较
缺陷:误报率高、人工审计困难
际程序中影响很大的内存泄漏。
高,对于大规模的程序来说,额外增加了工作量;
②分析结果不够精确。
5、文献综述——其他内存泄漏检测工具(动态)
③商业工具,代表工具:Insure++、BoundsChecker、Purify :
②基于设定的堆增长率算法,代表工具:Cork、leakBot、Sleigh:
这类工具功能较全面。
①监测内存为主,代表工具: Jprofiler,SWAT
漏洞类型:内存泄漏、内存分配错误、指针错误、算法错误、未申请的
内存、未初始化的局部变量、使用己被释放的内存、内存丢失等
这类工具能够以视图的方式从多个角度来展示程序在执行过程中的内存
这类工具使用了基于设定的堆增长率算法,能够自动的判断是否产生了
使用状况,专业的开发人员仔细观察就能够清晰地发现泄漏的内存块。
优势:定位泄漏代码位置从而减少调试时间、可视化实时内存状况、覆
内存泄漏。由于它们使用的判断算法是一种经验算法,所以漏报率和错报
盖性分析,清楚地标明已被测试过的代码
率都比较高。
缺陷:影响被测程序的性能、检测结果不全面
6、面临的挑战与总结——挑战
TMC和WBoxTool与Blast工具的结合
使用其分析工具的功能还不够完善,
它还不能有效的对大型软件系统进行
属性检查。
MLAB框架还可以拓展到针对Java字节
码的领域
挑战
CodeAuditor只能检测内存泄漏,开发
者正试着将其应用到其他安全漏洞的
检测上,比如说缓存溢出等。
LLBMC在支持C++上尚不完善,所以
开发者们计划将来拓展其功能,使之
能支持C++程序的检测。
6、面临的挑战与总结——总结
这篇论文借鉴系统化文献综述以及文献计量学的方法,分析了关于模型检测技术
在内存泄漏检测中的应用方面的成果,首先对这方面研究的年限,期刊,作者,关
键词等作出了分析,然后通过阅读文献分类总结了目前已有的内存泄漏检测的方法
和工具,并概要分析了这些工具的优势和缺陷。在此基础上,重点综述分析了应用
了模型检测技术的内存泄漏检测方法和工具的基础结构、应用的技术以及其优缺点
等方面的信息。同时也指出了这个研究领域亟待解决的问题以及未来的研究趋势。
因此,这篇论文可以为研究学者们下一步的研究题目提供综合性的参考,也能为工
业界应用这个领域的技术提出一个决策的依据。
Thanks!感谢各位评审老师及专家的宝贵意见!