[发明专利]一种二进制漏洞代码克隆检测方法及系统有效
申请号: | 201810267094.7 | 申请日: | 2018-03-28 |
公开(公告)号: | CN108491228B | 公开(公告)日: | 2020-03-17 |
发明(设计)人: | 姜宇;杨鑫;高健;顾明;孙家广 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 100084 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 二进制 漏洞 代码 克隆 检测 方法 系统 | ||
1.一种二进制漏洞代码克隆检测方法,其特征在于,包括:
提取待检测二进制代码中的第一函数的函数特征和二进制漏洞代码中的第二函数的函数特征,所述函数特征包括基本块信息、控制流信息和函数调用信息;所述第一函数和所述第二函数的控制流信息分别包括所述第一函数和所述第二函数中每两个基本块之间的依赖关系;
将所述第一函数的函数特征和所述第二函数的函数特征分别输入预设神经网络,利用所述预设神经网络计算所述第一函数和所述第二函数的相似度;
当所述相似度达到预设阈值时,确定所述待检测二进制代码中存在所述二进制漏洞代码的克隆代码;
所述方法还包括:
获取带有表征克隆/非克隆的标记的第一样本函数和第二样本函数,并提取所述第一样本函数的函数特征和所述第二样本函数的函数特征;
构建所述预设神经网络,并设置所述预设神经网络的目标误差;
将所述第一样本函数的函数特征和所述第二样本函数的函数特征分别输入所述预设神经网络,对所述预设神经网络进行训练;
当所述预设神经网络的实际输出结果和期望输出结果的差值不大于所述目标误差时,所述预设神经网络训练结束;
所述获取带有表征克隆/非克隆的标记的第一样本函数和第二样本函数,具体包括:
获取多个样本函数,将每个所述样本函数进行不同配置的交叉编译,获得多个同名函数和多个非同名函数;
将每两个所述同名函数组成带有表征克隆的标记的第一样本函数和第二样本函数,将每两个所述非同名函数组成带有表征非克隆的标记的第一样本函数和第二样本函数。
2.根据权利要求1所述的方法,其特征在于,根据所述待检测二进制代码中所有第一函数与所述第二函数的相似度均小于所述预设阈值,确定所述待检测二进制代码中不存在所述二进制漏洞代码的克隆代码。
3.根据权利要求1所述的方法,其特征在于,所述利用所述预设神经网络计算所述第一函数和所述第二函数的相似度,具体包括:
利用所述预设神经网络根据所述第一函数的基本块信息和所述第二函数的基本块信息分别获得所述第一函数中每个基本块对应的第一子特征向量和所述第二函数中每个基本块对应的第二子特征向量;
根据所述第一函数的控制流信息和函数调用信息对所有所述第一子特征向量进行处理,获得第一特征向量;根据所述第二函数的控制流信息和函数调用信息对所有所述第二子特征向量进行处理,获得第二特征向量;
计算所述第一特征向量和所述第二特征向量的夹角余弦值,将所述夹角余弦值确定为所述第一函数和所述第二函数的相似度。
4.根据权利要求1或3所述的方法,其特征在于,所述第一函数和所述第二函数的基本块信息分别包括所述第一函数和所述第二函数中每个基本块的起始地址和每个基本块对应的数值常量的数量、字符常量的数量、转移指令的数量、函数调用的数量、算术指令的数量、逻辑指令的数量、介数中心性和子节点数量。
5.根据权利要求1或3所述的方法,其特征在于,所述第一函数的函数调用信息包括被所述第一函数调用的函数起始地址和调用所述第一函数的函数起始地址;所述第二函数的函数调用信息包括被所述第二函数调用的函数起始地址和调用所述第二函数的函数起始地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810267094.7/1.html,转载请声明来源钻瓜专利网。