买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种可处理合约信息的智能合约漏洞检测方法_哈尔滨工业大学_202311008821.5 

申请/专利权人:哈尔滨工业大学

申请日:2023-08-10

公开(公告)日:2024-03-22

公开(公告)号:CN117009979B

主分类号:G06F21/57

分类号:G06F21/57;G06F11/36

优先权:

专利状态码:有效-授权

法律状态:2024.03.22#授权;2023.11.24#实质审查的生效;2023.11.07#公开

摘要:本发明提出一种可处理合约信息的智能合约漏洞检测方法,属于以太坊智能合约安全技术领域。包括:S1.将智能合约经编译后生成的字节码文件和二进制接口文件作为模糊测试的输入形式;S2.在模糊测试引擎中构建一个合约所有者地址,一个发送者地址集;S3.模糊测试引擎解析模糊测试的输入,生成初始测试用例集;S4.为每个智能合约维护四个集合;S5.执行初始测试用例集或测试用例集,执行过程中判断测试用例是否会触发异常,同时保存维护四个集合的信息;S6.从种子集中取出一个种子进行变异;S7.重复执行S5‑S6,直到预设的终止条件满足,结束执行。解决涉及合约变量的分支难以高效满足导致合约模糊测试过程中覆盖率低的问题。

主权项:1.一种可处理合约信息的智能合约漏洞检测方法,其特征在于,包括以下步骤:S1.将智能合约经编译后生成的字节码文件和二进制接口文件作为模糊测试的输入形式;S2.在模糊测试引擎中构建一个合约所有者地址OwnerAdd,一个发送者地址集SenderAdd,集合默认包括4个不相同的地址;S3.模糊测试引擎解析模糊测试的输入,生成初始测试用例集;S4.为每个智能合约维护四个集合:已执行分支集Branch、未执行分支集Unbranch、变异种子集Seed和变异的合约变量集Var,集合初始均为空;S5.执行初始测试用例集或测试用例集,执行过程中判断测试用例是否会触发异常,若触发异常,则报告漏洞,并将对应的测试用例保存,提供给用户,同时执行过程中保存维护四个集合的信息,包括以下步骤:S51.模糊测试引擎执行初始测试用例集或测试用例集,若测试用例执行了不在已执行分支集Branch中的分支,即执行过程中发现了新的分支,保存执行新分支的测试用例到变异种子集Seed中,并将对应执行的分支保存到已执行分支集Branch集合中;S52.查看新发现的分支是否在未执行分支集合Unbranch中,若在,则从未执行分支集合Unbranch中删除该分支,并将分支所在的条件语句及其对应的变异的合约信息从变异的合约变量集Var中删除;S53.判断分支所在的条件语句的另一分支是否被执行,即是否在已执行分支集Branch中,若不在,则将另一分支添加到未执行分支集Unbranch中,将分支对应的条件语句中涉及的合约信息保存到变异的合约变量集Var中;分支对应的条件语句中涉及的合约信息获取方法是:包括以下步骤:S531.执行时将合约指令进行污点源标记;具体包括:在合约的字节码中,CALLER指令表示读取msg.sender获取交易发送者的地址,因此,将该指令标记为污点源,当执行到该指令时,记录当前执行的交易在测试用例中的序号txID,将污点信息表示为txID_sender;在合约的字节码中,CALLVALUE指令表示读取msg.value获取交易的转账金额,因此,将该指令标记为污点源,当执行到该指令时,记录当前的执行的交易在测试用例中的序号txID,将污点信息表示为txID_value;在合约的字节码中,TIMESTAMP指令表示获取交易对应区块的时间戳,因此,将该指令标记为污点源,当执行到该指令时,记录当前的执行交易序号txID,将污点信息表示为txID_timestamp;在合约的字节码中,BLOCKNUM指令表示获取交易对应区块的区块号,因此,将该指令标记为污点源,当执行到该指令时,记录当前的执行交易序号txID,将污点信息表示为txID_blocknum;S532.在智能合约执行过程中跟踪污点的传播,在污点的传播过程中,对于算术运算指令、比较运算指令、按位逻辑运算和位运算指令中的单操作数运算指令,直接将单个操作数的污点信息作为新的污点信息;对于双操作数运算指令,将对应的两个操作数的污点信息进行合并生成传播至运算结果的新的污点信息;对于其中的三操作数运算指令,则是将对应的三个操作数的污点信息合并成新的污点信息;S533.为了找出未执行的分支具体受到哪些因素的影响,将污点汇设置为分支跳转指令JUMPI,JUMPI指令在智能合约指令中表示条件跳转;JUMPI中涉及的污点信息即为分支包括的合约信息;S6.从种子集中取出一个种子进行变异;从种子集中取出一个种子进行变异的变异策略:若种子发现的新分支所在语句另一分支未被执行过,则利用执行过程中保存的污点信息指导变异;若该种子发现的新分支所在语句两个分支均被执行过,则对种子执行随机的变异;利用执行过程中保存的污点信息指导变异的方法是:S61.当污点信息中包含txID_sender时,说明当前未覆盖分支与种子对应的第txID交易的发送者msg.sender相关,选择对应第txID交易的发送者进行变异:变异消息为发送者时,从1-3中随机生成一个值,若得到1则消息的发送者地址取值为合约所有者地址OwnerAdd、若得到2则消息的发送者地址取值从合约发送者地址集SenderAdd中任取一个、若得到3则消息的发送者地址取值为随机值;S62.当污点信息中包含txID_value时,说明当前未覆盖分支的条件与种子中第txID交易携带金额msg.value相关,选择对应种子中第txID交易的value进行变异;S63.当污点信息中包含txID_timestamp时,说明当前未覆盖分支的条件与种子中第txID交易打包进区块的时间戳相关,选择种子中第txID交易的时间戳进行变异;S64.当污点信息中包含txID_blocknum时,说明当前未覆盖分支的条件与种子中第txID交易打包进区块的区块号相关,选择对应种子中第txID交易的区块号进行变异;S65.对于污点信息中不涉及到的合约信息,变异过程中对合约信息不进行变异,对其他参数,执行随机变异,变异策略遵循AFL设定,得到测试用例后,执行S5测试用例集;S7.重复执行S5-S6,直到预设的终止条件满足,结束执行。

全文数据:

权利要求:

百度查询: 哈尔滨工业大学 一种可处理合约信息的智能合约漏洞检测方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。