System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机领域,尤其涉及一种权限控制漏洞检测方法及装置。
技术介绍
1、智能合约承载着区块链(blockchain)上大量的数字资产,由于智能合约可以被区块链(blockchain)地址公开访问,智能合约通常会采用多样化的权限控制策略,避免智能合约内敏感资源受到未授权地址也即非法用户的访问。然而,智能合约可能存在权限控制漏洞,使得攻击者可以绕过智能合约的权限控制条件,访问智能合约的敏感资源。
技术实现思路
1、本申请提供一种权限控制漏洞检测方法及装置,能够实现准确有效地对智能合约的权限控制漏洞进行检测。
2、第一方面,本申请实施例提供一种权限控制漏洞检测方法,该方法可以由权限控制漏洞检测装置执行,该权限控制漏洞检测装置可以是一个终端设备或用于终端设备的模块,或者是一个服务器或用于服务器的模块。本申请对该方法的执行主体不做限定。该方法包括:获取待检测智能合约的合约字节码;确定合约字节码中是否存在与调用者地址关联的比较操作;若存在比较操作,则确定合约字节码中是否存在以比较操作的比较结果为输入的条件跳转操作;若存在条件跳转操作,则确定条件跳转操作中是否存在回滚分支;若存在回滚分支,则将调用者地址作为污点源进行污点分析,确定污点汇聚点;若污点汇聚点为对权限控制变量的存储位置进行存储操作,则确定待检测智能合约存在权限控制漏洞,权限控制变量为待检测智能合约的合法调用者对应的变量。
3、上述方案,先分析待检测智能合约的合约字节码,根据合约字节码确定待检测智能合约的执
4、一种可能的实现方法中,确定合约字节码中是否存在调用者地址与权限控制变量之间的比较操作;或,确定合约字节码中是否存在基于调用者地址访问的数据结构的比较操作。
5、上述方案,确定合约字节码中是否存在与调用者地址关联的比较操作一般分为两种情况,一是,通过判断调用者地址和合法用户地址也即权限控制变量是否相同,来判断该调用者地址是否属于合法用户,二是,通过判断基于调用者地址访问的数据结构的比较操作,因为调用者地址或权限控制变量往往需要通过较为复杂的数据结构才能获取。因此,本申请能够支持较为复杂的权限控制条件,实现对复杂场景的智能合约的权限控制漏洞进行检测。
6、一种可能的实现方法中,针对合约字节码中任一比较操作,在比较操作的第一参数变量属于调用者变量集合,且比较操作的第二参数变量属于状态变量集合,则确定比较操作为调用者地址与权限控制变量之间的比较操作;或,针对合约字节码中任一比较操作,在比较操作的第三参数变量属于数据结构变量集合,且比较操作的第四参数变量属于状态变量集合,则确定比较操作为基于调用者地址访问的数据结构的比较操作;或,针对合约字节码中任一比较操作,在比较操作的第五参数变量属于状态变量集合,且比较操作的第六参数变量属于常数,则确定比较操作为基于调用者地址访问的数据结构的比较操作。其中,调用者变量集合是与获取调用者地址的操作码相关的变量;状态变量集合是与获取权限控制变量的操作码相关的变量;数据结构变量集合是与哈希操作码和获取调用者地址操作码相关的变量。
7、上述方案,能够覆盖更多的权限控制条件,实现对更多类型的权限控制流程的判断,因此能够实现准确有效地对智能合约的权限控制漏洞进行检测。
8、一种可能的实现方法中,遍历合约字节码,当遍历到获取调用者地址操作码时,将获取调用者地址操作码对应的变量加入调用者变量集合;当遍历到获取权限控制变量的操作码时,将权限控制变量的操作码对应的变量加入状态变量集合;依据调用者变量集合中的变量或状态变量集合中的变量,通过对合约字节码进行数据流分析方式,扩充调用者变量集合、状态变量集合和数据结构变量集合。
9、上述方案,通过调用者变量集合、状态变量集合和数据结构变量集合,这三个集合能够体现智能合约的权限控制逻辑,以及确定各变量之间的关联关系,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。
10、一种可能的实现方法中,针对合约字节码中的数值计算操作码,确定参与数值计算的第一计算参数和第二计算参数;若第一计算参数对应的变量或第二计算参数对应的变量属于调用者变量集合,且数值计算结果等于第一计算参数或第二计算参数,则将数值计算结果对应的变量加入调用者变量集合;若第一计算参数对应的变量或第二计算参数对应的变量属于状态变量集合,且数值计算结果等于第一计算参数或第二计算参数,则将数值计算结果对应的变量加入状态变量集合。
11、上述方案,通过数值计算操作码,一方面,能够挖掘和调用者地址相关联的数值计算的变量,以及挖掘和权限控制变量相关的数值计算的变量,另一方面能够确定基于调用者地址访问的数据结构的信息,比如数据结构类型为结构体。调用者变量集合中的变量均与调用者地址有关,状态变量集合中的变量均与权限控制变量有关,因此,形成的调用者变量集合和状态变量集合准确有效,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。
12、一种可能的实现方法中,针对合约字节码中的内存操作码,确定内存操作的第一内存参数和第二内存参数;若第二内存参数对应的变量属于调用者变量集合,则将第一内存参数对应的内存地址变量加入调用者变量集合;若第二内存参数对应的变量属于状态变量集合,则将第一内存参数对应的内存地址变量加入状态变量集合。
13、上述方案,通过内存操作码,能够挖掘和调用者地址相关联的内存操作的变量,以及挖掘和权限控制变量相关的内存操作的变量,调用者变量集合中的变量均与调用者地址有关,状态变量集合中的变量均与权限控制变量有关,因此,形成的调用者变量集合和状态变量集合准确有效,进而能够实现准确有效地对智能合约的权限控制漏洞进行检测。
14、一种可能的实现方法中,针对合约字节码中的哈希操作码,根据哈希操作码,确定参与哈希计算的第一哈希参数和第二哈希参数;根据第一哈希参数、第二哈希参数和内存变量列表,通过数据流分析方式确定至少一个数据结构变量,将至少一个数据结构变量加入数据结构变量集合;其中,内存变量列表记录了合约字节码中每次内存存取操作所用的内存地址和内存地址对应的变量;至少一个数据结构变量存储于内存变量列表内,且至少一个数据结构变量与调用者变量集合中的变量有关。
15、上述方案,通过哈希操作码,能够确定基于调用者地址访问的数据结构的信息,比如数据结构类型为mapping类型,数据结构变量集合存储的变量,不仅和调用者地址以及内存操作有关,而且能够体现mappin本文档来自技高网...
【技术保护点】
1.一种权限控制漏洞检测方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述确定所述合约字节码中是否存在与调用者地址关联的比较操作,包括:
3.如权利要求2所述的方法,其特征在于,所述确定所述合约字节码中是否存在所述调用者地址与所述权限控制变量之间的比较操作,包括:
4.如权利要求3所述的方法,其特征在于,所述方法还包括确定所述调用者变量集合和所述状态变量集合,包括:
5.如权利要求4所述的方法,其特征在于,所述依据所述调用者变量集合中的变量或所述状态变量集合中的变量,通过对所述合约字节码进行数据流分析方式,扩充调用者变量集合、状态变量集合,包括:
6.如权利要求4所述的方法,其特征在于,所述依据所述调用者变量集合中的变量或所述状态变量集合中的变量,通过对所述合约字节码进行数据流分析方式,扩充调用者变量集合、状态变量集合,包括:
7.如权利要求4所述的方法,其特征在于,所述依据所述调用者变量集合中的变量或所述状态变量集合中的变量,通过对所述合约字节码进行数据流分析方式,扩充数据结构变量集合,
8.如权利要求1所述的方法,其特征在于,所述将所述调用者地址作为污点源进行污点分析,确定污点汇聚点,包括:
9.如权利要求8所述的方法,其特征在于,所述根据污点传播规则,在所述合约字节码中跟踪所述污点源的传播路径,包括:
10.一种权限控制漏洞检测装置,其特征在于,包括获取单元和确定单元:
11.一种计算设备,其特征在于,包括:
12.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得如权利要求1至9中任一项所述的方法实现。
...【技术特征摘要】
1.一种权限控制漏洞检测方法,其特征在于,包括:
2.如权利要求1所述的方法,其特征在于,所述确定所述合约字节码中是否存在与调用者地址关联的比较操作,包括:
3.如权利要求2所述的方法,其特征在于,所述确定所述合约字节码中是否存在所述调用者地址与所述权限控制变量之间的比较操作,包括:
4.如权利要求3所述的方法,其特征在于,所述方法还包括确定所述调用者变量集合和所述状态变量集合,包括:
5.如权利要求4所述的方法,其特征在于,所述依据所述调用者变量集合中的变量或所述状态变量集合中的变量,通过对所述合约字节码进行数据流分析方式,扩充调用者变量集合、状态变量集合,包括:
6.如权利要求4所述的方法,其特征在于,所述依据所述调用者变量集合中的变量或所述状态变量集合中的变量,通过对所述合约字节码进行数据流分析...
【专利技术属性】
技术研发人员:郑子彬,李辉忠,钟志杰,白兴强,李成博,蔚菡萏,张开翔,范瑞彬,
申请(专利权)人:深圳前海微众银行股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。