官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
APE 是一种代币,旨在支持由社区控制和构建的下一步行动。它将作为一个分散的协议层,用于主导社区倡议,推动文化进入元宇宙。
零时科技区块链安全情报平台监控到消息,北京时间 2022 年 3 月 17 日,APE 遭到黑客攻击,零时科技安全团队及时对此安全事件进行分析。
零时科技安全团队通过初步追踪分析,此次攻击发生在 Ethereum 链,主要攻击信息如下:
攻击者钱包地址:
• 0x6703741e913a30D6604481472b6d81F3da45e6E8
攻击者创建的相关合约地址:
• 0x3EbD3D86f810B141F9b2e9B15961FC66364b54f3
• 0x7797A99a2e91646aBdc9DC30e838A149CCB3013B
Token 合约(漏洞合约):
• 0x025C6da5BD0e6A5dd1350fda9e3B6a614B205a1F
攻击交易流程:
• 0xeb8c3bebed11e2e4fcd30cbfc2fb3c55c4ca166003c7f7d319e78eaab9747098
漏洞相关合约:
•BeaconProxy: 0xEA47B64e1BFCCb773A0420247C0aa0a3C1D2E5C5
•NFTXVaultUpgradeable: 0x73d2ff81fcea9832fc9ee90521abde1150f6b52a
将攻击事务放到 tenderly 上分析,得下图:
攻击者主要进行了三步操作:
- 步骤1: 攻击者通过闪电贷获取 ERC 20 代币,将其兑换为 NFT
- 步骤2: 攻击者用兑换的 NFT 获取 APE 空投代币
- 步骤3: 将 NFT 归还,获取质押的 ERC 20 代币,归还闪电贷,将获利资金转到钱包地址
攻击成功原因
- 步骤1: 闪电贷(合约:NFTXVaultUpgradeable)
如上图 999 行所示:「数量+ 费用」的 vToken 会被销毁掉,所以攻击者准备的 vToken 需大于借来的 vToken 才能执行 flashLoan() 函数。
- 步骤2: 赎回 NFT(合约:NFTXVaultUpgradeable)
如图所示:redeem 函数调用 redeemTo 函数,在 2127 行销毁了代币,2134 行扣除了手续费,2137 行直接向调用者发送 NFT。
- 步骤3: 领取空投代币(合约:AirdropGraphsToken)
如图所示:在第 105 行核对 alpha.balanceOf() 和 beta.balanceOf() 以确保调用者确实是 BAYC/MAYC 持有者。然后在第 114-115 行,用清单来注记已领取的 tokenId,如此一来第 110 行中的 getClaimableTokenAmountAndGammaToClaim() 函数就能让合约调用者仅领取到可领取的 ApeCoin 数量。
- 步骤4: 铸币(合约:NFTXVaultUpgradeable)
如图所示:2089 行将 NFT 给合约,2092 行发送代币,2094 行消耗手续费。
整个 NFTXVaultUpgradeable 合约提供了 铸币、赎回 和 闪电贷 功能。攻击者利用这一套身法,轻松绕过 AirdropGraphsToken 合约对当前持有 NFT 数量的检查,获得了不错的收益。
至此,攻击者利用此攻击流程,通过对 AirdropGraphsToken、NFTXVaultUpgradeable 合约进行攻击,共获利约 35 万美元(以攻击时的市场价计算)。
通过此次攻击事件来看,攻击成功最重要的因素是 AirdropGraphsToken 合约中:没有对空投的原则做合理的效验。攻击者可以通过闪电贷兑换 NFT 来获取 APE 空投,再将 NFT 铸币归还闪电贷会对项目造成威胁。
对于此类安全事件,零时科技安全团队给出下述安全建议。
• 不依赖可被人为操控的因素对资产定价
• 运用机制判断依赖条件是否合法(如:判断依赖条件的持续时间)