奇葩故事,1155 个 WBTC被精准钓鱼
本文作者:Cos(余弦)😶🌫️@evilcos。最后发文时间:上午9:59 · 2024年5月4日
被钓 1155 个 WBTC,价值近 7000 万美金。这个用户刚刚遭遇了首尾号相似钱包地址的钓鱼攻击。钓鱼团伙实在是大力出奇迹…
会被攻击的关键点:
1. 用户正常转账的目标地址被钓鱼团伙盯上,钓鱼团伙提前碰撞生成了首尾号相似的钓鱼地址,比如这里是去除 0x 后的首4位、尾6位一样
2. 用户正常转账时,钓鱼立即(大概3分钟后)尾随一笔交易:钓鱼地址往目标用户地址转了 0 ETH
正常转账:
https://etherscan.io/tx/0xb18ab131d251f7429c56a2ae2b1b75ce104fe9e83315a0c71ccf2b20267683ac
钓鱼尾随:
https://etherscan.io/tx/0x87c6e5d56fea35315ba283de8b6422ad390b6b9d8d399d9b93a9051a3e11bf73
3. 用户习惯从钱包历史记录里复制最近转账信息,看到了这笔钓鱼尾随的交易,以为钓鱼地址就是用户正常转账的目标地址,于是复制出来
4. 最后,用户可能会肉眼识别目标地址的首尾号是否熟悉,可惜的是,此时的“目标地址”是用户从钱包历史记录里复制出来的钓鱼地址,首尾号相同(首4尾6)。于是发起大额转账,这里是 1155 个 WBTC:
https://etherscan.io/tx/0x3374abc5a9c766ba709651399b6e6162de97ca986abc23f423a9d893c8f5f570
趁这次事件,简单说下如何防御这种首尾号钓鱼,别以为很简单,概率虽说挺小,但是用户基数摆在那。地下黑客玩的就是撒网攻击,愿者上钩,概率游戏。
1. 原始但最兜底的方式:肉眼核对关键步骤的钱包地址是否正确,不能只看首尾号。有的钱包实在太坑队友,默认只显示首 4 尾 4 这点字符(安全实践建议是除了开头的 0x,至少首 6 尾 8,如果有交互可以让我看到完整地址,我会很感谢这个钱包的产品经理),用户遇到这种情况,如果还继续用这个钱包,那么可以考虑先小额转账…
2. 忽略钱包历史记录,历史记录污染是很容易的操作,用个恶意合约,emit 伪造的日志,即可让用户的钱包历史记录被污染,或者零转账、超小额转账等粗暴污染方式,顺便带上首尾号相似地址。这个时候,一个钱包的安全能力差距也就可以体现出来了,好的钱包,历史记录一定是过滤了五花八门的 spam 记录,并且可以真实地输出(不会被伪造日志欺骗)。这里的魔鬼细节很多,不展开
3. 转账/交易风控,大额往第一次出现的目标地址转账或某种交易操作(比如目标地址是个陌生合约),钱包会做风控提醒。如果还能识别出第一次出现的目标地址和历史目标地址存在首尾号相似的情况,那会更好
4. 白名单,这个机制太关键,可惜许多人也不一定习惯使用(觉得麻烦),真别怕这点小麻烦…
5. 钱包地址画像能力,比如一个目标地址在区块链上是 0 历史的,钱包会如何提醒?再比如目标地址是被我们 AML 标记过的某盗币团伙,钱包会如何提醒?再再比如目标地址是 create2 出来的新地址或者之前已经 create2 生成并且有合约代码,钱包又将如何提醒?这里面的魔鬼细节是不是更多了?
还有不少点就不展开了(欢迎评论里补充)。你看到了吧,单单首尾号钓鱼这种大多数人觉得不可能发生、太简单的钓鱼方式,却也能成功无数次。防御工作也并不容易。对于用户来说,选择靠谱钱包,习惯白名单,肉眼识别兜底,这是当下最易完成的工作了。