與 29 日單純利用合約漏洞的 攻擊 不同,這次黑客巧妙利用了 Compund 金融模型,無中生有了大量 COMP 代幣。

原文標題:《DeFi 還有未來嗎?Balancer 再遭攻擊》
撰文:CertiK

繼 6 月 29 日凌晨 2 點 CertiK 捕獲 Balancer 攻擊事件後《空手套以太:Balancer 攻擊解析》, 北京時間 6 月 29 日下午 8 點整與 11 點 23 分,CertiK 天網系統(Skynet) 再次檢查到兩起類似原理的 Balancer DeFi 合約異常,兩起異常分別發生在區塊數 10360609 與區塊數 10361515。與 29 日單純利用合約漏洞的攻擊不同,這次黑客巧妙利用了 Compund 金融模型,無中生有了大量 COMP 代幣。明星 DeFi 項目,一日內連遭三次攻擊,讓支持者不禁擔憂起整個 DeFi 市場的未來。

DeFi 明星項目 Balancer 再遭攻擊,簡析 Compound 金融模型漏洞

事件概述

6 月 29 日,攻擊者從 dYdX 閃電貸中借到代幣並鑄幣後,通過 uniswap 閃貸獲得 cWBTC 和 cBAT 代幣,然後將借得的代幣在 Balancer 代幣池中大量交易,從而觸發 Compound 協議的空投機制,獲得空投的 COMP 代幣,再使用 Balancer 有漏洞的 gulp() 函數更新代幣池數量後,取走所有代幣並歸還閃電貸。攻擊者相當於利用了 Compound 協議的金融模型、閃電貸和 Balancer 代碼漏洞,無中生有了 COMP,總獲利約爲 11.5ETH。

CertiK 分析:攻擊者心理畫像

DeFi 明星項目 Balancer 再遭攻擊,簡析 Compound 金融模型漏洞

6 月 29 日下午 8 點與 11 點的兩起攻擊使用了相同的手法並且使用了同一個收款地址,確認爲一個團隊。雖然這兩次攻擊與 29 日凌晨 2 點的攻擊均利用了 Balancer 合約的 gulp(),但是攻擊手段不同,後兩次攻擊利用了 Compound 的金融模型的漏洞而不是單純的代碼漏洞。另外,後兩次攻擊的獲利遠小於首次攻擊獲利,實施首次攻擊的黑客沒有合理動機。

CertiK 判斷後兩次攻擊是在首次攻擊 14 小時後,利用類似原理實施的模仿攻擊

DeFi 安全新挑戰

DeFi 明星項目 Balancer 再遭攻擊,簡析 Compound 金融模型漏洞

這次的攻擊事件主要利用了金融模型設計上的漏洞,而不是代碼層面的漏洞。這種由 DeFi 市場孕育出的新型攻擊模式,讓大部分區塊鏈安全公司僅有的「代碼審計」服務變得毫無用處。

只針對代碼層面而不能對抽象模型進行分析的、傳統的安全技術完全應對不了 DeFi 帶來的新挑戰。而沒有模型層面保護的 DeFi,只能淪爲熟知 DeFi 金融模型黑客的提款機。

DeFi 安全預警是弊大於利嗎?

這次的模仿攻擊,讓很多人對區塊鏈安全公司產生了質疑:安全公司的分析文章會不會教會更多人攻擊的方法?爲什麼各種安全預警沒有改善安全環境?我們真的還需要安全預警嗎?

CertiK 的觀點是,不僅需要安全預警,還要做到更快更深入!

不同於傳統軟件系統,區塊鏈所有的交易、所有的合約調用都是公開透明的。攻擊事件發生後,區塊鏈上的交易記錄對於黑客而言就是最直白的教科書,區塊鏈安全公司要搶在模仿攻擊之前發佈預警,保護相關公司。但是最近頻繁的攻擊事件,再一次證明安全預警是遠遠不夠的,並不能根本性改變當前 DeFi 乃至整個區塊鏈的安全現狀。

DeFi 安全還有機會嗎?

DeFi 明星項目 Balancer 再遭攻擊,簡析 Compound 金融模型漏洞

爲了根本性改變 DeFi 的安全現狀,我們必須針對新型智能合約(比如 DeFi、IoT) 引入全新的安全機制。

這種安全機制必須要能進行模型層的分析,必須能夠適應新型合約的發展,儘量做到在攻擊時攔截,而非在攻擊後預警。CertiK 團隊在夜以繼日研發基於 CertiK Chain 的新型安全 DeFi 機制 ——CeDeFi (Certified DeFi)—— 即可信 DeFi,相信可以在未來徹底改變當前被動的安全現狀。

攻擊還原

以下午 11 點對 Balancer 的攻擊爲例:

步驟 1:從 dYdX 處通過閃電貸形式借得 WETH、DAI 和 USDC 三種代幣,數額分別是 103067.20640667767、5410318.972365872 和 5737595.813492。

步驟 2:使用步驟 1 中得到的代幣,對三種代幣 (cETH、cDAI 和 cUSDC) 進行鑄幣操作 (mint)。

步驟 3:使用 uniswap 通過閃電貸形式,借得 (borrow) 並鑄造 (mint) cWBTC,cBAT 代幣。

步驟 4:攜帶獲得的 cWBTC 與 cBAT 加入代幣池,此時攻擊者擁有的 cWBTC 和 cBAT 的數目分別爲 4955.85562685 和 55144155.96523628。

步驟 5:分別用 cWBTC 和 cBAT 在該代幣池中進行大量的交易,從而觸發 Airdrop 操作,將無歸屬的 COMP 分發到該代幣池中。

步驟 6:調用 gulp() 函數將當前的 COMP 數目同步到 Balancer 智能合約中,並將 cWBTC、cBAT 以及額外被加入代幣池中的 COMP 取出。退出代幣池時,攻擊者擁有的 cWBTC 和 cBAT 的數目同樣爲 4955.85562685 和 55144155.96523628。但是由於在代幣池中通過大量交易產生的額外 COMP,攻擊者獲得了額外的 COMP 代幣。此處攻擊者還可以選擇直接進入其他代幣池中,複用步驟 1 到步驟 6 的攻擊方法,獲得額外 COMP 代幣。

步驟 7:償還 uniswap 和 dYdX 的閃電貸,離場。

步驟 8:攻擊者仍舊可以採用同樣的方法(步驟 1 到步驟 7),對其他代幣池發動攻擊。攻擊的機制類似,但是通過閃電貸借得和用來進行攻擊的代幣種類略有不同。

參考鏈接:

新聞:
https://cointelegraph.com/news/hacker-steals-balancers-comp-allowance-in-second-attack-within-24-hours

中文新聞:
https://www.chaindd.com/3330102.html

原始分析:
https://twitter.com/frenzy_hao/status/1277597671847411712

29 日下午 8 點攻擊交易歷史記錄:
https://ethtx.info/mainnet/0xa519835c366bc77d93c9d3e433e653bfc46120688ad146b383f4dd93342cad29

29 日下午 11 點攻擊交易歷史記錄:
https://ethtx.info/mainnet/0x70959fef9d7cc4643a0e885f66ec21732e9243ffd3773e4a9ea9b5ab669bab4d

來源鏈接:mp.weixin.qq.com