2024-11-17
黑客「钓鱼攻击」闪袭 OpenSea 用户
作者:茉莉,蜂巢Tech
2月19日,全球最大的NFT交易平台OpenSea刚开始支持用户使用新合约,一些用户的NFT资产就被盗了。
次日,OpenSea的CEO Devin Finzer在推特上披露,「这是一种网络钓鱼攻击。我们不相信它与 OpenSea 网站相关联。到目前为止,似乎有 32 个用户签署了来自攻击者的恶意有效载体,他们的一些 NFT 被盗。」Finzer称,攻击者钱包一度通过出售被盗NFT获得了价值170万美元的ETH。
用户NFT被盗后,不少人在推特上猜测,钓鱼攻击的链接可能隐藏在假冒的「OpenSea致用户」邮件中。因为19日当日,该交易平台正在进行一项智能合约升级,用户需要将列表迁移到新的智能合约中。攻击者很可能利用了这次的升级消息,将钓鱼链接伪装成通知邮件。
2月21日,OpenSea的官方推特更新回应称,攻击似乎不是基于电子邮件。截至目前,钓鱼攻击的来源仍在调查中。
OpenSea用户遭「钓鱼」丢失NFT
2月18日,OpenSea开始了一项智能合约的升级,以解决平台上的非活跃列表问题。作为合约升级的一部分,所有用户都需要将他们在以太坊上的NFT列表迁移至新的智能合约中,迁移期将持续7天,到美东时间的2月25日下午2点完成,迁移期间,用户NFT在OpenSea上的旧报价将过期失效。
2月19日,用户需要配合完成的操作开始了。人们没有想到,在忙乱的迁移过程中,黑客的「黑手」伸向了OpenSea用户的钱包里。从用户们在社交平台的反馈看,大部分攻击发生在美东时间下午5点到晚上8点。
从后来在以太坊浏览器上被标记为「网络钓鱼/黑客」的地址上看,19日晚18时56分,被盗的资产开始从黑客地址转移,并在2月20日10时30分出现了通过混币工具Tornado Cash「洗币」的操作。
黑客链上地址的部分动向
用户NFT被盗后,「OpenSea被黑客攻击,价值2亿美元资产被盗」的说法开始在网络上蔓延,人们无从得知失窃案的准确原因,也无法确认到底殃及了多少用户。
直到2月20日,OpenSea的CEO Devin Finzer才在推特上披露,「据我们所知,这是一种网络钓鱼攻击。我们不相信它与 OpenSea 网站相关联。到目前为止,似乎有 32 个用户签署了来自攻击者的恶意有效载体,他们的一些 NFT 被盗。」Finzer 驳斥了「价值2 亿美元的黑客攻击的传言」,并表示攻击者钱包通过出售被盗NFT 获得了价值170 万美元的ETH。
区块链安全审计机构 PeckShield 列出了失窃NFT的数量,共计315个NFT资产被盗,其中有254个属于ERC-721标准的NFT,61个为ERC-1155标准的NFT,涉及的NFT品牌包括知名元宇宙项目Decentraland 的资产和NFT头像「无聊猿」Bored Ape Yacht Club等。该机构还披露,黑客利用Tornado Cash清洗了1100 ETH,按照ETH当时2600美元的价格计算,清洗价值为286万美元。
攻击者如何拿到用户「签单」授权?
用户NFT失窃事件发生后,有网友猜测,黑客利用了OpenSea升级的消息,将钓鱼链接伪造成通知用户的邮件,致使用户上当受骗而点击了危险链接。
对此,Devin Finzer表示,他们确信这是一次网络钓鱼攻击,但不知道钓鱼发生在哪里。根据与32名受影响用户的对话,他们排除了一些可能性:攻击并非源自OpenSea官网链接;与OpenSea电子邮件交互也不是攻击的载体;使用OpenSea 铸造、购买、出售或列出NFT不是攻击的载体;签署新的智能合约(Wyvern 2.3 合约)不是攻击的载体;使用 OpenSea 上的列表迁移工具将列表迁移到新合约上不是攻击的载体;点击官网banner页也不是攻击的载体。
简而言之,Finzer试图说明钓鱼攻击并非来自OpenSea网站的内部。2月21日凌晨,OpenSea官方推特明确表示,攻击似乎不是基于电子邮件。
截至目前,钓鱼攻击到底是从什么链接上传导至用户端的,尚无准确信息。但获得Finzer认同的说法是,攻击者通过钓鱼攻击拿到了用户转移NFT的授权。
推特用户Neso的说法得到了Finzer的转发,该用户称,攻击者让人们签署授权了一个「半有效的 Wyvern 订单」,因为除了攻击者合约和调用数据(calldata)之外,订单基本上是空的,攻击者签署了另一半订单。
该攻击似乎利用了Wyvern 协议的灵活性,这个协议是大多数 NFT 智能合约(包括在 OpenSea上制定合约)的基础开源标准,OpenSea 会在其前端/API上验证订单,以确保用户签署的内容将按预期运行,但这个合约也可以被其他更复杂的订单使用。
按照Neso的说法,首先,用户在Wyvern上授权了部分合约,这是个一般授权,大部分的订单内容都留着空白;然后,攻击者通过调用他们自己的合约来完成订单的剩余部分,如此一来,他们无需付款即可转移 NFT 的所有权。
简单打个比方就是,黑客拿到了用户签名过的「空头支票」后,填上支票的其他内容就搞走了用户的资产。
也有网友认为,在钓鱼攻击的源头上,OpenSea排除了升级过的、新的Wyvern 2.3合约,那么,不排除升级前的、被用户授权过的旧版本合约被黑客利用了。对此说法,OpenSea还未给出回应。
截至目前,OpenSea仍在排查钓鱼攻击的源头。Finzer也提醒不放心的用户,可以在以太坊浏览器的令牌批准检查程序(Ethereum Token Approval)上取消自己的NFT授权。