首页/快讯/MetaMask用户遭恶意授权攻击全复盘,慢雾报告背后的安全警示与自救指南

MetaMask用户遭恶意授权攻击全复盘,慢雾报告背后的安全警示与自救指南

我翻完慢雾科技那份报告,后背有点发凉,不是技术多深奥,是整个过程太安静了,没有弹窗警告,没有异常转账提示,你钱包里的币就没了,针对MetaMask用户的这种恶意授权攻击,已经成了一条产业链,我今天不念报告,就把它拆开,揉碎了,讲人话。

MetaMask用户遭恶意授权攻击全复盘,慢雾报告背后的安全警示与自救指南

先看攻击怎么发生的,慢雾的复盘里有个关键动作:恶意授权,你以为只是点了一个陌生链接?没那么简单,攻击者先构造一个看似正常的DApp,或者伪造一个空投页面,你钱包连上去,界面提示“确认授权”,大多数人看都不看,直接点确认,这一步,你把代币的操作权限交出去了,注意,是操作权限,不是转账,授权之后,攻击者不需要你的私钥,不需要二次签名,就能调动你钱包里被授权的那些代币。

慢雾报告里点出了一个反直觉的细节,很多受害者觉得自己“没转出资产”,授权只是“查看”而已,错了,MetaMask的授权机制里,有几种权限等级,有一种叫ERC20 Approve,这是最常见的,你授权了某个合约地址可以动用你账户里的某种代币,比如USDT,攻击者拿到这个授权,就能调用合约里的transferFrom函数,这个函数不会触发你钱包的确认弹窗,因为它用的是你的授权,不是你的签名,所以你看不到任何动静。

攻击的第二步更隐蔽,慢雾复盘里的案例,攻击者没有直接走全部余额,他们先小额测试,转走几个USDT,看受害者有没有反应,过几个小时,再转走一大笔,很多人等到第二天醒来,才发现钱包空了,整个过程,MetaMask的界面显示的是“已授权”,不会主动提醒你“正在转出”,这就是授权攻击和传统钓鱼的本质区别,传统钓鱼骗你私钥,私钥泄露了你至少知道出事,授权攻击,你根本不知道授权已经被利用。

慢雾报告里统计的受害者画像也很有意思,不是小白,很多是用了MetaMask两三年的老用户,为什么老用户反而中招?因为他们习惯了“授权”这个动作,每天交互各种DApp,领空投要授权,质押要授权,跨链桥要授权,点多了,麻木了,攻击者利用的正是这种惯性,他们伪造的授权请求,跟正常DApp的授权请求长得一模一样,没有URL校验,没有高风险提示,甚至有些伪造页面还能正确显示你的钱包地址和余额,增加可信度。

我注意到报告里有个技术细节,攻击者会使用create2合约,这种合约的特点是地址可以预计算,部署时不需要支付额外gas,攻击者在钓鱼网站里预先放好一个恶意的合约地址,等你授权,这个地址看起来没什么异常,因为你只在授权的那一刻看到它,之后它就会自我销毁,销毁之后,你在区块链浏览器上查,这个地址已经不存在了,但是授权记录还在链上,这就是为什么很多受害者事后去找MetaMask官方申诉,官方也查不到有效证据,合约地址都没了,你凭什么说是被攻击的?

接下来是重头戏,怎么防,慢雾报告给了一些建议,我把他们的话翻译成人话。

第一,撤销授权是必修课,不是说你用过的每一个DApp都要撤销,那样太麻烦,你得区分哪些是日常高频使用的,比如Uniswap,Aave,这些大牌协议基本安全,真正危险的是那些你只交互过一次的临时DApp,尤其是空投领取页面,游戏入口,还有那些“邀请好友得奖励”的链接,只要不是核心交互,用完之后立即去设置里撤销这个授权,你在MetaMask里点开“设置”,选“安全性”,就能看到“已授权合约”列表,找到那个不认识的地址,点撤销,操作很简单,但很多人根本不知道有这个功能。

第二,别碰“无限授权”,很多DApp在授权时会弹窗问你要授权多少数量,如果你的钱包支持手动输入,就输一个具体的数字,比如你只打算交易0.5个ETH,就授权这个数,少很多项目方为了用户体验,偷偷把默认值改成无限,或者让你一键授权全部余额,这等于把家门钥匙配了一百把发出去,慢雾报告里有个数据,超过85%的攻击案例都涉及无限授权,黑客喜欢找这种钱包下手,因为一次授权能盗空所有资产。

第三,使用硬件钱包,这话我说过很多次,但还得说,MetaMask钱包分为热钱包和硬件钱包,热钱包私钥存在电脑或手机里,授权攻击就能直接调币,硬件钱包不一样,私钥存在物理设备里,你每次操作都要在设备上按一个按钮确认,那个确认动作跟授权是两个独立事件,攻击者即使拿到了你的授权,也无法在硬件钱包上完成转账确认,慢雾报告里提到,硬件钱包用户遭遇授权攻击时的损失率,比热钱包用户低了近80%,这不是玄学,是物理隔离,硬件钱包也有钓鱼风险,但至少这一层能挡住绝大多数攻击。

第四,检查授权时的合约地址,这个说起来容易做起来难,因为MetaMask的授权弹窗默认只显示合约名称和地址前几位,你要做的是,在授权之前,复制完整合约地址,去Etherscan上查一下,看这个合约是不是Verified状态,看过往交易记录是不是干净,如果是新部署的合约,只有几个交易,而且全是转出,那基本可以断定是钓鱼,这个动作需要花30秒钟,很多人嫌麻烦,但麻烦一次的代价,可能是钱包里十几万U打了水漂。

我特别想强调一个心理陷阱,慢雾报告里有个案例,受害者收到一条短信,说他的MetaMask需要升级,否则无法使用,短信附带一个链接,受害者点进去,页面看起来跟MetaMask官网一模一样,他输入了助记词,然后跳转到一个授权页面,他当时觉得奇怪,为什么要授权?但页面提示“升级过程中需验证资产权限”,他一想,升级可能确实需要这个,就点了确认,结果,助记词泄露,授权也给了,几分钟后,钱包被清空,这个案例不是技术漏洞,是社会工程学攻击,攻击者拿捏的是你怕资产丢失的焦虑感,MetaMask官方永远不会发短信或邮件让你升级,更不会让你提供助记词,任何声称“紧急验证”的请求,直接关闭。

再聊一个慢雾报告没有细说,但我认为值得提的点,现在很多攻击者开始利用链上签名钓鱼,他们不再让你输入助记词,而是让你签名一段看起来无害的文本,验证你是钱包主人”,这段签名实际上是一笔交易的盲签名,你签完之后,攻击者拿着这个签名去调用你的资产,MetaMask对这类签名也有警告,但很多人直接忽略,因为界面上只显示“请求签名”,没有显示签名的具体内容是什么,所以我的建议是,遇到不明来源的签名请求,一律拒绝,不管对方说自己是客服,还是安全团队,还是投资顾问。

你要问我现在安全吗?我不知道,因为攻击手段在进化,慢雾这份报告是一种复盘,但攻击者也在读报告,他们知道用户开始检查授权地址了,就会把恶意合约做得更隐蔽,比如在Etherscan上假装Verified,或者用代理合约隐藏真正的逻辑,你也别指望MetaMask官方出个补丁解决所有问题,根本问题在于区块链的授权机制本身是开放的,用户授权是常态操作,攻击者只是利用了常态操作里的盲区。

说点实际的,读完报告之后,我今天早上做了一件之前一直拖延的事:清理了我所有钱包的授权列表,打开Etherscan的授权检查工具,一个一个看,发现有五个授权给了我根本不记得的合约,有两个是我去年领某个垃圾空投时点的,我立刻撤销了,这个动作花了大概十五分钟,在那十五分钟里我心里反复想,如果之前被攻击,我现在可能已经在想怎么止损了,撤销完,我长舒了一口气,感觉像给家门换了一把新锁。

如果你也在用MetaMask,别把这份报告当成技术文刷过去,你真的要动起来,第一,打开授权管理页面,截图存个档,第二,列一个清单,哪些是需要长期授权的,哪些是一次性的,第三,每次遇到“授权”请求,问自己三个问题:这个合约地址是我主动去交互的吗?这个项目方我认识吗?我授权的最小额度是什么?回答不出来,就别点。

慢雾科技这份报告的价值,不在于告诉你有多少人被攻击,损失了多少钱,在于告诉你,攻击不是随机的,不是只针对大V或大户,它针对的是每一个点击“确认”时懒得思考的人,你的一次习惯性动作,就是攻击者的入口。

最后说一句我自己的感受,安全不是买一个保险箱就完事,它是一个持续的动作,每天都要做一点,今天撤销一个不用的授权,明天看一份安全报告,后天设置一个硬件钱包,这些零碎的动作堆在一起,才可能挡住那些精心设计的陷阱,别把自己的资产安全寄托在对方“不来找我”的侥幸上,他们不挑食,只要你的钱包里有能动的U,你就值得被攻击,从你看到这篇文章这一刻起,去检查你的授权列表吧,现在去,比明天去,少一分风险。