【DeFi】 如何用 15 秒賺 1000萬

Tino Lin
ASMOND
Published in
11 min readApr 16, 2020

本文將先介紹這兩次次套利行為所使用到的核心 DeFi 產品、解析駭客套利的手法以及探討兩次攻擊事件,讓我們學到了什麼。

2019.2.15 一筆異常的交易,只用了一個區塊的時間就套取了高達 1271 顆 ETH ( 約 5,700,000 TWD ) 2019.2.18 再次出現異常交易,套取了高達 2378 顆 ETH ( 約 10,000,000 TWD )

Flash loan — 閃電貸款

閃電貸是利用以太坊特有的交易架構而衍生出的一種融資工具,不同於傳統市場,基於以太坊區塊鏈的特性 — 原子性,也就是一個交易中的所有操作,要不全部完成,要不都不完成,不會結束在中間某個環節。在執行過程中發生錯誤,會被回滾到交易開始前的狀態,就像這個交易從來沒有執行過一樣。也因此讓無抵押的高速貸款 — 閃電貸款,在以太坊上成為可能。[1] 閃電貸款就是在一筆智能合約的一開始調用閃電貸款功能,在不抵押任何資產的情況下借入資金,經過一系列的操作之後,在智能合約的末端將貸款還清,只要最後成功將貸款還清,這個合約就會執行成功,就算最後貸款還不清,最壞的結果也只是這筆交易失敗進而回滾到交易前狀態,所有合約中的交易行為就如同沒有發生過,損失的就只有一開始支付的手續費。無需抵押的閃電貸款是本次套利攻擊事件成本如此低廉的原因,攻擊者只使用了極低的手續費作為本次攻擊的成本,利用閃電貸款貸了大筆資金 ,在短短一個區塊(約 15 秒鐘左右)的時間,套取了高額淨利潤。

Uniswap — 自動化做市交易所(AMM

Uniswap 是基於以太坊的去中心化代幣交換交易所, 透過 [6]「乘積恆定做市機制」來決定匯率。簡單的理解就是利用 X*Y=K 的公式(X 為交易對中的一種資產存貨、Y 為交易對中的另一種資產存貨、K是不變的常數)保證資金池中交易對中兩種資產的存貨數量乘積一定,以此作為計算交易匯率的基石。Uniswap 將交易所中,提供流動性最重要的角色「做市商」,開放給所有人擔任,假設你想提供 ETH 兌換 DAI 的「流動性」, [3] 需要做的就是存入同等價值的 ETH 與 DAI ,像是存入 100 美元的 ETH 與 100 美元的 DAI,作為流動性提供者也就是做市商獲得的收益,就是所有交易的手續費(每一筆 0.3%)總額再乘以你在資金池中佔有的份額百分比。而用戶就能透過簡單的介面,選擇想要兌換的交易對,輸入希望兌換的數量,讓平台透過乘積恆定公式計算出匯率,確認交易後完成兌換,為代幣的去中心化交易提供一個方便的選擇。

做市商:不斷向交易的買賣方報價,並在該價位上接受交易者的買賣要求,以其自有資金進行交易,讓買賣交易得以順暢地進行。

流動性:指在市場上買賣特定資產而不影響其價格的能力,亦可以指將資產迅速和輕鬆變現的便捷程度。流動性若足夠不管交易金額大小,都不容易影響市場價格;若流動性不足,就可能因為交易金額過大產生大幅度滑價。

第一次攻擊流程解析

本次攻擊是一次計劃好的惡意套利行為,以下會以容易理解的方式解釋攻擊者如何完成套利。

Transaction hash ⬇️ (可點以下連結在以太坊鏈上查詢交易資訊)

0xb5c8bd9430b6cc87a0e2fe110ece6bf527fa4f170a4bc8cd032f768fc5219838

攻擊破口分析

  1. 閃電貸選擇借出 ETH 原因是 dydx 中的資金儲備量有 90 % 都是 ETH 約有 80,000 顆,數量充足。
  2. 選擇使用 Compound 借出 wBTC 是因為 Compound 是當時 wBTC 供應最充足的資金池。
  3. 選擇 bZx 作為抬升價格的平台,是由於攻擊者發現 bZx 的保證金交易合約代碼中,檢查槓桿倉位是否異常的部分,因為程式碼的編寫邏輯錯誤,會直接跳過不檢查,使得這次套利行為得以成功。

⚠️ bZx:用 1,300 ETH 在 bZx 上 5倍作空 ETH/WBTC

bZx 完成五倍做空 ETH/WBTC 是將 5637.62 ETH 在 Uniswap 換成 WBTC,其中的問題在於當時 ETH/WBTC 這組交易對中的流動性不足,其中僅有 2817.77 ETH 以及 77.09 WBTC 在資金池中,在這種情況下大額兌換 WBTC 將會造成大幅度地滑價,理應 bZx 不應該允許這樣的交易成功,但是由於上述代碼的漏洞,讓攻擊者有機會完成這筆交易,因此原本 2817.77 ETH 可以兌換到約 154.24 顆 WBTC,最後卻只換得了 51.35 WBTC,並使得 ETH/wBTC 的匯率瞬間飆升了 239.84%,也讓攻擊者能以 2 倍多的價格在 Uniswap 中拋售 WBTC 套取暴利。也就是說攻擊者透過閃電貸借錢成為巨鯨,再到流動性不足的交易所開5倍槓桿拉高 wBTC 價格,最後再將手裡借來的鉅額 WBTC 高位套現,完成了一次低成本的 Pump & Dump。

第二次攻擊流程解析

本次攻擊是一次操縱價格預言機的惡意套利行為,以下會以容易理解的方式解釋攻擊者如何完成套利。

Transaction hash ⬇️(可點以下連結在以太坊鏈上查詢交易資訊)

0x762881b07feb63c436dee38edd4ff1f7a74c33091e534af56c9f7d49b5ecac15

攻擊破口分析

  1. 選擇 sUSD 為價格操縱目標並透過 Kyber 作為交易所的原因是 Kyber 中 sUSD 交易量低價格易控制。
  2. sUSD 在 bZx 中採用 Kyber 作為價格「預言機」跟在 Synthetix 中使用的價格來源不同,攻擊者透過大量 ETH 哄抬了流動性較差的 Kyber 交易所中 sUSD 的價格,攻擊者仍然可以透過 Synthetix 購買到正常價格的 sUSD,並在 bZx 中已不合理的高價抵押貸出鉅額 ETH 。

預言機:封閉的區塊鏈系統中用來取得外部信息,將數據輸入到區塊鏈中的接口。

未來值得關注的領域

1. Smart Contract Audit 與 DeFi 保險

第一次的套利攻擊,追根究柢是由於 bZx Protocol 存在著代碼上邏輯的錯誤,由於DeFi 產品是完全開放給所有人使用,就算只是存在細微的漏洞,一但被有心人士掌握,就會蒙受鉅額的虧損,因此凸顯了 DeFi 產品上線前 Smart Contract Audit 的重要性。

次要的原因出在 DeFi 領域目前許多交易所都存在流動性不足的狀況,閃電貸的出現讓所有具備智能合約撰寫能力的人,都有能力以極低成本動用巨額資金,降低了操縱價格的門檻,不過好處是處於早期階段的 DeFi 領域能夠提早警覺到 DeFi 面臨的可能風險並及早採取相應的預防對策。

bZx 團隊此次的損失完全由公司的現金流償還,因此並沒有衍生出用戶資金丟失的問題,[7] bZx 在未來將公開發行的 BZRX token 路線圖中也提到將會讓其價值捕獲與資金池的保險金做掛鉤。無論是以發行代幣與項目保險掛鉤的方式還是如 Etherisc、Nexus Mutual 去中心化保險項目風險共享的方式,DeFi 保險的設計都將是未來直得研究的領域。

2. DeFi 預言機:

第二次的套利攻擊,凸顯了價格預言機對於 DeFi 產品的重要性,使用 Kyber 作為唯一價格預言機來源,是這次 bZx 再次承受鉅額虧損的最主要原因。

雖然 DeFi 很大的優勢是因為其交易的原子性可以將各種產品如樂高般交互使用,創造出無數多種創新金融應用,卻也因此讓不同平台之間的攻擊風險預測難度大幅提升。

[5] bZx 在不久前宣布將導入 Chainlink 的去中心化預言機,並在未來陸續增加 Band protocol 與 Uniswap v 2.0,透過多樣的預言機選擇強化 bZx 的價格資訊來源的穩定性。其中 Uniswap v 2.0 也針對這次的事件引入了 [6] 時間加權平均價格並將市場價格改為 [6] 以前一個區塊的價格為基準,來防止此次事件的操控風險。

3. 去中心化治理 — DAO:

bZx 的資金池由於兩次攻擊承受了大額的虧損,但是第一次攻擊時用來 5 倍作空的 1,300 ETH 和第二次攻擊後攻擊者抵押於 bZx 的合約中的 1,099,840 sUSD,都尚未被攻擊者取出,因此 bZx 團隊決定使用管理員金鑰凍結智能合約中的資產,盡可能減少損失,儘管這樣的舉動被認為違背了 DeFi 去中心化的精神,不過這仍然是面對如此鉅額虧損的緊急狀況,必須採取的必要之惡。

bZx 也在事後說明,本次必須採取極端中心化的管理員金鑰處理問題,是因為計劃中的 [7] bZxDAO 還未準備好,未來 bZx 若面臨同樣的問題,用戶可以透過 bZxDAO 提出解決方案,以去中心化的方式解決類似問題。

隨著 Kyber network 在近期推出 KNCDAO 治理架構、DeFi 領域中借貸市值最大的 Compound 也公告正在準備發行治理代幣,我們可以看到 DeFi 結合 DAO 去中心化治理模式絕對是未來 DeFi 發展的主流。

聯絡方式:Line :tino28082000 │Telegram :@Tno00

ASMOND 由一群對資訊科技滿懷熱忱的學生所組成,我們從校園發跡,因社團聚首。目前致力於提供 Dapp、A.I.、iOS 開發等技術支援與解決方案,同時,我們也提供校園講座分享學、實務教學,以及區塊鏈、人工智慧技術諮詢顧問等服務。
=============== Contact Us =================
Facebook 粉絲專頁連結: Asmond 粉絲專頁連結
連絡信箱:jarvis@asmond.net

參考文獻:
[1] Kaihua Qin, Liyi Zhou, Benjamin Livshits, and Arthur Gervais. Attacking the DeFi Ecosystem with Flash Loans for Fun and Profit. arXiv:2003.03810v2 [cs.CR] 11 Mar 2020.
https://arxiv.org/pdf/2003.03810.pdf

[2] Lewis Gudgeon, Daniel Perez, Dominik Harz, Benjamin Livshits, and Arthur Gervais. The Decentralized Financial Crisis: Attacking DeFi. arXiv:2002.08099v1 [cs.CR] 19 Feb 2020. https://arxiv.org/abs/2002.08099

[3] Perry Mehrling. Re-theorizing Liquidity. January 20, 2016. http://sites.bu.edu/perry/files/2019/04/Retheorizing-Liquidity.docx

[4] Peckshield. bZx Hack Full Disclosure (With Detailed Profit Analysis). February 28, 2020. https://medium.com/@peckshield/bzx-hack-full-disclosure-with-detailed-profit-analysis-e6b1fa9b18fc

[5] Kyle J Kistner. Mea Culpa: A New Beginning. March 09, 2020. https://bzx.network/blog/mea-culpa

[6] Hayden Adams, Noah Zinsmeister, Dan Robinson. Uniswap v2 Core. March 2020. https://uniswap.org/whitepaper.pdf

[7] Kyle J Kistner. Introducing the bZxDAO. January 16, 2020. Introducing the bZxDAO. https://bzx.network/blog/introducing-bzxdao

--

--

Tino Lin
ASMOND
Editor for

【Blockchain diary】 → Line :tino28082000 │Telegram :@Tno00