二进制程序整数溢出漏洞检测:从模糊测试到静态分析

需积分: 39 98 下载量 142 浏览量 更新于2024-08-10 收藏 2.93MB PDF 举报
"整数溢出漏洞建模-基于matlab的一维条形码检测" 整数溢出漏洞是计算机程序中常见的安全隐患,特别是在二进制程序中,由于缺乏源代码,检测这类漏洞变得尤为困难。北京大学的一篇博士学位论文探讨了这个问题,重点关注在没有源代码的情况下如何有效地检测整数溢出漏洞。 二进制程序整数溢出漏洞检测通常依赖于源代码分析或模糊测试。源代码分析方法通过识别和匹配不安全的整数使用模式来定位潜在的漏洞,例如,Ceesay等人的工作在Cqual类型系统基础上追踪不可信整数类型。Sarkar等则开发了流不敏感的检测技术,通过净化约束图来跟踪未被净化的整数变量使用。然而,当源代码不可用时,模糊测试成为主要手段,如SAGE、SmartFuzz和IntHunter等系统利用程序执行信息生成测试用例,但它们对程序执行空间的覆盖有限,且易受初始样本选择影响。 论文中提到的UQBTng工具结合了反编译和模型检验技术,通过反编译二进制文件为C代码,并在内存分配前插入assert语句,然后使用CBMC进行检测。尽管这是一种创新方法,但它受限于反编译质量和CBMC的分析能力。 整数溢出漏洞的建模基于对200多个实际案例的分析,发现大多数漏洞源于程序未能对来自外部可控数据(称为污点数据)进行正确的范围检查。这种数据在程序执行过程中可能引发整数溢出,如果溢出结果用于内存分配、内存访问或条件语句,会导致严重的安全问题,如堆溢出和栈溢出。含有整数溢出漏洞的程序路径特征包括:调用引入污点数据的函数,如read、fread、recv等;以及对污点数据范围检查不足或检查不完整。 在动态漏洞挖掘方面,模糊测试误报率低但依赖于测试数据生成,而静态分析误报率高且需要大量人工验证。本文提出的贡献之一是“校验和感知的模糊测试方法”,这旨在克服模糊测试在遇到校验和检测时的局限性,从而更有效地针对含有完整性校验信息的数据格式进行测试。 这篇论文深入探讨了面向二进制程序的整数溢出漏洞检测挑战,提出了新的动态和静态分析技术,旨在提升漏洞挖掘的效率和准确性,尤其是在源代码不可用的情况下。这对于我们理解和解决软件安全问题,尤其是对于那些商业软件和二进制程序的安全性,具有重要意义。