注:原始论文的作者是X协议Zeitz团队的经济研究员Peter,他发现曲线协议智能合约中存在严重漏洞,为此撰写了一份报告。据介绍,虽然曲线和转弯协议经过多次审核,但其用户仍面临巨大的经济损失风险。因此,它认为,对于智能合约审计师来说,可能不可能找到利用高度专业化知识现实的漏洞。
截至发稿时,该报告已被curve正式认可,作者被判有漏洞。目前,curve正在为旧合同池部署解决方案,新合同池不受此漏洞影响。
以下是漏洞报告内容:
9月19日凌晨,我发现了曲线合约的一个漏洞。当契约的放大因子a更新时,攻击者可以提取大量的币代余额。Swerve采用曲线合约,一旦更新a系数,用户潜在损失巨大,占合同余额的36.9%。假设一个优化的攻击,这个大的任命将损失9200万美元。幸运的是,转向更新顺利通过。那天下午晚些时候,我打电话给曲线小组。几个小时后,他们确认了这个漏洞的存在,我们开始共同研究解决方案。
事实上,这种攻击可能发生在a上下调整时。然而,由于向下调整的潜在损失是更大的一个数量级,我们将重点关注此类攻击。这些攻击的严重程度与a的变化程度成正比。已证明,币的余额份额**损失受以下等式的限制,其中a_Old为初始参数值,a_New为更新后的参数值,N为合同中币代机的数量。
利用造成的损失取决于参数a的变化百分比
例如,yCurve合约的更新,发生在同一周的早些时候。该合约有n=4个代 币 类,更新从
旧=2000
更改为
新=1000
。使用方程1中的公式,攻击者可利用该漏洞提取高达12.9%的yCurve合约余额(或大约7700万美元)。
此攻击只能在预定参数a更新过程中执行。曲线合约在正常操作下不易受到攻击,因此无需采取紧急行动保护用户资金。但是,在a发生其他更改之前修复此漏洞是至关重要的(尤其是急剧向下调整a是危险的)。曲线团队正在改进更新a的程序,这将允许曲线合同以安全的方式继续更新参数a。
平均值与币代组合曲线
为了了解攻击,有必要了解下一代币的关节曲线。我将解释一些概念,以便读者形成概念性的理解。我对这个话题采取了稍微不同的方法,重点是币代的联合曲线与一组变量的平均值之间的关系。
在数学中,平均数是一组数据中代表趋势的量。因此,如果x_1是N个数集合中最小的数,x_u如果N是**数,则集合的平均值将出现在x_1和x_u之间的中间值之间。两种最常见的平均值类是算术平均值和几何平均数。
算术平均数
几何平均值
平均数在代 币 联合曲线中起到了关键作用。AMM合约允许用户交易任何组合的代 币 ,这样AMM合约代 币 余额的平均值在交易发生前后保持不变。在不同的AMM设计中,会使用不同类的平均数方法。对于 Uniswap,它使用的是未加权的几何平均数,对于 Balancer,它使用的是加权几何平均数,对于mStable,它使用的则是未加权的算术平均数。
曲线使用算术和几何平均的加权平均值,我称之为曲线平均值。曲线平均值的权重由所谓的放大参数a决定。随着a向无穷大方向增加,曲线平均值收敛到mstable使用的算术平均值。相反,如果a设置为0,则曲线的平均值将与平衡器和Uniswap使用的几何平均值相同。对于a的中间值,币曲线的接头曲线将处于这两个极端的中间。
图1:a代6013节理曲线
图1显示了四种代 币 联合曲线。Uniswap保持几何平均常数,这产生了一个非常陡峭的曲率。mStable则是算术平均值常量,它是一条直线,而Curve则位于两者之间。在参数值A=1时,Curve类似于Uniswap,在A = 10时,Curve更接近于mStable。
持有的AMM合同的平均值和价值
参考图1,我们可以看到所有四条曲线在距离图形原点45度处相交。我们可以利用从交点到原点的距离来快速衡量AMM合约币代投资组合的价值。例如,如果从交叉口到原点的距离增加20%,那么假设没有波动性损失,AMM合同的价值也将增加20%。这适用于所有四种关节曲线类。当我们考虑曲线时,此功能特别有用,因为曲线有一个独特的特性:当a更新时,其关节曲线的形状会发生变化。对于曲线,我们可以用距离原点的距离来衡量参数更新前后合约组合的价值。显然,如果在更新a之后这个距离显著减少,这将是一个严重的问题。
关于参数a的盈亏平衡更新
再次参考图1,假设曲线合同币代的余额正好位于45度线的交点处。当代表币的所有曲线以一比一的价格比率交易时,就会发生这种情况。从该起点更新a时,币货物不存在丢失风险。例如,假设曲线从该点开始,并将参数a_Old=10设置为a_UNew=1。此更新不会更改从并集曲线到原点的距离。因此,参数变化将完全无害,不会使曲线流动性提供者(LP)面临财务损失的风险。直观地看,如果初始余额不是完全在交点处,而是接近交点,损失的风险还是很小的。
关于参数a的丢失更新
现在让我们看看图2。此图显示了攻击者如何在更新a时操纵初始条件以获得巨大利润。为了说明,我展示了从一个_Old=10到一个_Unew=1,而不是从一个_Old=1000到一个_Unew=100。然而,事实证明,脆弱性的严重程度只取决于新旧比率,所以这个数字准确地描述了转向的情况。此外,图中显示的攻击只捕获了合同**币库存的15%。完全优化的攻击将以更极端的数量进行交易,从而捕获币代高达36.9%的库存。
图2:添加恶意事务之间的更改
假设Curve合约余额最初位于45度线的交点处,且初始参数值为A_old=10。现在假设一个攻击者在两笔恶意交易之间夹了一个参数更新。在第一次恶意交易中,攻击者出售大量代 币 ,以导致库存失衡。接下来,攻击者将触发一个更新,更新的值为10和1。如图所示,这会改变曲线的形状。**,攻击者以更低的价格买回他出售的代 币 。此操作将使合约沿45度线返回到完全平衡的状态。如图所示,此次攻击将导致AMM代 币 库存的15%丢失。
利用漏洞的可行性
这样的攻击真的可能吗?令人惊讶的是,答案是肯定的。曲线合同需要提前几天安排a的变更,并通过中心化的连锁治理流程达成共识。但是,一旦通过治理批准了a中的更改,并且超过了激活截止日期,契约允许任何调用方触发更新。因此,攻击者可以自由的从Uniswap快速租借大量稳定的币,卖给curve触发极度失衡,触发a的更新,然后从curve购买稳定的币获取暴利。完全优化的攻击将涉及更多细节。我上面描述的简单攻击就足以捕获大部分潜在利润。
修复智能合约逻辑以进行更改
目前,curve契约有两个生产版本。对于没有修补的旧合同,以上是脆弱性原则。对于较新的合同来说,仍然存在一个潜在的漏洞,尽管不那么严重。我将首先描述对旧合同的修改建议。
修复旧曲线合同
在旧的曲线契约中,a的变化是以一个大的离散步长发生的。此外,契约逻辑允许攻击者在单个事务中执行具有不同a值的事务。特别是,攻击者可以使用其初始事务来强制库存极不平衡,然后触发a的更改,然后使用更新的a值执行更多事务。这使得攻击者能够无风险地执行涉及数亿个事务的整个攻击。为了解决这个问题,我建议更新旧的契约,以便只有受信任的多签名帐户才能激活对a的更新。
此外,激活a需要检查币代的余额,以确认自广播参数更新事务的时间点以来,币代的余额没有发生显著变化。这种平衡检查可以防止流氓矿工的攻击。特别是,流氓矿工可以重新排序事务,以便在更新a之前执行一个大事务,然后在更新a之后执行另一个大事务。
平衡检查可防止在契约处于意外不平衡状态时激活对的更改,这足以保护曲线LP免受此类攻击。
固定新曲线合同
在较新的曲线契约中,a的变化是在每次交易开始前以一系列离散的小步骤逐渐发生的。我的理解是每个区块只能调整一步。此外,在执行任何交易之前,还需要进行任何调整。这足以抵抗普通的袭击者,但不一定能对付流氓矿工。特别是,一个流氓矿工可以连续铸造两个区块,并在这两个区块中插入恶意交易。这将允许矿工在第一个区块中以较高的a值和第二个区块中的较低a值进行初始交易。矿工们试图让这些无赖的攻击变得更糟。只要a还在更新过程中,流氓矿工就可以继续尝试挖矿两个区块序列。
为了保护这些较新的合同,我建议将a中的步长减少到每个块不超过0.1%。为什么一小步有帮助?这涉及到一个我还没有介绍的因素——曲线合同会收取费用,因为这个费用,任何交易都会导致代表币的联合曲线与原点略有偏差。这也适用于攻击者的大额交易,这使得攻击的利润略低。如果a的变化足够小,完全优化的攻击所带来的利润将被攻击者支付给合约的成本所抵消。因此,攻击者不再可能通过在两个事务之间混合更改来获利。
安全审计与智能合约设计的经验教训
对于这种攻击,需要设计者深刻理解币代的关节曲线。对于聪明的合同审计人员来说,寻找高度专业化知识的漏洞可能并不现实。事实上,curve合同已经通过了几次安全审核,在我撰写本文时,swerve刚刚通过了另一次审核。在我看来,一个通用的漏洞审计程序,可以通过暴力手段而不是理论来检测是非常有用的。为了检测这种漏洞,我建议在币的联合曲线审计中加入任何两步交易程序的模拟。在这些过程中,审计员将针对契约运行一个随机事务,触发一个智能契约操作,然后运行另一个随机事务。在此,智能合约操作将激活对a的更新。对于此漏洞,此模糊测试过程将揭示灾难性合同损失的场景。然后审核员可以进一步调查以了解根本原因。
这有助于聪明的合同设计者理解审计的局限性。当合同允许一次执行一系列复杂的交互时,综合模糊测试变得不可行。问题是,用户交互有太多可能的组合,我们无法探索所有的可能性。因此,限制用户在短时间内可以执行的操作的数量和类是有帮助的。这里的想法是避免创建一个非常复杂的智能合约,而不能用暴力进行审计。
感谢curve团队为我的漏洞报告工作支付了非常慷慨的漏洞奖金。另外,我在0x的好友Greg Hysen,他挖矿了curve的代码,帮助我理解更新a的智能合约的逻辑。
文章链接:https://www.btchangqing.cn/117401.html
更新时间:2021年06月12日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。