原標題:《獨家|靈蹤安全:Pinecone被攻擊事件分析》
作者:靈蹤安全
8月19日,BSC上的收益聚合項目PineconeFinance的保險庫受到黑客攻擊,損失約350萬沒PCT代幣。
截至寫稿時為止,項目方已經針對此次攻擊中受損的用戶發布了補償計劃:項目團隊及投資人共持有491萬枚代幣,將用所有代幣補償用戶。
盡管此次攻擊受損的金額相對近期動輒千萬、上億美元的金額不算太大,但這起攻擊事件還是給我們留下了值得吸取的經驗和教訓。
這次攻擊出現漏洞的地方在于轉賬過程使用的代幣有損耗,而合約對這個損耗沒有處理好于是就導致漏洞出現從而被黑客攻擊。
在正常狀況下,用戶之間轉賬代幣的時候,如果代幣在轉賬過程中沒有損耗,處理起來是比較簡單的。但如果某些代幣在轉賬過程中會出現損耗,則處理這類代幣的轉賬就要非常小心了。
Yearn開發者:Yearn v2保險庫似乎未受影響,正在對攻擊事件進行調查:4月13日消息,針對收益聚合器 Yearn 攻擊事件,Yearn 開發者 storming0x 表示,目前已知的問題與 2020 年推出的 iearn 遺留協議和流動性池無關,Yearn v2 保險庫似乎沒有受到影響,Yearn 貢獻者正在進行調查。
此前消息,Aave 和 Yearn Finance 在今日攻擊中損失金額已超 1100 萬美元。[2023/4/13 14:01:26]
在Pinecone項目中,其代幣PCT是作為資金池的質押代幣,在其合約設計的代幣轉賬過程中會有手續費的損耗。而項目將這個損耗計入了用戶的份額中,于是用戶份額和質押的PCT總額就會出現偏差。這個偏差就能被攻擊者用來領取多余的獎勵。
比特幣開發人員正在開發保險庫功能,可阻止惡意黑客:金色財經報道,比特幣開發人員James O'Beirne正在開發一項比特幣保險庫功能,當黑客試圖竊取他們的比特幣時提醒用戶,然后通過將資金轉移到更安全的錢包來阻止盜竊。該功能類似于一種比特幣智能合約或“契約”,對比特幣的使用方式施加限制,保險庫用戶必須在花費比特幣(BTC)之前在兩個不同的區塊中傳輸兩個單獨的交易,在第一次交易(有時間延遲)后發出警報,允許用戶批準交易或將代幣掃到另一個錢包。O'Beirne在他的提案草案中寫道:“托管比特幣的風險是眾所周知的,該提案引入了一種機制,可以顯著減輕密鑰泄露的最壞情況結果:代幣丟失。”[2023/3/1 12:35:24]
具體而言,本次攻擊存在漏洞的合約有:
PineconeFarm合約,其地址為:
Aera為Polygon上的DAO創建保險庫以管理其資金庫:金色財經報道,財務管理協議Aera 宣布在 Polygon 上為去中心化自治組織 (DAO) 推出財務優化保險庫。Aera 表示,其目標是使加密項目能夠以更有效的方式管理其代幣儲備。[2022/11/2 12:10:53]
0x4099f27fb72788b7bb5cb64e3d2b865eb82d0f8f
farm合約使用的策略合約IPineconeStrategy,其地址為:
0x1e542DB46eb87cc8E5fA8e1856eC53F89dc4bC89
PCT代幣合約,其地址為:
0x6019384a802310117a6E889e7021d2d0A144fE50
Yearn Finance不支持以太坊PoW分叉,舊版本的Yearn保險庫許可功能存在風險:9月6日消息,Yearn Finance發布關于許可功能的安全公告,低于0.4.4版本的Yearn保險庫具有許可功能,容易受到分叉網絡中的重放攻擊。Yearn不鼓勵在其他分叉網絡中的Yearn保險庫中使用許可方法。
Yearn不打算在合并后支持任何以太坊工作量證明 (PoW) 分叉,并且不能保證除了官方支持的其他網絡中的保險庫的正確功能。如果之前在以太坊主網中使用過該功能,請使用該approve(spender, 0)功能重置permit限額,并使用一個非無限的到期期限。[2022/9/6 13:11:24]
漏洞涉及的相關代碼片段為:
PineconeToke的_transfer()函數:
BadgerDAO與Yearn.Finance合作共同建立新的WBTC保險庫:據官方博客消息,去中心化組織BadgerDAO宣布了與Yearn.Finance的一項合作計劃,旨在將Yearn.Finance的可持續保險庫技術帶給BadgerDAO,并共同推進DeFi中的比特幣的發展。BadgerDAO會將其當前的合成比特幣保險庫余額遷移到Yearn的帳戶,Yearn保險庫將顯示在BadgerDAO的應用程序中。此外,這兩種協議將一起建立一個新的WBTC保險庫。該保險庫里的費用將由BadgerDAO和Yearn.Finance協議共同承擔。[2021/2/11 19:29:59]
在這里,PineconeToken的transferFrom的調用了_transfer()函數,在_transfer()中用戶轉賬會收取手續費,因而實際到賬的金額比transferFrom傳入的amount值要小。
PineconeFarm合約的deposit()函數:
在上述代碼中,PineconeFarm將存入的PCT質押到IPineconeStrategy合約中獲取收益。通過使用BSC的vm?trace工具,可以發現這個IPineconeStrategy是一個VaultRabbitCake合約。PineconeFarm對用戶份額share的計算會用到_wantAmt。而這個_wantAmt和下面的函數片段又有關聯。
策略合約的deposit()函數
從上述代碼可以看出,在計算sharesAdded時,其分母是wantTotal,而wantTotal依賴balance()。balance是關聯的總鎖倉PCT余額。由于實際的PCT余額小于deposit傳入的金額_wantAmt,這就會造成用戶份額在計算時增加了。
最后,當攻擊者調用withdraw函數時,只要輸入比deposit值大的參數就可以贖回超過質押數的PCT代幣。
按照這個機制,黑客在攻擊時,可以重復重復調用deposit和withdraw功能,從而導致合約質押的PCT損耗不斷增加、資金池持有的PCT余額不斷變小。然后在計算獎勵時,由于使用資金池中的余額作為分母,而分母越小,則可額外領取的獎勵就越多。
了解了代碼的漏洞及相關機制后,我們再來看黑客諸多攻擊中的一次攻擊:
這次攻擊中,黑客的地址為:0xfc6682db7e9f57882e8b18ebc9adc7a19f770494,其交易流程如下:
可以看出第一筆交易0xe446f質押了8.1萬PCT,然后在0x76d33提取獎勵時卻提取了16萬PCT。
我們繼續查看withdraw交易的參數,可以看出傳入amount值為22603495a2af5d0ccc34,將其轉換為10進制數就是16萬,遠超質押金額8.1萬。詳細細節如下圖所示:
從這次攻擊的漏洞原因看,在轉賬時有損耗的代幣在參與收益類項目時,存在較多的問題。因此靈蹤安全提醒項目方要充分考慮損耗對收益計算的影響。
對此類問題,靈蹤安全一直以來都會在審計時特別和項目方強調。另外我們也再次強調審計在項目中的重要性,希望項目方在項目上線前充分做好審計工作。
作者:
靈蹤安全CEO譚粵飛
美國弗吉尼亞理工大學(VirginiaTech,Blacksburg,VA,USA)工業工程碩士(Master)。曾任美國硅谷半導體公司AIBTInc軟件工程師,負責底層控制系統的開發、設備制程的程序實現、算法的設計,并負責與臺積電的全面技術對接和交流。自2011至今,從事嵌入式,互聯網及區塊鏈技術的研究,深圳大學創業學院《區塊鏈概論》課程教師,中山大學區塊鏈與智能中心客座研究員,廣東省金融創新研究會常務理事?。個人擁有4項區塊鏈相關專利、3本出版著作。
——?導讀—— 前文,我們介紹了對虛擬機的歷史、特點、發展以及Solidity和EVM進行詳細介紹.
1900/1/1 0:00:00巴比特訊,新加坡金融管理局今日公布“全球CBDC挑戰賽”的15名決賽選手。這場比賽旨在開發零售中央銀行數字貨幣解決方案,以改善支付服務并促進金融包容.
1900/1/1 0:00:00來源:財聯社 作者:胡家榮 繼VISA周一宣布以數字貨幣購買NFT藝術品,NFT這個沉寂已久的市場再次獲得人們的關注.
1900/1/1 0:00:00巴比特訊,8月13日晚,mazeprotocol發布了NekoNetwork被攻擊的報告。攻擊者利用MainPool合約中的漏洞,直接向自己的地址借入資金.
1900/1/1 0:00:00根據PolkaWorld發布的波卡周報,Polkadot網絡的32號公投,將波卡的驗證人從297增加到299,正在失敗中.
1900/1/1 0:00:00巴比特訊,8月30日,三箭資本聯合創始人KyleDavis及首席執行官ZhuSu轉發VincentVanDough推文.
1900/1/1 0:00:00