可避天災,難免人禍 —— Furucombo 被黑分析

買賣虛擬貨幣


著名 defi 專案 furucombo 被黑,損失超 1500 萬美元。慢霧安全團隊第一時間介入分析,並將攻擊細節分享給大家。


攻擊細節分析


本次發生問題的合約在 furucombo 本身的代理合約當中。整個攻擊流程很簡單。攻擊者透過設定了 furucombo 的 aavev2 proxy 的邏輯地址導致後續透過 furucombo 代理合約呼叫的邏輯全部轉發到攻擊者自己的惡意合約上,導致任意資金被盜。



但是如果事情那麼簡單,那麼本次分析不值一提。問題遠比想象的複雜得多。


如上圖所示攻擊者的入口在 furucombo 的 batchexec 函式,我們先對 batchexec 函式進行分析:



以上是 furucombo proxy 合約的 batchexec 函式的具體實現,其中 _preprocess 和 _postprocess 合約分別是對呼叫前後做一些資料上的處理,不涉及具體的呼叫邏輯,這邊可以先忽略。我們主要觀察核心的 _execs 函式:



透過對 execs 程式碼的分析不難發現,函式的主要邏輯是對 configs 陣列的資料做檢查,並根據 configs 陣列的資料對 data 進行一些處理。但是回顧上文中攻擊者的呼叫資料,不難發現攻擊者的呼叫資料中,configs 的資料是一個 0 地址:



這裡有一個 trick,由於 0 地址是一個 eoa 地址,所有對 eoa 地址的函式呼叫都會成功,但是不會返回任何結果。結合這個 trick,execs 函式中的關於 configs 資料的部分可以先暫時忽略。直接看到最後的核心 _exec 函式:



_exec 函式的邏輯也很簡單,在校驗了 _to 地址後,直接就將 data 轉發到指定的 _to 地址上了。而透過對攻擊交易的分析,我們能發現這個 _to 地址確實是官方指定的合法地址。



最後一步,便是呼叫 _to 地址,也就是官方指定的 aavev2 proxy 合約的 initialize 函式,將攻擊者自己的惡意地址設定成 aavev2 proxy 合約的邏輯地址。透過對 furucombo 合約的分析,可以發現整個呼叫流程上沒有出現嚴重的安全點,對呼叫的地址也進行了白名單的檢查。那麼問題只能是出在了對應要呼叫的代理邏輯上,也就是 aavev2 proxy 合約。


我們直接分析 aavev2 proxy 合約的 initialize 函式的邏輯:



可以看到 initialize 函式是一個 public 函式,並在開頭就檢查了 _implementation 是否是 0 地址,如果是 0 地址,則丟擲錯誤。這個檢查的目的其實就是檢查了 _implementation 是否被設定了,如果被設定了,就無法再次設定。根據這個設定,不難想出 initialize 這個函式只能呼叫一次。除非 aavev2 proxy 從來沒有設定過 _implementation,否則這個呼叫是不會成功的。難道 furucombo 真的沒有設定過對應的 _implementation 嗎?帶著這樣的疑問,我們檢查了交易內的狀態變化。如下:



可以看到,交易中改變了儲存位置為 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 的內容,而寫入的內容正是攻擊者自己的惡意合約地址 0x86765dde9304bea32f65330d266155c4fa0c4f04。


而 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 這個位置,正是 _implementation 資料的儲存地址。



也就是說,官方從來沒有設定過  aavev2 proxy 合約的 _implementation 地址,導致攻擊者鑽了這個空子,造成了 furucombo 資產損失。


總結


透過對整個事件的分析來看,furucombo 此次事故並不在安全漏洞的範疇內,主要的原因在於官方將未啟用的  aavev2 proxy 合約新增進了自己的白名單中,並且未對 aavev2 proxy 合約進行初始化,導致攻擊者有機可乘。


建議


目前,由於 furucombo 遭受攻擊,導致任何將代幣授權過給 furucombo 合約 (0x17e8ca1b4798b97602895f63206afcd1fc90ca5f) 的使用者都將面臨資金損失的風險。


慢霧安全團隊建議與 furucombo 互動過的使用者檢查是否有將相關代幣授權給 furucombo 合約。如有授權,應及時撤銷相關授權,避免進一步損失。


參考連結:

代幣授權檢查地址:https://approved.zone/

攻擊交易:

https://ethtx.info/mainnet/0x6a14869266a1dcf3f51b102f44b7af7d0a56f1766e5b1908ac80a6a23dbaf449

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;