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

This article is not available in the current language yet. Showing the original version.

道路千万条,安全第一条:

1)不要共用密钥 

2)密钥离线保存

3)开发和测试分开(空投和主账号隔离)

4)不要下载来历不明的软件 5)立即检查授权

6)进行授权前,对合约安全进行确认

7)撸空投和福利的时候注意安全

8)警惕Discord来路不明的人和软件

事件

2022年元旦假期的某个早上,小C准备写代码,继续测试web3js的链上合约交易。突然发现自己的测试账号(bsc链 )在metamask归零了,明明前一晚账户内还有100USD,然后查完转账就发现:

钱都没了,钱哪去了??

背景

技术出身的小C,最近在学习区块链开发。

本身是专业开发者,已经很谨慎小心了,通常都是在测试网络上跑,跑完之后,再会去正式网络上部署,但是没有意识到

整个产业目前还处在相对混乱的阶段,麻痹大意,顺手习惯导致造成了损失。

损失是如何造成的?

2021年的最后一天,小C偶然看到一个账号很有趣(这个账号有很多活跃的交易),就追踪了他的一些链上交

易,然后看到了一个非常有意思的项目(有很高的年化收益率),然后就鬼使神差地连上了自己的Metamask,然后鬼使神差的进行了approve,因为一般Web3的项目就是这个流程,approve然后转账就结束了。

但是令人惊呆的一幕出现了:点完之后,整个网站突然卡死了(其实在卡死这段时间,盗取者就把钱转走了),没有任何反应,小C当时没当回事,把站点给关了,去做其他事情了。

过了大概一天,小C重新回来开发的时候,发现账上的钱全部没有了,去查了历史记录,发现账上的余额已经被全部转走。

回顾过程

盗取者是怎么把小C账户上的钱都转走的?

现象:

只要你approve了,不需要私钥理论上也可以把对应的钱全部转走。

小C进行了下溯源,大概是在一个钓鱼网站的approve出了问题,于是追溯该转账记录。

如图,可以看到,先是approve(授权)了一个合约,授权了钓鱼合约能够对账号里面BUSD进行操作,而且是没有数量限制的。

为什么会是BUSD呢?小C回忆了一下,一进入这个钓鱼站点是默认选了busd,估计在浏览站点链接钱包之后,盗取者就已经筛选了出了账号里面钱最多的token了。

然后当小C以为这是一个新的swap合约,并且有很高的年化收益,准备先试试的时候,按照常规流程就进行approve。

approve结束后,网站直接卡了。

后来经过追溯,大概在授权之后几十秒,合约就直接触发了一个转账操作,直接把BUSD token给转走了。

后来去查了一下授权的信息

基本上metamask默认授权的时候是

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

转换成数字,我们认识的就是 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

注意第2)3)点,是由合约控制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,感谢Free、即本聪、JulzW、大K快跑啊、阿猛先生的补充。

*本文仅为科普使用,不构成任何投资上的建议。

Share to:

Author: 巴比特资讯

Opinions belong to the column author and do not represent PANews.

This content is not investment advice.

Image source: 巴比特资讯. If there is any infringement, please contact the author for removal.

Follow PANews official accounts, navigate bull and bear markets together
PANews APP
US stocks closed higher across the board, with crypto stocks generally rising.
PANews Newsflash