Cobo安全團隊:區塊鏈安全交易指南
原文作者:Cobo Global
Cobo 安全團隊通過整理鏈上交易過程中常見的風險點,編寫了交易安全的執行准則,旨在讓用戶在交易過程中規避風險,保障資金安全,防範釣魚攻擊。
前言
隨着比特幣 ETF 的通過,區塊鏈市場开始回暖。幣價的回升讓行業逐漸恢復了往日的繁榮。與此同時黑客活動也开始活躍起來。Cobo 安全團隊觀察到近一兩個月釣魚案件發生的頻率也有所增加。
近期 Restaking, BTC L2 等新的應用熱點开始湧現,鏈上交易逐漸成為 Web3 用戶日常不可或缺的一部分,越來越多的用戶資金也在往鏈上轉移。
而與交易所等中心化應用不同,鏈上應用的账戶安全需要通過用戶自己保障。安全地進行區塊鏈交易是 Web3 原住民最基本的能力。盡管很多基礎設施如瀏覽器插件錢包,甚至瀏覽器本身都對針對釣魚有一定的風險提醒,但用戶因不安全交易導致資產損失的事件還是時有發生(如私鑰泄露,籤名釣魚等)。
Cobo 安全團隊通過整理鏈上交易過程中常見的風險點,編寫了交易安全的執行准則,旨在讓用戶在交易過程中規避風險,保障資金安全,防範釣魚攻擊。
在开始介紹之前,Cobo 安全團隊為大家總結了安全交易的核心准則,如下:
1、拒絕盲籤,不理解的交易、消息不籤名;
2、不厭其煩,反復驗證。
如何進行安全交易
一個完整的 DApp 交易流程包含多個環節: 錢包安裝、訪問 DApp、連接錢包、消息籤名、交易籤名、交易後處理。 其中每個環節都存在一定的安全風險,下面將依次介紹實際操作中的注意事項。
注:本文主要介紹以太坊及各 EVM 兼容鏈上的安全交互流程,其他非 EVM 鏈使用的工具和具體的技術細節可能不同。
錢包安裝
目前 DApp 的主流使用方式是使用瀏覽器插件錢包進行交互。EVM 鏈使用的主流錢包有 Metamask 和 Rabby 等。
Cobo 安全團隊在深度體驗後,基於風險提示的角度,推薦使用 Rabby 插件錢包來作為主要的鏈上交互錢包。其原因在於:相較於 Metamask 錢包,Rabby 錢包提供交易數據解析、交易模擬執行、交易風險預警、授權查詢和歷史籤名數據查詢等功能,在針對釣魚防範上會比 Metamask 錢包具有更大的優勢。
安裝 Chrome 插件錢包,需要確認從 Chrome 應用商店中下載安裝,不要從第三方網站安裝錢包,避免安裝有後門的錢包軟件。
有條件的用戶建議聯合使用硬件錢包,在私鑰保管上可以更大程度地提高整體的安全性。
訪問 DApp
網頁釣魚是 Web3 攻擊中的常見攻擊手法,典型案例是以空投名義誘導用戶訪問釣魚 DApp 應用,在用戶連接錢包後誘導用戶籤署代幣授權、轉账交易或代幣授權籤名,導致用戶資產遭受損失。
因此在訪問 DApp 時,用戶需要保持警惕,避免進入網頁釣魚的陷阱。
在訪問 DApp 前應該確認 DApp 網址的正確性。建議:
-
盡量不要從 Google 搜索關鍵字第一名直接進行訪問,釣魚攻擊者可通過購买廣告位使自己的釣魚網站搜索排名置頂,因此第一名不一定是官方網站。
-
避免直接點擊 x.com 及各類社交軟件中其他用戶的評論、消息中發布的網址,這類網址很可能是釣魚鏈接。
-
反復確認 DApp 網址正確性後進行訪問,可根據 DefiLlama 等 DApp 市場、項目方官方 X 账號、Google 搜索結果多方校對。
-
確認安全的網站添加過瀏覽器收藏夾中,後續直接從收藏夾中訪問。
在已經打开 DApp 網頁之後,也需要對地址欄進行安全檢查:
-
檢查域名、網址。 通常 DApp 會使用比較簡潔的域名和網址。如 https://app.uniswap.org/;如果遇到特別長的域名,形如 https://zk-polyhedra.network-8jb.xyz/或與知名網站名稱類似的域名,如 https://pufffer.fi(注意多了一個 f),則很可能是登入的釣魚網站,應立刻退出。 識別域名時也要特別注意 1 il, oO 0 等各類形近字符的情況。
-
檢查瀏覽器 https 鏈接情況。 目前主流 DApp 均使用 https 鏈接,瀏覽器應該顯示?狀標志。如果不是 https 鏈接或瀏覽器提示證書異常的情況,則訪問的可能不是官方網站或遭遇了劫持攻擊,應該立刻停止訪問。
目前市面上主流瀏覽器插件錢包都已經集成了一定的風險提示功能,如 Metamask/Phantom 等。在訪問一些位於黑名單中的風險網址時,瀏覽器插件錢包甚至 Chrome 瀏覽器本身都可能會展示強安全提示(見下圖)。
連接錢包
進入 DApp 後,可能會自動或在主動點擊 Connect 後觸發連接錢包的操作。插件錢包會針對當前 DApp 的進行一些檢查、信息展示等。
以下是 Rabby 錢包給出的網頁審查信息,可用來輔助進行 DApp 真實性的判斷。
在連接錢包後,通常在用戶沒有其他操作時,DApp 不會主動喚起插件錢包。如果網站在登入後 DApp 頻繁喚起錢包要求籤名消息、籤署交易,甚至在拒絕籤名後仍會不斷彈出籤名的情況,那么也很可能是釣魚網站的情況,需要謹慎處理。
消息籤名
在極端情況下,比方說攻擊者攻擊了協議的官方網站或通過前端劫持等攻擊,對頁面內容進行了替換。普通用戶很難在這種場景下對網站安全性進行甄別。
此時插件錢包的籤名是用戶保存自身資產的最終屏障。只要拒絕掉惡意籤名,就能保障自身資產不受損失。 用戶在籤名任何消息和交易時都應該仔細審查籤名內容,拒絕盲籤。
從技術上講,目前以太坊中常見的籤名類型有三類:
-
哈希籤名 eth_sign: 針對某個數據的原始 hash 進行籤名。hash 的原始數據可能是消息甚至以太坊交易。
-
消息籤名 personal_sign: 針對數據明文進行籤名,在用戶登錄驗證或許可協議確認時最為常見。
-
結構化數據籤名 eth_signTypedData(EIP-712): 針對 DeFi 協議中使用的數據對象的籤名,常見的如 ERC 20 Permit 授權籤名、NFT 掛單籤名等。
針對消息籤名的風險判別,用戶可遵循以下准則:
-
自然語言籤名通常可以放行。 這類籤名通常 personal_sign,用於登錄確認或者確認產品須知,為大段的自然語言描述(而非數字、十六制等形式)。此類消息因為包括自然語言,字符串比較復雜,智能合約處理比較困難,因此通常不會用於鏈上鑑權,只是網站用於確認地址身份。因此相對風險較低。
-
禁止直接籤名 16 進制原始 hash。 這類籤名通常是 eth_sign 籤名,這類籤名最為危險,因為用戶無法判斷 hash 原本的數據內容是什么。因此大部分錢包已經禁用了針對原始哈希( 16 進制數據)籤名的功能。Metamask 錢包,可在 設置 ->高級 -> Eth_sign 請求 選項卡中確認其配置為關閉狀態。Rabby 錢包,相關配置默認禁用的,無需額外配置。
-
結構化數據籤名仔細檢查籤名內容。 如 ERC 20 Permit 授權籤名則要檢查其中 spender 地址是否符合預期,如為 EOA 地址則很可能是點擊了釣魚籤名,應該立即拒絕。
針對消息籤名,這裏需要額外注意的是,盡管在瀏覽器插件錢包中 eth_sign 操作是默認禁止的,但錢包仍可通過 personal_sign 對 hash 類的數據進行籤名。這類籤名不會導致 permit 授權或發起交易。但個別協議(如一些 AA 錢包)仍可能使用 personal_sign 籤名進行鑑權。為避免損失原則上還是不對 16 進制數據進行籤名。這類籤名效果如下:
交易籤名
籤名交易要遵循不盲籤的原則 。目前許多插件錢包會針對待籤名消息進行解碼並展示相關內容,如下是 Rabby 錢包對一筆 DEX 交易的解析示例:
其中用戶可以查看交易的目標地址的一些相關信息,如 是否為 EOA 地址、地址余額以及合約部署時間等。 用戶可以根據這些信息對要籤署的交易進行風險判斷。例如如果交互的地址為 EOA 地址,或交互的合約部署時間小於 7 天,則可以認為該操作具有較大風險,應充分調查後再進行操作。
對於开源協議,主流的瀏覽器插件錢包已經支持對交易數據的解析,通過查看 ABI 解碼後的交易內容,可以更加清楚地了解當前在進行什么操作。合約調用的函數名可以提供一些其功能的參考:如 approve、swap、transfer、deposit 和 withdraw 等。
Rabby,imToken 錢包還集成了模擬執行功能,用戶在交易確認前可以直接看到交易執行結果,通過交易模擬執行,用戶可以查看到當前交易會導致的各種資金轉移情況。用戶應該仔細檢查,對於不符合預期執行結果拒絕籤名。
對於有一定技術儲備的用戶,在自動化工具無法順利解析交易的情況,也可使用一些常見的人工檢查方法:
-
通過復制交互目標合約地址到區塊鏈瀏覽器如 etherscan 中進行審查,審查內容主要包括合約是否开源,近期是否存在大量交易和 Etherscan 是否為該地址打上官方標籤或惡意標籤。
-
在遇到插件錢包無法識別的交易,可以通過手動復制原始交易數據(raw_data,通過 16 進制數據展示)中的前 8 位數字到 https://openchain.xyz/signatures進行查詢,得到原始的函數名稱,以大概確定交易的行為。
-
使用 Phalcon, Tenderly 和 Dedaub 等交易模擬工具進行模擬執行,查看交易具體執行細節。
交易後處理
在躲過了釣魚網頁和惡意籤名後並不意味着萬事大吉,交易後也仍需進行風險管理。
交易後應及時查看交易的上鏈情況,確認其與籤名時預期的狀態是否一致。如果發現異常及時進行資產轉移、授權解除等止損操作。
ERC 20 Approval 授權管理也十分重要。有些案例中用戶對某些合約進行了代幣授權後,多年後這些合約遭受攻擊,攻擊者利用了被攻擊合約的代幣授權額度來竊取用戶資金。
為避免此類情況 Cobo 安全團隊建議用戶遵循以下標准來進行風險防範:
-
最小化授權。 當進行代幣授權時,應根據交易的需求有限量的授權相應的代幣數量。如某次交易需要授權 100 USDT,則本次授權數量即限制為 100 USDT,而不要使用默認的無限授權。
-
及時撤銷不需要的代幣授權。 通過 Rabby 錢包的 Approval 功能或者登錄 revoke.cash 查詢對應的地址的授權情況,撤銷較長時間沒有交互的協議的授權,防止協議後續存在漏洞導致利用用戶的授權額度造成資產損失。
其他技巧
除了上述交易流程中的風險外,合理利用通過某些工具中集成的功能也可以規避一些風險。
-
某些錢包內置錢包導入功能(如 Rabby)。可以通過導入其他移動端錢包的地址,在進行交易時可以進行強制的二次確認(需要喚醒錢包、掃碼和輸入密碼確認)來減緩釣魚風險。同時享有移動端錢包的交易安全檢查(白名單、模擬執行和釣魚提示等)
-
某些錢包支持導入的觀察者錢包(如 Rabby,OneKey,TokenPocket,imToken 等),通過觀察者錢包進入一些陌生的網站。仍會正常喚起消息籤名或發起交易的頁面,此時可仔細查看待籤名內容。同時因為沒有私鑰,不必擔心誤操作確認的情況。
-
通過 Rabby 錢包的 Approvals 功能查詢地址的授權情況,及時撤銷高危授權。Tips: Rabby 在該功能中使用了多個維度(歷史授權鏈接總金額/24 h 取消授權數量/授權時間/授權資產數量)來對授權風險進行評判,可以更有效幫助用戶識別授權風險。
-
誤操作籤名後,通過 Rabby 錢包的 Signature Record 功能及時檢查自己籤名過的交易和文本數據,及時排查授權風險。
在具備了風險意識和做了充足的風險防範的情況下,也仍要進行有效的資金隔離,在極端情況下降低資金的受損程度。Cobo 安全團隊推薦大家使用以下方案來進行資金存放:
-
使用 Gnosis Safe 多籤錢包或冷錢包存放大資金;
-
使用瀏覽器錢包生成的地址或者其他 EOA 錢包存放小資金用戶交互,並定期更換熱錢包地址。
如果不小心真的發生被釣魚的情況,可以立即執行以下操作來降低損失:
-
Revoke.cash 及時取消授權;
-
如果籤名了釣魚 permit 消息且資金未被轉走,則立刻籤名新的消息並發起 permit 調用使釣魚消息 nonce 失效;
-
必要時轉移账號資金。
如何安全領取空投
發放空投是目前項目方用於吸引用戶的常見方式,同時也是用戶被釣魚攻擊的重災區。為此,基於上文的安全交易准則,Cobo 安全團隊為大家整理了一套用於領取鏈上空投的安全交互流程:
-
先使用 Rabby 觀察者錢包測試一遍交互流程,確認無代幣授權、代幣轉账類交易。
-
領取空投過程中不進行 Permit 類消息籤名。不進行 Approve 合約調用。
-
盡量使用「小號」領取空投。
-
領空投交易查看模擬執行結果,確認無代幣轉出。
插件工具選取
區塊鏈安全守則的內容很多,有可能不是每次交互都能做到細致的檢查,那么是否存在一種好用的瀏覽器插件來輔助我們做出風險判斷呢?
Cobo 安全團隊體驗了市面上較為主流的交易風險檢查插件,並從 「釣魚網頁攔截」、「惡意授權地址檢查」和「是否开源」 三個維度整理成表格,大家可以根據自身情況選擇使用,如下:
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
動區週報:比特幣新高後回落、鮑爾不急降息 市場情緒轉變、迷因幣火熱…
本週(11/10-11/16)重要大事速覽 比特幣動態 :鮑爾放鷹「 不急降息 」,比特幣價格一度...
Hack VC:模塊化是個錯誤嗎?以數據為依據審視以太坊的這一战略
撰文:Alex Pack 及 Alex Botte,Hack VC 合夥人 編譯:Yangz,Te...
除了 TON, 哪些公鏈在爭奪 Telegram 用戶?數據表現如何?
作者:Stella L ( [email protected] ) 在 2024 年...
星球日報
文章數量
7106粉絲數
0