時(shí)間:2022-02-18|瀏覽:556
事件
2022年元旦假期的某個(gè)早晨,小 C 準(zhǔn)備寫代碼,繼續(xù)測(cè)試 Web3js 鏈上合同交易。突然發(fā)現(xiàn)自己的測(cè)試賬號(hào)(Bsc 鏈)在 MetaMask 歸零,明明前一天晚上賬戶里有 100usd,然后查轉(zhuǎn)賬發(fā)現(xiàn):
錢沒了,錢去哪了?
背景
技術(shù)背景的小 C,最近,我正在學(xué)習(xí)區(qū)塊鏈開發(fā)。我是一名專業(yè)開發(fā)人員,非常謹(jǐn)慎。我通常在測(cè)試網(wǎng)絡(luò)上運(yùn)行。運(yùn)行后,我將在官方網(wǎng)絡(luò)上部署。然而,我沒有意識(shí)到整個(gè)行業(yè)仍處于相對(duì)混亂的階段,粗心大意,習(xí)慣方便,造成損失。
損失是如何造成的?
2021年的最后一天,小 C 偶然看到一個(gè)賬號(hào)很有意思(這個(gè)賬號(hào)有很多活躍的交易),就跟著他的一些鏈上交易,然后看到一個(gè)很有意思的項(xiàng)目(年化收益率很高),然后把自己的 連接起來。MetaMask,然后鬼使神差進(jìn)行了 approve,因?yàn)橐话?Web3 項(xiàng)目就是這個(gè)過程,approve 然后轉(zhuǎn)賬就結(jié)束了。
然而,一個(gè)令人震驚的場(chǎng)景出現(xiàn)了:點(diǎn)擊后,整個(gè)網(wǎng)站突然卡?。ㄊ聦?shí)上,在卡住期間,盜竊者轉(zhuǎn)移了錢),沒有反應(yīng),小 C 當(dāng)時(shí)沒當(dāng)真,關(guān)掉了網(wǎng)站,做了其他事情。
大約一天后,小 C 回來開發(fā)的時(shí)候,發(fā)現(xiàn)賬上的錢都沒了,查了歷史記錄,發(fā)現(xiàn)賬上的余額都轉(zhuǎn)走了。
回顧過程
盜取者是怎么把小 C 賬戶上的錢都轉(zhuǎn)了?
現(xiàn)象:只要你 approve 理論上,無需私鑰也可以轉(zhuǎn)移相應(yīng)的錢。
小 C 在釣魚網(wǎng)站源,大概是在釣魚網(wǎng)站 approve 出了問題,所以追溯轉(zhuǎn)賬記錄。
先是 approve(授權(quán))一份合同授權(quán)釣魚合同可以在賬戶中 BUSD 操作,沒有數(shù)量限制。
為什么是 BUSD 呢?小 C 回想起來,一進(jìn)入這個(gè)釣魚站,就默認(rèn)選擇了 BUSD ,估計(jì)盜竊者在瀏覽網(wǎng)站鏈接錢包后,已經(jīng)篩選出賬戶中錢最多的 token 了。
然后當(dāng)小 C 認(rèn)為這是一 swap 合同年化收入高。準(zhǔn)備先試試的時(shí)候,要按照常規(guī)流程進(jìn)行 approve。approve 結(jié)束后,網(wǎng)站直接卡住了。
后來經(jīng)過追溯,授權(quán)后幾十秒左右,合同直接觸發(fā)了一個(gè)轉(zhuǎn)賬操作,直接觸發(fā)了 BUSD token 轉(zhuǎn)走了。
后來去查授權(quán)信息
基本上 MetaMask 默認(rèn)授權(quán)為:
我們知道的是 1.157920892373162 乘以 10 59 次方?;旧峡梢岳斫鉃闊o限轉(zhuǎn)賬,也就是授權(quán)操作,可以讓合同無限操縱我賬號(hào)的 token。看到這里感覺背后很涼,因?yàn)橹包c(diǎn)過很多次 approve 不會(huì)去看。
然后黑客操縱一個(gè)可以控制合同方法的錢包地址,發(fā)起合同轉(zhuǎn)賬方法,把錢轉(zhuǎn)走。所以小伙伴點(diǎn)了 metamask 授權(quán)時(shí)一定要小心。
小 C 查了一下,盜竊者現(xiàn)在這個(gè)賬號(hào)大概已經(jīng)有 3了w 美金的 token ,還有源源不斷的受害者在轉(zhuǎn)賬。但面對(duì)區(qū)塊鏈,沒有辦法找到黑客是誰。
問題環(huán)節(jié)
問題在哪里?
因?yàn)槲易罱趯W(xué)區(qū)塊鏈。C 大概理清了這種釣魚的邏輯方式,害人之心不可或缺,防人之心不可或缺。有興趣可以了解一下:
正常轉(zhuǎn)賬
案例1:直接用戶間轉(zhuǎn)賬 A 用戶向 B 用戶轉(zhuǎn)賬 BUSD
正常合同檢查以下邏輯
1)判斷 A 用戶賬戶余額是否足夠; 2)是否 A 用戶發(fā)起的轉(zhuǎn)賬
正常合同兌換
我們通常使用 pancakeswap、uniswap 等待交換過程
案例二:通過 swap 進(jìn)行 token 兌換 A 用戶進(jìn)行 token 兌換(BUSD 兌換 WBNB)判斷流程 合同:
1)A 用戶賬戶余額是否足夠 BUSD,(假設(shè)授權(quán) swap 合同可以操作 A 賬戶的 BUSDtoken)
2)swap 合約取 A 賬戶下的 500BUSD 放入 swap 合約池(假設(shè)匯率為 1:500)
3)合同成功后再向 A 賬戶轉(zhuǎn)入 1BNB
注意第二、三點(diǎn),由合同控制token 操作。也就是說,合同可以繞過我們直接在我們賬戶下發(fā)起 token 的操作。
釣魚合約
正常轉(zhuǎn)賬時(shí),轉(zhuǎn)賬方和合同執(zhí)行的轉(zhuǎn)賬方應(yīng)為同一人,應(yīng)由同一人發(fā)起。我轉(zhuǎn)賬的交易不是同一個(gè)地址。據(jù)推測(cè),合同的執(zhí)行應(yīng)由可以執(zhí)行釣魚合同的錢包地址控制,然后授權(quán)給釣魚合同中的 BUSD 轉(zhuǎn)走了。
查看釣魚合同,不出所料,釣魚合同是加密合同。但想想也不難。我學(xué)了一點(diǎn) Solidity 的人都知道,在定義合同時(shí),多設(shè)置幾個(gè) Admin 或者 Owner 就可以了。
所以以后一定要注意項(xiàng)目方的背書,不要隨便授權(quán)不知道的項(xiàng)目!??!
安全建議
因此,小 C 搜索了一些有用的建議和方法,看到了很多血淋淋的教訓(xùn)。
您可以根據(jù)自己的需要選擇一些方法。
1)不要共用密鑰
我以前看過一篇帖子一個(gè)助記詞生成多個(gè)賬號(hào),不推薦,因?yàn)楹芸赡苁且诲伓恕?br>2)密鑰離線保存
因?yàn)楝F(xiàn)在有很多剪貼工具輸入法將您的剪貼記錄上傳到云中,如果您直接復(fù)制,如果云泄漏,您的密鑰將直接丟失。
我的建議是在生成后第一次復(fù)制到筆記本上。當(dāng)然,如果你把它抄到筆記本上,你也可以參考我典來加密密鑰,比如 a 用 1 代替,b 用 2 代替,1 用 a 替換,以確保即使有人看到你的紙質(zhì)密鑰,你也不能移動(dòng)你的數(shù)字資產(chǎn)。
3)開發(fā)與測(cè)試分開(空投與主賬隔離)
安裝 2 瀏覽器,一個(gè)可以是 chrome,一個(gè)是 brave。管理你的主錢包。另一個(gè)可以參與空投、各種鏈操作等
4)不要下載來歷不明的軟件
不要去用 baidu 這些下載來源不明的軟件,我看到下載盜版的案例 metamask,直接破產(chǎn)。必須在正式地址下載。如果條件允許,可以參考 google play。chrome web store 等
5)立即檢查您的授權(quán)
以下是檢查網(wǎng)站,debank 沒有開源,但 UI 互動(dòng)比較好,后續(xù)有開源。讓我們自己選擇。
每次喚起 MetaMask 一定要多看授權(quán),不要像我現(xiàn)在這樣無腦授權(quán)下一步。
6)授權(quán)前確認(rèn)合同安全
可采用慢霧合同審計(jì)功能。
還可以看合同是否開源,如果開源,需要確認(rèn)合同是否可升級(jí)等。
7)空投和福利時(shí)注意安全
用小號(hào)領(lǐng)取,不要用大號(hào),授權(quán)時(shí)可以設(shè)定額度?。。?br>8)警惕社工入侵,小心 Discord 私下談?wù)撃愕哪吧?br>比如 Discord 或者 Telegram,有人認(rèn)識(shí)你幾天,說要帶你賺錢拿空投,讓你安裝他發(fā)給你的軟件并登錄。這個(gè) 99.99% 你會(huì)賠錢。賬戶被盜。
特別地,Discord 里面,進(jìn) NFT 的官方 Discord,會(huì)有人私下和你聊天,告訴你你得到了白名單,附上一個(gè) mint 鏈接。騙子會(huì)把頭像和名字改成官方的樣子,但實(shí)際上是把他和你拉成一個(gè)小組。
事實(shí)上,只要你不貪婪,這個(gè)騙局就很容易看穿,通常會(huì)告訴你在幾個(gè)小時(shí)內(nèi) mint,數(shù)量 1-10.許多熱門項(xiàng)目的白名單 mint 一兩個(gè)不錯(cuò),這個(gè)頂格 10 也有時(shí)間限制。
會(huì)有騙子模仿項(xiàng)目官網(wǎng)做假網(wǎng)站,私信給項(xiàng)目 Server 里面的人,讓他們來 mint.
還有朋友opensea 買了假 NFT 后來發(fā)現(xiàn)不是官方,過了幾天那個(gè) NFT 從賬戶上消失了 但是已經(jīng)扣了。...(怎么發(fā)現(xiàn)?看鏈條 和官方 discord 官方 Opensea 網(wǎng)址 )
還有假的 collab.land 騙錢包密碼,給大 v 空投然后被稱為大 v 買了那個(gè) NFT/token.
熱點(diǎn):MetaMask NFT token token. 區(qū)塊鏈 區(qū)塊鏈開發(fā) 數(shù)字資產(chǎn) 錢包