一种基于静态获利分析的智能合约漏洞检测方法

allin2025-05-18  42


本发明涉及智能合约安全和静态分析领域,尤其涉及一种基于静态获利分析的智能合约漏洞检测方法。
背景技术
:1、区块链技术发展日新月异,自区块链2.0以太坊面世以来,智能合约作为一种链上部署的程序代码具有一旦上链不可修改的特性,帮助去中心化金融快速发展。但是由于智能合约开发存在链上业务复杂,开发难度大等特点,目前时常发生针对智能合约代码漏洞的攻击事件,对普通用户与项目方造成巨大损失,区块链上智能合约的安全问题正在面临巨大考验。2、为解决这些安全问题,急需准确有效的智能合约漏洞检测手段。目前普遍运用的人工审计方式虽然可以准确有效的发现代码问题,但是所需的工作量大,且需要大量的领域专家资源,无法对大批量的合约进行漏洞检测。而目前可用于自动化漏洞检测工作的静态检测工具,往往只关注于可疑的漏洞代码句本身,不关注漏洞代码上下文的逻辑语义信息,对现存的漏洞类型缺乏完善有效的检测规则。这导致了检测误报率高,检测漏洞能力有限等等问题。技术实现思路1、针对现有智能合约静态检测技术的不足,本发明提供一种基于静态获利分析的智能合约漏洞检测方法。2、本智能合约漏洞检测方法的核心思想在于:智能合约的每次交易调用,在调用者为非特权地址的情况下,被调用合约都应保证自身的收支平衡。故对作为非特权地址的调用者而言,若在完成合约调用之后,只获得收益而不用支出成本,则认为存在代码漏洞。漏洞的定义为:一条不存在调用者权限检查行为的程序路径中,存在获利行为,不存在对应的调用者支出行为,且该路径不存在对获利者的检查行为。3、本发明的目的通过如下的技术方案来实现:4、一种基于静态获利分析的智能合约漏洞检测方法,包括以下步骤:5、步骤一:将solidity编写的待测智能合约用solc编译器编译为yul中间语言,并转化成为控制流程图;6、步骤二:在控制流程图上进行路径敏感的符号执行分析,并在符号执行分析过程中,收集路径信息,识别如下四大类行为:调用者可能存在的获利行为及对应的获利者、调用者可能存在的支出行为、调用者权限检查行为和获利者检查行为;7、步骤三:在符号执行分析遇到每条路径结尾时,综合收集的所有信息,判断该路径是否可能存在漏洞;8、步骤四:分析完所有可能路径或达到预设程序运行时间之后,整理并输出漏洞检测结果。9、进一步地,所述调用者可能存在的获利行为包括内部账本修改带来的获利行为、基于包括erc20在内的eip标准的外部合约调用带来的获利行为以及原生代币获利行为。10、进一步地,所述内部账本修改带来的获利行为,包括:对被调用者控制的地址的代币销毁行为、对交易池地址的代币销毁行为、对被调用者控制的地址的代币铸造行为;内部账本修改带来的获利行为的获利者为被修改的内部账本的拥有者地址变量。11、进一步地,基于包括erc20在内的eip标准的外部合约调用带来的获利行为为对被调用者控制的地址的转账行为或授权行为,即,搜索是否有transfer或approve函数,且对应函数调用的第一个参数为被调用者控制的地址;基于包括erc20在内的eip标准的外部合约调用带来的获利行为的获利者为函数调用的第一个参数变量,即被转账或授权的地址变量。12、进一步地,调用者可能存在的支出行为包括内部账本修改带来的调用者支出行为、基于包括erc20在内的eip标准的外部合约调用带来的调用者支出行为以及调用者原生代币支出行为三大类。13、进一步地,内部账本修改带来的调用者支出行为包括:待测合约减少授权给调用者“_allowances”存储变量的支出行为、待测合约减少调用者名下的除“_allowances”之外的任意存储变量的支出行为。14、进一步地,基于包括erc20在内的eip标准的外部合约调用带来的调用者支出行为,包括,待测合约调用transferfrom/safetransferfrom函数,且第一个参数为调用者的外部函数调用行为,以及,通过前后账本查看,即,使用balanceof外部调用或address(this).balance查看包含erc20在内的代币余额或原生代币余额,并进行比较,确定本合约余额增加的行为。15、进一步地,在符号执行分析遇见条件分支时,结合当前符号执行分析的实际分支路径选择情况,识别调用者权限检查行为和变量检查行为;将变量检查行为与获利行为记录的获利者信息相匹配,从而识别出获利者检查行为;16、条件分支满足以下两点时存在调用者权限受到检查的行为:17、(1)该条件分支代表的含义是调用者与合约内置数据作比较,合约内置数据包括storage类型数据、constant类型数据以及immutable类型数据;18、(2)该条件分支在当前执行路径中选择的取值,代表该条件分支限制调用者为合约内置取值范围;19、条件分支满足以下两点时,变量受到检查:20、(1)该条件分支代表的含义是变量与合约内置数据作比较,合约内置数据包括storage类型数据,constant类型数据以及immutable类型数据;21、(2)该条件分支在当前执行路径中选择的取值,代表该条件分支限制该变量为合约内置取值范围。22、进一步地,所述步骤三包括如下子步骤:23、(3.1)判断该路径是否以revert结尾,若为是,则说明该路径无法成功执行,该路径分析结束;否则,继续执行(3.2);24、(3.2)该路径中是否存在调用者权限检查行为,若为是,则认为不存在漏洞,该路径分析结束,否则,继续执行(3.3);25、(3.3)对每个在步骤二中收集到的调用者获利行为进行遍历分析,判断是否为“对交易池地址的代币销毁行为”,若为是,则直接执行(3.4);否则,判断该路径是否存在该获利行为对应的获利者检查行为,若存在,该获利行为对应的获利者检查行为,则排除该获利行为;否则,继续执行(3.4);26、(3.4)判断当前执行路径中,是否存在该获利行为所需考虑的支出行为,若为是,则认为不存在漏洞,排除该获利行为;否则,认为该路径存在漏洞,漏洞带来的获利点为该获利行为对应代码,记录漏洞检测结果。27、一种基于静态获利分析的智能合约漏洞检测装置,包括一个或多个处理器,用于实现基于静态获利分析的智能合约漏洞检测方法。28、本发明的有益效果如下:29、本发明的智能合约漏洞检测方法,立足于智能合约静态分析层面,利用路径敏感的符号执行方式,模拟合约可能执行的路径,找到调用者未经权限检查且不花费支出即可获利的程序执行路径。该检测方法贴合智能合约业务语义,可以更加有效地识别合约代码漏洞,且识别效果准确,识别覆盖率高。技术特征:1.一种基于静态获利分析的智能合约漏洞检测方法,其特征在于,包括以下步骤:2.根据权利要求1所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,所述调用者可能存在的获利行为包括内部账本修改带来的获利行为、基于包括erc20在内的eip标准的外部合约调用带来的获利行为以及原生代币获利行为。3.根据权利要求2所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,所述内部账本修改带来的获利行为,包括:对被调用者控制的地址的代币销毁行为、对交易池地址的代币销毁行为、对被调用者控制的地址的代币铸造行为;内部账本修改带来的获利行为的获利者为被修改的内部账本的拥有者地址变量。4.根据权利要求2所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,基于包括erc20在内的eip标准的外部合约调用带来的获利行为为对被调用者控制的地址的转账行为或授权行为,即,搜索是否有transfer或approve函数,且对应函数调用的第一个参数为被调用者控制的地址;基于包括erc20在内的eip标准的外部合约调用带来的获利行为的获利者为函数调用的第一个参数变量,即被转账或授权的地址变量。5.根据权利要求1所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,调用者可能存在的支出行为包括内部账本修改带来的调用者支出行为、基于包括erc20在内的eip标准的外部合约调用带来的调用者支出行为以及调用者原生代币支出行为三大类。6.根据权利要求5所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,内部账本修改带来的调用者支出行为包括:待测合约减少授权给调用者“_allowances”存储变量的支出行为、待测合约减少调用者名下的除“_allowances”之外的任意存储变量的支出行为。7.根据权利要求5所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,基于包括erc20在内的eip标准的外部合约调用带来的调用者支出行为,包括,待测合约调用transferfrom/safetransferfrom函数,且第一个参数为调用者的外部函数调用行为,以及,通过前后账本查看,即,使用balanceof外部调用或address(this).balance查看包含erc20在内的代币余额或原生代币余额,并进行比较,确定本合约余额增加的行为。8.根据权利要求1所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,在符号执行分析遇见条件分支时,结合当前符号执行分析的实际分支路径选择情况,识别调用者权限检查行为和变量检查行为;将变量检查行为与获利行为记录的获利者信息相匹配,从而识别出获利者检查行为;9.根据权利要求1所述的基于静态获利分析的智能合约漏洞检测方法,其特征在于,所述步骤三包括如下子步骤:10.一种基于静态获利分析的智能合约漏洞检测装置,其特征在于,包括一个或多个处理器,用于实现权利要求1~9中任意一项所述的基于静态获利分析的智能合约漏洞检测方法。技术总结本发明公开了一种基于静态获利分析的智能合约漏洞检测方法,该方法将智能合约逻辑行为分为获利与支出两部分,通过对待测合约进行路径敏感的符号执行分析的方式,试图找到对没有对调用者进行权限检查,存在获利行为,获利者不被检查且调用者不需要支出成本的路径,判定该路径涉及代码为漏洞代码。该方法关注合约代码逻辑的整体语义信息,其检测范围广,检测效果精确,识别覆盖率高。技术研发人员:杨义征,周亚金,吴磊,常瑞受保护的技术使用者:浙江大学技术研发日:技术公布日:2024/10/31
转载请注明原文地址: https://www.8miu.com/read-21217.html

最新回复(0)