从一个钱包被盗的案例,探讨Web3的安全指南
标题:技术 | 从钱包被盗的案例中例Web3 安全指南
原文作者:Chris 阿法兔
事件2022年元旦假期的某个早晨,小 C 准备写代码,继续测试 Web3js 链上合同交易。突然发现自己的测试账号(Bsc 链)在 MetaMask 归零,明明前一天晚上账户里还有 100usd,然后查转账发现:
钱没了,钱去哪了?
背景技术背景的小 C,最近,我正在学习区块链开发。我是一名专业开发人员,非常谨慎。我通常在测试网络上运行。运行后,我将在官方网络上部署。然而,我没有意识到整个行业仍处于相对混乱的阶段,粗心大意,习惯方便,造成损失。
损失是如何造成的?小 C 偶然看到一个账号很有意思(这个账号有很多活跃的交易),就跟着他的一些链上交易,然后看到一个很有意思的项目(年化收益率高),然后把自己的 连接起来MetaMask,然后鬼使神差进行了 approve,因为一般 Web3 项目就是这个过程,approve 然后转账就结束了。
但令人震惊的一幕出现了:点击后,整个网站突然卡住(事实上,在卡住这段时间里,盗窃者把钱转走了),没有反应,小 C 当时没当真,关掉了网站,做了其他事情。
大约一天后,小 C 回来开发的时候,发现账上的钱都没了,查了历史记录,发现账上的余额都转走了。
盗窃者在回顾过程中是如何使小 的C 账户上的钱都转了?现象:只要你 approve 理论上,无需私钥也可以转移相应的钱。
小 C 在钓鱼网站上进行了下溯源approve 出了问题,所以追溯转账记录。

如图所示,先是 approve(授权)一份合同,授权钓鱼合同可以对账户 BUSD 操作,没有数量限制。
为什么是 BUSD 呢?小 C 回忆了一下,一进入这个钓鱼站点是默认选了 BUSD ,估计在浏览网站链接钱包后,盗窃者已经筛选出账户中钱最多的 token 了。
然后当小 C 以为是新 swap 合同,年化收入高,准备先试,按照常规流程进行 approve。approve 结束后,网站直接卡住了。
后来经过追溯,授权后几十秒左右,合同直接触发了转账操作,直接触发了 BUSD token 转走了。
后来去查授权信息

基本上 MetaMask 默认授权为:
转换成数字,我们知道 1.157920892373162 乘以 10 59 次方。基本上可以理解为无限转账,也就是授权操作,可以让这个合同无限操纵我账号的 token。看到这里感觉背后很凉,因为之前点过很多次 approve 不会去看。
然后黑客操纵一个可以控制合同方法的钱包地址,发起合同转账方法,把钱转走。所以小伙伴点了 metamask 授权时一定要小心。
小 C 查了下,盗取者现在这个账号里大概已经有了 3w 美金的 token ,还有源源不断的受害者在转账。但面对区块链,没有办法找到黑客是谁。
问题出在哪里?因为最近在学区块链C 大概理清了这种钓鱼的逻辑方式,害人之心不可或缺,防人之心不可或缺。有兴趣可以了解一下:
正常转账
案例一:直接用户间转账 A 用户向 B 用户转账 BUSD
合同将检查以下逻辑
1)判断 A 用户账户余额是否足够; 2)是否 A 用户发起的转账
流程如下图

正常合约兑换
我们通常使用 pancakeswap、uniswap 等待交换过程
案例二:通过 swap 进行 token 兑换 A 用户进行 token 兑换(BUSD 兑换 WBNB)判断流程 合同:
1)A 用户账户余额是否足够 BUSD,(假设授权 swap 合同可以操作 A 账户的 BUSDtoken)
2)swap 合约取 A 账户下的 500BUSD 放入 swap 合约池(假设汇率为 1:500)
3)合同成功后再向 A 账户转入 1BNB
注意第二、三点,由合同控制token 进行操作。那么也就是说合约可以绕过我们直接发起对我们账号下的 token 的操作。

钓鱼合约
先看这张溯源图

正常转账时,转账方和合同执行的转账方应为同一人,即上图(1)和(2)应由同一人发起。我转账的交易不是同一个地址。据推测,合同的执行应该由一个可以执行钓鱼合同的钱包地址控制,然后授权给钓鱼合同中的 BUSD 转走了。
查看钓鱼合同,不出所料,钓鱼合同是加密合同。但想想也不难,学了一点 Solidity 大家都知道,合同定义时,多设置几个 Admin 或者 Owner 就可以了。
所以以后一定要注意项目方的背书,不要随便授权不知道的项目!!!
安全建议因此,小 C 搜索了一些有用的建议和方法,看到了很多血淋淋的教训。
您可以根据自己的需要选择一些方法。
1)不要共用密钥
我以前看过一篇帖子一个助记词生成多个账号,不推荐,因为很可能是一锅端。
2)密钥离线保存
因为现在有很多剪贴工具输入法将您的剪贴记录上传到云中,如果您直接复制,如果云泄漏,您的密钥将直接丢失。
我的建议就是生成之后,第一时间抄到本子上。当然抄到本子上,你也可以参考我对密钥自己的字典加密,比如 a 用 1 代替,b 用 2 代替,1 用 代替a 替换,以确保即使有人看到你的纸质密钥,你也不能移动你的数字资产。
3)开发与测试分开(空投与主账隔离)
安装 2 浏览器,一个可以是 chrome,一个是 brave。一个管理你的主钱包。另一个可以参与空投、各种链操作等
4)不要下载来历不明的软件
不要去用 baidu 这些下载来源不明的软件,我看到下载盗版 的案例metamask,直接破产。必须到正式地址下载,有条件可参考 google play。chrome web store 等
5)立即检查您的授权
以下是检查网站,debank 没有开源,但 UI 互动比较好,后续有开源。让我们自己选择。
https://debank.com/
https://approved.zone/
https://tac.dappstar.io/
https://ethallowance.com/

如图所示,基本上是无限的。
每次唤起 MetaMask 的时候一定要多看看授权,不要像我现在这样无脑点授权下一步。
6)授权前确认合同安全
https://www.slowmist.com/service-smart-contract-security-audit.html
可采用慢雾合同审计功能。
还可以看合同是否开源,如果开源,需要确认合同是否可升级等。
7)空投和福利时注意安全
用小号领取,不要用大号,授权时可以设定额度!!!
8)警惕社工入侵,小心 Discord 私下谈论你的陌生人
比如 Discord 或者 Telegram,有人认识你几天,说要带你赚钱拿空投,让你安装他发给你的软件并登录, 99.99% 你会赔钱。账户被盗。
特别地,Discord 里面,进 NFT 的官方 Discord,会有人私下和你聊天,告诉你白名单,附上一个 mint 链接。骗子会把头像和名字改成官方的样子,但实际上是把他和你拉成一个小组。
事实上,只要你不贪婪,这个骗局很容易看穿,通常会告诉你在几个小时内 mint,数量 1-10.很多热门项目都是白名单 mint 一两个不错,这个顶格 10 也有时间限制。
还有,会有骗子模仿项目官网做假网站,私信给项目 Server 里面的人,让他们来 mint.
还有朋友opensea 买了假 NFT 后来发现不是官方 ,过了几天 NFT 从账户上消失了 但是已经扣了...(怎么发现?看链条 和官方 discord 官方 Opensea 网址 )
还有假的 collab.land 骗钱包密码,给大 v 空投然后被称为大 v 买了那个 NFT/token.
随着新年的到来,我们必须注意安全。我希望所有看到这篇文章的朋友都能安全顺利!
感谢作者 Chris
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

路安



