DeFi 固然可以帶給用戶可觀的收益,但是資金安全才是資產(chǎn)穩(wěn)步增長的核心。Cobo 安全團隊梳理了 DeFi 交互中常見的安全風險及對應的安全防范措施,希望可以對大家在牛市中的 DeFi 安全交互有所啟發(fā)和幫助。
自 2019 年 DeFi Summer 開啟后,以以太坊為首,出現(xiàn)了越來越多富有創(chuàng)意的去中心化金融協(xié)議(DeFi 協(xié)議),大大豐富了鏈上資產(chǎn)的可用性,使區(qū)塊鏈用戶可以更好地利用鏈上資產(chǎn)進行更多樣的金融活動并為此創(chuàng)造豐厚的收益。但隨著越來越多 DeFi 協(xié)議的興起,安全挑戰(zhàn)也隨之而來。據(jù)不完全統(tǒng)計,僅 2023 年一年,因區(qū)塊鏈攻擊而導致的資產(chǎn)損失已達到 26.1 億美元。可見,在參與 DeFi 協(xié)議的過程中,除了評估對應的收益預期以外,協(xié)議安全性方面的評估也不可忽視,否則會給用戶帶來大的損失。
一般而言,目前對協(xié)議安全評估的主流定義為代碼的安全性評估,這種定義的維度是比較單一的,這里的問題在于,評估的本身只是考慮了協(xié)議在靜態(tài)過程下的安全性,而在 DeFi 交互過程中,安全性往往是動態(tài)的,包含賬戶管理、協(xié)議交互前的準備、交互完成后的資產(chǎn)管理、數(shù)據(jù)監(jiān)控及極端情況下資產(chǎn)損失后的自救等多個階段。
作為一個即將要進入 DeFi 新手村的用戶,該如何在賺取收益的同時最大限度地保障資金的安全?Cobo 安全團隊梳理了 DeFi 交互中常見的安全風險及對應的安全防范措施,希望可以對大家在牛市中的 DeFi 安全交互有所啟發(fā)和幫助。
DeFi 交互中的常見安全風險和防范措施
一、賬戶私鑰泄露
賬戶私鑰泄露是目前新手用戶較為容易中招的問題之一,由于當前市面上錢包種類繁多,新手用戶缺乏自行判別錢包安全性的能力,很多新手用戶會下載一些不安全的錢包,并使用其來生成私鑰,從而導致私鑰被惡意回傳到攻擊者手中,造成私鑰泄露。很多資深用戶發(fā)現(xiàn)自己的主賬號在某一天被轉(zhuǎn)走所有資產(chǎn),分析大半天發(fā)現(xiàn)所有行為都正常,這種案例下大部分情況就是早期該賬戶使用了不安全的錢包來生成自己的私鑰導致私鑰早已泄露。
同時,由于區(qū)塊鏈空投導致的財富效應,很多新手用戶會盲目點擊一些所謂的空投網(wǎng)站,這些空投網(wǎng)站將自己包裝成非常正經(jīng)的項目網(wǎng)頁,并告訴用戶存在大量未領(lǐng)取代幣。在利益的驅(qū)使下,很多新手用戶會在網(wǎng)頁的誘導下,填入自己的賬戶私鑰,導致私鑰泄露。
為了防止私鑰泄露,用戶需要做到以下幾點來加以防范:
使用知名度較高的區(qū)塊鏈錢包,并從對應的官網(wǎng)進行錢包的下載。有條件的用戶建議使用硬件錢包。
永遠不要將自己的私鑰明文暴露在聯(lián)網(wǎng)環(huán)境中,也不要隨意將自己的私鑰輸入到任何網(wǎng)頁當中。
二、簽名釣魚風險
簽名釣魚風險和私鑰泄露一樣,同樣也是新手用戶的重災區(qū)。區(qū)別于直接讓用戶填入私鑰,此類釣魚攻擊則是誘導用戶發(fā)起一筆交易或簽名,從而獲取用戶相關(guān)資產(chǎn)的授權(quán),具有隱蔽性高、不易分析以及難以察覺等特點。
通常,攻擊者會先把用戶誘導到釣魚網(wǎng)頁中,以領(lǐng)取空投、驗證登錄等名義讓用戶發(fā)起簽名,此時,用戶的瀏覽器錢包提示用戶需要完成簽名。
釣魚交易的類型可能有多種:
直接轉(zhuǎn)賬類型。直接轉(zhuǎn)賬 ETH 或進行 ERC20 transfer 調(diào)用將錢包資產(chǎn)轉(zhuǎn)移到攻擊者地址。
Approve 類型。調(diào)用 ERC20 Approve 方法授權(quán)攻擊者錢包。用戶簽名時不會發(fā)生資產(chǎn)轉(zhuǎn)移。但攻擊者錢包可通過調(diào)用 transferFrom 轉(zhuǎn)移用戶資產(chǎn)。
EIP712 消息簽名。如 ERC20 Permit 方法;Permit2 授權(quán);NFT 掛單簽名等。此類簽名通常在錢包中展示為 Json 數(shù)據(jù)或者格式化較好的樹狀數(shù)據(jù)。用戶簽名時不會發(fā)起交易,不會有 gas 消耗。但簽名結(jié)果會被釣魚網(wǎng)站記錄,攻擊者可以使用該簽名結(jié)果轉(zhuǎn)移受害者的 ERC20 或 NFT 資產(chǎn)。
原始 hash 簽名。簽名數(shù)據(jù)為 16 進制 hash 數(shù)據(jù),從簽名數(shù)據(jù)本身無法推斷具體的簽名內(nèi)容。hash 背后可能是上述 1-3 種類型數(shù)據(jù)。簽名很可能導致資產(chǎn)損失。不過目前主流錢包通常會禁止此種簽名方式或者予以明顯的風險提示。
最近一些案例中還發(fā)現(xiàn)某些釣魚網(wǎng)站會要求用戶連續(xù)進行多筆簽名,且前幾筆均為無害的正常簽名。然后混雜一筆惡意簽名內(nèi)容。利用用戶的操作慣性誘導用戶完成簽名操作。
為了防止釣魚導致的資金損失,核心在于拒絕盲簽。對于每筆簽名認真審核,對于不確定內(nèi)容的交易拒絕簽名。具體來說,可以在簽名過程中注意以下內(nèi)容:
確認交互網(wǎng)站為 DeFi 項目官網(wǎng),檢查完整域名。
檢查合約調(diào)用的方法,對于 transfer, approve 方法重點檢查。
檢查交易附帶的 ETH 轉(zhuǎn)賬。某些釣魚網(wǎng)站會嘗試構(gòu)造看起來安全的方法(如 Claim),但實際會在調(diào)用時附帶 ETH 轉(zhuǎn)賬造成 ETH 等鏈原生代幣的損失。
不簽名原始 hash 內(nèi)容。
三、轉(zhuǎn)賬地址投毒
轉(zhuǎn)賬地址投毒為近來較為新穎的攻擊方式,其攻擊手法為在用戶發(fā)起一筆轉(zhuǎn)賬(ERC20, native token 等)時,使用與該交易中的接收地址相似的地址,向用戶發(fā)送一筆金額相同的交易,或金額相同但對應代幣為 fake token 的交易。
舉例:
Alice 每月會固定轉(zhuǎn)移了 1 ETH 給 Bob 作為薪資發(fā)放。Charlie 監(jiān)控到了這筆交易,用與 Bob 相似的地址(地址前 8 位和后 8 位相同)發(fā)送 0.001 ETH 給 Alice。這種操作后,在下次 Alice 再向 Bob 轉(zhuǎn)賬的時候,就有可能使用 Charlie 的地址來作為交易的接收地址。會發(fā)生這樣的情況的原因在于區(qū)塊鏈地址長度較長且無規(guī)律,用戶難以記憶,導致很多時候用戶會貪圖方便直接從上一次的交易記錄中復制地址。由于 Charlie 和 Bob 的地址極為相似,導致 Alice 難以分辨,最終導致資產(chǎn)損失。
為了防止中招轉(zhuǎn)賬地址投毒,用戶可以采取以下手段進行防范:
每次交易均核對轉(zhuǎn)賬地址,且要核對完整內(nèi)容而不是僅比較前后幾字節(jié)。
將常用的的地址設(shè)置進地址白名單(地址簿)中設(shè)置別名,盡量只使用地址簿中的地址進行轉(zhuǎn)賬。
避免將從鏈上渠道(包括區(qū)塊鏈瀏覽器、錢包交易記錄等)中復制地址作為轉(zhuǎn)賬目標。
四、代幣過度授權(quán)
代幣授權(quán)幾乎是進行 DeFi 交互的第一步。在進行 DeFi 操作時,由于交易數(shù)據(jù)是通過項目方網(wǎng)頁構(gòu)造而不是用戶構(gòu)造,在通常情況下,為了方便用戶多次交互而不需要重復授權(quán),項目方網(wǎng)頁通常會構(gòu)造一個無限授權(quán)的交易讓用戶簽名。其出發(fā)點是為用戶節(jié)省 gas,但是這也為后續(xù)資金安全埋下了隱患。假設(shè)后續(xù)項目代碼發(fā)生問題,如未授權(quán)接口,或任意調(diào)用漏洞,用戶對合約的無限授權(quán)將導致被攻擊者利用,導致用戶資產(chǎn)被轉(zhuǎn)移。這種攻擊場景在跨鏈橋和 DEX 協(xié)議中較為常見。
為了防止后續(xù)項目在升級中引入風險代碼或項目代碼本身存在未發(fā)現(xiàn)的漏洞,用戶應采用最小授權(quán)的原則,盡量僅授權(quán)本次交易中使用到的額度,防止后續(xù)項目風險導致自己的資產(chǎn)損失。
五、不安全的 DeFi 操作
除了交互前的準備外,在交互過程中同樣存在很多容易忽視的風險。這些風險通常源于用戶對項目本身的不了解導致。具體的例子為:
在通過鏈上兌換協(xié)議進行代幣兌換時滑點設(shè)置過大或者編寫腳本進行 swap 沒有設(shè)置最低接收數(shù)量(出于編寫方便設(shè)置為 0),導致交易受到 MEV 機器人的“三明治”攻擊。
在通過鏈上借貸協(xié)議進行借貸操作時,沒有對倉位健康度進行及時管理,導致大波動行情中倉位被清算。
在與某些項目交互時,沒有對項目方憑證進行良好的保管,如把 Uniswap V3 的 NFT 憑證當成是普通 NFT 到 OpenSea 中進行售賣。
為了防范這些風險,用戶在進行項目交互時,一定要做好對應的項目調(diào)研,明確項目機制和相關(guān)特性,防止資產(chǎn)損失。
DeFi 安全交易新范式 -- Cobo Argus
上文介紹了在區(qū)塊鏈進行 DeFi 活動常見的交互風險。用戶不小心中招其中一個,都有可能導致多年的努力全盤皆失,稍有不慎萬劫不復。那么,是否存在一個安全有效,又便于管理的風控方案呢?一個新的選擇方案是 Cobo Argus。
Cobo Argus 是一款由 Cobo 團隊進行開發(fā),基于 Gnosis Safe 進行構(gòu)建的鏈上風控產(chǎn)品。主要的作用在于可以通過構(gòu)建不同的 ACL 策略,對用戶交易進行解析,對其中不符合風控規(guī)則的交易進行攔截,從而確保用戶資金安全。
Cobo Argus 如何應對 DeFi 環(huán)境中的安全風險?
1. 底層多簽錢包,上層單簽授權(quán):避免私鑰泄露單點風險,減緩被釣魚風險,同時保證操作效率
Cobo Argus 是一個基于 Safe {Wallet} 的多簽錢包構(gòu)建的產(chǎn)品,其基礎(chǔ)和核心為多簽合約錢包。所以 Cobo Argus 天然繼承了 Safe {Wallet} 多簽錢包的安全性。
通過把資金從單個私鑰管理變成多個私鑰共同維護,可以杜絕由單個私鑰泄露帶來的資產(chǎn)丟失/鎖定風險。多簽錢包本身需要多個簽名來觸發(fā)交易的執(zhí)行,單個地址私鑰的泄露也不會影響總體資金的安全。另外可以發(fā)起多簽交易來替換丟失或有風險的單簽地址,保證多簽錢包的安全性。
另外由于從單簽地址切換到了多簽地址后,在交易簽名時,需要每個用戶對一筆交易進行簽名,有利于交叉審計交易內(nèi)容,從而大大降低了被釣魚的可能性。
多簽由于需要多人審核,對操作效率有一定影響。Cobo Argus 允許用戶配置靈活的授權(quán)規(guī)則,允許將某些風險較低的高頻操作(如進行 Farming 時定期 Claim 收益的操作)授權(quán)給某個 EOA 地址。該地址可以代替多簽錢包發(fā)起操作,提高工作效率。同時由于該地址權(quán)限被嚴格限制,錢包整體的安全性不會受到明顯影響。
2. 自定義機器人:7*24 小時自動風險監(jiān)測與響應
通過配置 Cobo Argus 監(jiān)控機器人,可以自定義需要監(jiān)控的條件和觸發(fā)條件需要執(zhí)行的操作。
以借貸項目的杠桿管理為例,用戶可以通過配置 Argus 機器人監(jiān)控自己的 health factor,當倉位接近清算時,可以由機器人進行補充抵押物、還款等降低杠桿的操作。
3. 自定義的 ACL 策略
除了自定義監(jiān)控機器人以外,有一定開發(fā)能力的用戶,還可以通過開發(fā)自定義的 ACL(Access Control List)合約來實現(xiàn)更加靈活的權(quán)限管理。這是 Cobo Argus 的核心功能之一。下面通過若干例子來感受該功能的魅力所在:
針對地址投毒攻擊,可以通過編寫 ACL 合約,用戶可以在 ACL 合約中指定常用的地址作為白名單,在交易過程中,ACL 合約會對交易中的接收地址進行解析(ERC20 / native token),并對用戶設(shè)置的白名單地址進行比對,如果接收地址不在對應的地址內(nèi),則該筆交易無法成功完成。
針對過度授權(quán)問題,用戶可以通過編寫 ACL 策略合約對 Approve 交易中的授權(quán)額度進行解析,限制代幣的 Approve 授權(quán)額度不超過用戶預設(shè)值?;?可通過配置自定義機器人,定期對相關(guān)代幣的授權(quán)清零。
針對不安全的 DeFi 操作,如無滑點檢查的 swap 交易,可以通過編寫 Argus ACL 策略合約,設(shè)定兌換交易可接受的最低滑點,在設(shè)置完成后,ACL 策略合約便可根據(jù)設(shè)定的滑點對不同的 swap 交易進行解析,如果兌換滑點不滿足,則可以對該筆交易進行攔截。
總結(jié)
DeFi 交互中存在很多難以防范的風險,文中提到的內(nèi)容雖然涉及了很多常見場景,但也不能完全覆蓋所有風險點。用戶需要認真處理每一筆交易。
Cobo Argus 可以為用戶提供可靠且易于配置的手段來防范常見的一些安全風險。通過 ACL 可以完成靈活且安全的授權(quán)管理,在保證安全性的前提下,提高操作效率;自定義機器人則可以減少人工操作,同時實時監(jiān)控的能力可以 7*24 小時保障用戶資金安全。
DeFi 固然可以帶給用戶可觀的收益,但是資金安全才是資產(chǎn)穩(wěn)步增長的核心。Cobo Argus 將守護每位 DeFi Farmer,幫助大家在牛市創(chuàng)造更多價值。