2023 年 · Blur 改变了 NFT 交易规则
Blur 在 2023 年靠「积分激励 + 离链订单」一战成名,把 OpenSea 推下王座。Bidding 机制原本是好东西:买家挂一个签名出价(不上链、零 gas),卖家接受签名后才上链结算。问题是签名里是一长串订单字段,普通用户看不懂。这套不可读性成了 2024 年起钓鱼工具箱里的核心武器。
2024 年 12 月 18 日早上 · Kenji 打开活动页
东京的 NFT 玩家 Kenji 看到「Blur Season 4 双倍积分」活动页转发链接 —— blur-s4-bonus[.]xyz,UI 跟 blur.io 几乎一样。他连上钱包,点击「Claim 2× Points」。钱包弹出一个 Bid 签名请求,他眼睛扫了一下,看到一长串熟悉的订单字段,下意识觉得「跟平时签 Bid 一样」,按 Sign。
当天 14:02 · 签名上链
3 分钟后,攻击者把那个签名提交到 Blur 真合约。链上记录显示:Kenji 以 0.000001 ETH 价格「卖」了 Azuki #2389(floor 价 18 ETH)给攻击者。Blur 合约严格按照签名执行 —— 因为签名结构合法、签名人是 Kenji 本人,合约没有任何理由拒绝。
这就是反向利用:Bid 原本是「我出价买你的 NFT」,可这次弹窗名义上是 Bid,他签的其实是一份「批量挂单」—— 一个签名把钱包里多只 NFT 以接近 0 的价格挂出,之前给平台的授权还在,攻击者逐一成交就行。Kenji 签的那一刻,相当于自己把整个钱包按白菜价挂了出去。
当天 14:05 · 整套 NFT 蒸发
攻击者接着把批量挂单里其余几件逐一成交:Azuki #1024(同地址另一只,稀有款)+ ENS 几个域名 + 一些小图。Kenji 旧钱包合计 47 ETH 蒸发,约 18 万美元。这一切发生在 5 分钟内,他人在通勤地铁上,看到 Blur 通知时已经结束。
事后补上的一课 · 交易钱包和存仓钱包分开
Kenji 事后才用上 NFT 圈早就流行的做法:交易钱包和存仓钱包分开。
- 交易钱包:只放当下要交易的几只 NFT,连接 Blur / OpenSea / 任何陌生平台时用它
- 存仓钱包:放蓝筹长持,永不连接任何 dApp,私钥放硬件钱包
这样即使误签也只损失交易钱包里的数额。
Bid 签名钓鱼的 5 个特征
- 在非 blur.io / opensea.io 域名上看到 Bid / Listing 签名请求 —— 真平台只在自家域名工作
- 签名里要卖出的是你的 NFT、成交价是 0 或极低数值
- 看到一长串订单字段看不懂 —— 用 Rabby / Pocket Universe 解析
- 活动页让你 sign to claim points / bonus —— 真平台不靠签名发积分
- 签名里挂出去的不止你想交易的那一件,而是一整批 NFT、价格接近 0
已经签了之后只能做这些
出价 / 挂单签名可以在链上作废:在 Blur 或 OpenSea 里「取消全部挂单 / 出价」(付一笔 gas),同时把 NFT 转到新地址 —— 让攻击者拿到签名时你旧地址已经清空。按《私钥泄露应急 · 五步抢救流程》第三步 P4 优先级处理。
OpenSea / Blur 后台举报被盗 NFT,平台会标记为 stolen item 限制二级流通。链上分析机构(Chainalysis / MistTrack)同步提交,万一攻击者把 NFT 挂中心化平台还能拦住。
「我蹲了 Blur 两年,签过几千笔 Bid,看一眼字段就 Sign。这一次让我彻底改了习惯:每次签名前装 Rabby 把字段翻译成中文,宁可慢 5 秒也不愿再损失 18 万。」