钱包安全指南:如何保护你的 NFT 和加密资产不被盗

May 03, 2022

目前的加密世界几乎每天都在上演各种被骗和资产被盗的场景,颇有黑暗森林的味道。为什么会这样呢?一个主要因素是钱包的安全保护方案相比传统银行的多重验证方案还是太简单了。很多非常危险的操作,钱包并没有给出特别明显的提示,不明所以的用户只要在钱包里点一下确认按钮就把资产转移权限轻易授权给骗子了。希望本文可以帮助读者识别危险操作,避免资产被盗。

如果我只是在网站上连接钱包会被盗吗?

单纯连接钱包这个动作并不会导致你的资产被盗,是否会被盗主要取决于你在 MetaMask 上批准了哪些操作,同意连接钱包后 MetaMask 以及其他正规的钱包并不会给网站分享你的密钥,所有敏感操作 MetaMask 都会弹框向你询问是否执行。作为用户我们需要正确识别 MetaMask 上不同的操作类型它潜在的风险。

本文用 MetaMask 举例,但这些道理在其他钱包软件上也是相通和适用的。

相对安全可预期的操作

以下的操作类型相对是安全可预期的,作为用户我们能明确知道自己做了什么事情。所有操作细节 MetaMask 都明确告诉你了,没啥猫腻。

连接钱包 ✅

DAPP 链接钱包的确认弹框

  • 连接钱包是所有 web3 应用的通用做法,正常情况下网站连接钱包后只能获取你的钱包地址和所选网络,也就是说它只能读取一些基本信息
  • 这里我们需要确保 MetaMask 显示的的只有上图中的这种查看权限。如果有其他批准或者授权相关的权限你就要格外留意了

转账操作 ✅

MetaMask 转账 ETH 确认弹框

  • 注意上面两张图里的 "正在发送ETH" 这个标签,这种是正常的 ETH 转账确认,一般出现在用加密货币付款的网站上,用 ETH 这种原生代币转账不需要与合约进行交互,是相对很安全的操作了,没啥猫腻可以搞,MetaMask 会明确告诉你当前在给谁转账,转多少钱。
  • 作为用户,我们只需要确认转账金额是否和购物网站上显示的一致就行

高风险的操作:合约交互 ⚠️⚠️⚠️

真正高风险的是一些涉及合约批准或者调用的操作,这些操作对于不懂合约代码的用户来说很难去验证对方合约内部做了什么操作,对于一些恶意合约,可能 MetaMask 上显示的交易费用只有 Gas 费,但是你一旦批准了,对方就悄悄获取了转移你资产的权限。

下面是一些常见的高风险操作案例,讲完这些案例之后,本文会教你一个简单的办法杜绝大多数诈骗手法。

TOKEN 授权批准(Approval)

shushi 触发的 WETH 授权界面

例如上图中当你点了确认后就授权了这个合约转移你的 WETH 的权限。之后这个合约可以在任意时间转走的你的 WETH。所以遇到 MetaMask 提醒你批准某个授权的时候一定要看清楚合约和网站是否正规。

这种 TOKEN 批准一般在使用 1inch 和 SushiSwap 这类去中心化交易所的时候都会出现,这种是正常的。如果其他类型的网站需要这个权限你就要留心了。

NFT 授权批准

OpenSea 批准所有

这是 OpenSea 在上架 NFT 之前要求你批准的操作,批准后 OpenSea 就有了对你的 NFT 的转移权限。当然 OpenSea 是正规应用,所以理论上你批准这个敏感操作是安全的。

NFT Mint

Mint 操作

这是一个 NFT 网站的 Mint 操作,Mint 操作在 NFT 领域是很常见的行为,但是同样不可掉以轻心。如果对方没有上传源代码,理论上依旧可以把恶意操作包装成普通 Mint 操作。所以对于不懂合约代码的普通用户来说,你需要确保 Mint 操作是在对方官网上进行的。避免被钓鱼网站坑了。

当然,上图中举例的这个合约是安全的,MetaMask 显示它的合约代码已经在 Etherscan 验证, 说明它的源代码已经上传到 Etherscan 网站,我们可以直接点击上图框住的 "Etherscan" 去查看它的代码实现

OURM Mint 代码

对于没有上传代码的合约,你就要非常谨慎了。

NFT Mint 骗术案例

NFT Mint 骗术实例

钱包弹框确认

上图就是一个真实的利用 NFT Mint 来盗取别人资产的例子,可以看到点击 mint 按钮后,弹出的钱包对话框里显示的方法是 SET APPROVAL FOR ALL,一旦你点了同意,对方就可以转移走你的资产。

具体的骗子套路是这样的,骗子首先通过 API 接口知道了你的钱包里有哪些 NFT 和 Token,并拿到对应的合约地址,之后就会在你点击 mint 按钮时骗子会调用对应合约的 SET APPROVAL FOR ALL 方法,普通小白用户或者手快大意的用户可能很容易就点同意按钮,然后中招了。

setApprovalForAll 是个极度危险的操作,当你在对方网站上领空投或者免费 mint 时如果触发了这个操作一定要及时拒绝。

空投骗术案例

伪装成 claim 空投的骗术

骗子网站上调用了 OpenSea 的合约

杜绝大部分骗术的方法:检查参数是否包含 address 类型

查看当前调用的合约方法的参数类型

不懂代码的用户很难通过检查合约代码来判断操作是否安全,不过我们可以通过判断合约调用是否包含 address 类型的参数来杜绝大多数的危险操作。

在对方网站上 Mint 免费 NFT 或者领空投的时候一定要在 MetaMask 弹出的确认框里切换到「十六进制文件」标签,检查当前合约调用的参数是否包含上图中的 type: address 字样。如果是的话,你就要格外格外小心了。最好立即点拒绝,然后再找懂行的人去确认是否安全。

如果你手快不小心点了可以操作,立即去 https://revoke.cash/ 撤销所有可疑授权,如果你不知道哪些可疑,挨个 revoke 所有的即可。

revoke.cash 操作示例l

谨慎对待钱包里莫名奇妙收到的 NFT 和小币种

如果有一天你突然发现自己的钱包莫名奇妙多了一些不知名的 NFT 和小币种,不要去动它,更不要去卖或者转账。因为转账操作会和对方合约发生交互,很容易就在你看不懂的情况下授权对方转走你其他资产的权限。

推荐的操作是直接将这些 NFT 和币种隐藏掉,如果一定要操作,请确保先了解清楚对方合约代码。

在加密世界养成好的安全习惯

为了确保长期安全,我们需要避免将所有鸡蛋放在一个篮子里,好的习惯是,平时分多个钱包使用,具体可以参考如下:

  • 至少有一个存款专用钱包,这个钱包只存钱以及给自己的其他钱包转账,不参与合约交互操作
  • 一个或多个日常使用钱包,这些钱包不存放大额资金,需要 MINT NFT 或者合约交互的时候再从存款账户转钱过来

对于 MetaMask 和 Coinbase Wallet 这种钱包来说,用户可以用一套助记词创建出多个账户,维护起来非常简单。比如下图中你只需要点击 创建账户 按钮就可以创建一个账户出来,以后用同一套助记词可以将这些账户恢复出来,不过 MetaMask 上用助记词恢复账户的时候默认只恢复 Account 1 也就是第一个账户,后面的这些账户需要你再点击 创建账户 按钮来恢复。

MetaMask 创建账户

Coinbase Wallet 是默认就帮你创建好了 10个以太坊钱包帐户,这和你在 MetaMask 里面手动点击 创建帐户 按钮创建出来的是完全一样的。

Coinbase Wallet 默认创建好的 10个账户

检查批准和授权过的合约

下面这些工具可以查看你之前批准和授权过哪些合约,必要情况下你可以撤销这些授权,理论上授权越多,未来遇到安全问题的几率越大。

https://revoke.cash/

非常推荐,一键查询多条链上的数据,支持 Token 和 NFT

https://approved.zone/

这个一次只能查看一条链的数据,手动切换网络才能查询其他链,不支持 NFT 的授权查询

使用链上浏览器提供的授权检查功能

每条链都有自己的浏览器,例如 etherscan 和 bscscan。这些浏览器基本都提供了授权检查功能。下面分别是 ETH、BSC、Polygon 这三条链的官方浏览器提供的授权检查工具。

对于上面没有列出来的公链,你可以用:公链名称 + token approval checker 作为关键字在 Google 搜索

雪崩链的授权检查工具在谷歌的搜索结果

这里用 https://bscscan.com/tokenapprovalchecker 举例,下图框住的这些就是授权批准过的合约,这些合约可以转走你账户里所有授权过的 token。

bscscan 上的授权检查页面

总结

连接钱包并不可怕,真正需要谨慎的是一些看不太懂的批准或者合约调用操作。我们需要细心检查 MetaMask 确认弹框里显示的操作是否符合你的预期,对于看不懂的,你需要确保你打开的网站是从官方渠道获取的,而不是钓鱼网站。实在不放心的就用小号钱包操作。

参考

如果你喜欢我的内容,请考虑请我喝杯咖啡☕吧,非常感谢🥰 。

If you like my contents, please support me via BuyMeCoffee, Thanks a lot.