事件背景
零时科技区块链安全情报平台监控到消息,北京时间2022年12月2日,
Web3基础设施提供商Ankr的部署者密钥疑似被泄露,10万亿枚aBNBc代币在交易:0xe367…6e33中铸造,并发送到0xf3a4开头的地址,这些aBNBc代币正在兑换成USDC和WBNB。随后,0xf3a4开头的地址通过Tornado和cBridge转出资金。
被盗分析
Ankr Token合约部署由代理合约部署,当管理员权限(代理合约管理员权限或者Token合约管理员权限)被黑客控制,都有可能造成任意铸造代币,攻击者是通过怎样的流程将资金转出?
通过攻击者铸币交易入手:
0xe367d05e7ff37eb6d0b7d763495f218740c979348d7a3b6d8e72d3b947c86e33
使用Ankr: Deployer权限调用代理合约转移 10,000,000,000,000 枚 aBNBc Token。转移的方法签名为0x3b3a5522
通过上面消息来看,也就是攻击者控制了Ankr: Deployer权限调用aBNBc Token合约给自己铸币。
但通过分析后发现,aBNBc Token合约是在几小时前部署,说明攻击者重新部署了aBNBc Token合约。
并且在新的aBNBc Token合约发现,存在除了Ankr: Deployer权限调用合约铸币之外的其他地址调用铸币方法0x3b3a5522。
分析以上aBNBc Token合约0x3b3a5522方法,该方法属性为public,并且未对铸币地址进行限制。这也解释了为什么其他账户可以调用。
这里有一个疑问,新的aBNBc Token合约可以任意铸币,之前旧的aBNBc Token合约是不是也可以?
打开之前的aBNBc Token合约。
可以很明显看到并没有任意铸币的问题,合约在初始化时已经进行了铸币,并且之后铸币由onlyminter控制。
攻击者铸币的几个小时后,Ankr 官方重新部署了一份aBNBc Token合约0x9e6616089e3d78faa9b6a1361b67e562c1600871,与最初的合约相似,不存在任意铸币。
总结及建议
此次攻击事件损失资金巨大,部分账户在攻击者兑换洗钱的过程中,进行套利并且获利丰厚。总体来看,攻击者通过获取Ankr官方代理合约管理员密钥,从而将官方Token合约更新恶意Token合约,铸造大量代币获利离场。对于此类管理者密钥被盗的情况时有发生,零时科技安全团队提醒Web3团队,注意密钥安全。
“
安全建议
-
项目在转移或者合约修改过程中需要安全保存管理员密钥,避免出现管理者之外的人员发现密钥;
-
尽量避免在线存储密钥,避免被其他软件获取;
-
提高项目内部人员安全意识,避免管理员被黑客通过钓鱼等其他攻击手法获取密钥。
往期内容回顾
零时科技 | Audius金库1850万枚AUDIO被盗事件分析
零时科技联合创始人黄鱼先生受邀对话《Web3应用创新与生态安全》
原文始发于微信公众号(零时科技):零时科技 || Ankr资金被盗分析