论文部分内容阅读
C语言是一种广泛流行的高级计算机语言,即使现在已经有像java这样可以检查数组越界的语言,C语言还被使用于很多的系统开发中。一方面,还存在很多用C语言实现的遗留系统;另一方面,因为C语言的性能和靠近硬件的操作能力,这是其它高级语言无法比拟的,很多新开发的系统还是会选择用C语言实现。
缓冲区溢出是计算机软件中广泛存在的安全隐患,经常被黑客和病毒利用,是目前最突出的软件漏洞之一。C语言本身不会自动检查数组越界等缓冲区溢出错误,缓冲区溢出漏洞在C语言的程序中很常见。而且,C语言有多个用于字符串操作的库函数本身就有安全问题,这使得缓冲区溢出漏洞更加严重。
本文以整数区间作为静态分析的抽象域,在整数区间构成的完全格上对源程序进行可靠的抽象解释。在整体解决方案上,本文提出在整数区间抽象解释的基础上,对源程序进行流敏感的数据流分析方法。本文着重研究了以下几个方面的问题:
首先,为了能识别缓冲区溢出漏洞,本文给出了C语言中整数变量、数组缓冲区和数组指针的整数区间表示方法。并给出C语言中整数区间上加、减、乘、除等操作符的运算规则。
然后,本文给出基于整数区间的源程序数据流分析方程,并详细叙述了用不动点理论求解数据流方程组的迭代算法、讨论了循环语句和不动点求解算法收敛性之间的关系。提出在数据流分析的结果上对源代码中缓冲区溢出漏洞进行判定的方法。
最后,基于上述理论基础,本文实现了一个识别C语言缓冲区溢出漏洞原型系统。