文/marxwang
(原標題:從 Uniswap / LendF.Me 盜領事件,看 Defi 的自我修煉之路)
僅僅在一週內,Defi 就發生兩起重大盜領事件。
首先 4/18日,Uniswap ImBTC-ETH 流動池發生盜領,造成超過30萬美金損失。緊接著隔日(4/19) 借貸平台 lendF.me 資金池也出現類似盜領情況,損失將近2470萬美金 (詳見下方摘要)。
事件發生後,讓外界好奇的是,究竟項目遭遇什麼問題導致資金被盜?更重要的是,兩起事件所造成後續影響為何?未來需如何改進?
探究這些問題前,讀者可先了解『DeFi 運作架構』才好了解事情的全貌。

出處:Ivan Martinez Medium 連結
起因:DeFi 成也架構,敗也架構
由上圖可看出,DeFi 服務是架構在底層模組之上。在以太坊 DeFi 生態系中,從底層公鏈到流動層共可分為五層 ( Layer 0 – 4 )。就好像建造房子需要先打地基,然後才能往上加蓋。房子要蓋得穩,地基首先必須穩固。
分層架構的設計思維,在業界十分普遍,像是OSI模型(Open System Interconnection Reference Model)七層架構 。這種架構的優點可以彈性而靈活的擴展。上層選用下層的服務作為基礎,提供更上一層的支撐。不過如此一來,風險也伴隨增加。當下層服務存在漏洞或者設計上缺陷時,上層服務因為依賴耦合關係,必定會受到影響。
本次Uniswap 事件就是一例!Uniswap 開發團隊早已發覺在代幣交換協議(V1版)中,已無法安全地交換ERC777規範發行代幣。

事發之後,Tokenlon 補充,此次危機只存在「結合 ERC777與Uniswap/Lendf.me」交互運作時

還好,漫霧安全團隊表示,即便協議層存在重入攻擊的可能性,也能透過合約程式碼修補。

問題解決惹。 Problem Solved.
除非你要自找麻煩,不然建議你關掉視窗,不要繼續往下讀。
————(我是分隔線)———
當你跨越這條線,代表你準備好接受更多挑戰。又或者,以下概念也許你已經不陌生或是感到老生常談。沒關係,我們就把這些點子當作修煉檢查表,逐項打勾吧。
☐修煉1 :DeFi 基礎建設的強化
Defi 基礎建設範疇定義為:Layer 0 – 4(參考上圖一)。
具體強化重點可分成「資安」與「功能」改進兩部分。
由於 Defi 生態系目前仍以以太坊為主流,資安領域的重點在於保全智能合約程式與協議改進。程式語言已Solidity優先,但不限於此。由於沒想要寫萬言小說,所以以下重點摘錄,並只點出問題。(如果已經有解法,請不吝賜教)。
資安問題
根據知乎 Solidity 十大問題的整理 (連結):
- Reentrancy – 重入
- Access Control – 访问控制
- Arithmetic Issues – 算术问题(整数上下溢出)
- Unchecked Return Values For Low Level Calls – 未严格判断不安全函数调用返回值
- Denial of Service – 拒绝服务
- Bad Randomness – 可预测的随机处理
- Front Running
- Time manipulation
- Short Address Attack – 短地址攻击
- Unknown Unknowns – 其他未知
功能問題
一、交易效能改進:
1.交易擁塞:大量交易造成區塊打包塞車,並且會造成連鎖加成反應。
2.跨鏈交易處理 :代幣資產交換不可避免,資產都註冊在單一公鏈很理想,但未必符合未來趨勢。
二、預言機改進:價格如同時間一樣神聖,現實中我們利用昂貴的原子鐘為大家定時,鏈上的預言機報價仍然存落差障礙,尤其是 chainlink之類的機制改進。
三、協議改進:如同Uniswap 協議已經推出V2版,支援更多幣種(如ERC777)與增強功能 詳細可參考 https://uniswap.org/blog/uniswap-v2/
回歸本事件的思考。技術上而言,本事件的各別協議是安全的。但是Defi 普遍存在協議間/模組間的交互場景,將會製造更多風險不確定性。這兩事件也暴露出,與Defi 急速發展相比,風險意識提升速度仍嫌不足。服務提供者可以做出更多貢獻。
☐修煉2: 用戶必須心存風險意識
Defi ,顧名思義是分散式網路金融,屬於一種新興金融領域。即便Defi 借鏡傳統金融的發展,作法上仍有很大的差異。投資最怕的就是誤會,因此這邊還是要提醒Defi用戶,關注你的資產。再好的新方案,投資前務必分散風險,並且做好功課,再自主進行決策。
(以下省略)
☐修煉3: DeFi 體驗再進化
這不僅是Defi 問題,可以說是加密貨幣/區塊鏈服務或Dapp的共同問題:體驗。
根據科技導入生命週期(Technology Adoption Life Cycle) 曲線,如果Defi 算是科技上的一種全新體驗,可以吸引多少人加入使用?

嘗試問自己以下問題:
1.加密錢包為何要助記詞才能用? 每一個錢包都要記一組助記詞跟密碼? 這是幫助用戶還是在阻擾用戶(開放討論,基本教義派勿戰)
2. 我們要提供的體驗是挫折,還是享受?
成功的體驗改進結果只有一種:「回不去了」
未來將來:浴火重生的DeFi

很喜歡漫畫『聖鬥士星矢』中的不死鳥一輝(鳳凰星座 フェニックス イッキ )角色。因為他總是能夠在歷經粉身碎骨之後,一次又一次的浴火重生。如果 Defi 真的有那麼一天擠身主流,與傳統金融成為人類社會的重要一部分,相信它也是歷經一次又一次的考驗,不斷改進,直至成為可以被大多數人接受的新事物!
我真心期盼 那一天的到來。
備註
1. Uniswap事件整理
攻擊對象:Uniswap 中 imBTC 資金池 (透過 Uniswap V1 )
事件揭露:
1. Tokenlon 發文表示, ImBTC 在 Uniswap 的資金池已被提領一空 ( drained )。
2.安全人員Julien Bouteloup (@bneiluj) 於Twitter 協議漏洞(尚未被修補),由於協議允許合約呼叫改造過的 hook (鉤子函式),允許再次呼叫提領 transferFrom 函式,致使攻擊方取得更多的 ETH與ImBTC代幣。如此一來,等同資金池代幣隨交易不斷被提取,直至提領一空。
延伸閱讀
1. imBTC Uniswap Pool Drained for ~$300k in ETH – DeFi ERC777 Exploit
https://defirate.com/imbtc-uniswap-hack/
2.『慢雾:详解 Uniswap 的 ERC777 重入风险』https://www.chainnews.com/articles/533666270146.htm
2.LendF.Me 事件整理
攻擊對象:LendF.me 借貸平台 資金池
事件揭露: Tokenlon 推文 ,表明LendF.me 出現類似 4/18重入攻擊。
總損失: 約2,470萬美金 (共12幣種資產被盜)
攻擊手法:重入攻擊(Reentrancy),利用二次supply()函式內呼叫提領函式 withdrew()累積攻擊方可提用額度並且進行提款,導致資金池被提領一空。經估計損失是LendF.me 擁有資產的99%。
延伸閱讀
1.Tokenlon : About Recent Uniswap and Lendf.Me Reentrancy Attacks
https://medium.com/imtoken/about-recent-uniswap-and-lendf-me-reentrancy-attacks-7cebe834cb3
2.慢雾:解析 DeFi 平台 Lendf.Me 攻击细节及防御建议 – 链闻 ChainNews
https://www.chainnews.com/articles/427601377396.htm
總結這兩次攻擊,雖然損失金額相差甚多,相同之處在於其攻擊手法均透協議漏洞或程式碼變數置換,發起重入攻擊(Reentrancy Attack)。而不同之處則是Uniswap 案件中,雖然Uniswap v1協議本身就不支援ERC777代幣並且已經揭露在案 (2018.12月),但這種攻擊只復現在 ImBTC 搭配Uniswap 交換協議情境下,各別使用並不會出現危機。
3. (4/21 事件更新) 鋒迴路轉,Lendf.Me 被盜的代幣已經全數歸還。
