掌桥专利:专业的专利平台
掌桥专利
首页

基于模糊测试的闭源攻击合约自动识别方法、系统及设备

文献发布时间:2024-04-18 19:58:21


基于模糊测试的闭源攻击合约自动识别方法、系统及设备

技术领域

本发明涉及区块链智能合约安全防护技术领域,特别是涉及基于模糊测试的闭源攻击合约自动识别方法、系统及设备。

背景技术

随着区块链技术的发展,智能合约已成为区块链系统中的关键组成部分。然而,随着智能合约应用的广泛普及,针对智能合约的各种攻击手段也不断涌现,给区块链生态带来了巨大的安全威胁。目前,智能合约安全防护技术中,主要有审计、监控、防火墙以及基于模糊测试等方法。其中,基于模糊测试的方法是一种动态分析技术,通过对合约的输入进行随机变异,观察其输出和执行行为,从而发现安全漏洞。例如ContractFuzzer和Echidna等纯链下模糊测试方法,ContractFuzzer通过基于源代码级别的静态分析方法,生成测试用例对智能合约进行测试;Echidna采用基于属性的测试方法,对编译后的合约字节码进行模糊测试。但是由于这些模糊测试方法主要在链下进行,无法获取链上的状态和数据;缺乏有效的断言测试,难以评估潜在攻击的严重性和实际影响;主要关注漏洞发现,而对恶意合约的识别和拦截能力较弱;以及通常需要对合约源码进行分析,使得这些方法在面对闭源合约时,适用性受到限制。

发明内容

本发明的目的是有效识别并分析新上链的闭源合约,判断被保护合约在攻击的早期阶段是否可能受到攻击。为了实现上述目的,本发明提供了一种基于模糊测试的闭源攻击合约自动识别方法、系统及设备。

本发明实施例提供了一种基于模糊测试的闭源攻击合约自动识别方法,包括:

实时监控并获取最新部署到以太坊上的闭源智能合约字节码;

将所述闭源智能合约字节码反编译成为操作码后进行静态分析,提取闭源智能合约定义的函数签名;

通过所述函数签名进行查询得到函数的输入参数序列,根据所述输入参数序列以受保护合约状态为种子生成测试用例;

模拟所述闭源智能合约的创建者的地址发送交易,以执行所述测试用例;

根据测试断言对所述测试用例的执行结果进行检测,若检测到所述闭源智能合约存在攻击行为,则将所述闭源智能合约的地址加入黑名单。

优选地,所述实时监控并获取最新部署到以太坊上的闭源智能合约字节码,包括:

实时监控区块链网络中新上链的智能合约,利用区块链浏览器查询所述智能合约的开源状态,筛选出维持闭源状态的智能合约,并将闭源合约的字节码直接下载到本地。

优选地,还包括:

对区块链上调用受保护合约的交易根据黑名单进行过滤,当发现所述交易来自所述黑名单的地址时自动拦截;

若检测到所述闭源智能合约不存在攻击行为,则判断函数的模糊测试次数;

若所述模糊测试次数低于预设阈值,则根据所述闭源智能合约的控制流程图判断所述交易的数据流是否为全覆盖;

若数据流未全覆盖,则对测试用例进行变异,执行变异后的测试用例。

优选地,所述根据所述函数签名进行查询得到函数的输入参数序列,包括:

预先构建函数选择器数据库,所述函数选择器数据库存储区块链上所有函数选择器以及函数的参数类型和数量,在所述函数选择器数据库中遍历静态分析得到的闭源智能合约的函数选择器,将查询到的函数参数类型和数量作为所述闭源智能合约的函数的输入参数序列;

如果查询失败,则根据CALLDATALOAD操作码推测出函数的最大候选输入参数个数,再以预设的函数参数类型库作为种子,生成所有可能的输入参数类型序列,根据所述输入参数类型序列生成交易发送到链上交由闭源智能合约执行,当交易成功执行时则推测出函数的输入参数序列。

优选地,所述测试断言包括:

余额不变性,用于通过跟踪交易的执行路径,记录下交易过程中与闭源智能合约存在交互行为的受保护合约在交易执行前后所管理的资产余额,并检查所述受保护合约的资产余额在交易中是否没有出现变化;

无资产窃取,用于通过记录可疑地址的资产余额在交易执行前后的值,检查所述可疑地址的资产余额在交易之前和之后是否和所述受保护合约的资产余额的变化一样;

角色不变性,用于检查用户的角色在交易之前和交易之后是否保持不变;

冻结状态不变性,用于检查用户的冻结状态在交易之前和交易之后是否保持不变;

所有权不变性,用于检查所述受保护合约的所有者在交易之前和交易之后是否保持不变;

交易限制不变性,用于检查所述受保护合约的交易限制在交易之前和交易之后是否保持不变。

优选地,所述根据所述闭源智能合约的控制流程图判断所述交易的数据流是否为全覆盖,包括:

基于控制流程图得到每个函数的数据流,根据所述数据流得到函数包含的变量,并对每个交易执行过程中使用到的操作码进行检查,根据所述操作码得到交易执行过程中使用的变量,将所述函数包含的变量和所述交易执行过程中使用的变量进行对比,得出数据流是否为全覆盖。

优选地,所述对测试用例进行变异,包括:

基于控制流程图,使用求解器对每一条数据流路径进行约束求解,找到所述每一条数据流路径的参数约束,根据所述参数约束对测试用例进行变异。

本发明实施例还提供了一种基于模糊测试的闭源攻击合约自动识别系统,包括:

数据获取模块,用于实时监控并获取最新部署到以太坊上的闭源智能合约字节码;

静态分析模块,用于将所述闭源智能合约字节码反编译成为操作码后进行静态分析,提取闭源智能合约定义的函数签名;

测试用例生成模块,用于通过所述函数签名进行查询得到函数的输入参数序列,根据所述输入参数序列以受保护合约状态为种子生成测试用例;

测试用例执行模块,用于模拟所述闭源智能合约的创建者的地址发送交易,以执行所述测试用例;

测试断言检测模块,用于根据测试断言对所述测试用例的执行结果进行检测,若检测到所述闭源智能合约存在攻击行为,则将所述闭源智能合约的地址加入黑名单。

本发明实施例还提供了一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器在执行所述计算机程序时实现如上所述的闭源攻击合约自动识别方法。

本发明实施例提供一种基于模糊测试的闭源攻击合约自动识别方法、系统及设备与现有技术相比,其有益效果在于:通过对新上链的智能合约进行模糊测试,能够及时发现潜在的攻击合约,在合约被攻击之前发现受保护合约的安全漏洞,提高受保护合约的安全性;通过定义六种断言测试,可以有效地检测出包括重入攻击、闪电贷攻击在内的多种攻击,具有良好的攻击识别效果;通过黑名单机制拦截可疑的攻击合约,有效防止恶意攻击的发生。

附图说明

图1是本发明实施例一种基于模糊测试的闭源攻击合约自动识别方法的流程示意图。

图2是本发明实施例智能合约内函数选择器的示意图。

图3是本发明实施例六种测试断言的代码示意图。

图4是本发明实施例测试断言检测步骤的流程示意图。

图5是本发明实施例控制流程图的示意图。

图6是本发明实施例一种基于模糊测试的闭源攻击合约自动识别系统的结构示意图。

图7是本发明实施例一种终端设备的结构示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

如图1所示,本发明实施例提供了一种基于模糊测试的闭源攻击合约自动识别方法,包括步骤:

S1、实时监控并获取最新部署到以太坊上的闭源智能合约字节码;

具体地,实时监控区块链网络中新上链的智能合约,利用区块链浏览器Etherscan查询智能合约的开源状态,筛选出维持闭源状态的智能合约,并将该闭源合约的字节码直接下载到本地。

S2、将闭源智能合约字节码反编译成为操作码后进行静态分析,提取闭源智能合约定义的函数签名;

S3、通过函数签名进行查询得到函数的输入参数序列,根据输入参数序列以受保护合约状态为种子生成测试用例;

智能合约的函数分为两种类型,一种是带函数参数的,一种是不带函数参数的。根据不同的函数类型有不同的测试用例生成策略。

通过对历史攻击事件调研发现,许多攻击者在通过调用智能合约攻击时,仅调用了相应的无参数需求的攻击函数,且并没有输入任何参数。因此,针对这种情况,可以直接完成相应的函数调用,不需要进行测试用例的生成。

针对带参数的攻击函数,由于闭源智能合约的ABI码没有公开,所以无法直接获取函数的输入参数序列来生成测试用例,为此可使用以下三种方式来生成测试用例:

1)预先构建函数选择器数据库,函数选择器数据库存储区块链上所有函数选择器以及函数的参数类型和数量,在函数选择器数据库中遍历静态分析得到的闭源智能合约的函数选择器,将查询到的函数参数类型和数量作为闭源智能合约的函数的输入参数序列;

函数选择器是通过函数签名计算得来的。函数签名是由函数名和函数参数类型组成的字符串,经对闭源智能合约字节码进行静态分析获得函数签名后,函数选择器便是函数签名的Keccak-256哈希结果的前四个字节。因此,可将智能合约字节码转变为操作码形式,然后根据PUSH4进行筛选,获取函数内所有可被调用的公开函数构成该函数的函数选择器数据库。其中,所有可被调用的公开函数的形式如图2所示。

2)如果查询失败,则利用工具Octopus对智能合约的字节码进行模式匹配。由于智能合约在交易中获得数据的时候需要先使用CALLDATALOAD操作码获得数据,所以可以根据CALLDATALOAD操作码推测出函数的最大候选输入参数个数N,再以预设的函数参数类型库(包含uint、bytes、address等参数类型)作为种子,生成从0到N所有可能的输入参数类型序列,根据输入参数类型序列生成交易发送到链上交由闭源智能合约执行,当交易成功执行时则推测出函数的输入参数序列;

在获得函数的输入参数序列之后,以受保护合约状态为种子生成测试用例。其中,受保护合约状态包括但不限于合约地址、管理的代币地址。

3)对于少数经过以上方法也无法找到函数输入参数序列的函数,可在接下来一段时间持续监控主网中该函数的调用情况,如果主网上出现调用该函数的交易,则以该交易作为种子生成测试用例。

由于攻击合约的攻击交易可能要经过特定的路径才能触发,而这个路径是未知的。通过随机生成测试用例能够有效增加触发攻击交易的概率,进而评估受保护合约是否可能受到攻击。

S4、模拟闭源智能合约的创建者的地址发送交易,以执行测试用例;

具体地,由于很多攻击合约会限制只能由攻击者本身进行合约调用,所以使用Echidna的自带功能进行账户模拟,模拟闭源智能合约的创建者的地址发送测试用例进行模糊测试。

S5、根据测试断言对测试用例的执行结果进行检测,若检测到闭源智能合约存在攻击行为,则将闭源智能合约的地址加入黑名单。

具体地,根据不同的攻击类型,本发明添加六种测试断言用以识别潜在的攻击行为,具体如图3所示,包括:

余额不变性,用于通过跟踪交易的执行路径,记录下交易过程中与闭源智能合约存在交互行为的受保护合约在交易执行前后所管理的资产余额,并检查受保护合约的资产余额在交易中是否没有出现变化;

无资产窃取,用于通过记录可疑地址的资产余额在交易执行前后的值,检查可疑地址的资产余额在交易之前和之后是否和受保护合约的资产余额的变化一样;

角色不变性,用于检查用户的角色在交易之前和交易之后是否保持不变;

冻结状态不变性,用于检查用户的冻结状态在交易之前和交易之后是否保持不变;

所有权不变性,用于检查受保护合约的所有者在交易之前和交易之后是否保持不变;

交易限制不变性,用于检查受保护合约的交易限制在交易之前和交易之后是否保持不变。

通过余额不变性断言和无资产窃取断言可以识别出重入攻击和闪电贷攻击,通过角色不变性断言和所有权不变性断言可以检测出恶意更改智能合约所有权的攻击,通过冻结状态所有权断言和交易限制不变性断言可以检测出合约的保护机制是否受到恶意攻击。通过以上六种测试断言可以在模拟可能导致攻击的测试期间,监测和识别潜在的安全漏洞,有助于提高智能合约的安全性,并防止未经授权的攻击行为。

如果发现该闭源智能合约对受保护合约存在可疑的攻击行为,就将该闭源智能合约的合约地址加入黑名单。

在一具体实施例中,步骤S5如图4所示,还包括:

S501、对区块链上调用受保护合约的交易根据黑名单进行过滤,当发现交易来自黑名单的地址时自动拦截;

通过黑名单机制拦截可疑的攻击合约,能够有效防止恶意攻击的发生。

S502、若检测到闭源智能合约不存在攻击行为,则判断函数的模糊测试次数;

具体地,若模糊测试次数不小于30次,则不再对函数进行模糊测试,否则继续执行步骤503。

S503、若模糊测试次数低于预设阈值,则根据闭源智能合约的控制流程图判断交易的数据流是否为全覆盖;

具体地,若模糊测试次数低于30次,则根据闭源智能合约的控制流程图判断交易的数据流是否为全覆盖。基于控制流程图得到每个函数的数据流,根据数据流得到函数包含的变量,并对每个交易执行过程中使用到的操作码进行检查,根据操作码得到交易执行过程中使用的变量,将函数包含的变量和交易执行过程中使用的变量进行对比,得出数据流是否为全覆盖。其中,使用Octopus将闭源智能合约字节码转换为操作码并进行静态分析,能够自动生成闭源智能合约的控制流程图,具体如图5所示。通过判断交易的数据流是否为全覆盖,能够判断该交易是否能对函数的所有功能进行测试,进而能够指导交易往特定的方向突变,增加交易的代码覆盖率。

S504、若数据流未全覆盖,则对测试用例进行变异,执行变异后的测试用例。

具体地,若数据流未全覆盖,基于控制流程图,使用Z3求解器对每一条数据流路径进行约束求解,找到每一条数据流路径的参数约束,根据参数约束对测试用例进行变异,使得测试用例可以满足测试用例的约束条件,增加测试的代码覆盖率。

本发明实施例提供一种基于模糊测试的闭源攻击合约自动识别方法,该方法通过对新上链的智能合约进行模糊测试,能够及时发现潜在的攻击合约,在合约被攻击之前发现受保护合约的安全漏洞,提高受保护合约的安全性;通过定义六种断言测试,可以有效地检测出包括重入攻击、闪电贷攻击在内的多种攻击,具有良好的攻击识别效果;通过黑名单机制拦截可疑的攻击合约,有效防止恶意攻击的发生。

如图6所示,基于上述闭源攻击合约自动识别方法,本发明实施例还提供了一种基于模糊测试的闭源攻击合约自动识别系统,包括:

数据获取模块1,用于实时监控并获取最新部署到以太坊上的闭源智能合约字节码;

静态分析模块2,用于将所述闭源智能合约字节码反编译成为操作码后进行静态分析,提取闭源智能合约定义的函数签名;

测试用例生成模块3,用于通过所述函数签名进行查询得到函数的输入参数序列,根据所述输入参数序列以受保护合约状态为种子生成测试用例;

测试用例执行模块4,用于模拟所述闭源智能合约的创建者的地址发送交易,以执行所述测试用例;

测试断言检测模块5,用于根据测试断言对所述测试用例的执行结果进行检测,若检测到所述闭源智能合约存在攻击行为,则将所述闭源智能合约的地址加入黑名单。

需要说明的是,上述一种基于模糊测试的闭源攻击合约自动识别系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。关于一种基于模糊测试的闭源攻击合约自动识别系统的具体限定参见上文中对于一种基于模糊测试的闭源攻击合约自动识别方法的限定,二者具有相同的功能和作用,在此不再赘述。

本发明实施例还提供了一种终端设备,该终端设备包括:

处理器、存储器和总线;

所述总线,用于连接所述处理器和所述存储器;

所述存储器,用于存储操作指令;

所述处理器,用于通过调用所述操作指令,可执行指令使处理器执行如本申请上述一种基于模糊测试的闭源攻击合约自动识别方法对应的操作。

在一个可选实施例中提供了一种终端设备,如图7所示,图7所示的终端设备5000包括:处理器5001和存储器5003。其中,处理器5001和存储器5003相连,如通过总线5002相连。可选地,终端设备5000还可以包括收发器5004。需要说明的是,实际应用中收发器5004不限于一个,该终端设备5000的结构并不构成对本申请实施例的限定。

处理器5001可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器5001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。

总线5002可包括一通路,在上述组件之间传送信息。总线5002可以是PCI总线或EISA总线等。总线5002可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

存储器5003可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。

存储器5003用于存储执行本申请方案的应用程序代码,并由处理器5001来控制执行。处理器5001用于执行存储器5003中存储的应用程序代码,以实现前述任一方法实施例所示的内容。

其中,终端设备包括但不限于:移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。

综上所述,本发明实施例提供一种基于模糊测试的闭源攻击合约自动识别方法、系统及设备,通过对新上链的智能合约进行模糊测试,能够及时发现潜在的攻击合约,在合约被攻击之前发现受保护合约的安全漏洞,提高受保护合约的安全性;通过定义六种断言测试,可以有效地检测出包括重入攻击、闪电贷攻击在内的多种攻击,具有良好的攻击识别效果;通过黑名单机制拦截可疑的攻击合约,有效防止恶意攻击的发生。

本说明书中的各个实施例均采用递进的方式描述,各个实施例直接相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。需要说明的是,上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和替换,这些改进和替换也应视为本发明的保护范围。

相关技术
  • 一种基于卷积神经网络的移动设备源识别方法及系统
  • 一种闭源智能合约参数生成方法、系统、设备和存储介质
  • 一种基于长短期记忆网络的智能合约模糊测试方法及系统
技术分类

06120116482844