本文来自Gelato Network,原文作者:Gelato Network,由 Odaily星球日报译者 Katie 辜编译。
安全事件频发, 12 月 22 日,流动性管理协议 Visor Finance 就遭黑客攻击。本月中旬,Gelato 团队被提醒在 Sorbet Finance 使用的一个智能合约中存在一个严重的漏洞。该合约的设计目的是让用户只需使用一个代币就可以从 Sorbet Finance 进入和退出 G-UNI 矿池,而不是从一开始就需要提供两个相等比例的代币。
当晚,Gelato 团队成功执行了一次“白帽行动”,挽救了用户的损失,总计约 2600 万美元。这些资金被发送到一个安全的托管合约中,只有这些资金的原始所有者才能收回这些资金。
Sorbet Finance、G-UNI 或 Gelato Network 的其它智能合约或组件均未受到影响。特别是 G-UNI 矿池是安全的。
对于那些尚未撤销智能合约审批的用户来说,关键的风险仍然存在。因此,我们强烈敦促与 Sorbet Finance 矿池页面进行交互的用户在将任何代币发送到他们的钱包之前,先撤销他们的批准。
截至 12 月 20 日欧洲中部时间 12 点,除 66 个地址外,所有地址都成功取消了他们的存款。我们将继续积极监控并尽最大努力挽救受影响的钱包,但为了确保资金的最终安全,受影响的用户必须自行撤销对 Sorbet 的批准。
目前,Gelato 团队成功执行了另外 35 项白帽拯救交易,从面临风险的钱包中又保护了 100 万美元。除 66 名用户外,所有用户都尚未撤销对 Sorbet 的批准。
技术细节
包含该漏洞的智能合约与 12 月 10 日发布的 dYdX 漏洞报告中披露的漏洞相似。多亏了这份报告和我们的线人,我们发现了 Sorbet 上的漏洞并在黑客利用它之前进行了修正。
dYdX 的情况是被告知代理智能合约存在一个关键漏洞,该合约自 11 月 24 日以来一直在处理 dYdX 交易所的存款。dYdX 团队执行了一个白帽来拯救用户资金,总计约 200 万美元。这些资金被送到一个非托管的托管合约,只有这些资金的原始所有者可以取回它们。
我们敦促所有读到这篇文章的 Dapp 开发者仔细检查他们的智能合约,以防他们在智能合约层面上与 DEX 聚合器交互,以确保他们的系统没有与我们类似的漏洞。
如何避开 Bug
Gelato 开发团队非常清楚 Solidity 中的低级调用(如 .call() )的危险性。这个 bug 本不应该出现在产品中,但它却出现了。这表明我们在智能合约测试和审查过程中出现了一个严重的错误。这是 Gelato 存在两年半以来的第一个安全漏洞,我们将通过维护和加强我们在未来所有智能合约发布中一贯的高标准,确保这将是最后一个漏洞。
与之前经过审计和实战测试的版本相比,处于风险中的智能合约只包含一个小更改。这导致我们的智能合约开发团队过早地将其发布,而没有遵循我们通常遵循的严格的安全审查过程。
这一事件其实是可以避免的,我们已经采取了一些措施,以确保这样的错误永远不会再出现。
我们的“预防针”
我们坚持 Web3 的最高安全标准。通过这次事件,我们了解到,无论多么小的变化,无论一个合约有多少次经过实战考验的历史,它都必须在投入使用之前进行彻底的审查和审计。
为避免此类漏洞再次发生,我们计划实施以下安全措施:
对所有新合约或由多个团队成员对这些合约的所有修改进行彻底的审查,无论修改多微小;
密切监控风险模式和之前报告的智能合约漏洞,如 dYdX 报告,在这个案例中,正是我们的漏洞;
评估新部署或合约修改的最坏情况,并设计应对措施;
创建 bug 奖励机制,鼓励外部开发人员在代码公开之前发现代码中的错误;
对已经投产几个月没有任何事故的智能合约进行持续的代码审查;
在将新特性投入使用之前,使用我们集成的协议来检查它们的集成安全性。
Bug 猎人赏金
Gelato 团队非常感谢那个提醒注意这个 bug 的人。使团队能够迅速采取行动,帮助受影响的用户挽回 2600 万美元的损失。
Gelato 团队将提出一个治理建议,向一路上帮助过我们的社区成员发放的bug奖励。
偿还被盗资金
我们成功地在白帽袭击时挽救所有损失。然而,直到他们撤销对 Sorbet Finance 的批准之前,用户的资金仍然很容易受到影响。尽管我们尽了最大的努力,并让多个回收机器人持续运行,拯救那些处于风险中的资金,总金额约为 744 万美元被恶意搜索者窃取,这些搜索者能够在一开始的少量交易中抢先我们的机器人。从那时起,我们优化了我们的系统,并在大多数交易中击败了恶意搜索者。
Gelato 团队将创建一份治理提案,以全额补偿这些损失,并由 GEL 持有人投票表决。由于可能出现的“假被盗”的情况,事件发生后的时间已经过去了,并且团队已经竭尽全力通知了有风险的地址,我们将不再赔偿 12 月 20 日下午 13:00 以后发生的任何损失。
尽管如此,我们将继续运营多个白帽机器人。在截止日期之后成功拯救的资金,减去机器人运营商在营救交易中产生的矿工费后,将被退还给用户。
总结
尽管存在漏洞,也未能遵守我们所追求的最高安全标准,但我们成功地实施了多次白帽攻击,挽救了超过 2700 万用户的资金。Gelato 团队迅速地处理了漏洞,恢复机器人和批准撤销用户界面,Gelato 团队将继续优化,为 Web3 生态系统带来最好的 Web3 自动化工具。