有效
一种电力数据安全监测系统代码克隆检测方法和装置
沈伍强、沈桂泉、王业超、崔磊、钱正浩、周纯、龙震岳、李如雄、裴求根、唐亮亮、梁哲恒、姚潮生、张金波、张小陆、伍江瑶、许明杰、金戈
广东电网有限责任公司
沈
沈伍强 专利 233
广东电网有限责任公司数据交换网络监测错误处理安全通信
沈
沈桂泉 专利 177
广东电网有限责任公司数智运营中心安全通信网络服务协议计算机安全
王
王业超 专利 79
广东电网有限责任公司数智运营中心模式识别电子数据处理计算技术
崔
崔磊 专利 200
广东电网有限责任公司数据交换网络监测错误处理安全通信
钱
钱正浩 专利 282
广东电网有限责任公司中山供电局模式识别机器学习数据存储检索
周
周纯 专利 97
广东电网有限责任公司电子数据处理计算技术物理仪器
龙
龙震岳 专利 247
广东电网有限责任公司数智运营中心经济部门物联网信息通信数据交换网络监测
李
李如雄 专利 57
广东电网有限责任公司电子数据处理计算技术物理仪器
裴
裴求根 专利 137
广东电网有限责任公司商务信息处理行政管理信息通信行业流程
唐
唐亮亮 专利 86
广东电网有限责任公司数智运营中心电子数据处理计算技术物理仪器
梁
梁哲恒 专利 268
广东电网有限责任公司经济部门物联网信息通信数据交换网络监测
姚
姚潮生 专利 84
广东电网有限责任公司数智运营中心模式识别电子数据处理计算技术
张
张金波 专利 216
广东电网有限责任公司错误处理安全通信网络服务协议
张
张小陆 专利 221
广东电网有限责任公司经济部门物联网信息通信网络服务协议
伍
伍江瑶 专利 85
广东电网有限责任公司电子数据处理计算技术物理仪器
许
许明杰
机构 暂无技术领域 暂无
金
金戈
机构 暂无技术领域 暂无
摘要
本发明公开了一种电力数据安全监测系统代码克隆检测方法和装置,所述方法包括:根据分区索引机制,将待检测电力数据安全监测系统软件源代码进行分区,按分区搜索获取方法;基于方法大小的度量标准,筛选出可能的第一类型和第二类型克隆对;在剔除筛选的第一类型和第二类型克隆对之后,基于调用方法相似度度量标准,筛选出可能的第三类型克隆对;在剔除筛选出的上述三种克隆对之后,针对第四种克隆对,基于代码控制流和数据流分析获得代码语义表示;利用预先训练的深度学习模型进行分类,检测出语义级别克隆代码。本发明有效提高了电力数据安全监测系统研发过程中多版本迭代下的大规模代码克隆检测有效性,保障系统安全稳定运行。
1.一种电力数据安全监测系统代码克隆检测方法,其特征在于,包括以下步骤:消除不可能是克隆对的嵌入式代码后,根据分区索引机制,将待检测电力数据安全监测系统软件源代码进行分区,使得能够按分区索引搜索获取方法,所述分区索引机制包括:确定分区数量,基于代码方法的名称和版本确定分区键,利用哈希函数将分区键映射到特定的分区编号,将代码根据哈希函数分配到相应的分区,使得在对代码进行克隆检测时能够通过分区键定位到相应的分区,在不同的分区同时进行查找和访问方法;将不同分区中的方法的源代码行转换为一系列token,其中token为指定的关键字、标识符,基于方法大小的度量标准,筛选出可能的第一类型和第二类型克隆对,其中第一类型克隆对为代码片段完全相同的克隆对,第二类型克隆对为代码结构或代码语法构成相同的克隆对;方法大小的度量标准包括:记方法M1有x个token,方法M2有y个token,给定相似阈值T在0和1之间,当满足x×T≤y≤x/T时,判定方法M1和方法M2属于克隆对;在剔除筛选出的第一类型和第二类型克隆对之后,通过分区键定位到相应的分区,设置token滑动窗口,通过重叠相似度衡量两种方法token之间的相似度,根据该相似度筛选出可能的第三类型克隆对,第三类型克隆对为大小相同、执行类似操作、具有相似调用的方法克隆对;重叠相似度的计算方法如下:其中,sim<M1,M2>表示方法M1与方法M2之间的相似度,记A和B分别是方法M1和方法M2中token集,方法M1中token集A的每个元素被定义为<ta i ,freqta i ,s,Na>,方法M2中token集B每个元素被定义为<tb j ,freqtb j ,s,Nb>;s是设置的token滑动窗口;Na是方法M1的总行数,Nb是方法M2的总行数;freqta i 是方法M1中token集A的ta i 在该滑动窗口下出现的次数,ta i 是方法M1中token集A的第i个token;freqtb j 是方法M2中token集B的tb j 在该滑动窗口下出现的次数,tb j 是方法M2中token集B的第j个token;α为经过token滑动窗口划分后滑动窗口序号;在剔除筛选出的第一类型、第二类型和第三类型克隆对之后,对于剩余的代码片段,通过控制流捕获代码基本块和过程之间的依赖关系,通过数据流图捕获数据值沿程序路径和操作的流动,获得代码行为的语义表示;基于代码语义表示利用预先训练的深度学习模型进行分类,检测出第四类型克隆对,第四类型克隆对为语义级别克隆代码。
2.根据权利要求1所述的方法,其特征在于,针对分区数量的确定,综合考虑程序规模、数据量、业务逻辑、硬件资源进行分区数量的确定。
3.根据权利要求1所述的方法,其特征在于,在获取代码行为的语义表示时,通过变量特征、基本块特征以及变量和基本块之间的关系特征来编码控制流和数据流信息,其编码规则如下:变量特征主要是通过对每个变量进行提取得到,其类型特征包含数据类型V(t)、修饰符V(m)和其他信息V(o),其中V(t)={bool、byte、char、double、float、int、long、short、void、JDK类、用户自定义类型},V(m)={final、static、none},V(o)={基本、数组、指针、引用},将上述的变量特征编码成一个18维的二进制特征向量V={V(t),V(m),V(o)};基本块特征是针对每个基本块的特征,主要考虑以下七种类型:normal、loop、loopbody、if、if body、switch、switch body,将此类型信息编码为7维的one-hot特征向量D;变量和基本块之间的关系特征,主要指将数据流和控制流编码为变量之间的操作和基本块之间的控制跳跃,总共包括38种主要的操作类型,加法:ADD;减法:SUB;乘法:MUL;除法:DIV;求余:REM;按位与:AND;按位或:OR;按位异或:XOR;左移:SHL;右移:SHR;无符号右移:USHR;取反:NEG;逻辑非:NOT;按位取反:BITNOT;等于:EQ;不等于:NE;大于:GT;大于等于:GE;小于:LT;小于等于:LE;类型检查:INSTANCEOF;类型转换:CHECKCAST;条件分支:COND_BRANCH;跳转:GOTO;类型转换:CONVERSION;数组长度:ARRAY_LENGTH;Phi函数:PHI;方法调用:INVOKE;获取捕获的异常:GET_CAUGHT_EXCEPTION;抽象方法调用:ABSTRACT_INVOKE;检查点:CHECKPOINT;条件开关:COND_SWITCH;字段赋值:PUT;字段获取:GET;获取地址:ADDRESSOF;返回:RETURN;分支:BRANCH;标识:IDENTITY,使用一个38维one-hot特征向量M表示;为了保留数据流图中变量之间的每个操作的信息,生成了一个18*2+38=74维特征向量T={V option1 ,V option2 ,M},其中V option1 和V option2 分别表示语义矩阵编码中变量option1和option2的特征向量,为了保持控制流,将T扩展为大小为81维的{V option1 ,V option2 ,M,D}。
4.根据权利要求3所述的方法,其特征在于,代码行为的语义表示为根据所述编码规则生成语义特征矩阵E,语义特征矩阵E中的每个元素都是一个变量或基本块,其顺序对应于代码指令和基本块顺序,E(i,j)=T(i,j)是大小为81的二进制特征向量,表示行i和列j之间的关系,i,j=1,2…n,其中n=n v +b b 是变量计数n v 和基本块计数b b 的总和。
5.根据权利要求4所述的方法,其特征在于,深度学习模型通过如下方式建立:基于将数据流和控制流编码的稀疏二进制特征向量,将其映射到大小为c的隐藏状态h 0 ,c为一个常数;然后将语义特征矩阵的每一行转换为长度为c·k的向量,k为指定的输入矩阵大小;接着添加两个全连接层,将弱化的行特征向量作为输入,以提取与每行表示的变量或基本块相关的所有信息;最后,添加一个池化层来汇总所有的行特征向量,将两个方法的语义矩阵的潜在表示向量以不同的顺序连接起来,在两个具有共享权重W fc 的连接向量上应用全连接层,对输出状态执行另一个平均池,最后添加分类层。
6.一种电力数据安全监测系统代码克隆检测装置,其特征在于,包括:代码分区模块,被配置用于消除不可能是克隆对的嵌入式代码后,根据分区索引机制,将待检测电力数据安全监测系统软件源代码进行分区,使得能够按分区索引搜索获取方法,所述分区索引机制包括:确定分区数量,基于代码方法的名称和版本确定分区键,利用哈希函数将分区键映射到特定的分区编号,将代码根据哈希函数分配到相应的分区,使得在对代码进行克隆检测时能够通过分区键定位到相应的分区,在不同的分区同时进行查找和访问方法;方法大小检测模块,被配置用于将不同分区中的方法的源代码行转换为一系列token,其中token为指定的关键字、标识符,基于方法大小的度量标准,筛选出可能的第一类型和第二类型克隆对,其中第一类型克隆对为代码片段完全相同的克隆对,第二类型克隆对为代码结构或代码语法构成相同的克隆对;方法大小的度量标准包括:记方法M1有x个token,方法M2有y个token,给定相似阈值T在0和1之间,当满足x×T≤y≤x/T时,判定方法M1和方法M2属于克隆对;方法相似度检测模块,被配置用于在剔除筛选出的第一类型和第二类型克隆对之后,通过分区键定位到相应的分区,设置token滑动窗口,通过重叠相似度衡量两种方法token之间的相似度,根据该相似度筛选出可能的第三类型克隆对,第三类型克隆对为大小相同、执行类似操作、具有相似调用的方法克隆对;重叠相似度的计算方法如下:其中,sim<M1,M2>表示方法M1与方法M2之间的相似度,记A和B分别是方法M1和方法M2中token集,方法M1中token集A的每个元素被定义为<ta i ,freqta i ,s,Na>,方法M2中token集B每个元素被定义为<tb j ,freqtb j ,s,Nb>;s是设置的token滑动窗口;Na是方法M1的总行数,Nb是方法M2的总行数;freqta i 是方法M1中token集A的ta i 在该滑动窗口下出现的次数,ta i 是方法M1中token集A的第i个token;freqtb j 是方法M2中token集B的tb j 在该滑动窗口下出现的次数,tb j 是方法M2中token集B的第j个token;α为经过token滑动窗口划分后滑动窗口序号;代码语义表示构建模块,被配置用于在剔除筛选出的第一类型、第二类型和第三类型克隆对之后,对于剩余的代码片段作,通过控制流捕获代码基本块和过程之间的依赖关系,通过数据流图捕获数据值沿程序路径和操作的流动,获得代码行为的语义表示;语义克隆检测模块,被配置用于基于代码语义表示利用预先训练的深度学习模型进行分类,检测出第四类型克隆对,第四类型克隆对为语义级别克隆代码。
7.一种计算机设备,其特征在于,包括:一个或多个处理器;存储器;以及一个或多个程序,其中所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述程序被处理器执行时实现如权利要求1-5中任一项所述的电力数据安全监测系统代码克隆检测方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-5中任一项所述的电力数据安全监测系统代码克隆检测方法的步骤。



