[发明专利]一种基于程序图的栈缓冲区溢出脆弱性检测方法在审
申请号: | 201811514895.5 | 申请日: | 2018-12-12 |
公开(公告)号: | CN109784048A | 公开(公告)日: | 2019-05-21 |
发明(设计)人: | 陈锦富;张庆晨;黄如兵;陈书杰;周敏敏 | 申请(专利权)人: | 江苏大学 |
主分类号: | G06F21/56 | 分类号: | G06F21/56;G06F21/57 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 212013 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序图 脆弱性 溢出 脆弱性检测 缓冲区空间 危险函数 缓冲区 地址偏移 覆盖空间 源代码 复制 比较函数 大小计算 函数操作 静态分析 点位置 遍历 | ||
1.一种基于程序图的栈缓冲区溢出脆弱性检测方法,其特征在于,包括如下步骤:
步骤1,对源代码进行静态分析后构造相应的程序图;
步骤2,遍历生成的程序图寻找到危险函数,得到溢出点位置;
步骤3,在溢出点比较函数操作的缓冲区空间与所要覆盖空间的大小计算地址的偏移;
步骤4,通过判断是否出现地址偏移而得到脆弱性检测的结果。
2.根据权利要求1所述的一种基于程序图的栈缓冲区溢出脆弱性检测方法,其特征在于,所述步骤1的具体步骤如下:
步骤1.1,对源代码进行控制流分析获得控制流信息和程序图有向边的信息,再对源代码进行数据流分析获得数据流信息和程序图节点的信息,推断代码中变量间的关系及实际特征;
步骤1.2,通过对源代码的控制流信息和数据流信息进行分析获取源代码中变量的初始化和被函数调用的信息,提取源代码的控制流信息、指针变量、内存块、常量和函数结构等数据信息,得到变量间的关系和变量与调用函数之间的关系;
步骤1.3,给源代码中的每一行代码进行编号,在确定完程序图的开始节点和终止节点后分析每一行代码明确每一个变量的初始化节点、变量的使用节点和有向边;将这些节点和有向边作为属性节点和属性边构建源代码的程序图。
3.根据权利要求1所述的一种基于程序图的栈缓冲区溢出脆弱性检测方法,其特征在于,所述步骤2的具体步骤如下:
步骤2.1,通过TRAVERSAL方法遍历程序图,返回的节点是图中所有变量的初始化节点和变量被调用节点;
步骤2.2,使用ToSet方法将变量初始化节点和变量被调用节点转换成节点集合,该节点集合包含了所有的变量初始化的节点和函数使用变量的节点;
步骤2.3,在节点集合中提取出调用变量的函数与危险函数集合Da比较得到源代码中存在的危险函数,得到溢出点位置。
4.根据权利要求3所述的一种基于程序图的栈缓冲区溢出脆弱性检测方法,其特征在于,所述TRAVERSAL遍历结合ToSet方法的具体规则如下:
其中用于遍历程序图获得到所有变量的初始化节点;用于遍历程序图获得到所有变量的使用即被调用的节点;最后结合ToSet方法所有变量的初始化节点和被调用节点集中转换成节点集合。
5.根据权利要求3所述的一种基于程序图的栈缓冲区溢出脆弱性检测方法,其特征在于,所述步骤3的具体步骤如下:
步骤3.1,在溢出点位置找到变量的调用函数,通过与危险函数库的对比判断危险函数的类型;
步骤3.2,分析危险函数类型的脆弱性成因。
6.根据权利要求5所述的一种基于程序图的栈缓冲区溢出脆弱性检测方法,其特征在于,所述步骤3.1的危险函数主要为“Strncpy()”“Memcpy()”和“Gets()”三种危险函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江苏大学,未经江苏大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811514895.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:基于多特征的程序检测方法
- 下一篇:威胁数据处理的方法、设备、系统和介质