原文作者:Max Cobo 安全总监
原文来源:Cobo Global
受 Moledao 邀请,Cobo 安全总监 Max 近日通过网络为社区成员分享了一堂 DeFi 安全课。Max 为大家回顾了过去一年多 Web3 行业遭遇的重大安全事件,并着重探讨了这些安全事件发生的原因以及如何规避,总结了常见智能合约的安全漏洞及预防措施,还对项目方和一般用户给出了一些安全建议。在此,我们将 Max 分享的内容分为两篇发布,供 DeFi 爱好者收藏。
根据慢雾统计, 2022 年发生了 300 多起区块链安全事件,总涉及金额达 43 亿美元。
本文详细讲解以下八个典型案例,这些案例损失金额基本都是大于 1 亿美元,其中 Ankr 涉及的金额虽然较小,但也是一个比较典型的案例。
Ronin Bridge
事件回顾:
2022 年 3 月 23 日,NFT 游戏 Axie Infinity 侧链 Ronin Network 表示,早些时候发现,Sky Mavis 的 Ronin 验证器节点和 Axie DAO 验证器节点遭到入侵,导致在两笔交易中桥接了 17.36 万枚 ETH(当前价值逾 5.9 亿美元)和 2550 万 USD。
美国财政部表示,朝鲜黑客组织 Lazarus 与 AxieInfinity Ronin Network 6.25 亿美元的黑客事件有关。
据媒体引述知情人士透露,黑客通过领英联系了 Axie Infinity 开发商 Sky Mavis 公司的一名员工,经过几轮面试告知其以高薪被录用。随后该员工下载了以 PDF 文档呈现的伪造的 “Offer” 录取信,导致黑客软件渗透到 Ronin 的系统,从而黑客攻击并接管 Ronin 网络上九个验证器中的四个,只差一个验证器无法完全控制。随后,黑客又控制了未撤销权限的 Axie DAO 来实现最终的入侵。
朝鲜黑客团体已经存在很长时间,在 Web3 技术还未盛行的时候,已有多起新闻报道一些银行或大型商业机构遭到入侵。现在,越来越多传统的黑客团体,以及一些国家级势力,已从以往盗取数据和信用卡信息的行为,演变成攻击区块链项目,直接获得实际利益。
这次事件的攻击方式非常典型,在传统的安全领域称作 APT,即高级持续性威胁。黑客团体一旦确定目标,就会通过社会工程学等方法,先控制目标组织内的一台电脑,作为跳板点,以进一步渗透,最终达成攻击目的。
此事件也暴露出了 Axie Infinity 公司员工安全意识较弱,以及公司内部安全体系存在一些问题。
Wormhole
事件回顾:
根据 Wormhole 发布针对该事件的报告中指出,此次事件中 Wormhole 的漏洞具体是 Solana 端核心 Wormhole 合约的签名验证代码存在错误,允许攻击者伪造来自“监护人”的消息来铸造 Wormhole 包装的 ETH,共损失约 12 万枚 ETH。
Jump Crypto 投入 12 万枚以太坊以弥补跨链桥 Wormhole 的被盗损失,支持 Wormhole 继续发展
Wormhole 遇到的问题主要是代码层面的,因为它使用了一些废弃的函数。拿以太坊举例,初期版本的 Solidity 中,有些函数设计不完善,随着后续的更新逐渐被废弃。其他生态中也是一样的情况。因此,建议开发者使用最新版本,以避免出现类似问题。
Nomad Bridge
事件回顾:
跨链互操作协议 Nomad 桥遭受黑客攻击,是由于 Nomad 桥 Replica 合约在初始化时可信根被设置为 0x 0 ,且在进行可信根修改时并未将旧根失效,导致了攻击者可以构造任意消息对桥进行资金窃取,攻击者能够从攻击中榨取超过 1.9 亿美元的价值。
黑客正是利用该漏洞,找一笔有效交易反复发送构造好的交易数据抽取跨链桥被锁定的资金,从而导致 Nomad 上锁定的资金被几乎全数盗走。
派盾(PeckShield)监测显示,Nomad 被攻击事件中,约 41 个地址获利约 1.52 亿美元(占 80% ) ,包括约 7 个 MEV 机器人(约 710 万美元)、Rari Capital 黑客(约 340 万美元)和 6 个白帽黑客(约 820 万美元),约 1 0% 的 ENS 域名地址获利 610 万美元。
Nomad Bridge 这个事件很典型,本质上是因为它的设置在初始化的时候存在一些问题,如果黑客找到一批曾经有效的交易然后重新广播出去的话,那么那笔有效交易涉及的资金就会重新再去执行,并将收益返回给黑客。在整个以太坊生态中,参与者有很多,除了项目方和参与者之外,还有很多 MEV 机器人。在这个案例中,当自动化的机器人发现了这笔攻击交易无论谁广播出去,发出广播这个人都会得到收益。只要能覆盖 Gas 费,大家都多去广播,所以整个事件就变成了一个抢钱事件。这次事件涉及到的地址非常多,虽然事后项目方找到一些 ENS 以及一些白帽黑客的地址,追回一部分资金,但绝大部分资金都没有被追回来。如果黑客用一个非常干净的设备,非常干净的地址的话,是很难从一些数据关联的角度找到背后的人是谁。
虽说像 Google、微软、Facebook、阿里、腾讯等都经受过黑客攻击,但是他们的程序都是闭源的;而在以太坊生态,或者是整个智能合约生态,很多程序都是开源的,对于黑客来讲,分析开源的实际上是相对简单的。所以当项目有漏洞的时候,基本就宣布了这个项目的失败。
Beanstalk
事件回顾:
基于以太坊的算法稳定币项目 Beanstalk Farms 在这次闪电贷攻击中的损失约为 1.82 亿美元,具体资产包括 79238241 枚 BEAN 3 CRV-f、 1637956 枚 BEANLUSD-f、 36084584 枚 BEAN 和 0.54 枚 UNI-V2_WETH_BEAN。攻击者获利超 8000 万美元,包括约 24830 枚以太坊以及 3600 万枚 BEAN 。
本次攻击的主要原因在于提案的投票与执行两阶段间无时间间隔,导致攻击者在完成投票后未经社区审核可以直接执行恶意提案。
攻击过程:
提前一天购买代币并质押获取提案资格,创建恶意提案合约;
通过闪电贷获取大量代币投票恶意合约;
恶意合约执行,完成套利。
Beanstalk 也是很典型的案例,黑客没有用到什么漏洞,只是利用了项目的一个机制。这个项目的机制是任何人抵押代币之后可以提交提案,提案也是一个合约。攻击者在实施攻击的前一天买了一定的代币,然后提交了一个恶意的提案,提案在 24 小时之后就可以被投票,投完票之后没有任何时间窗口,没有任何时间锁,投票被通过,就可以立刻执行。
现在很多项目都讲社区自治,用纯去中心化的方式,就会出现很多问题。比如提案,每一个提案是否有审核机制?一个提案到底是正常的提案还是恶意的提案?提案如果被通过,闪电贷过来直接抵押投票就有用,还是创建一种机制必须要 staking 一定的时间,甚至是发放投票代币才可以?以及提案通过之后到执行这个阶段,到底应不应该有一个时间锁?理论上是应该有的,这样的话大家只要看在时间锁内的操作,给了大家一个出逃的机会,如果没有的话,假如执行的是一个恶意操作,谁也跑不了。
Wintermute
事件回顾:
2022 年 9 月 21 日早上,Evgeny Gaevoy 在推特上公布被盗事件进展,称 Wintermute 确实曾于 6 月份使用 Profanity 和一个内部工具来创建钱包地址。这样做的原因是优化手续费,而不只是为了创建靓号,并称在上周得知 Profanity 存在漏洞后,Wintermute 加速弃用旧密钥。但由于内部(人为)错误,调用了错误的函数,因此 Wintermute 没有删除受感染地址的签名和执行操作。
我们可以看到网上很多前面有八个 0 这种号,以太坊地址中的 0 越多,手续费就越低,所以很多 MEV 的抢跑机器人和项目方都比较喜欢用,尤其是一些相对高频操作的。
Wintermute 是一家做市商,当时他们把很多代币发到一个合约里,用靓号生成程序生成合约地址。这个合约的 Owner 也是一个靓号,刚好非常不巧的是这个 Owner 靓号私钥被人给强算出来了,合约里的钱直接都被转走了。
当我们在网上使用一种开源工具的时候,一定要有接受可能带来一些不好后果的准备。当使用一个外部程序的时候,强烈建议要对它进行一个相对比较充分的安全评估。
Harmony Bridge
事件回顾:
Horizon 跨链桥损失逾 1 亿美元,包括超 1.3 万枚以太坊及 5000 枚 BNB。
Harmony 创始人称,Horizon 被攻击是由私钥泄露导致。
据彭博社报道,根据区块链研究公司 Elliptic 的最新分析,被称为 Lazarus Group 的疑似朝鲜黑客组织被认为是在 Harmony 跨链桥 Horizon 盗取 1 亿美元的幕后黑手。Elliptic 的分析强调了此次黑客事件中指向 Lazarus Group 的关键因素,包括自动存入 Tornado.Cash 以模拟 Ronin Bridge 事件的程序化洗钱,以及盗窃的时间等。
Harmony 这个事件没有公布具体的细节,但最后的报道说可能还是朝鲜黑客集团,如果是朝鲜黑客组织的话,与 Ronin Bridge 攻击手法是一致的。朝鲜的黑客组织这些年非常活跃,尤其是针对币圈,最近很多公司都受到过他们的钓鱼攻击。
Ankr
事件回顾:
Ankr: Deployer update 合约。
Ankr: Deployer 给 Ankr Exploiter 转了 BNB。
Ankr Exploiter 通过更新后合约的铸币方法进行铸币。
被凭空铸造出 10 万亿枚 aBNBc,黑客 A 将 aBNBc 通过 PancakeSwap 兑换出 500 万枚 USDC,掏空了交易池,导致 aBNBc 几乎归零;,黑客 A 后续将币跨到以太坊,并转入 Tornado Cash。
黑客 A 铸币之后的约半小时,aBNBc 暴跌,产生了套利机会,套利者 B 利用借贷协议 Helio 的预言机 6 小时平均加时权重的设置,利用 aBNBc 在市场上和在 Helio 系统中的价差将其换成 hBNB,并将 hBNB 质押换出稳定币 HAY,并将其换成 BNB 和 USDC ,总共套出超过 1700 万美元等值的稳定币和 BNB,基本掏空 HAY 的交易对池子。
Ankr 将从 1500 万美元恢复基金中调资购买增发的 HAY 以补偿攻击事件受害者
Ankr 的整体的损失不大,我们单独来说一下。因为现在很多 DeFi 的项目都是乐高积木,A 依赖 B、B 依赖 C,各种组装,那么当链条中其中某一环节出现问题的时候,整个链条中的上游下游可能全部都受影响。
后来 Ankr 发文说明了事件发生的缘由:归结于一个已离职的内部员工作恶。暴露的问题:首先,Staking 合约 Owner 是一个 EOA 账户而不是多签,本质上来讲谁掌握私钥,谁就能控制智能合约,这是非常不安全的;其次,Deployer 的私钥又能被所谓的核心员工所掌控,甚至是离职之后依然可用;也就是说整个内部安全体系基本没有起到什么作用。
Mango
事件回顾:
黑客使用了两个账户一共 1000 万 USDT 起始资金。
第一步,黑客首先向 Mango 交易平台 A、B 地址分别转入 500 万美元。
第二步,黑客通过 A 地址在 Mango 上利用 MNGO 永续合约做空平台 Token MNGO,开仓价格 0.0382 美元,空单头寸 4.83 亿个;与此同时,黑客在 B 地址做多 MNGO,开仓价格 0.0382 美元,多单头寸 4.83 亿个。(多空双开的原因在于,Mango 平台深度较差,如果不和自己做对手盘,仓位就很难开到这么高)
第三步,黑客转身拉盘多个平台(FTX、Ascendex)上 MNGO 的现货价格,致使价格出现 5-10 倍的增长,该价格通过 Pyth 预言机传递到 Mango 交易平台,进一步推动价格上涨,最终 Mango 平台上 MNGO 价格从 0.0382 美元拉升至最高 0.91 美元。
第四步,黑客的多头头寸收益为 4.83 亿个*( 0.91 美元 - 0.0382 美元)= 4.2 亿美元,黑客再利用账户净资产从 Mango 进行借贷。好在平台流动性不足,黑客最终只借出近 1.15 亿美元资
攻击发生后,黑客发布了一项新提案,表示希望官方利用国库资金( 7000 万美元)偿还协议坏账。据了解,目前国库资金约为 1.44 亿美元,其中包括价值 8850 万美元的 MNGO Token 以及近 6000 万美元的 USDC。黑客表示,如果官方同意上述方案,将返还部分被盗资金,同时希望不会被进行刑事调查或冻结资金。“如果这个提案通过,我将把这个账户中的 MSOL、SOL 和 MNGO 发送到 Mango 团队公布的地址。Mango 国库将用于覆盖协议中剩余的坏账,所有坏账的用户将得到完整补偿......一旦 Token 如上述所述被送回,将不会进行任何刑事调查或冻结资金。”
据 CoinDesk 报道,此前公布身份的 Mango 攻击者 Avraham Eisenberg 2022 年 12 月 26 日在波多黎各被捕,Avraham Eisenberg 面临商品欺诈和商品操纵的指控,这些指控可能会受到罚款、监禁的惩罚。
Mango 这个事件可以定义成安全事件,也可以定义为套利行为,因为问题不是安全漏洞,而是业务模式漏洞。其交易品类中包括 BTC、ETH 等市值较高的币种,也有 MNGO 这样的小币种,而这种小币种在熊市流动性不足时,只要花很少的钱可能就把币价拉起来,这种币价操控行为使永续合约的平台的头寸管理变得十分困难。
所以作为项目方,要充分考虑到各种场景,在测试的时候,要把所有超出预期的场景都包含在测试用例中。
而作为普通用户,去参与某个项目的时候,不能只盯着收益,还要多考虑考虑本金安全。抛开安全漏洞层面,要花心思去看一下它的业务模式有没有一些漏洞可能被利用。