基于可执行代码的缓冲区溢出检测模型

https://baike.baidu.com/item/可执行代码

缓冲区是程序为存储数据而分配的连续的具有一定长度的内存空间。而缓冲区溢出是指,写入缓冲区的数据长度大于缓冲区分配的长度,使得数据写到相邻的内存中而覆盖掉其中已有的数据。若覆盖掉的数据恰好是程序的入口,那么程序将会跳转到写入的数据指定的地址去执行。攻击者通过精心构造填充数据,可以使程序跳转到指定的代码处执行,从而进行非法操作。
当前缓冲区溢出检测技术主要分为 2 类:静态检测和动态检测。
静态检测主要是通过对源代码的审查和分析来发现缓冲区溢出漏洞。由于不需要运行程序,因此,检测效率较高,代价较小;缺点是大都依赖于源代码且有较高的误报率和漏报率。
动态检测技术是在程序的运行过程中,通过监测程序的运行状态来检测是否发生了缓冲区溢出。该类技术可以通过模糊测试 (fuzz testing) 主动诱发, 也可以通过修改软硬件平台被动监测 ,以发现漏洞。前者的优点是误报率低;缺点是测试充分性无法保证,可能有较高的漏报率。后者的优点是漏报率低;缺点是代价大,且大都无法防御拒绝服务攻击。
根据缓冲区溢出原理,提出一种基于可执行代码的缓冲区溢出检测模型,给出该模型的理论基础,描述模型构建的过程,提出新的缓冲区引用实例的识别方法。 该模型将可执行代码反汇编为汇编代码, 建立函数调用关系图和控制流图, 分析缓冲区变量及其引用实例,从缓冲区引用实例逆程序流方向归结路径约束,通过约束求解判断缓冲区溢出可能与否。 [3] 
 
 
原文地址:https://www.cnblogs.com/rsapaper/p/10482551.html