首页 > 资讯 > 从一个钱包被盗的案例,探讨Web3的安全指南
路安  

从一个钱包被盗的案例,探讨Web3的安全指南

摘要: .details .details-cont p, p {word-break: normal; text-align: unset} p img {text-align: center !impo
   .details .details-cont p,p {word-break: normal; text-align: unset} p img {text-align: center !important;}

标题:技术 |    从钱包被盗的案例中例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

Tags:
免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。