利索能及
我要发布
收藏
专利号: 2022104826829
申请人: 南京邮电大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-09-16
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种基于多标记模型的智能合约漏洞检测方法,其特征在于,包括以下步骤:

步骤1.操作码获取:以智能合约地址作为读入信息,去以太坊上获取地址所对应的字节码或是操作码;

步骤2.操作码向量化:对操作码进行归类;对操作码进行简化,使用n‑gram算法将简化后的操作码序列拆分为二维特征;计算每一维度的tf‑idf值,再提取统计特征,其中n=2;

最终将转换后的向量组合起来以特征矩阵的形式供多标记模型Classifier Chain使用;

步骤3.模型训练:使用多标记模型Classifier Chain对特征矩阵进行训练;

在步骤3中,所述的使用多标记模型Classifier Chain对特征矩阵进行训练,包括:利用多标记Classifier Chain将问题分解成多个二分类,将所有的分类器都连接在同一个链中,在保持可接受的计算复杂性的同时通过链对标签相关性进行建模,以随机的方式考虑所有标签的相互关系,提高检测性能;对n个标签进行排序,得到Y1,Y2,…,Yn,对于第i个标签Yi构建一个二分类的数据集Di,如公式(5)、(6)所示:j

其中,j代表样本序数,I{Yi∈Y}表示第j个样本的第i个标签的检测结果与样本标记一j j致时,I{Yi∈Y}值为1,否则I{Yi∈Y}值为0;

在所述的训练阶段,第i个训练器需要用到前i‑1个分类器训练出的标签集,任务有多少个标签会对应多少个分类器,但是分类器是有顺序的;在预测时,真正的标签将不可用,

1 2 1305

每个模型的预测被传递给链中的后续模型作为特征;首先,利用所有特征(X ,X ,…,X )对Y1进行预测,第一个分类器输出的第一个标签预测值会和样本数据一同送入第二个模型

1 2 1305 1

的输入;然后,利用所有特征(X ,X ,…,X ,Y1)预测Y2;以此类推,最后利用所有特征(X ,

2 1305

X ,…,X ,Y1,Y2,…Yn‑1)预测Yn。

2.根据权利要求1所述的一种基于多标记模型的智能合约漏洞检测方法,其特征在于,在步骤2中,所述的对操作码进行归类的原则是:根据操作码在以太坊中的具体含义,在不考虑出现异常处理的情况下,如果操作码的执行逻辑相似,就将这些操作码归为同一类;

由此,将操作码分为十类:操作指令,包含PUSH1‑PUSH32,DUP1‑DUP16,SWAP1‑SWAP16,LOG0‑LOG4;算数指令,包含ADD,MUL,SUB,DIV,SDIV,MOD,SMOD,ADDMOD,MULMOD,EXP;可预测变量指令,包含BLOCKHASH,COINBASE,TIMESTAMP,NUMBER,DIFFICULTY,GASLIMIT;逻辑指令,包含AND,OR,XOR,NOT;比较指令,包含LT,GT,SLT,SGT,EQ,ISZERO;地址钱包指令,包含ADDRESS,BALANCE,ORIGIN,CALLER;CALL系列指令,包含CALL,CALLCODE,DELEGATECALL,STATICCALL;SSTORE系列指令,包含MLOAD,MSTORE,MSTORE8,SLOAD,SSTORE;终止指令,包含RETURN,STOP,REVERT,INVALID,SELFDESTRUCT;跳转指令包含JUMPDEST,JUMP,JUMPI。

3.根据权利要求1所述的一种基于多标记模型的智能合约漏洞检测方法,其特征在于,在步骤2中,所述的对操作码进行简化,使用n‑gram算法将简化后的操作码序列拆分为二维特征,并计算每一维度的tf‑idf值,再提取统计特征,最终将转换后的向量组合起来以特征矩阵的形式供多标记模型Classifier Chain使用;

步骤2.2.1.对各指令进行简化:操作指令PUSH1‑PUSH32都记为PUSH,DUP1‑DUP16都记为DUP,SWAP1‑SWAP16都记为SWAP,LOG0‑LOG4都记为LOG;所有算数指令都记为COUNT;所有可预测指令都记为PREDICT;所有判断指令都记为JUDGE;所有比较指令都记为COMPARISON;

所有地址钱包指令都记为ADDRESS;所有对程序结构造成影响的指令不进行简化;删去其他指令里与漏洞产生不密切的指令RETURNSUB;上述简化后,共剩下36个指令:PUSH,DUP,SWAP,LOG,COUNT,PREDICT,JUDGE,COMPARISON,ADDRESS,JUMPDEST,JUMP,JUMPI,CALLVALUE,CALLDATALOAD,CODESIZE,CALLDATASIZE,CALLDATACOPY,CODECOPY,GASPRICE,CREATE,EXTCODESIZE,EXTCODECOPY,CALL,GAS,RETURN,EXTCODECOPY,CALLCODE,DELEGATECALL,SELEGATECALL,SELEDESTRUCT,REVERT,MSTORE,EQ,STOP,SHA3,POP;使用n‑gram算法从简化后的合约操作码数据流中提取bigram特征;最终将合约分成了一系列双操作码片段,提取出1296维bigram特征;

步骤2.2.2.计算每一维bigram的tf‑idf的值,其公式:

其中,tf代表词频,count(a)表示某个为a的bigram在整篇合约中出现的次数,M代表一份合约中所有bigram的数目总和;idf代表逆文件频率:其中,D代表训练集智能合约总份数,d代表拥有某个bigram的智能合约的数目;tf‑idf的计算公式(3)为:tf‑idf=tf×idf      (3)

将每一份智能合约输出的维数都定为1296,每个维度对应某个固定的bigram;设:第一维度为PUSH PUSH的tf‑idf值,第二维度为PUSH COUNT的tf‑idf值;其A智能合约中没有某个bigram,则这个bigram所对应维度的tf‑idf值为0;

步骤2.2.3.依据漏洞的行为特征提取9维统计特征:选出8类不同的操作码指令在合约中被使用的次数,构造新的9维向量,包括:操作指令数目之和、算数指令数目之和、可预测变量数目之和、CALL系列指令数目之和、SSTORE系列指令数目之和、终止指令数目之和、指令总数目之和、指令JUMPDEST数目之和、指令JUMP和JUMPI数目之和;

步骤2.2.4.最终将样本集转换为一个N×1305的特征矩阵F供机器学习模型训练:

其中,N表示训练集合约数目, 表示第h份合约的第p维向量。