首页 资讯 正文

Permit:一个平平无奇的签名 如何骗走你的资产?

金色精选 2024年04月22日 10:37

作者:OneKey 中文 来源:X,@OneKeyCN

自测一下,你是不是还认为:只要不是发起交易,我签个名「连接登陆」网站,就不会丢失资产?

如果你点头了,那可能你的安全意识停留在了 21 年前。

从 Scam Sniffer 公布的 24 年 3 月钓鱼报告*来看,90% 的被钓鱼资产为 ERC-20 代币。而这其中主要的钓鱼方式就是 Permit / Permit2 钓鱼签名。

仅仅是今年 3 月中旬,就有 4 笔价值平均资产约 $2M 的被盗交易,其中 3 笔都是被 Permit 钓鱼签名盗走的 Pendle PT 本金代币。

从受害者的角度,这简直就是一部恐怖片——某天突然发现资产被转走,检查了一圈以为是私钥被盗了,最后才发现是曾经一个不经意的离线签名,无可奈何。

而这一切,本可以被避免。

一句话说明白 Permit / Permit2

为了节约时间,OneKey 在这里不会讲太多 EIP-2612 引入 Permit 或者 Uniswap 推出 Permit2 的加密「课本知识」。(可能你光看这句话就开始头疼了)

你只需要意识到:时代变了,「浓眉大眼」的签名也不简单。

你可以直接粗暴理解为 —— 现在不少的 ERC-20 代币授权将通过一个「中介」来管理。

在以前,你的代币额度,是一个个授权(Approve)给每个 dApp 合约的。而每一次授权,都需要花费 Gas。

而现在,通过 Permit / Permit2 技术(已经有相当数量的 dApp 采用),你只需要把代币授权给 Permit / Permit2 这个「中介」。

集成了这个技术的 dApp 都可以请求用这个授权额度——只需要简单签个名就能授权给它们(甚至是批量的),不需要一次又一次花费 Gas 授权。

一把双刃剑

这个类型的签名升级,虽然对于跨应用操作带来了便利并节约成本,有各式各样的好处。但是也留下了一些隐患。

其危险之处就在于,上一轮牛市,加密用户们已经养成了「登入 Dapp 需要签名进行连接」的操作习惯,并且默认普通签名就是安全的、毫无防备之心。

殊不知,新版本的签名如果不注意区分(盲签),就会中招钓鱼。这对于用户安全意识和各种基础设施如钱包,提出了新的挑战。

对于黑客来说,那就是可以更好地「借刀杀人」了。

攻击者只需要部署一个钓鱼合约,向你获取一个 Permit 授权签名,即可随后提交一个盗走你资产的交易(甚至可以等过几天你忘记了这件事再提交)。并且, Permit2 还可以让黑客批量获取你的全部已授权代币的权限。

例如最近 SlowMist 创始人余弦分享的这个案例(https://x.com/evilcos/status/1771338665052287307),某用户在质押期间被签名钓鱼了相关代币的授权,而自己一无所知(也没有注意检查),黑客在其提出代币到自己钱包的时候,立刻盗走了资产,损失惨重。

从伪装手段上看,似乎钓鱼也变得更简单了一些。他们完全可以做一个「空投检查」网站,让你「连接钱包」查看空投。或者是,做一个工具网站让你登陆,以满足你在某些热点事件/项目中的需求。花样无穷无尽。而使用过程中,你很可能就被诱导做了 Permit / Permit2 类型的签名。

展望未来,随着以太坊推进账户抽象(EIP-3074 正式纳入下次 Pectra 硬分叉升级),你甚至还可以直接授权整个地址控制权限给一个合约,让合约地址直接操作用户的钱包地址。这也一样会在便利的同时引入新的钓鱼风险。

当然,这是后话了。

如何这种类型的钓鱼预防?有后悔药吗?

关于 Permit / Permit2 钓鱼的预防方法,已经有无数的推文、文章写过。在这里我们也是不厌其烦地再次总结——这很值得。

1、不要盲签

就和现实世界里的有法律效力的合同一样,没有人会随意给出自己的签名。

识别伪装的钓鱼网站属于是加密安全的基操了。而陌生土狗网站的「登陆请求」也一样要小心,黑客会想尽办法

伪装按钮的意图,诱骗你签名。

大家常用的小狐狸是可以识别出 Permit/ Permit2 签名的,如果你交互的 dAPP 弹出了这个类型的签名,那最好再三确认你是否要授权相关的代币。如果只是普通的签署消息,是不可能弹出特别类型的签名的。

除了 Permit 类之外,还有 increaseAllowance、多 dApp 组合操作甚至是 0x 开头的完全无可读性的各种签名,都有可能危害到你的资产安全。

总之,如果不清楚弹出来的签名的内容和后果,一定要慎之又慎,尤其是钱包内的资产比较多的情况。

2、干湿分离

常在河边走,哪有不湿鞋。

喜欢在小网站「无视风险警告」打土狗的你,如果实在要经常发生「高危行为」,那就做好资产的隔离。

经常用于交互的小钱包,不存放大量资产。举个不太恰当的比喻,你外出随意逛街的时候,肯定不会把家当带在身上,钱包里只会放一些小钱。

并且每隔一段时间,就换整理资产、换新钱包,以及取消授权和签名,尽可能地降低自己的风险敞口。

对于存放大量资产的钱包,就不要随意「连接」网站。或者就干脆放在硬件钱包中冷保存,需要地时候专门转出进行交互。这也是老生常谈的预防钓鱼的方式了。

3、检查授权

如果不是高强度使用,在第一次授权 Permit / Permit2 代币额度的时候,建议选择按需授权。也就是使用多少授权多少,而不是默认的最大(无限)额度。

已经授权了 Permit / Permit2 无限额度的,也是有后悔药可以吃。你可以在 http://Revoke.Cash 中检查自己的代币授权风险敞口——你会明确地看到某个代币授权给 Permit / Permit2 多少额度。

该工具也支持取消签名,你也可以在其中找到签名来取消(在黑客激活相关签名偷走你的资产之前)。

要注意的是,Permit 类型的签名是一种离线签名,在被使用之前,链上是没有痕迹的(黑客通常会在服务器上储存这些偷来的签名)。

定期使用工具检查授权与签名是个好习惯。

结语

如果你不幸中招了,最好及时寻求专业安全团队如 SlowMist 的帮助,及时转移资产和亡羊补牢,把损失最小化。甚至是使用一些技术手段抢救资产。

值得注意的是,这些签名钓鱼已经趋向于专业化、产业化,分工分赃明确。如果资产已经被专业的 Drainer 黑客团队转移并洗钱,很大的概率是拿不回来的!所以还得是防患于未然,不让他们有任何可趁之机。