Franklin 签的那笔到底是什么
2025 年 6 月 29 日,BAYC 大户 Franklin 在 X 上看到一条置顶广告:「Celebrate OpenSea 7th anniversary · Claim your exclusive NFT and 0.7 ETH」。账号挂着金标 —— 后来证实是某加密媒体老号被入侵后改名。Franklin 点进 opensea-anniversary[.]events,连 MetaMask,点 Claim。
弹窗里他签的,是一笔 setApprovalForAll(operator, true)。这是 ERC-721 / ERC-1155 的批量授权 —— 一旦 approved=true,被授权地址可以转走你这个合约下的全部 NFT,不需要每只单独签字。Franklin 平时签授权多,没逐字看 operator 地址,确认。
14 秒钟链上发生了什么
签完 6 秒,攻击者脚本捕获到这笔授权交易上链。第 8 秒,攻击者发起一笔 transferFrom 调用,目标是 Franklin 持有的 9 只 BAYC(编号 3749 / 4827 / 5933 等)。第 14 秒,9 只全部归集到攻击者地址。攻击者合约在紧接着的区块里批量调用,把 9 只一次转走。
这事本来可以怎么拦住
Franklin 事后回看最扎心的一点:他的 MetaMask 当时关着 Blockaid。这是 MetaMask 2024 年集成的链上钓鱼检测引擎,免费、默认推荐开启。如果当时开着,签 setApprovalForAll 时会弹红色 banner 直接拦截 —— 因为 opensea-anniversary[.]events 早在 ScamSniffer 黑名单上。但很多 NFT 老玩家因为「弹窗太多」手动关了。
第二道本可拦住的防线是 operator 地址核对。真 OpenSea 授权的对象是其官方文档列出的 Conduit 合约。任何其他地址出现在 setApprovalForAll 弹窗里,默认假定恶意。Franklin 的弹窗里 operator 是 0x4f...c3e8,一眼可疑 —— 但他没看。
哪些 NFT 持有者是钩子重点
BAYC、CryptoPunks、Azuki、Pudgy Penguins 等蓝筹持有者是高频目标。原因很现实:单只 floor 价就够覆盖攻击者整条 gas + 运营成本,所以攻击者乐意为这些钱包定制广告投放。Franklin 在 X 上的钱包标签里挂了 BAYC #5933 头像,他根本不需要主动找钓鱼站,钓鱼站会找他。
另一个变种值得 NFT 玩家警惕:攻击者部署「新项目」邀你 mint,mint 本身看着正常,mint 完页面紧接着再弹一个窗口,让你对别的合集 setApprovalForAll 给陌生地址。刚 mint 完正兴奋,很容易顺手点确认。所以 mint 之后再弹出的任何授权,先看清授权的是哪个合集、给的是谁。
NFT 大户的 5 条护身线
- 「空投 / 周年 / 福利」网站连钱包后弹 setApprovalForAll —— 100% 是钓
- operator 不是 OpenSea 官方文档列出的 Conduit 地址 —— 直接 reject
- Claim 之前需要你授权 —— 真空投通常直接 mint 到你地址
- 广告来自认证账号(金标也算)但内容反常 ——老号被盗改名是常见手法
- MetaMask 没开 Blockaid 看不到红色警告 —— 攻击者最爱这种状态
NFT 已被搬走怎么追
立即用旧地址登录 revoke.cash 撤掉那笔 setApprovalForAll —— 但要赢攻击者脚本的速度,通常 NFT 已经先被搬走。未被搬走的 NFT 立刻 transfer 到一个全新地址,按《私钥泄露应急 · 五步抢救流程》第二、三步处理。同时去 OpenSea 把被盗 NFT 标为 stolen item,限制二级市场流通。
「我签过几百笔授权,每次都没看 operator。这次终于轮到我。」他后来给所有 NFT 大户朋友群发:把 Blockaid 打开,把蓝筹 NFT 存到一个不连 dApp 的存仓钱包。