一种权限控制漏洞检测方法及装置与流程

文档序号:37110950发布日期:2024-02-22 21:09阅读:13来源:国知局
一种权限控制漏洞检测方法及装置与流程

本技术涉及计算机领域,尤其涉及一种权限控制漏洞检测方法及装置。


背景技术:

1、智能合约承载着区块链(blockchain)上大量的数字资产,由于智能合约可以被区块链(blockchain)地址公开访问,智能合约通常会采用多样化的权限控制策略,避免智能合约内敏感资源受到未授权地址也即非法用户的访问。然而,智能合约可能存在权限控制漏洞,使得攻击者可以绕过智能合约的权限控制条件,访问智能合约的敏感资源。


技术实现思路

1、本技术提供一种权限控制漏洞检测方法及装置,能够实现准确有效地对智能合约的权限控制漏洞进行检测。

2、第一方面,本技术实施例提供一种权限控制漏洞检测方法,该方法可以由权限控制漏洞检测装置执行,该权限控制漏洞检测装置可以是一个终端设备或用于终端设备的模块,或者是一个服务器或用于服务器的模块。本技术对该方法的执行主体不做限定。该方法包括:获取待检测智能合约的合约字节码;确定合约字节码中是否存在与调用者地址关联的比较操作;若存在比较操作,则确定合约字节码中是否存在以比较操作的比较结果为输入的条件跳转操作;若存在条件跳转操作,则确定条件跳转操作中是否存在回滚分支;若存在回滚分支,则将调用者地址作为污点源进行污点分析,确定污点汇聚点;若污点汇聚点为对权限控制变量的存储位置进行存储操作,则确定待检测智能合约存在权限控制漏洞,权限控制变量为待检测智能合约的合法调用者对应的变量。

3、上述方案,先分析待检测智能合约的合约字节码,根据合约字节码确定待检测智能合约的执行逻辑,判断执行逻辑是否满足权限控制的流程,权限控制的流程包括:获取调用者地址、与调用者地址进行比较、基于比较结果的条件跳转。若满足权限控制的流程,且存在回滚分支,即说明非法用户访问了待检测智能合约,当非法用户访问了待检测智能合约,再根据污点分析技术确定非法用户是否可以修改权限控制变量,若可以修改权限控制变量,则确定待检测智能合约存在权限控制漏洞。根据确定权限控制的流程和污点分析技术,能够实现准确有效地对智能合约的权限控制漏洞进行检测。

4、一种可能的实现方法中,确定合约字节码中是否存在调用者地址与权限控制变量之间的比较操作;或,确定合约字节码中是否存在基于调用者地址访问的数据结构的比较操作。

5、上述方案,确定合约字节码中是否存在与调用者地址关联的比较操作一般分为两种情况,一是,通过判断调用者地址和合法用户地址也即权限控制变量是否相同,来判断该调用者地址是否属于合法用户,二是,通过判断基于调用者地址访问的数据结构的比较操作,因为调用者地址或权限控制变量往往需要通过较为复杂的数据结构才能获取。因此,本技术能够支持较为复杂的权限控制条件,实现对复杂场景的智能合约的权限控制漏洞进行检测。

6、一种可能的实现方法中,针对合约字节码中任一比较操作,在比较操作的第一参数变量属于调用者变量集合,且比较操作的第二参数变量属于状态变量集合,则确定比较操作为调用者地址与权限控制变量之间的比较操作;或,针对合约字节码中任一比较操作,在比较操作的第三参数变量属于数据结构变量集合,且比较操作的第四参数变量属于状态变量集合,则确定比较操作为基于调用者地址访问的数据结构的比较操作;或,针对合约字节码中任一比较操作,在比较操作的第五参数变量属于状态变量集合,且比较操作的第六参数变量属于常数,则确定比较操作为基于调用者地址访问的数据结构的比较操作。其中,调用者变量集合是与获取调用者地址的操作码相关的变量;状态变量集合是与获取权限控制变量的操作码相关的变量;数据结构变量集合是与哈希操作码和获取调用者地址操作码相关的变量。

7、上述方案,能够覆盖更多的权限控制条件,实现对更多类型的权限控制流程的判断,因此能够实现准确有效地对智能合约的权限控制漏洞进行检测。

8、一种可能的实现方法中,遍历合约字节码,当遍历到获取调用者地址操作码时,将获取调用者地址操作码对应的变量加入调用者变量集合;当遍历到获取权限控制变量的操作码时,将权限控制变量的操作码对应的变量加入状态变量集合;依据调用者变量集合中的变量或状态变量集合中的变量,通过对合约字节码进行数据流分析方式,扩充调用者变量集合、状态变量集合和数据结构变量集合。

9、上述方案,通过调用者变量集合、状态变量集合和数据结构变量集合,这三个集合能够体现智能合约的权限控制逻辑,以及确定各变量之间的关联关系,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。

10、一种可能的实现方法中,针对合约字节码中的数值计算操作码,确定参与数值计算的第一计算参数和第二计算参数;若第一计算参数对应的变量或第二计算参数对应的变量属于调用者变量集合,且数值计算结果等于第一计算参数或第二计算参数,则将数值计算结果对应的变量加入调用者变量集合;若第一计算参数对应的变量或第二计算参数对应的变量属于状态变量集合,且数值计算结果等于第一计算参数或第二计算参数,则将数值计算结果对应的变量加入状态变量集合。

11、上述方案,通过数值计算操作码,一方面,能够挖掘和调用者地址相关联的数值计算的变量,以及挖掘和权限控制变量相关的数值计算的变量,另一方面能够确定基于调用者地址访问的数据结构的信息,比如数据结构类型为结构体。调用者变量集合中的变量均与调用者地址有关,状态变量集合中的变量均与权限控制变量有关,因此,形成的调用者变量集合和状态变量集合准确有效,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。

12、一种可能的实现方法中,针对合约字节码中的内存操作码,确定内存操作的第一内存参数和第二内存参数;若第二内存参数对应的变量属于调用者变量集合,则将第一内存参数对应的内存地址变量加入调用者变量集合;若第二内存参数对应的变量属于状态变量集合,则将第一内存参数对应的内存地址变量加入状态变量集合。

13、上述方案,通过内存操作码,能够挖掘和调用者地址相关联的内存操作的变量,以及挖掘和权限控制变量相关的内存操作的变量,调用者变量集合中的变量均与调用者地址有关,状态变量集合中的变量均与权限控制变量有关,因此,形成的调用者变量集合和状态变量集合准确有效,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。

14、一种可能的实现方法中,针对合约字节码中的哈希操作码,根据哈希操作码,确定参与哈希计算的第一哈希参数和第二哈希参数;根据第一哈希参数、第二哈希参数和内存变量列表,通过数据流分析方式确定至少一个数据结构变量,将至少一个数据结构变量加入数据结构变量集合;其中,内存变量列表记录了合约字节码中每次内存存取操作所用的内存地址和内存地址对应的变量;至少一个数据结构变量存储于内存变量列表内,且至少一个数据结构变量与调用者变量集合中的变量有关。

15、上述方案,通过哈希操作码,能够确定基于调用者地址访问的数据结构的信息,比如数据结构类型为mapping类型,数据结构变量集合存储的变量,不仅和调用者地址以及内存操作有关,而且能够体现mapping数据结构,因此,形成的数据结构变量集合准确有效,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。

16、一种可能的实现方法中,确定调用者地址为污点源;根据污点传播规则,在合约字节码中跟踪污点源的传播路径,确定污点汇聚点是否为对权限控制变量存储位置的存储操作;其中,污点传播规则指的是与调用者地址相关的数值操作、赋值操作、调用操作或内存操作等。

17、上述方案,以调用者地址为污点源,采用与调用者地址相关的污点传播规则,能够准确有效判断智能合约调用者能否根据一系列的数值、赋值、调用或内存等操作,实现对权限控制变量存储位置的存储操作也即实现对权限控制变量的修改,若可以修改权限控制变量,则确定待检测智能合约存在权限控制漏洞。因为,如果可以对权限控制变量的存储位置进行存储操作,就可以把权限控制变量修改为非法用户的地址,使得非法用户可以访问待检测智能合约。综上,根据确定权限控制的流程和污点分析技术,能够实现准确有效地对智能合约的权限控制漏洞进行检测。

18、一种可能的实现方法中,在合约字节码的不同模块之间,通过同名变量和污点传播规则跟踪污点源的传播路径。

19、上述方案,可以实现挖掘合约字节码的不同模块之间关系,也即污点不仅仅可以在同一模块中传播,还可以在不同模块之间传播,因此,能够挖掘更深层次的关联关系,进而通过不同模块的污点分析技术,能够实现更加准确有效地对智能合约的权限控制漏洞进行检测。

20、第二方面,本技术实施例提供一种权限控制漏洞检测装置,包括:获取单元和确定单元。获取单元,用于获取待检测智能合约的合约字节码;确定单元,用于确定合约字节码中是否存在与调用者地址关联的比较操作;若存在比较操作,则确定合约字节码中是否存在以比较操作的比较结果为输入的条件跳转操作;若存在条件跳转操作,则确定条件跳转操作中是否存在回滚分支;若存在回滚分支,则将调用者地址作为污点源进行污点分析,确定污点汇聚点;若污点汇聚点为对权限控制变量的存储位置进行存储操作,则确定待检测智能合约存在权限控制漏洞,权限控制变量为待检测智能合约的合法调用者对应的变量。

21、一种可能的实现方法中,确定单元,用于确定合约字节码中是否存在调用者地址与权限控制变量之间的比较操作;或,确定合约字节码中是否存在基于调用者地址访问的数据结构的比较操作。

22、一种可能的实现方法中,确定单元,具体用于针对合约字节码中任一比较操作,在比较操作的第一参数变量属于调用者变量集合,且比较操作的第二参数变量属于状态变量集合,则确定比较操作为调用者地址与权限控制变量之间的比较操作;或针对合约字节码中任一比较操作,在比较操作的第三参数变量属于数据结构变量集合,且比较操作的第四参数变量属于状态变量集合,则确定比较操作为基于调用者地址访问的数据结构的比较操作;或,针对合约字节码中任一比较操作,在比较操作的第五参数变量属于状态变量集合,且比较操作的第六参数变量属于常数,则确定比较操作为基于调用者地址访问的数据结构的比较操作。其中,调用者变量集合是与获取调用者地址的操作码相关的变量;状态变量集合是与获取权限控制变量的操作码相关的变量;数据结构变量集合是与哈希操作码和获取调用者地址操作码相关的变量。

23、一种可能的实现方法中,上述装置还包括更新单元,该更新单元,用于遍历合约字节码,当遍历到获取调用者地址操作码时,将获取调用者地址操作码对应的变量加入调用者变量集合;当遍历到获取权限控制变量的操作码时,将权限控制变量的操作码对应的变量加入状态变量集合;依据调用者变量集合中的变量或状态变量集合中的变量,通过对合约字节码进行数据流分析方式,扩充调用者变量集合、状态变量集合和数据结构变量集合。

24、一种可能的实现方法中,确定单元,用于针对合约字节码中的数值计算操作码,确定参与数值计算的第一计算参数和第二计算参数;更新单元,用于若第一计算参数对应的变量或第二计算参数对应的变量属于调用者变量集合,且数值计算结果等于第一计算参数或第二计算参数,则将数值计算结果对应的变量加入调用者变量集合;若第一计算参数对应的变量或第二计算参数对应的变量属于状态变量集合,且数值计算结果等于第一计算参数或第二计算参数,则将数值计算结果对应的变量加入状态变量集合。

25、一种可能的实现方法中,确定单元,用于针对合约字节码中的内存操作码,确定内存操作的第一内存参数和第二内存参数;更新单元,用于若第二内存参数对应的变量属于调用者变量集合,则将第一内存参数对应的内存地址变量加入调用者变量集合;若第二内存参数对应的变量属于状态变量集合,则将第一内存参数对应的内存地址变量加入状态变量集合。

26、一种可能的实现方法中,确定单元,用于针对合约字节码中的哈希操作码,根据哈希操作码,确定参与哈希计算的第一哈希参数和第二哈希参数;更新单元,用于根据第一哈希参数、第二哈希参数和内存变量列表,通过数据流分析方式确定至少一个数据结构变量,将至少一个数据结构变量加入数据结构变量集合;其中,内存变量列表记录了合约字节码中每次内存存取操作所用的内存地址和内存地址对应的变量;至少一个数据结构变量存储于内存变量列表内,且至少一个数据结构变量与调用者变量集合中的变量有关。

27、一种可能的实现方法中,上述装置还包括跟踪单元,其中,确定单元,用于确定调用者地址为污点源;确定污点汇聚点是否为对权限控制变量存储位置的存储操作;跟踪单元,用于根据污点传播规则,在合约字节码中跟踪污点源的传播路径;其中,污点传播规则指的是与调用者地址相关的数值操作、赋值操作、调用操作或内存操作等。

28、一种可能的实现方法中,跟踪单元,用于在合约字节码的不同模块之间,通过同名变量和污点传播规则跟踪污点源的传播路径。

29、第三方面,本技术实施例还提供一种计算设备,包括:

30、存储器,用于存储程序指令;

31、处理器,用于调用存储器中存储的程序指令,按照获得的程序指令执行实现上述第一方面的任意方法。

32、第四方面,本技术实施例还提供一种计算机可读存储介质,其中存储有计算机可读指令,当计算机读取并执行计算机可读指令时,实现上述第一方面的任意方法。

33、第五方面,本技术实施例提供了一种计算机程序产品,包括有可由计算机设备执行的计算机程序,当程序在计算机设备上运行时,使得计算机设备执行实现上述第一方面的任意方法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1