-
题名基于值依赖分析的空指针解引用检测
被引量:4
- 1
-
-
作者
马森
赵文
习翔宇
王栋伟
-
机构
北京大学信息科学技术学院
北京大学软件工程国家工程研究中心
北京大学信息科学技术学院软件研究所高可信软件技术教育部重点实验室
-
出处
《电子学报》
EI
CAS
CSCD
北大核心
2015年第4期647-651,共5页
-
文摘
本文提出了一种基于程序值依赖分析的、路径敏感的空指针解引用检测方法.该方法通过结合数据流分析中的到达定值分析、区间分析及指向分析创建了值依赖分析图,该图刻画了可能产生空指针语句到其解引用语句的值依赖关系.该图中的边采用守卫标注,即描述了相邻点之间的到达条件.为了降低误报率,本文同时提出了一种需求驱动的必然别名算法.由本文所述方法实现的工具展示了良好的实验效果,在10个SPEC2000项目中发现了70余个空指针解引用缺陷,误报率仅为6%左右.
-
关键词
程序分析
静态缺陷检测
空指针解引用检测
需求驱动别名分析
-
Keywords
program analysis
static error detection
null pointer dereference detection
demand-driven alias analysis
-
分类号
TP311
[自动化与计算机技术—计算机软件与理论]
-
-
题名面向二进制程序的空指针解引用错误的检测方法
- 2
-
-
作者
傅玉
邓艺
孙晓山
程亮
张阳
冯登国
-
机构
中国科学院软件研究所可信计算与信息保障实验室
中国科学院大学
-
出处
《计算机学报》
EI
CSCD
北大核心
2018年第3期574-587,共14页
-
基金
国家自然科学基金(61471344)
国家242信息安全计划(2016A086)资助
-
文摘
空指针解引用是C/C++程序中常见的一类程序错误,它可让攻击者旁路安全机制或窥探操作系统敏感信息,一直是计算机安全领域的重要研究课题之一.目前已有很多(自动)分析工具对其进行检测,然而它们都在源代码层面上进行检测.大量的商业软件不公开源代码,因此基于源代码的工具无法对这类软件中空指针解引用进行检测.此外,一些空指针解引用无法在源代码层面检测,因为这些缺陷由编译选项和编译优化不当引入.因此进行基于二进制的空指针解引用检测非常必要.基于二进制的空指针解引用检测的一个优势是可以包含库函数的代码,而基于源代码的分析通常采用人工构造的库函数摘要,从而影响检测的准确性和召回率.该文首次提出并实现了面向二进制程序的空指针解引用静态检测工具NPtrChecker,直接接受二进制程序进行分析,并给出代码中出现空指针的来源和解引用的位置以及对应的路径条件.在二进制上进行空指针解引用检测的一个重要难点是二进制程序中缺少指针类型、结构体类型等相关数据类型信息.如果缺乏这类信息,会导致分析结果的准确率大大降低.但是从二进制中恢复类型、数据结构本身是非常困难的问题.针对上述问题,我们提出了一种内存模型,区分来自同一数据结构的不同域的引用,实现了针对空指针解引用检测的域敏感指针分析.为了进一步提高分析的准确率,文章在此基础上设计实现了一套基于函数摘要的上下文敏感的数据流分析算法.此外,工具采用最弱前置条件对数据流分析结果进行验证,检查从指针来源到解引用点的路径条件是否可以被满足,以降低误报率.我们应用NPtrChecker分析了SPEC2000中的11个程序,总共报告了37个可疑空指针解引用,通过人工确认,其中22个是真实的程序错误.相对于Saturn报告的92个,仅13个为真;LUKE报告的3个,2个为真,而文中的工具检测出了更多的空指针解引用错误,同时保持了较低的误报率.
-
关键词
空指针解引用检测
静态程序分析
二进制程序分析
最弱前置条件
数据流分析
-
Keywords
static program analysis
null pointer detection
binary analysis
weakest precondition
dataflow analysis
-
分类号
TP309
[自动化与计算机技术—计算机系统结构]
-