時值國慶大假期間,加密錢包初創公司ZenGo的研究員亞歷克斯·馬努斯金(Alex·Manuskin)爆料稱,有用戶一夜之間損失了價值14萬美元的Uniswap代幣UNI,而這與名為UniCats的“收益農場”有關。

據了解,一些參與DeFi提供流動性挖礦賺取收益的用戶最近發現了UniCats這個新農場。從界面來看,UniCats類似Yam Finance和SushiSwap;收益方面,不僅可挖礦本地MEOW代幣,同時還可挖出包括UNI在內的其它代幣。

界面友好,產能不賴,資產入場。

當用戶準備提供流動性時,UniCats彈出提示框,要求獲取消費限制許可,而該許可的限制是:無限。

用戶可能怎麼也不會想到,在這個無限消費的許可的背後,UniCats開發者早已暗置了一個直通自家資產的“後門”。用戶的資產可由此被悄悄轉移至開發者指定的地址。

就這樣,有大膽且不幸的“農夫”瞬間被竊取了價值14萬美元的UNI,而其他用戶也有不同程度的損失。

盜竊“現場”

那麼,UniCats開的這個“後門”,又是如何對用戶進行竊金操作的呢?

1、盜竊者首先將UniCats的owner權限轉移給一個合約地址。

2 、盜竊者通過獲得owner權限的合約地址調用UniCats的setGovernance方法。

3、setGovernance函數調用對於代幣的transferFrom函數,將用戶資產轉移到盜竊者地址。

第2、3步為此次盜竊的核心步驟,如下圖所示:

“後門”分析

UniCats合約中的setGovernance函數是實現盜竊的關鍵。通過調用此函數,UniCats合約即可作為調用者,能夠向任意合約發起任意調用。

據上圖所示,調用該方法可輸入兩個參數 ,即一個地址類型的“_governance”和一個bytes類型的“_setData”。而函數的governance.call(_setupData)其實是表示向參數“_governance”地址發起一筆交易,其calldata為參數“_setData”。如此一來,只要有權限調用這個方法,便可以藉合約的身份發起任意交易。

在進行代碼編寫時,其註釋表示此函數是一個修改治理合約的函數,如下圖所示:

事實上,根據成都鏈安的審計經驗,修改治理合約通常並不需要調用call。而且,UniCats在對用戶資產進行盜竊時,還刻意多次變換owner地址,如下圖所示:

不僅如此,資產在轉出後還立刻被流入混淆器,如下圖所示:

如此操作,老練狠辣、一氣呵成,因此基本可以斷定,該項目就是一個徹頭徹尾的騙局,為的就是釣魚詐騙而上線。  

令人細思極恐的是,在本案例中盜竊者調用了transferFrom方法對用戶的資產實施轉賬,這就使得即便存在於錢包的用戶資產,也可能面臨被盜的風險。由於在合約授權時發起的是無額度限制授權,因此,一旦授權許可通過,合約就有權轉移用戶所有的資產。

成都鏈安鄭重提醒,用戶在進行合約授權時,使用多少,授權多少。這樣操作的話,即便不幸遭遇類似欺詐性質的合約,也不會殃及錢包中的本金。如果用戶不太清楚自己的授權情況,可以通過以下工具進行查詢。

1 https://approved.zone

2 https://revoke.cash

3 https://tac.dappstar.io/#/

小結

於DeFi領域,用戶獲得新幣的門檻大大降低,通過組合資產投資的確可能在短期內實現大規模的增值收益。但是,用戶資產可能面臨的風險狀況就變得更為複雜,在這點上必須引起高度注意。

在DeFi這個“黑暗森林” ,大膽冒險是禁忌一般的行為。用戶資產不僅要受到客觀行情波動的影響,質押時是否遭受“清算”也無法預知,而合約中的人為陷阱更是無處不在。

尤其是,不少DeFi項目都存在代理轉賬的邏輯,多數項目方也會直接要求用戶授權最大值。也就是說,用戶授權後,某些不良合約將利用留“後門”的手段,反噬用戶所持的全部資產。  

因此,對於用戶而言,來自合約的一切許可請求都要格外注意,寧理性退場,不冒然入坑,時刻警惕惡意項目方的此類“後門”陷阱。​​​​