作者 | Mika Honkasalo
摘要
越来越多的人希望通过攻击智能合约来窃取资金,他们正在利用当智能合约组合在一起时出现的漏洞进行攻击。
2020 年,对 DeFi 的攻击中,被套取或盗取的总金额已经达到了 3600 万美元。但因为 dForce 的攻击者退还了被盗的 2500 万美元,所以实际金额大约有 1100 万美元。
与以太坊早期相比,每次黑客攻击的平均损失价值已经明显下降。在 2020 年的 10 次攻击中,有 8 次的攻击金额低于 100 万美元。
与传统的网络犯罪相比,区块链上的信息对攻击者来说更有价值,因为对智能合约的成功攻击可以带来直接的经济回报。传统被黑客攻击的信息,如被盗取的个人信息,还需要通过出售来赚钱,但智能合约上是直接存有资产的。
在以太坊早期,大多数攻击都是基于找到个别漏洞,让攻击者有能力冻结或耗尽智能合约。2016 年臭名昭著的 DAO 黑客事件就是如此,1.6 亿美元的 ETH 被盗,以太坊最终因此分叉。同样,2017 年的 Parity 多签袭击让黑客盗取了 3000 万美元,Parity 钱包中 1.5 亿美元被冻结,都是这类漏洞造成的后果。
这类智能合约的漏洞仍不时被人利用。最近,一名攻击者成功地从代币合约中窃取了所有的 VETH,仅通过耗尽 VETH-ETH Uniswap 池就获利了 90 万美元。但这是 VETH 造成的一个简单失误,因为 VETH 修改 ERC20 代币标准的方式有逻辑上的错误。
总的来说,现在的安全性有所提高,特别是那些关注度比较高的项目。它们的安全性提升是由于用户对审计的期望和围绕测试的工具改进推动的。最近 DeFi 中最大的安全问题是 dForce 2500 万美元的数字资产在借贷市场中被盗。然而,由于攻击者的 IP 地址被发现并与新加坡警方共享,因此这些资金被退了回去。
dForce 的攻击也可以认为是开发团队特别严重的疏忽造成的结果,因为被利用的漏洞是重入 (re-entrancy)。重入攻击是 DAO 被耗尽的原因,这也一直是开发者在与 ERC777 代币交互时需要考虑的一个众所周知的问题。
ERC777 代币的一个显著特点是可以通知将接收或发送资金的智能合约--并允许合约根据这些信息采取行动。如允许用户从合约中提取所有资金,这个例子就展示了合约为何容易受到重入攻击。
想象一下,一个合约有以下四个提现步骤:
用户调用合同,准备从合同中提取所有的资金。
合约检查用户在合约中是否有资金。
合约将用户在合约中的资金发送给用户。
合约自行更新用户在合约中没有资金。
重入漏洞允许恶意用户在合同完全执行之前再次调用合同( " 重入 ")。在上面的例子中,攻击者可以在第三步和第四步之间重新进入合约,并在用户的余额更新之前再次提取。通过重复这个过程,他们可以从合约中提取所有存在的资金。
这个原理被用来攻击 dForce,当合约认为用户在持续增加 imBTC 抵押品(一种 ERC777 代币)数量的时候--然后合约就会允许用户从系统中借到更多资金。攻击者将他们假的 imBTC 抵押品增加到远远超过 2500 万美元,然后以借贷交易的方式提取出 dForce 中的所有流动资金。
通过可组合性 (composability) 进行黑客攻击
区块链上的智能合约是基于去信任 (permissionless) 来和用户以及其他智能合约交互的。对于那些设计智能合约的人来说,很难考虑到未来有人可能与他们的合约进行交互的每一种方式。其他人可以构建一种智能合约,以一种原作者不希望看到的方式与合约进行交互。
一个用户使用在 dForce 攻击中基于 ERC-777 标准的相同漏洞,从 imBTC-ETH Uniswap 池中抽走了 22 万美元。在 Uniswap 的案例中,攻击者从 ETH-imBTC 代币池中移出了 ETH,但 imBTC 代币余额并没有增加。这样的操作通常会增加 ETH 的价格。
与 dForce 案例不同的是,Uniswap 的开发团队在这并没有真正的责任,他们几乎不可能阻止人们落入这种类型的陷阱。即使 Uniswap 团队确保他们的交互界面不允许用户将流动性添加到一个可能被耗尽的池中,他们也无法阻止其他交互界面建立在允许它的智能合约之上。事实上,这种特殊的攻击方式在多年前就已经被广泛讨论过。
最近 6 月 18 日针对 Balancer 的攻击,就是一个类似的在特定市场中利用非标准编程模式的例子。STA 是一种 ERC20 代币,有一种额外的通缩模型,即从每次转账中抽取 1% 的费用。攻击者使用智能合约在单笔交易中自动执行多个操作将 WETH 与 STA 代币来回交换 24 次,耗尽了其中一个 Balancer 流动性池中的 STA 代币,直到池中只剩下 0.000000000000000001 STA (1 个 weiSTA)。Balancer 池没有意识到 STA 的通缩模型,并根据 1 weiSTA 为其资产设定了一个新的价格。之后攻击者对池中的 WETH、LINK、SNX 和 WBTC 进行了交易。通过这次攻击,使两个池子的资金损失超过了 50 万美金。
一天后,Balancer 遭受了第二个漏洞问题,同样是由于与其他智能合约交互的意外行为造成的。Compound 的代币分发要求用户通过与 Compound 的智能合约交互来领取自己的 COMP。想要同时获得 COMP 和 BAL(通过提供流动性赚取的 Balancer 代币) 的用户要用 COMP 创建流动性池,这样他们就有资格获得这两种代币。
攻击者意识到,Balancer 流动性池中的资产所产生的新 COMP 并不属于任何人,所以攻击者可以进入一个池中,获得这些可用的 COMP 代币,然后再带着比他们放入流动性池更多的钱离开。就像现在发现的漏洞情况一样,攻击者利用闪电贷来最大化自己的资本,然后获取最大收益。
利用区块链的独特属性来进行攻击
第三类攻击涉及利用区块链本身的属性。
一个长期遭受此类问题困扰的协议是 Synthetix。从 2019 年 9 月到 2020 年 2 月,这个协议的套利机器人不断地在预言机更新之前运行。在 Synthetix 中,交易不是买卖双方通过匹配进行交易,而是针对预言机提供的价格反馈进行交易,流动性由 SNX 代币持有者提供。
当 Synthetix 的预言机在链上发布价格反馈时,机器人会通过支付高额的交易费用,在预言机有机会更新价格之前被纳入以太坊区块之中。因为这种抢占先机的套利行为,Synthetix 的交易量在单日最高达到了 6900 万美元,而如今没有套利机会的 Synthetix 平均交易量仅为 150 万美元。
在 3 月 12 日(" 黑色星期四”),资金库 (vault) 的所有者在 MakerDAO 清算中意外损失 830 万美元,交易费用也是造成这次意外的原因之一。当 MakerDAO 的资金库 (用户存放抵押品并生成 Dai 的地方) 的抵押品不足时,它们的抵押品(如 ETH)就会被拍卖,筹集 DAI 并偿还被清算资金库的债务。通常情况下,拍卖中的中标者(keepers)会用 DAI 来换取金库中的 ETH,然后这些 DAI 会被销毁掉。一旦债务被还清,资金库的原主人就会收到剩余的 ETH。
3 月 12 日的时候由于 ETH 价格突然下跌超过 50%,很多资金库进入清算程序。与此同时,以太坊的网络变得非常拥堵,gas 飙升至 400gwei 或正常价格的 20 倍,这导致大多数 keepers 无法即时报价。有一位 keeper 持续触发清算,并以 0 美元的竞价赢得了可用的 ETH。
将来存在的治理攻击?
随着项目从开发团队的集中控制转向代币持有者社区的去中心化治理,治理攻击的问题可能会变得更加普遍。理论上,区块链可能成为一个通过链上买选票来实现贿赂的绝佳工具。
买选票可以用于敌意收购,让有敌意的一方购买另一个项目的多数投票权(代币)更便宜。例如,一个借贷协议可以向另一个借贷协议的代币持有者提供折扣,让他们出售另一协议的代币来换取协议自己的代币。
敌意收购的例子已经发生在 Steemit 上。当这个社交媒体平台背后的团队将 Steemit 出售给 Tron 时,社区试图让 Tron 拥有的代币投票权失效,但这种努力最终被火币和币安等大型交易所的投票权所消除。
随着 DeFi 中工具的改进,攻击者的“工具箱”也变得越来越高级。闪电贷让任何拥有必要专业知识的人都可以攻击其中的一个系统,并获得更多的资本来实现利润最大化。
如果说从 COMP 和 BAL 代币发行中可以学到一件事,那就是无论什么激励方案,只要是有利可图,总会有人去钻空子。
Mika Honkasalo 作者
Liam 翻译
Liam 编辑
内容仅供参考 不作为投资建议 风险自担
版权所有 未经允许 严禁转载
☟☟☟
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:分享区块链领域专业、前沿、有趣的内容
评论0条