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