智能合约审计的条件竞争

前言

与大多数区块链一样,以太坊节点聚合交易并将其形成区块,一旦矿工解决了共识机制(目前是以太坊的 ETHASH PoW),这些交易就被认为是有效的,解决区块的矿工也会从这个矿池中选择哪些交易将被包含在区块中,这通常由 gasPrice 交易决定,这里存在潜在的攻击向量,攻击者可以观察交易矿池中可能包含问题解决方案的交易, 智能合约审计服务 修改或撤销攻击者的权限或更改对攻击者不利的合约中的状态,攻击者可以从该交易中获取数据并创建更高级别的交易gas Price并将其交易包含在块中。

有条件的竞争

该合约包含 1000 个以太币,找到并提交正确答案的用户将获得此奖励。 当用户找到答案并以答案为参数调用求解函数时,不幸的是,攻击者可以观察到交易矿池中的任何交易矿池。 看到这个解决方案的人提交的答案,检查它的有效性,然后提交一个gasPrice远高于原始交易的新交易,解决问题的矿工可能会先打包攻击,因为攻击者的gasPrice更高,攻击者会获得 1000 以太币,最初解决问题的用户将不会获得任何奖励(合约中没有剩余以太币),出现条件竞争问题

防御措施

有两种类型的用户可以进行这种类型的早期交易攻击:

用户(修改交易的gasPrice)

矿工自己(他们可以根据需要重新排序交易)

总体而言,易受类型 1(用户)攻击的合约比易受类型 2(矿工)攻击的合约要差得多,因为矿工只能在解决区块时执行攻击,这对任何目标都非常重要。特定区块的单个矿工,以下是一些缓解措施:

气体限制

可以采取的一种方法是在合约中创建一个约束,即 gasPrice 上限,以防止用户增加 gasPrice 并获得超出上限的交易优先级,这种预防措施只能缓解第一类攻击者(任意用户)的攻击, 智能合约审计 在这种情况下,矿工仍然可以攻击合约,因为无论gasPrice如何,他们都可以随意订购交易。

披露计划

更可靠的方法是尽可能使用提交-显示方案,该方案规定用户使用隐藏信息(通常是哈希)发送交易,在交易被包含在区块中后,用户发送交易以解密已发送的数据(披露阶段),该方法防止矿工和用户前瞻性交易,因为他们无法确定交易的内容,但该方法无法隐藏交易价值(在某些情况下,需要隐藏有价值的信息),ENS 智能合约允许用户发送交易,其承诺数据包括他们愿意花费的以太币数量,然后用户可以发送任何价值的交易,并且在披露阶段用户退还交易中发送的金额他们愿意花费的金额之间的差额。

相关讨论

关于 Approve 函数的“条件竞争”问题已经有过广泛的讨论:

首先是以太坊官方给出了一个建议:

上面的主要意思是限制approve函数把quota从N变成M,只从N变成0,再从0变成M,可以通过下面的语句来限制:

后来有人提出,上面的安全建议可以解决“交易订单依赖”,但如果加上require,合约将不符合ERC20标准规范。

这里reduce Approve的意思是在原有“quota”的基础上减少“quota”

笔者认为,如果将approve、增加approve、减少approve这三个函数放入一个合约中,并且这三个函数都是public的,并且approve函数中没有安全判断,那么如果用户仍然可以调用approve对于“配额”划分,此时的增减审批与不存在基本相同,此时合约仍存在“交易订单依赖问题”。

在对智能合约进行审计的过程中,笔者发现很多合约采用以下三种方式来处理“批准交易订单依赖”的问题:

1. 增加安全判断需要审批,

2、使用增减审批功能代替审批功能。 Approve 功能维护 ERC20 标准,不增加安全防范要求,

3. 使用增减审批功能代替审批功能。 Approve 功能使用 require 进行安全保护。

上面的解决方案可以在很多地方看到 bsc 智能合约审计 其中第一、二居多,第三居少。 “交易订单依赖”问题的解决可以从以下两个角度来看:

从安全角度看:第一种和第三种可以成功解决“交易顺序依赖”问题,而第二种仍然不能有效解决“交易顺序依赖”问题。

从ERC20标准来看:第一种和第三种违反ERC20标准规范,第二种符合ERC20标准规范。

小思考:加上“require”判断是为了安全,不是为了标准,你会怎么选择? (虽然这种类型的漏洞更难利用)

文末总结

合约开发者应建立一套开发标准,同时尽可能收集网络上公开的现有合约的漏洞类型、利用方式和安全修复方式,然后不断完善自己的开发体系,推出合约. 之前建议找专门的公司对合约进行安全审计,对合约进行评估。

声明:以上内容采集自VOCAL,作品版权归原创作者所有内容均以传递信息为目的,不代表本站同意其观点,不作为任何投资指导。币圈有风险,投资需谨慎
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢