空投:领取本身就是攻击

·阅读 6 分钟·作者:SSP Editorial Team
SSP Academy 封面:虚假空投与签名盗取

空投:领取本身就是攻击

你的钱包里出现了一枚你没买过的代币。余额看起来是真的。代币的名字里就印着一个网址,那个网站说你还能领到更多。

这句话里的几乎每一处,都是为了让你做一件事:连接钱包并签名。代币是诱饵。领取才是攻击。

真正的空投确实存在,其中一些还颇有价值。但从用户这一侧看,正当领取与恶意领取的机制几乎一模一样,而这正是此类盗窃屡屡得手的原因。

为什么免费代币是完美的诱饵

任何人都能创建一枚代币,并发送到任何地址。发送方付一点手续费,你分文不花,而你无法拒收。这种不对称,就是整个骗局的地基。

一枚不请自来的代币,为攻击者做了三件有用的事。它把攻击者的信息送进你的钱包界面——那里是你习惯相信所见内容的地方。它制造出一种拥有感——我有了点东西,该拿它做点什么。它还给了攻击者一个把你引向某个网站的借口。

有些这类代币直接用网址作名称或符号。有些显示出巨额余额,常常配着长得离谱的供应量,只为让人一眼觉得了不起。还有少数经过刻意设计,只要你试图卖出或转走它,就会直接触发恶意交互。

它与地址投毒和粉尘攻击是近亲:不请自来的价值落进你的钱包,充当运送别的东西的载体。

持有代币本身并不危险

下面是让人安心的部分,值得说得精确些。

躺在你地址上的代币拿不走你任何东西。它动不了你的其他资产,不能代你签名,也伸不进你的钱包。收下它没让你付出什么,对它不闻不问,你就和之前一样安全。

危险始于你与之交互的那一刻。这一类的每一次盗窃都需要你的一个签名——攻击者的全部手艺,都花在让这个签名显得稀松平常上。

所以第一条规则很简单:意外出现的代币是信息,不是邀请。 你可以无限期地不理它。

领取页面实际要你签什么

页面会让你「领取」、「验证资格」或「连接钱包查看你的份额」。它真正索要的,通常是以下三者之一。

一次代币授权。 一笔交易,授予某个合约移动你已持有代币的权利——通常是无限额度。它被标成领取的一部分,却和「收到」任何东西毫无关系。授权是比你授予那一刻活得更久的许可,而盗取者只需要一次。

一个链下签名。 这是更危险的现代变体。EIP-2612 permit 和 Permit2 这类标准,允许你用一条签名消息、而不是一笔交易来授权代币支出。不耗 gas、不广播、你的历史记录里什么都没有——而攻击者可以日后提交它,转走你的代币。学会了对交易保持警惕的人,面对「只是一个签名」时往往松懈得多,因为它看起来不花任何代价。

一笔做得比说得多的交易。 一个「领取」调用,顺手把资产转了出去,打包成一次批准。

三者有个共同点:页面描述的是给你的好处,实际载荷描述的却是给他们的许可。这道落差就是盲签的含义,而空投领取是它在现实中最常见的形态。

SSP 在类型化数据签名时给你看什么

链下 permit 以 EIP-712 类型化数据请求的形式到来,所以值得具体说说 SSP 如何处理它们——包括它的不足之处。

当某个 dApp 请求类型化数据签名时,SSP 会显示发起请求的网站名称和网址、将要签名的地址、网络,以及当请求针对的链与你当前所在链不同时的切换链警告。随后它会显示完整的结构化 EIP-712 载荷——每个字段,毫无隐藏。

签名需要先在 SSP Wallet 上批准,再在 SSP Key 上确认。两台设备,两个刻意的步骤。这确实能防止一台被攻陷的设备独自产出签名。

现在说诚实的局限。对于类型化数据,SSP 显示的是原始的结构化 JSON,而非通俗的文字摘要。我们的交易解码器会把常见的 ERC-20 调用翻译成易读的句子——包括标出无限授权——但类型化数据的 permit 目前并不会这样解码。你得到的是完整的真相,但得自己去读:找 spender、value 或 amount,以及 deadline。如果一个「领取」要你签的东西里带着 spender 和一个很大的数值,那它就不是领取,而是授权。

双设备设计还有一条值得直说的边界。它防的是一台被攻陷的设备,而不是你被说服。如果你在两台设备上都批准了一个恶意 permit,它就是合法签名的。第二次确认是让你发现问题的第二次机会,不是你一定会发现的保证。

如何分辨真空投与假空投

真空投是公告出来的,不是送上门的。 正规项目会通过自己既有的官方渠道公布资格,远早于任何领取。一枚凭空出现、还在推销自家领取网站的代币,几乎总是骗局。

自己导航,别点进去。 如果你认为自己真有资格领取什么,就自己输入网址、或从你已信任的来源进入项目官网。永远不要点击嵌在代币名称、私信或帖子回复里的链接。

领取不该动用你的其他资产。 接收代币不需要你授权任何你已持有的东西。如果领取要你对另一枚代币做授权或签 permit,立刻停手。

紧迫感是破绽。 「2 小时内领取」的存在,就是为了让你来不及思考。

核对签的是什么,而不是页面怎么说。 页面是想要你签名的人写的。载荷才是唯一诚实的部分。

如果你已经签了

尽快行动,因为盗取者常常几分钟内就会扫空资产。

撤销许可。 对于链上授权,撤销它——撤销正是为此而设。链下 permit 更棘手:它们在被使用之前并不会记录在链上,所以实际可行的防御,是在签名被提交之前,把受影响的代币转移到一个新地址。

转移仍暴露在外的资产。 攻击者还能触及的一切,都应挪到他们触及不到的地方。

不要再交互。 那些「找回资金」的网站,以及主动提出替你追回被盗资产的热心陌生人,是同一场行动的第二波。

更大的教训胜过任何清单。在加密世界里,你几乎从不会因为收到什么而亏钱。你亏钱,是因为签了什么。免费代币,不过是迄今为止让你签名最有效的办法。

分享本文

相关文章