[发明专利]单次多漏洞代码检测方法及系统在审
申请号: | 202111673574.1 | 申请日: | 2021-12-31 |
公开(公告)号: | CN114282226A | 公开(公告)日: | 2022-04-05 |
发明(设计)人: | 高旺;李卷孺;谷大武 | 申请(专利权)人: | 上海交通大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57 |
代理公司: | 上海交达专利事务所 31201 | 代理人: | 王毓理;王锡麟 |
地址: | 200240 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 单次多 漏洞 代码 检测 方法 系统 | ||
1.一种单次多漏洞代码检测方法,其特征在于,通过LLVM编译器将待检测代码转化为LLVM中间语言后,进行类型敏感的指针分析,进而构建整个程序代码的程序调用图;然后根据预先标记的函数构建整个程序代码内存对象和全局常量的值流图,通过将内存泄漏、指针双重释放及释放后使用、常量敏感数据进行抽象建模表示,通过值流图的遍历以及代码安全问题模式匹配的方式对存在安全漏洞的代码点进行标记;最后通过对不同代码漏洞存在的误报模式进行建模,将收集的漏洞代码点进行误报过滤,并将剩余的漏洞代码点输出,得到最终的代码安全漏洞报告;
所述的待检测代码,其经预先手工标记出代码中所使用的内存操作函数和密码学相关函数;
所述的抽象建模表示包括:
①内存泄漏漏洞检测:以内存对象为起点,遍历值流图,并记录不同分支的条件表达式;当i)遇到Store指令对应的节点且当内存对象作为源操作数或ii)遇到Load指令对应的节点且当内存对象作为目的操作数或iii)内存节点作为函数参数或iv)内存节点作为函数返回时,继续遍历;当无法到达调用内存释放函数对应的节点时,则存在内存泄漏漏洞,否则进一步取不同分支条件表达式的并集,当结果不为全集时则存在内存泄漏漏洞;
②指针双重释放及释放后使用漏洞检测:以内存对象为起点,遍历值流图,并记录不同分支的条件表达式;当i)遇到Load指令或ii)遇到内存节点作为函数参数时,记录节点所对应的代码位置;遍历完值流图后,将代码位置的指令视为内存对象的使用,并判断调用内存释放函数和其他使用点的控制流次序是否存在指针双重释放和释放后使用漏洞,即:1)指针双重释放:记录的内存对象使用集合中存在多处调用内存释放函数,并且处于同一控制流上;2)指针释放后使用:记录的内存对象使用集合中,在控制流上存在位于调用内存释放函数后的内存对象使用点;
③常量敏感数据漏洞检测:i)以全局变量为起点,遍历值流图;当遇到Store指令对应的节点且当全局常量作为源操作数时,将此节点记录到Store指令对应的节点列表,并继续向前遍历值流图;当遇到全局常量作为函数调用参数指令对应的节点且该函数为预先标记的密码学函数时,则存在常量敏感数据漏洞;ii)对步骤i)中记录的Store指令对应的节点列表后向回溯,定位全局常量存入的变量,并将这些变量视为全局常量后,再通过步骤i)进行常量敏感数据漏洞检测。
2.根据权利要求1所述的单次多漏洞代码检测方法,其特征是,所述的类型敏感的指针分析是指:针对参数中存在结构体的函数指针,记录对应的结构体类型信息,并用此信息优化指针分析的结果,具体为:将参数个数不同或者结构体参数类型不符的结果过滤,从而提高指针分析的准确率。
3.根据权利要求1所述的单次多漏洞代码检测方法,其特征是,所述的值流图,通过以下方式构建得到:
①收集内存对象和全局常量:遍历代码中所有内存申请函数的调用点,并将其返回值所处变量标记为内存对象;遍历代码的全局变量并判断其是否存在初始值;
②收集内存对象和全局变量的定义-使用链:根据LLVM中间语言中的Load和Store指令,沿程序的控制流对上述对象的值流传递信息进行记录,并沿途记录经过的变量,整合为定义-使用链,并根据LLVM中间语言中的Call指令,记录上述对象作为函数参数的使用信息;
③从定义-使用链构建值流图:根据不同定义-使用链上的共有节点,将定义-使用链相连,最终得到值流图。
4.一种实现权利要求1~3中任一所述方法的自动化代码漏洞检测系统,其特征在于,包括:预处理模块、漏洞检测模块以及误报过滤模块,其中:预处理模块利用LLVM编译器将待检测代码的C语言源码转换为LLVM中间语言,对其进行类型敏感的指针分析并构建待检测代码的函数调用图;利用函数调用图和预先标记的内存操作函数和密码学函数,从待检测代码的LLVM中间语言中构建内存对象和全局常量的值流图;漏洞检测模块通过总结不同类型代码漏洞特征构建代码漏洞检测模式,进而选择特定的起点并在值流图上进行遍历以分析是否存在所定义的代码漏洞检测模式;
所述的函数调用图是指:记录不同函数与函数内所调用函数关系的有向图,由调用者指向被调用者。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学,未经上海交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111673574.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种电动阀及其应用
- 下一篇:一种脉冲多普勒激光雷达测速测距外标定装置及方法