作者:Biteye,来源:作者推特@BiteyeCN

9月28日,一地址由于网络钓鱼攻击损失约 3233 万美元,该地址据传可能与币圈大佬神鱼相关。无独有偶,10月11日,一笔价值 3500 万美元的 fwDETH 资产再次被钓鱼团伙窃取。短短半月内,已有总价值超过 4.7 亿人民币的虚拟资产因 Permit 签名钓鱼攻击而难以追回。

Permit 签名钓鱼为何如此厉害?就连币圈大佬也接连中招?

什么是 Permit 签名?

为了理解 Permit 签名的引入,首先需要掌握 ERC20 币种的交易规则:账户A可以调用 approve 函数授权账户 B 操作指定的代币,且只有代币的拥有者才能调用此函数。

Permit 是一种利用离线签名来实现授权的机制,它允许跳过 approve 步骤且不需支付 gas 费。在此过程中,A 提前在链下对 B 进行签名,并将这个签名提供给 B;B 随后可使用此签名通过调用 permit 函数来执行 A 的授权操作,这允许 B 使用 transferFrom 进行代币转账。

通过 Permit,A 能在不进行任何链上交易的情况下实施代币转移,且执行 permit 的操作不限于账户的拥有者。Permit 在 ERC20 协议的 EIP-2612 提案中被正式引入,为用户提供了一种既便捷又节省成本的交互方式。

Permit 签名是怎么被用来实施钓鱼攻击的?

根据上述的介绍,当用户误入钓鱼网站,点击链接被黑客获取了签名,随后黑客用签名信息上链提交 permit ,实现对用户资产的控制并进行转移。

攻击步骤:进入钓鱼网站-在钓鱼网站上链接钱包进行了签名-黑客获取签名通过 permit 窃取资产

例如,下面是一个钓鱼网站的恶意签名:图片最上方显示这是一个 zksync 的钓鱼网站,下方的 permit 签名显示该钱包(owner)正在授权给一个地址(spender),往下的 value 是授权的代币数量,deadline 是时间戳,在给定时间前均有效。

如何避免 Permit 签名钓鱼攻击

Permit 签名钓鱼攻击并非完全不可预防,大多数用户遭受损失都曾接连犯下多个安全错误。

首先,用户应将囤币的钱包和 DeFi 交互的钱包区分开,在链接钱包、签名或授权前认真检查网址,确保自己进入了正确的网站;

一些网站也会出现合约被黑客恶意替换的情况,我们在点击签名或授权前,应该认真阅读钱包跳出的 Singnature request 信息,确保授权目前地址正确,且资产和金额在可控范围内;

最后,我们可以通过安全插件如 @wallet_guard @realScamSniffer 来帮助识别异常风险,不定期使用授权工具如 RevokeCash(https://revoke.cash)查看是否有异常授权。同时,选择使用如 @Rabby_io 等插件钱包,也可以获得更具可读性的签名信息。