关键词:
区块链
智能合约
漏洞检测
符号执行
约束求解
DoS漏洞
摘要:
作为一个全球性的去中心化应用平台,以太坊的成立促进了智能合约的开发与设计,但随着智能合约的数量以及规模持续不断的增加,转能合约的功能也越来越复杂,导致智能合约中各类安全漏洞不断出现,攻击者利用这些合约漏洞对区块链系统进行攻击,给人们带来了巨大的经济损失。针对智能合约安全漏洞的检测问题,早期主要依赖于人工对智能合约的代码缺陷进行审查,但人工审查的时间成本较高。自动化漏洞检测方法,通常具有检测速度快、覆盖漏洞类型多、成本低等特点,因此,针对智能合约存在的安全问题,实现高效且通用的智能合约漏洞自动化检测显得尤为重要。本文通过对现有的智能合约漏洞检测技术进行分析,总结其优势和不足,基于符号执行技术,研究提出了新的自动化智能合约漏洞检测方法。(1)针对符号执行过程中路径遍历容易导致路径爆炸的问题,提出一种基于控制流程图路径剪枝的智能合约自动化漏洞检测方法。该方法以智能合约的源代码作为输入,通过以太坊编译器将源码进行编译,编译生成的字节码将通过反汇编操作,转换为人类可读的操作码,然后根据以太坊虚拟机指令序列,来进一步分析合约的交易过程。通过定义路径关键指令,构建控制流程图,并通过一种深度优先和广度优先相结合的自底向上的路径选择方法筛选关键路径,最后使用约束求解器对符号执行过程中,所收集到的路径约束表达式进行求解,通过约束求解的结果判断路径可达性,然后判断是否存在相应的漏洞,最终实现漏洞检测。(2)针对现有智能合约漏洞检测方案中,对智能合约拒绝服务漏洞检测效率低的问题,通过分析智能合约拒绝服务漏洞的产生原理,提出新的漏洞检测策略。同时,由于在符号执行过程中,约束求解作为其中重要的一个环节,对符号表达式进行求解的速度能够对动态符号执行的运行效率产生直接的影响。因此,在本研究内容中,将在进行约束求解之前,首先对与漏洞不相关的约束进行识别并去除,并设置约束缓存层,在约束求解过程中对约束求解结果进行缓存与重用,来减少重复求解的操作,从而提高求解速度。最终实现提高现有智能合约漏洞检测工具对智能合约拒绝服务漏洞的检测能力。