SharkTeam:十大智能合约安全威胁之提案攻击
问:我们常提到的智能合约漏洞真的是实际中威胁最大、发生最频繁的安全漏洞吗?
答:完全不是那样。例如“溢出”、“外部调用”等常提到的智能合约安全漏洞并不是最常发生,威胁最大的。
到底哪些安全威胁从发生频率和危害性上能称为Top10的呢?SharkTeam合约安全系列课程之【十大智能合约安全威胁】和您一起讨论和深入。第九课【详解提案攻击】。
在去中心化自治组织 (DAO)中,参与者会提出关于未来协议升级、资金管理等一些提案。为了让提案生效,需要对其进行投票。在DAO中,参与者要想参与提案投票,需要持有对应的治理代币。拥有治理代币的持有者,可以进行发起提案、投票、执行提案一系列活动。
虽然提案治理有利于建设去中心化的未来,但是也存在一些缺陷。治理代币持有比例较小的用户对参与治理采取理性冷漠态度,这进一步导致 DAO 当中投票权的中心化,转而服务于少数人利益。持有较多治理代币的用户,拥有过多的投票权。
正如上面提及的一些缺陷,提案常常存在以下风险:
因此,攻击者能够通过获得足够的投票权来重塑规则,或者影响足够的代币持有者,对提案进行有偏见的投票。这样的行为,我们称之为提案攻击。
2022年4月17日,算法稳定币项目Beanstalk Farms遭黑客攻击,损失超过8000万美元,包括 24830 ETH 和 3600 万 BEAN。
提案攻击过程如下:
我们经过分析发现,投票合约中的票数是由账户中的BEAN3CRV-f代币持有量计算得到的。
攻击者利用了该漏洞,通过闪电贷获得大量代币,将这些代币投入到矿池中,临时获得大量的BEAN3CRV-f代币,从而获得了绝对的票数优势,使得自己的提案可以由自己决定,而不需要其他人的投票。最终盗取了大量的Token
2022年5月9日消息,Fortress Loans遭到黑客攻击。此次攻击事件损失了1048.1 ETH以及40万DAI。
提案攻击过程如下:
该提案在加入到执行队列之前,接收到2次投票,然后将提案添加到队列中。
将提案添加到队列中,调用queue函数。
我们知道支持的票数只需要不低于400,000 FTS,投票就可以添加到执行队列中等待执行。两次投票支持的总票数为296,193 + 119,774 = 415,917 FTS > 400,000 FTS,并且eta一直为0,因此提案的状态应该为Suceeed,可以被加入到执行队列中。
本次提案攻击发生的根本原因有两个:
(1)价格预言机计算价格的数据来源Chain合约缺少签名地址的验证以及power的验证;
(2)治理合约中,受到FTS价格影响,提案投票的最低支持票数(FTS数量)的总价值低,使得提案可以在付出较小的代价下通过并执行。
在DAO中,治理代币分配的市场机制无法区分想要为项目做出宝贵贡献的用户和高度重视破坏或以其他方式控制项目的攻击者,这两个群体都是愿意高价格购买大量的治理代币。我们有三个明确的选择:降低攻击的价值,增加获得投票权的成本,以及增加执行攻击的成本。
最后,推荐项目方选择第三方审计机构对项目进行审计后再上线,进一步提高项目的安全性,规避安全风险。