作者:korpi,Degen Score Citadel成員

編譯:PANews

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

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

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

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

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

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

> transfer

> transferFrom

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

> transfer

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

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

> transferFrom

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

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

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

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

許多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 彈出窗口。

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

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

你該怎麼辦?

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

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

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

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

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

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

3.查看授權限額

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

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

4.撤銷不必要的授權。

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

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

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

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

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

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

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

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

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

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

2. 在Metamask中保存可信地址

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

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

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

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

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

4.撤銷不必要的授權

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

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

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

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

回到喬的故事……

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

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

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

等一下...

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

喬真的同意了嗎?

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

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

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

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

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

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

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

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

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

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

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

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