Bancor 危機:Token 背後潛伏的「上帝之手」

Bancor 危機:Token 背後潛伏的“上帝之手”

本文作者:安比(SECBIT)實驗室 & 輕信科技(LedgerGo)

Bancor 危機:Token 背後潛伏的“上帝之手”

導讀:

包括 Status 和 FunFair 在內的部分國內外熱門區塊鏈項目,智能合約存在管理員權限過高的問題,或導致項目存在過度中心化的風險,相關 Token 生態極易發生單點失效。致命問題可能會出現在兩個方面:一是項目方濫用權限,二是超級管理員身份被盜用。這兩種情況一旦發生,相關 Token 生態可能會迅速崩塌。

恐怖的智能合約管理員權限

作為比特幣和區塊鏈愛好者,我們崇尚去中心化。然而,很多持幣者可能還不太清楚,目前各類 Token 項目智能合約管理員擁有超級權限竟已逐漸成為常態。據我們不完全統計,排名前 570 名的 Token 合約中,有 342 個合約存在只有管理員能調用的功能(onlyOwner),不少合約更存在管理員任意鑄幣燒幣

凍結賬戶關停轉賬等過高權限 [1]。

安比(SECBIT)實驗室研究了排名靠前的 Status (SNT) 和 FunFair (FUN) 項目。我們認為這兩個熱門項目都存在非常嚴重的管理員權限過高問題。

Status 合約中有名為 Controller 的管理員角色,可調用 generateTokens() 往任意地址增發代幣,可調用 destroyTokens() 銷燬任意地址上的代幣 [2]。但 Status 項目的白皮書並沒有相關特殊權限聲明。而且,這兩個超級權限函數在實現上,並沒有觸發 Mint 或 Burn 事件,只有普通的 Transfer 事件。

Bancor 危機:Token 背後潛伏的“上帝之手”

倘若有人利用管理員身份作惡,社區可能難以第一時間發現。通過掃描區塊鏈數據我們發現,目前 Status 團隊僅於 2017 年 6 月 19 日依次傳入極小值成功調用了增發和銷燬的函數進行測試,因此普通用戶無需過分恐慌。但需要知道的是官方團隊隨時保留有這樣的超級權限。

Bancor 危機:Token 背後潛伏的“上帝之手”

此外,Status 合約還應用了可升級的代理合約機制,管理員可以通過任意設置代理合約 controller 地址的方式,在關鍵函數前面插入可升級的校驗邏輯,來影響轉賬等關鍵操作。

Bancor 危機:Token 背後潛伏的“上帝之手”

知名的 FunFair (FUN) 項目也存在與 Status 類似的問題 [3]。白皮書中並未提及其 Token 合約中的特殊權限;通常原本應當在眾籌後一定時間內關閉的鑄幣等功能,項目方依然未關閉。倘若有人作惡,增發鉅額數量的 Token 至市場上拋售,後果不堪設想。

此外還有不少項目有同樣的問題。我們呼籲相關項目方應立即向社區做好風險告知特殊權限披露

,社區參與者也可以積極發揮監督力量。

Token 持有者有權瞭解,項目方也有義務披露以下這些內容:

  • Token 及業務合約中項目方擁有的特殊權限明細
  • 項目方為何需要這些特殊權限
  • 特殊權限會在哪些情況下使用
  • 特殊權限被濫用會發生哪些後果
  • 哪些特殊權限可以被永久關閉以及何時關閉
  • 特殊權限動用歷史記錄的詳細說明
  • 特殊權限動用的監控渠道
  • 項目方採取何種措施來保障特殊權限不被濫用和盜用
  • 如何通過更好的智能設計提升社區治理水平

此外,

交易所作為區塊鏈項目生態中的中堅力量,也應當積極督促項目方限制過高權限以及透明運營

管理員權限過高造成損失的真實案例

目前為止還沒有熱門項目團隊利用超級權限作惡的證據,或許我們可以舒一口氣。但即使在信任官方團隊不會主動作惡的前提下,惡性安全事件依然有可能發生。

加密貨幣交易平臺 Bancor 於 7 月 10 日稱遭到攻擊,丟失 24,984 個 ETH,3,236,967 個 BNT,229,356,645 個 NPXS,折算法幣金額為 1250 萬美金的以太坊,1000 萬美金的 Bancor 代幣和 100 萬美金的 Pundix 代幣。

初期不少媒體報道稱 Bancor 智能合約存在安全漏洞。安比(SECBIT)實驗室遂對此安全事件進行追溯分析

Bancor 主要合約包括 SmartToken 和 BancorConverter,分別為 ERC20 Token 合約以及與業務相關的 Token 轉換交易合約。

本次 Bancor 平臺被盜事件與 BancorConverter 合約有關,攻擊者(黑客/內鬼)極有可能獲取了 0x009bb5e9fcf28e5e601b7d0e9e821da6365d0a9c 賬戶的私鑰。

而此賬戶正是轉換代幣合約 BancorConverter(0x3839416bd0095d97bE9b354cBfB0F6807d4d609E)的 owner,同樣擁有極高權限。owner 作為該合約的所有者和管理員,有唯一的權限通過 withdrawTokens() 方法提走合約中的全部 ERC20 Token 至任意地址。

第一次攻擊發生在以太坊主網區塊高度 5930096,北京時間 7 月 9 日 8 時 6 分。攻擊者利用 owner 身份,首先調用 withdrawTokens() 轉走 0.1 ERC20 ETH 進行攻擊測試 [4]。

三分鐘後,攻擊者再次轉走 22000 鉅額數量的 ERC20 ETH 至其控制的地址(0x33ed22f4b6b05f8a5faac4701550d52286bd735a)上 [5]。

隨後,攻擊者再調用 Ether Token 合約(0xc0829421C1d260BD3cB3E0F06cfE2D52db2cE315)的 withdrawTo() 方法,將 ERC20 版本的以太代幣兌換為真實以太幣 [6]。

至此,22000 個 ETH 便完全被攻擊者借用管理員身份所盜走。

攻擊者還控制了以下賬戶,如法炮製地偷走其賬戶餘額,以及其所管理合約中的代幣。

Bancor 危機:Token 背後潛伏的“上帝之手”

目前,區塊鏈瀏覽器網站 EtherScan 已將攻擊者的地址標註為 Fake_Phishing1701 和 Fake_Phishing1702。

Bancor 危機:Token 背後潛伏的“上帝之手”

此外,Bancor SmartToken ERC20 合約也由 owner 完全控制,目前是一個名為 MultiSigWallet 的合約,暫未被盜用。

owner 對 SmartToken 合約具有以下權限:

  • owner 可通過 disableTransfers() 任意禁用轉賬功能
  • owner 可通過 issue() 任意增發代幣
  • owner 可通過 destroy() 任意銷燬代幣

以上這些功能均通過 ownerOnly 進行限定,換句話說,owner 對 Bancor 合約擁有最高權限。

Bancor 團隊如何處理被盜事件

Bancor 項目方在攻擊發生後,識別出攻擊者地址,聲稱凍結了攻擊者偷來的 BNT 代幣。

Bancor 危機:Token 背後潛伏的“上帝之手”

經我們調查,Bancor 管理員實際動用了 destroy() 方法來“銷燬”用戶手中的 Token。

Bancor 危機:Token 背後潛伏的“上帝之手”

管理員可以從任意賬戶 _from 中扣除任意金額 _amount 的 Token,同時將總供應量 totalSupply 縮減。

這就是常說的 燒幣 功能。由於攻擊者在得手後,將偷來的幣分散到若干個地址中。Bancor 的管理員不得不挨個依次調用 destroy() 來銷燬對應地址的代幣,再調用 issue() 方法將燒燬的幣重新增發到自己手中。但此補救方法對於 NPXS Token 和已轉走的 ETH 無效,這些被盜的幣將被轉至交易所拋售。

Bancor 危機:Token 背後潛伏的“上帝之手”

Bancor 團隊也發表聲明稱普通用戶的錢包沒有受到影響,並進一步解釋鑄幣、燒幣以及存儲大量以太幣是他們協議中價格發現機制的一部分。

Bancor 安全事件的影響與反思

除開鉅額被盜事件,Bancor 團隊的這一聲明和處理方式,同樣引起了社區的恐慌。人們紛紛質疑 Bancor 項目智能合約中 owner 管理員的超級權限,甚至稱之為“後門

”。

Udi Wertheimer 早在一年前就曾發文抨擊 Bancor 項目無論是眾籌合約還是 ERC20 Token 合約都缺乏良好的設計,稱所有的 Token 都由 Bancor 團隊完全掌控,管理員擁有絕對控制權,極度中心化 [7]。而 Bancor 團隊則一直聲稱自己十分重視安全,並採用業內最佳的錢包和私鑰管理方案 [8]。不過,他們並沒有披露此次被盜事件的細節,如攻擊者如何能控制多個管理員賬戶

我們把目光放至整個通證生態。社區參與者對管理員擁有的權限知之甚少,而項目方的相關披露與風險提示更少。安比(SECBIT)實驗室也正在智能合約風險列表中收錄各類權限過高問題 [9],試圖藉此引導社區重視這些問題。

https://github.com/sec-bit/awesome-buggy-erc20-tokens

對於 Token 合約,當有賬戶存在超級權限時,整個 Token 生態極容易發生單點失效。致命問題可能會出現在兩個方面,一是項目方作惡,二是超級管理員身份被盜用。當 Token 的價值全部依賴在某一個人或少數幾個人身上時,可想而知這其中暗藏的風險會非常之高。以 Bancor 為例,在巨大的經濟利益面前,即使我們信任了發行方不會濫用權限,卻依然無法保證

別有用心者不會藉此攻擊。對於發行與運營極度依賴項目方的 Token,可能我們永遠無法形成類似對比特幣的共識與信仰。

Bancor 危機也給我們帶來很多反思:

  • Bancor 是否是真正的去中心化交易協議
  • 智能合約在哪些情況下需要管理員
  • 合約管理員權限的邊界在何處
  • 如何保障錢包及私鑰安全

管理員權限是把雙刃劍。在 Bancor 事件中,黑客利用了管理員權限盜取代幣,而項目方也正利用了管理員權限來降低損失。不過我們認為,開發者依然可以通過良好的代碼設計來降低 Token 和 協議合約對管理員的依賴。同時,我們也號召大家,去更多地瞭解相關項目的智能合約(它可能跟你想象的不太一樣),關注手中的 Token 到底由誰控制,利用社區力量監督項目管理員權限。


分享到:


相關文章: