巨鯨錢包被盜50萬美金,我們該如何保護資產?(附操作指南)

語言: CN / TW / HK

作者:korpi,Degen Score Citadel成員

編譯:PANews

你知道在Metamask中的一條簡單簽名就可以把你錢包的資產變的一乾二淨嗎?一位經驗豐富、Degen評分前10名(譯者注:Degen排名前10的玩家,分數需達到3000左右,過去兩三年來一直不間斷進行鏈上操作)的使用者在一次漏洞中損失了近50萬美元。

這件事是如何發生的?我們又如何避免?

一個安靜的下午,喬(化名)注意到469k USDC離開了他的錢包。這不是簡單的轉移,因為攻擊者顯然無法訪問喬的錢包。這是一份惡意合約,轉光了他地址中的所有USDC。

我們先暫停故事來解釋一些技術細節。

USDC代幣是以太坊上的合約。它有許多功能定義了我們如何與USDC互動,以及可以用它做什麼。讓我們關注兩個功能:

> transfer

> transferFrom

> transfer

當你在錢包之間轉移USDC(或其他 ERC20)時,你使用了轉賬功能。它將代幣從呼叫者(呼叫函式的地址)移動到其他地址。如果要代表你進行惡意轉賬,必須有人控制你的錢包。

> transferFrom

當你與合約互動時,它們使用 transferFrom 來移動你的代幣。這些合約最多可以佔用你在授權功能中設定的授權金額。如果你允許一個合約可以無限量使用你的的USDC,它就可以全部拿走。

如我以前所說,你知道如何保護自己免受導致許多人丟失寶貴NFT的網路釣魚攻擊嗎?

作惡的人發明了越來越多複雜的方法來獲取你的JPEG,但他們通常依賴於使用相同的漏洞。

許多NFT持有者的JPEG被盜。高階的加密使用者過去常常取笑他們,認為他們對只有“菜鳥”才會上當的簡單網路釣魚策略免疫。但上週Uniswap V3流動性頭寸(也是 NFT)也以同樣的方式被盜。

許多漏洞利用不再是使用最明顯的方式,即偷盜他們的私鑰或者助記詞。人們現在更聰明瞭,不會在Telegram和Discord上與冒充客服的人分享他們的私鑰。但他們仍然是被盯上的物件。

要了解這些漏洞利用的工作原理,你需要熟悉以太坊和其他EVM鏈上的“授權”概念。

第一部分:理論

無需信任任何人即可保管自己的資產是區塊鏈的本質。如果你的錢包中有可替代 (ERC20) 或不可替代 (NFT) 代幣,那麼沒有人可以從你那裡拿走它們,除非你讓他們這樣做(授權)。

授權是授予第三方訪問你資金的許可權的行為。未經授權,智慧合約不能在你的錢包中使用資產——你不能在Uniswap上出售ERC20或在Opensea上列出 NFT。讓我們更深入地瞭解授權的工作原理。

你授權合約以獲取ERC20s型別的X個代幣TKN。

- 被授權的合約可以隨時從你的錢包中取出X個TKN。

- 有沒有硬體錢包都沒有關係。

- 直到 X 個TKN被合約轉走或你撤銷授權。

你授權合約以訪問某個NFT藏品CLN中的所有物品。

- 被授權的合約可以隨時從你的錢包中取出CLN中的所有物品。

- 有沒有硬體錢包都沒有關係。

- CLN被授權,直到你撤銷授權。

與區塊鏈上的智慧合約互動需要授權,但也很危險。許多漏洞利用實際上非常簡單——一位不知情的受害者授權了一份惡意合約,該合約從受害者的錢包中獲取了授權的ERC20/NFT。

如何避免?

第二部分:實踐

以太坊和其他EVM鏈上的大多數使用者都使用 Metamask,所以我將使用這個錢包來演示如何保護你的資產不被盜。我們集中來說ERC20s和NFTs的授權,以便你將來永遠不會授權惡意合約。

假設你想在 Uniswap 上出售$APE 。第一步是授權 -如下面的 Metamask 彈出視窗。

它很好地解釋了你在做什麼 - 允許合約訪問你的 APE。但它對保護你免受網路釣魚幾乎沒有作用。

你該怎麼辦?

1. 檢查你正在授權的合約。

如果前端被黑了怎麼辦?或者你在釣魚網站上?你可能會被誘騙授權一項惡意合約,該合約會扣押你的代幣。檢查Etherscan上的合約-他們有對你有用的標籤。

2.檢查你正在授權的代幣

想象一下,一個惡意網站觸發了對WETH的授權,而不是空投給你的無價值代幣。這可能會偷光你的錢包的WETH。仔細閱讀Metamask彈出視窗。

3.檢視授許可權額

大多數dapp都要求對代幣進行無限制授權。如果將來授權的合約落入惡意者手中,它可以從你的錢包中拿走所有授權的代幣。因此在傳送交易之前檢查和編輯授許可權額。

4.撤銷不必要的授權。

如果你預期未來不再與這個合約互動,請撤銷其訪問你的代幣的許可權。有些合約是安全的,但也請謹慎,安全總比後悔好。

使用 https://etherscan.io/tokenapprovalchecker 撤掉授權。

當涉及到你的ERC20時,這些是保持高安全級別的簡單步驟。不幸的是,它對NFT的使用者友好度有點低,這是大多數授權漏洞針對NFT持有者的原因之一。

假設你想在OpenSea上掛出你的NFT。第一步是授權 - 如下面的Metamask彈出視窗。

與ERC20不同,這裡非常神祕-很難知道你在做什麼。為了確保你的JPEG檔案安全,你需要保持警惕並遵循以下準則。

1.檢查你正在授權的地址

如果你授權了惡意合約,別人可以立即從你的錢包中取出已授權集合中的所有NFT。因此確保你信任合約。現在轉到Etherscan並檢查標籤以瞭解它是什麼。

2. 在Metamask中儲存可信地址

Metamask為你提供了為地址新增暱稱的選項。儲存後,它們將顯示在彈出視窗而不是0x字串中,因此你將立即知道你正在與哪個地址進行互動。新增暱稱以避免被網路釣魚。

3.檢查你正在授權的集合

確保你不會被誘騙授權你不想授權的集合。這可能是在你沒有密切注意的情況下試圖竊取你寶貴的JPEG檔案。轉到資料選項卡並檢查Etherscan上的集合。

4.撤銷不必要的授權

撤銷NFT的授權不如ERC20常見,但風險是相同的。因此,如果你將來不打算與合約互動,請刪除其訪問你的NFT的許可權。

使用 https://etherscan.io/tokenapprovalchecker 撤銷授權。

按照這些簡單的步驟,你將避免許多惡意網站設定的網路釣魚陷阱。

加密貨幣中的許多漏洞利用不涉及任何黑客攻擊。當你與智慧合約互動時,他們只是利用你的注意力不集中。重視審批,不輸就贏。

回到喬的故事……

前面提到的偷光Joe的USDC的合約互動確實是transferFrom函式。但是,只有在喬授權了使用他的USDC的合同時,transferFrom才會起作用。

喬100%確信他在此期間沒有做任何授權。

等一下...

DeBank歷史清楚地顯示,在漏洞利用前10分鐘,喬的USDC對惡意合約無限授權......

喬真的同意了嗎?

是的。但也沒有。不是直接的。

Etherscan可以看到,無限授權不是Joe自己呼叫的授權函式。它是由其他地址呼叫的授權函式,它授予惡意合約使用Joe的所有USDC的許可權。

怎麼回事?其他人如何代表你授權合約?

引入授權功能是為了改善以太坊的使用者體驗。它允許使用者在不提交交易的情況下修改授權金額。一個簽名就足夠了。有了你的簽名,任何人都可以呼叫授權功能並更新你的消費限額。

當你使用1inch dApp時,你可以看到授權在起作用。如果你想出售USDC,你不必先授權給它,只需要簽署一條訊息即可。此簽名授予1inch使用你所有USDC的許可權。 1inch不會這樣做,但惡意合約會。

喬一定是不小心在惡意網站上簽名了這樣的訊息。不幸的是,這一次他使用了熱錢包,簽名只是一個看似一不留神的點選。使用硬體錢包,在外部裝置上簽名訊息時會有一個三思而後行的提示。

藉助喬的簽名,作惡的人提交了具有授權功能的交易。它允許惡意合約使用Joe錢包中的所有 USDC。然後呼叫transferFrom函式,偷光了所有資金。

很顯然簽名可能是災難性的。在某些情況下,Metamask會警告你簽名的訊息可能是危險的。但那些在技術上是按照原本設計好的流程工作的簽名授權則不然,這如果被濫用,會造成很大的損失。