TMT观察网_独特视角观察TMT行业

智能合約史上最大規(guī)模攻擊手法曝光,盤點黑客團(tuán)伙作案細(xì)節(jié)區(qū)塊鏈

張希 2018-08-20 12:01
分享到:
導(dǎo)讀

2009年,中本聰創(chuàng)造了一個虛擬的去中心化新世界。這仿佛是一片流著奶和蜜糖的應(yīng)許之地,人們歡呼雀躍,蜂擁而至。但與所有的生態(tài)系統(tǒng)一樣,新世界有生命,就有捕食者。有交易者,就有黑客。區(qū)塊鏈上的應(yīng)用在進(jìn)化,攻擊者也同樣,我們給大家展示的是區(qū)塊鏈?zhǔn)澜绮粸槿酥牧硪幻妫盗饔縿印R饬现猓苍谝饬现小?/p>

Last Winner(類 Fomo3D)游戲大火,導(dǎo)致以太坊異常擁堵,Gas 費用暴漲。大量以太幣資金入場。

北京時間 2018 年 8 月 10 日凌晨 1:38,加州時間 9 日上午 10:38,安比(SECBIT)實驗室收到合作伙伴美國硅谷 AnChain.ai 公司消息,基于 AI 的態(tài)勢感知系統(tǒng)發(fā)出預(yù)警信息,發(fā)現(xiàn)部分游戲合約出現(xiàn)大量交易并且存在異常的資金流動情況。安比(SECBIT)實驗室的小伙伴趕緊根據(jù)最新線索,對相關(guān)合約和交易進(jìn)行觀察、跟蹤、分析。

安比(SECBIT)實驗室由中國科學(xué)技術(shù)大學(xué)博士郭宇創(chuàng)建,從密碼學(xué)、代碼語義、形式化驗證、博弈論、編譯器等多種理論角度切入,在智能合約安全技術(shù)上開展全方位深入研究。

AnChain.ai 由辛辛那提大學(xué)計算機(jī)博士方春生 Victor Fang 創(chuàng)建,方博士是硅谷上市網(wǎng)絡(luò)安全公司 FireEye 史上第一位首席數(shù)據(jù)科學(xué)家,負(fù)責(zé) AI 產(chǎn)品研發(fā)。AnChain.ai 專注安全威脅情報、區(qū)塊鏈態(tài)勢感知,憑借 AI 技術(shù)助力區(qū)塊鏈生態(tài)安全。

下文敏感地址只保留前 4 位。片尾有三個彩蛋,智能合約愛好者請不要錯過。

image.png

悄然上線:莫名火爆的 Last Winner

Last Winner 是一款基于以太坊智能合約的 DApp 游戲,于 8 月 6 日上線,這款游戲一經(jīng)推出,就“異常”火爆。

這款游戲合約地址為 0xDd9fd6b6F8f7ea932997992bbE67EabB3e316f3C。據(jù) Etherscan 顯示,短短六天時間內(nèi),該游戲合約就已產(chǎn)生 27 萬余筆交易。甚至前段時間以太坊網(wǎng)絡(luò)大擁堵也與 Last Winner 游戲密切相關(guān)。8 月 8 日 和 9 日,在 Last Winner 和 Fomo3D 超大規(guī)模交易量的共同作用下,以太坊未確認(rèn)交易數(shù)量創(chuàng)年內(nèi)新高,平均 Gas 費用一度飆升至正常 10 倍以上。

image.png

該游戲第一輪獎池金額為 1.6 萬多個以太幣,而玩家總投資額更超過 10 萬以太幣,資金量巨大。目前游戲第一輪已結(jié)束,第二輪獎金池已迅速累積至 7000 多以太幣。

瘋狂的現(xiàn)象級游戲背后暗流涌動。

疑團(tuán)重重:前期大量參與者的資金來歷不明

據(jù)知名媒體「區(qū)塊律動」報道,Last Winner 由名為「蟻群傳播」的資金盤傳銷組織推廣運營,有著數(shù)量眾多的會員和極強(qiáng)的推廣拉下線能力 [1]。而據(jù)另一款火爆游戲 Fomo3D 開發(fā)團(tuán)隊稱,Last Winner 是仿 Fomo3D 游戲,其背后運營團(tuán)隊準(zhǔn)備了 20 萬 ETH 來進(jìn)行自動刷量交易。因此,Last Winner 游戲火爆的背后,可能是一場精心布局的傳銷游戲,初期利用機(jī)器人發(fā)起批量交易,偽造活躍假象,吸引新韭菜入場。

Last Winner 游戲合約存在大量非正常交易,并且伴隨著大量合約的創(chuàng)建與自毀,與正常人類調(diào)用行為特征偏離很大,這引起了我們的高度警惕。

瘋狂推廣:只面向國人,合約源碼卻未公開

在各大論壇、媒體、以及微信群中,都可以見到 Last Winner 游戲的推廣文章,而這些文章有著類似的描述,并且都附上推廣邀請碼。但 Last Winner 英文相關(guān)資料非常少。

image.png

顯然,這是一款針對中國人的游戲,有著誘人的推廣(拉下線)獎勵,因此在網(wǎng)絡(luò)上廣為傳播。并且,這款游戲有適配安卓和 iPhone 手機(jī)的 App,簡化了使用操作,降低了參與門檻。

但是,十分可疑的是,作為一款基于智能合約的區(qū)塊鏈游戲,Last Winner 居然沒有公開合約源代碼!這是一個非常危險的信號。為何這樣一個游戲能這么火爆,吸引這么多人參加?

我們直覺上感到這款游戲到處透露著詭異的氣息。

安全性存疑:實則是 Fomo3D 山寨版

Last Winner 官方宣傳語寫道:Last Winner(LW)是首款完全去中心化的類 Fomo3D 游戲 DApp,完全基于以太坊智能合約原生開發(fā)。只要下載安裝 App 就可參與游戲。

類 Fomo3D 游戲,且未公開源代碼,這不得不讓人產(chǎn)生懷疑。要知道,短短時間內(nèi)原創(chuàng)開發(fā)一個好玩又安全的 DApp 游戲難度非常大。

安比(SECBIT)實驗室迅速使用內(nèi)部工具逆向分析了 Last Winner 的合約代碼(字節(jié)碼)。果不其然,這款游戲合約代碼函數(shù)名稱與 Fomo3D 高度相似,疑似直接拷貝(抄襲)了 Fomo3D 的源碼,但卻又新增了 10 余個可疑未知函數(shù)。

盡管 Fomo3D 在 Etherscan 公開了源代碼,但這并不代表它開源給任何人隨意使用。

安比(SECBIT)實驗室之前報道過:在 Fomo3D 爆紅之后,各類山寨版 Fomo3D 層出不窮。之前這些山寨版游戲往往復(fù)制 Fomo3D 官網(wǎng)和合約源碼,并可疑地在一些地方進(jìn)行修改。而 Last Winner 在此基礎(chǔ)上更進(jìn)一步,推出移動客戶端,并瘋狂推廣,卻不公開智能合約源代碼。

智能合約游戲或 DApp 的亮點之一就是公開透明。Last Winner 游戲則完全違背了這一點,動機(jī)十分可疑,參與該類游戲的風(fēng)險極高!

當(dāng)時嚴(yán)峻的形勢是:一方面有多個地址疑似瘋狂發(fā)起攻擊交易,另一方面項目方游戲合約未公開源碼,高度可疑卻吸引了巨量資金。我們感覺到態(tài)勢十分緊急,于是迅速開展分工合作。AnChain.ai 中美團(tuán)隊日夜交替分析和監(jiān)控異常交易,收集證據(jù),定位攻擊來源與攻擊規(guī)模。

安比(SECBIT)實驗室的小伙伴們則兵分兩路,分別開展對不透明游戲合約和黑客攻擊手法的逆向分析。

前情回顧:類 Fomo3D 游戲空投機(jī)制存漏洞

Fomo3D 游戲參與形式是用以太幣購買游戲道具,除了最后一個購買的人可以獲得巨額大獎外,平時參與者還有機(jī)會獲得“空投”獎勵。

這里有主獎池和副獎池的概念,最終的巨額大獎和空投獎勵分別從從主獎池和副獎池中獲取。

所有進(jìn)入游戲的以太幣,有 1% 數(shù)量會進(jìn)到副獎池。每一次購買道具都會有概率獲得空投。空投的概率從 0% 開始,每增加一筆不小于 0.1 ETH 銷售訂單,空投概率會增加 0.1%。同時空投獎金額與購買金額也掛鉤,如果購買 0.1 ~ 1 ETH,就有概率贏得 25% 副獎池獎金,購買更多則比例越大。

一進(jìn)入游戲界面,就會看到鮮明提示,通知當(dāng)前中獎概率和獎池金額。這一設(shè)計,原本是想增加游戲趣味性,并起到吸引資金入場、延長游戲時間的作用。但實際情況卻并非如此。

通過觀察 LastWinner 游戲合約以及部分地址的異常交易行為,我們心中有了初步答案。

讓我們把時間退回到 20 多天前,早在 7 月 24 日,安比(SECBIT)實驗室和派盾(PeckShield)科技分別同時預(yù)警:Fomo3D 游戲的智能合約存在隨機(jī)數(shù)漏洞可被利用,F(xiàn)omo3D 及所有抄襲源碼的山寨合約均存在該安全漏洞 [2]。原本設(shè)計上隨機(jī)性較大的空投游戲可通過特殊手段操縱,大大提高中獎概率。

經(jīng)安比(SECBIT)實驗室字節(jié)碼智能掃描工具逆向分析,Last Winner 游戲空投獎勵代碼與 Fomo3D 基本一致,相似度達(dá) 91%,可能存在同樣漏洞。隨著游戲火爆進(jìn)行,機(jī)敏的黑客肯定也聞風(fēng)而動。

不能說的秘密:黑客制造秘密武器攫取高額收益

image.png

在區(qū)塊鏈態(tài)勢感知系統(tǒng)所展現(xiàn)出來的數(shù)據(jù)面前,我們不由地倒吸一口涼氣。

圖中的這些可疑地址,如同“病毒”一般緊緊纏繞在 Last Winner 合約四周,肆意吞噬著 Last Winner 內(nèi)的資金。

我們觀察到,圖中緊靠 Last Winner 的這些地址,有著類似的行為模式。

如:

1.不停地往某合約地址上發(fā)起交易,同時附帶 0.1 個以太幣

2.不少交易狀態(tài)為失敗

3.成功的交易又會涉及大量“內(nèi)部交易”

4.“內(nèi)部交易”調(diào)用邏輯十分復(fù)雜,并伴隨大量合約的創(chuàng)建和自毀

安比(SECBIT)實驗室迅速得出初步結(jié)論:這些不明合約就是黑客用來攻擊 Last Winner 的秘密武器,黑客正是通過這些合約,持續(xù)吸走 Last Winner 游戲內(nèi)的以太幣。

案發(fā)現(xiàn)場:大量類似交易,超高回報率

上面態(tài)勢感知圖中,占地面積最大的嫌疑地址引起了我們的注意:0xae58,于是從這個地址展開了追蹤。

8 月 9 號當(dāng)天,0xae58 地址內(nèi)以太幣余額就以超過 300 個,而當(dāng)時他正在大量往地址 0x5483 上發(fā)起交易,每筆交易轉(zhuǎn)賬金額都是 0.1 Ether。顯然,黑客正通過 0x5483 智能合約向 LW 發(fā)起攻擊。

same-txn-in

讓我們觀察下面這條狀態(tài)顯示為成功的交易。表面上看是 0xae58 向攻擊合約 0x5483 轉(zhuǎn)了 0.1 Ether,實際卻涉及了一大堆地址間的相互轉(zhuǎn)賬,最終隨著 0x7c77 合約自毀,0.189 個 Ether 轉(zhuǎn)移回 0xae58 的賬戶中。

image.png

這十分神奇,攻擊者投入 0.1 個以太幣,最終收獲 0.189 個,瞬間回報率高達(dá) 89%,簡直暴利。

我們很快發(fā)現(xiàn),除了 0xae58 地址外,還有四個地址也持續(xù)不斷地向 0x5483 合約發(fā)起類似交易,持續(xù)獲得高額回報。

而失敗的交易,僅消耗 27712 燃料(Gas),成本損耗十分低。

研究目標(biāo)立刻鎖定為攻擊合約 0x5483。由于無法獲得源碼,安比(SECBIT)實驗室立刻使用內(nèi)部工具展開逆向分析。

暴利:數(shù)據(jù)面前我們再次震驚

8 月 13 日,當(dāng)我們沉浸在研究黑客的攻擊合約各種細(xì)節(jié)優(yōu)化和精巧設(shè)計之時,黑客攻擊數(shù)據(jù)全景分析新鮮出爐。

其中,攻擊獲利最大的是以 0x820d 地址為首的團(tuán)隊。他們累計獲利超過 5000 個以太幣。AnChain.ai 團(tuán)隊和安比(SECBIT)實驗室將該黑客團(tuán)伙精確定位,并將其命名為 BAPT-LW20 (Blockchain APT – Last Winner)。

BAPT-LW20 團(tuán)隊在短短 6 天時間內(nèi),共發(fā)送將近 5 萬筆交易,從中攫取 5194 個 Ether,獲利價值將近 1200 萬人民幣。

由下圖每小時發(fā)起的攻擊交易數(shù)量趨勢圖(下圖),我們可以看出攻擊的高峰期發(fā)生在 8 月 8 日 ~ 10 日,每小時平均攫取將近 100 以太幣,將近 22 萬人民幣。這正好也是 LW 游戲最火爆的時間段。隨著游戲進(jìn)入后期,入場資金急劇下降,收益降低,黑客也不得不也降低了攻擊頻率。

hour-txn

再看看黑客每小時攫取以太幣數(shù)量趨勢圖(下圖)。慘淡的漫漫熊市里,黑客卻在狂賺以太幣。

image.png

下圖是“Last Winner 中黑客的交易量占比和攫取 ETH 占比”,可見黑客發(fā)送的交易量只占總交易量的 9.877%,但是去攫取了Last Winner獎金池中49%的獎金。黑客的嫻熟攻擊技能,為他們帶來了普通玩家難以企及的好運,而普通玩家在這場游戲里面幾乎很難獲得空投獎勵。

image.png

火線追兇:BAPT-LW20 團(tuán)隊攻擊 LW 始末

安比(SECBIT)實驗室嘗試追蹤復(fù)原 BAPT-LW20 團(tuán)隊攻擊時間線。

下圖是 BAPT-LW20 團(tuán)隊某賬戶余額變動情況。

fomo-vs-lw

0x820d 是 BAPT-LW20 團(tuán)隊所有攻擊合約的部署者,也是攻擊的實施者之一,可認(rèn)為是 BAPT-LW20 團(tuán)隊的隊長。0x820d 地址最早活躍于 7 月 20 日,賬戶中的初始以太幣均由 0x73B6 地址轉(zhuǎn)入。而 0x73B6 也是同一天開始活躍的新地址,它的初始以太幣來自總部位于美國舊金山的 Kraken 交易所。

0x820d 在收到來自 0x73B6 的 10 個以太幣后,隨即部署了它的第一個合約。可能有些地方不太理想,他并沒有繼續(xù)使用該合約。三分鐘后,0x820d 部署下了第二個合約,攻擊對象是 Fomo3D。在一組準(zhǔn)備工作設(shè)置、若干次失敗的調(diào)用以及兩次雖然成功但卻沒有收益的嘗試過后,0x820d 應(yīng)該是發(fā)現(xiàn)了攻擊合約里的 bug 和優(yōu)化空間。

在接下來的 14 個小時內(nèi),他依次部署了 8 個合約進(jìn)行攻擊測試,無奈都不成功。終于在第 9 個合約 0xBad7 中首次完成攻擊,以 0.1 ETH 的投入換回了 0.125 ETH。

0xBad7 是 0x820d 團(tuán)隊首個可以正常工作的攻擊合約,他們在 7 月 21 日至 7 月 23 日三天時間內(nèi)總計調(diào)用該合約 11551 次,小有斬獲。

7 月 23 日,0x820d 又部署了新的合約,將攻擊對象轉(zhuǎn)移為另一款 Fomo3D 山寨游戲老鼠會 RatScam (0x5167350d082c9ec48ed6fd4c694dea7361269705),0x820d 團(tuán)隊在一天時間內(nèi)使用了 2299 次攻擊合約。

一天后,0x820d 又找到了新目標(biāo),一個名為 FoMoGame(0x86D179c28cCeb120Cd3f64930Cf1820a88B77D60) 的山寨游戲,部署新合約(0xb599)進(jìn)行攻擊。這款游戲知名度不高,入場資金并不多,黑客調(diào)用了 126 次之后就放棄。

接下來的三天內(nèi),0x820d 前后部署了 10 個新合約進(jìn)行優(yōu)化與攻擊測試。

終于,在 7 月 26 日上線了他們的新版攻擊合約(0x5483)。該合約總共發(fā)生過 23835 筆交易,最近一次活躍時間在 8 月 10 號(7 天前)。這款攻擊合約,可由攻擊者 自定義受害游戲合約地址。因此 0x820d 在接下來的幾天內(nèi),持續(xù)混合攻擊 Fomo3D 原版、RatScam、FoMoGame 等游戲,并持續(xù)觀察其他山寨游戲的動態(tài),等待時機(jī)。同時,繼續(xù)部署若干個新合約進(jìn)行調(diào)優(yōu)測試。

終于,8 月 6 日 Last Winner 游戲上線,24 小時后 0x820d 團(tuán)隊就使用準(zhǔn)備好的 0x5483 合約,針對 Last Winner 發(fā)起第一次攻擊,并在接下來的 4 天內(nèi)集中力量,瘋狂利用空投漏洞展開攻勢。

8 月 10 日,0x820d 調(diào)用 0x5483 攻擊合約 withdraw 接口,提走了里面的余額,攻擊疑似暫停。

原來,他們早已經(jīng)部署了新版合約攻擊合約 0x9C10,又發(fā)起了超過 30000 筆交易,至今仍在活躍攻擊。

不僅僅是空投:BAPT-LW20 黑客團(tuán)隊拿走 LW 最終大獎

北京時間 8 月 17 日上午,Last Winner 游戲第一輪最終結(jié)束,最終大獎由 0x5167 地址獲得,獎金額總計 7,754 以太幣。

real-winner

而這個地址正是 BAPT-LW20 黑客團(tuán)隊的五個地址之一。

如下圖,14 小時前,黑客還在利用攻擊合約獲取空投獎勵。隨后,他改變了方案,直接用自身地址購買道具參與游戲,不斷嘗試奪取最終大獎。在此之后,又繼續(xù)調(diào)用合約攻擊 LW 游戲。

attack-and-play

安比(SECBIT)實驗室猜測黑客潛伏很久,早已做好充分的準(zhǔn)備,長時間利用腳本監(jiān)控 LW 游戲狀態(tài),最終才能在眾人放松警惕之時獲得大獎。

BAPT-LW20 黑客團(tuán)隊利用空投漏洞獲利超 5,194 Ether,同時又奪取最終大獎 7,754 Ether,累計獲利 12,948 Ether。

同行相殺:Zethr 團(tuán)隊兩天時間就成功利用漏洞

這場超大規(guī)模的類 Fomo3D 智能合約游戲被攻擊事件,攻擊者使用的秘密武器也正是智能合約。

據(jù)安比(SECBIT)實驗室調(diào)查分析,0x20C9 地址最先成功利用原版 Fomo3D 空投漏洞并獲取獎勵。我們將他定位,并將其命名為 BAPT-LW10。

0x20C9 于 7 月 8 日 10 點 07 分創(chuàng)建了攻擊合約 0xe7ce,在接下來的十分鐘內(nèi),前后調(diào)用了三次,最終在第四次時成功獲得獎勵,投入 0.1 以太幣,收回 0.19 個,回報率高達(dá) 90%(見下圖)。

first-pwn-by-etherguy

此后,0x20C9 繼續(xù)部署多個攻擊合約,進(jìn)行調(diào)試優(yōu)化。最終,在 7 月 23 日部署了最終版本 0x39ac 攻擊合約,接下來的時間前后調(diào)用過 90 余次,而攻擊對象涉及 Fomo3D 原版、Last Winner 以及其他山寨版 Fomo3D。

據(jù)我們觀察,0x20C9 是最早研究并成功利用空投漏洞的黑客。研究過程中,安比(SECBIT)實驗室發(fā)現(xiàn) 0x20C9 與另一款游戲 Zethr 密切關(guān)聯(lián)。

最終我們在 Zethr 游戲合約代碼中發(fā)現(xiàn)了他的身影。他是熱門游戲 Zethr 的八位核心開發(fā)者之一,代號為 Etherguy。

zethr-etherguy

顯然,作為 DApp 游戲開發(fā)同行,Etherguy 以及他所在的 Zethr 團(tuán)隊很早就研究了 Fomo3D 項目代碼。Fomo3D 合約 7 月 6 日部署上主網(wǎng),Etherguy 兩天后就發(fā)現(xiàn)并成功利用了漏洞。從調(diào)用規(guī)模來看,Etherguy (BAPT-LW10) 應(yīng)該主要還是出于研究目的,并沒有太多獲利。

讓其他黑客獲利最多的正是 Last Winner 游戲。

游戲細(xì)節(jié):Last Winner 為何讓黑客如此瘋狂

從最初 Fomo3D 上線后不久,空投漏洞就已被人發(fā)現(xiàn)并成功利用。隨著游戲的廣泛傳播,以及該漏洞被逐漸披露,空投漏洞的攻擊手段也在這一過程中不斷升級進(jìn)化,最終部分黑客團(tuán)隊完成了精巧的攻擊方案,可低成本、高效率獲得獎勵,并可大規(guī)模工程化地攻擊任意任何同類游戲合約,瘋狂收割以太幣。

據(jù)安比(SECBIT)實驗室分析,除 LW 游戲以外,不少黑客團(tuán)隊都曾嘗試攻擊其他類 Fomo3D 游戲合約。但獲利都遠(yuǎn)小于 BAPT-LW20 團(tuán)隊在 LW 游戲中所得。

我們試圖從 LW 游戲本身尋找答案。

LW 游戲是 Fomo3D 山寨版,本身沒有太多創(chuàng)新,但入場資金完全集中在游戲開始后的第 2 天至第 5 天內(nèi)。巨量入場資金,會讓游戲空投獎池迅速累積,因此這段時間也是黑客攻擊的黃金時機(jī)。

更要命的是,Last Winner 團(tuán)隊修改了空投游戲參數(shù),使進(jìn)入副獎池(空投獎池)的以太幣比例由 1% 調(diào)整到 10%,相當(dāng)于空投獎勵金高了 10 倍!

一方面,游戲運營團(tuán)隊可能是利用高額空投獎勵吸引用戶瘋狂加入;另一方面,他們可能并不知道空投漏洞的嚴(yán)重性,而提高獎勵比例則會讓該問題進(jìn)一步放大。

Last Winner 游戲簡直成為了黑客的提款機(jī)!

特別地,前面提到 Last Winner 游戲第一輪入場資金已達(dá) 10 萬以太幣,這也就是說,單單這一款游戲就有超過 1 萬個以太幣都持續(xù)暴露在被攻擊的風(fēng)險下,成為黑客的囊中之物。要知道,這款游戲第一輪最終獎池也才 1.6 萬余以太幣。本來空投獎勵都是很小的金額,但黑客持續(xù)利用空投漏洞,積少成多,終成 Last Winner 最大贏家。

我們追蹤到有多個團(tuán)隊對 Fomo3D 及山寨合約開展大規(guī)模自動化攻擊,企圖攫取利益。

而 BAPT-LW20 團(tuán)隊在游戲開始后 24 小時左右就加入了戰(zhàn)局,并迅速擴(kuò)大作戰(zhàn)規(guī)模,最終占得先機(jī),獲取巨額收益。

安比(SECBIT)實驗室追蹤到還有其他黑客團(tuán)隊向 Last Winner 合約開展攻擊。部分黑客 8 月 11 號以后才入局,雖規(guī)模也很大,但終究因為錯過黃金時機(jī)而獲利較少。

攻擊合約:設(shè)計復(fù)雜又精巧

攻擊合約 0x5483,創(chuàng)建于 7 月 26 日,創(chuàng)建者為 0x820D,同時也是持續(xù)調(diào)用攻擊合約的五個地址之一。

起初,攻擊合約的創(chuàng)建時間讓我們感到疑惑,前面提到 LW 游戲合約于 8 月 6 日才部署上主網(wǎng)。難道 0x820D 可以未卜先知,或者他與項目方有什么不可告人的秘密?

帶著這個疑問,我們嘗試從合約 0x5483 的代碼(字節(jié)碼)中尋找答案。

經(jīng)過逆向發(fā)現(xiàn),該合約有七個公開函數(shù),其中一個疑似函數(shù)名是 withdraw(uint256),用于將攻擊合約中積累的以太幣轉(zhuǎn)走。

安比(SECBIT)實驗室在字節(jié)碼中發(fā)現(xiàn)了上面提到的五個地址。原來這兩個函數(shù)都會跳轉(zhuǎn)到同一個內(nèi)部函數(shù),檢查交易發(fā)起人是否是這五人地址之一。如果是,則可繼續(xù)執(zhí)行,如果不是,則提前讓交易失敗。

這也解釋了為什么偏偏是這五個地址一直在調(diào)用攻擊合約。因為他們是一個團(tuán)隊,合約特地為他們而設(shè)計,而其他人根本無法正常調(diào)用。

初步猜測,攻擊合約這么設(shè)計是為了分散權(quán)限和資金,降低出問題或被發(fā)現(xiàn)的風(fēng)險。

pwn-calldata

上圖正是一筆攻擊交易的傳入?yún)?shù)。第一部分是調(diào)用函數(shù)哈希 ID,后面跟著三個參數(shù)。注意看第一個參數(shù),攻擊者傳入的明顯是一個地址。顯然,這個地址正是 LW 游戲合約地址。

原來如此,攻擊目標(biāo)對象可以作為參數(shù)傳入。“黑客真機(jī)智!”,我們不由地感慨。之前的一個困惑被解開,早在 LW 游戲上線前就已部署好的攻擊合約 0x5483,其實是一個通用型武器。

繼續(xù)研究,接下來合約的復(fù)雜程度出乎我們意料。我們沿著生成的控制流程圖(CFG)追蹤合約函數(shù)調(diào)用過程,程序指令以及分支情況非常之多(下圖是一小部分截圖),讓人難以完全跟上。

cfg

安比(SECBIT)實驗室使用動態(tài)追蹤調(diào)試技術(shù),結(jié)合逆向分析結(jié)果與攻擊交易內(nèi)部記錄,搞清楚了黑客所使用的手法。

internal-txns

其他攻擊交易也都是類似的過程,黑客調(diào)用攻擊合約,攻擊合約再調(diào)用提前創(chuàng)建好的合約,進(jìn)而創(chuàng)建新的合約,以新合約的身份參與 LW 游戲,買游戲道具,然后幾乎必定獲得空投獎勵。

這一過程中不斷新建的合約,就是態(tài)勢感知系統(tǒng)中預(yù)警的大量異常合約創(chuàng)建與自毀。

追蹤攻擊合約調(diào)用歷史,發(fā)現(xiàn)攻擊者在部署完攻擊合約后,就立即多次調(diào)用特定函數(shù),每次新建 10 個新合約。而函數(shù)總共恰好調(diào)用了 100 次,因此新建了 1000 個新合約(記住這個細(xì)節(jié))。

在攻擊交易中,攻擊合約最先調(diào)用的就是這預(yù)先創(chuàng)建好的 1000 個合約之一,似乎是特地從中挑選出來一個地址。

智能合約:一切皆可預(yù)測

攻擊函數(shù)控制流程圖(CFG)中一個相隔很遠(yuǎn)的循環(huán)引起了我們的注意。

我們恍然大悟。攻擊函數(shù)所做的就是不斷循環(huán)地在 1000 個合約中,挑選“合適”的地址來完成下一步新建合約操作。所謂“合適”的地址,就是指能確保每次參與游戲都能獲得空投獎勵。

前面提到,以太坊智能合約中可以很容易的預(yù)測隨機(jī)數(shù),因為隨機(jī)數(shù)的來源都是區(qū)塊或者交易中特定的一些公開參數(shù),如交易發(fā)起者地址、區(qū)塊時間戳、區(qū)塊難度等等。因此空投游戲利用隨機(jī)數(shù)來控制中獎概率是不可行的。

而這里,黑客利用了另一個以太坊的特征,一個地址(賬戶)創(chuàng)建一個合約,合約地址是可按照特定規(guī)則計算得到的,任何人都可以根據(jù)已知信息進(jìn)行推算。

因此,黑客循環(huán)利用自己控制的 1000 個合約地址,推算各地址下一次新建的合約地址,而該地址恰恰是空投游戲中獎數(shù)字的隨機(jī)源。攻擊合約通過一系列預(yù)演推算來篩選出“合適”的地址來完成攻擊操作(技術(shù)細(xì)節(jié)后文會詳細(xì)討論)。

這才是黑客能夠以超高概率獲得空投的真正原因!

技術(shù)流:攻擊手法細(xì)節(jié)披露

類 Fomo3D 游戲空投漏洞的根本原因在于,以太坊智能合約環(huán)境中難以生成無法預(yù)測的隨機(jī)數(shù)。而 Fomo3D 開發(fā)者在其合約中增加了「判斷調(diào)用者是普通人類還是合約」的邏輯來嘗試規(guī)避,但此邏輯實現(xiàn)存在漏洞。黑客利用攻擊合約提前預(yù)測隨機(jī)數(shù),并通過在構(gòu)造函數(shù)內(nèi)調(diào)用游戲合約的方法來偽裝成普通人類(非合約)地址,從而大大增加自身中獎概率。

時間再次回到 7 月 23 日,以太坊基金會開發(fā)團(tuán)隊負(fù)責(zé)人之一 Péter Szilágyi 在 Reddit 上首次公開爆出這個漏洞并給出 1.0 版本的 POC 方案(詳細(xì)可以參考引文 [3])。這主要是利用了這些特點:

  • 空投游戲用來控制中獎概率的隨機(jī)源,可被提前獲得

  • 用戶能否獲得空投獎勵以及獎勵金額,可在另外一個合約中提前計算出來,從而決定后面的操縱邏輯

  • Fomo3D 空投機(jī)制中嘗試限制只有非合約地址(普通人類)才能參加游戲以防止上述情況的發(fā)生。但該判斷方法存在漏洞,在構(gòu)造合約的過程中(即合約構(gòu)造方法里)參與游戲即可繞過該限制。

因此攻擊者可以部署一個智能合約,并在合約的構(gòu)造方法中計算出自己是否能夠獲益,如果能則投入以太幣參加游戲空投獲利,否則就不參加(參見下圖)。

image.png

Péter 提出的這個方案只是一個最簡單的原型,因為每次部署合約都要消耗不少 Gas,而且工作效率很低且收益率并不高,采用該方案攻擊,發(fā)起上千筆交易,都不一定能夠真正獲得空投獎勵。

看到這里你可能會有疑問,上文的攻擊者似乎手法更高明,而且實際成功攻擊的發(fā)生時間要早得多。

Zethr 開發(fā)者 Etherguy 早在 7 月 8 日就已使用更高明的手法成功獲利,解決了上文 1.0 方案中的部分問題,我們姑且稱之為 2.0 版本。

這個思路是通過合約循環(huán)創(chuàng)建子合約(參見下圖),直到子合約滿足空投條件可以獲利為止。這樣做的好處是,在 Gas 充足的情況下,每次調(diào)用合約幾乎一定可以獲得收益,提高了工作效率。然而這種方案和 1.0 版本的攻擊成本接近,并沒有從本質(zhì)上提高收益率。

image.png

而這次事件的最大獲利者 BAPT-LW20 團(tuán)隊,就是在 2.0 版本的思路上進(jìn)行了進(jìn)一步優(yōu)化降低了投入成本,提高了收益率。 3.0 版本則瘋狂創(chuàng)建代理合約,通過利用計算下一步新建合約地址的技巧提前預(yù)判,篩選出符合條件的代理合約再創(chuàng)建出新的子合約,在子合約的構(gòu)造函數(shù)中再完成上述攻擊(見下圖)。而且攻擊目標(biāo)地址可配置,可多人同時協(xié)作攻擊。當(dāng)游戲獎池金額不足以覆蓋攻擊成本時,發(fā)出的攻擊交易會自動提前失敗,僅消耗很低的 Gas 費用。

image.png

在分析各類攻擊合約過程中,我們還見到另外一種更高明的做法:主攻擊合約有著良好的設(shè)計模型,支持核心算法動態(tài)替換與升級。原理上則是利用了 delegatecall 進(jìn)行操作。安比(SECBIT)實驗室會持續(xù)關(guān)注這批黑客的動向。

彩蛋一:空投與挖礦

我們知道在 PoW 挖礦的時候,礦工通常需要進(jìn)行如下計算:

BlockHash = Hash(Header Nonce) Check(BlockHash < Diff)

當(dāng) BlockHash 結(jié)果小于當(dāng)前難度值的時候,代表找到了一個合法的 Nonce。

在 Fomo3D 的空投獎勵里有著類似挖礦的機(jī)制:

function airdrop() private view returns(bool) {  uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number))));  if((seed - ((seed / 1000) * 1000)) < airDropTracker_)    return(true);  else    return(false); }

用戶唯一可以操縱的就是 msg.sender 字段,我們是否可以將 msg.sender 作為 Nonce 來挖礦呢?

答案顯然是可以的,智能合約的地址是根據(jù) 發(fā)起者賬戶 nonce 決定的,于是有了第 1 代方法:

                      創(chuàng)建合約 用戶(地址 nonce0) --------------------> 新合約(嘗試攻擊) 用戶(地址 nonce1) --------------------> 新合約(嘗試攻擊) 用戶(地址 nonce2) --------------------> 新合約(嘗試攻擊) 用戶(地址 nonce3) --------------------> 新合約(嘗試攻擊)

但是這種方式需要用戶持續(xù)部署合約,消耗的礦工費代價非常大,且成功率極低,每次都是以 1/1000 的中獎概率在嘗試。

由于第 1 代驚人的失敗率,顯然無法利用,于是有了第 2 代攻擊方法:

這種方法的主要思想是,合約創(chuàng)建的新合約地址由 合約地址 nonce 確定:

    部署合約   |------------------| hash(caddr, nonce) 用戶 ----------> |循環(huán)創(chuàng)建合約,     | -------> 新合約(嘗試攻擊)                 |直到攻擊成功或到達(dá)終 | -------> 新合約(嘗試攻擊)                 |止條件才停止,可能需 | -------> 新合約(嘗試攻擊)                 |要部署大量合約。   | -------> 新合約(嘗試攻擊)                 |----------------- |

這種方式類似于挖礦,固定區(qū)塊頭部,不斷修改 nonce 來試探能否成功獲得獎勵,但是問題在于,如果在循環(huán)第 1000 次才發(fā)現(xiàn)合法的 nonce,那么意味著之前部署的 999 個合約都屬于浪費 Gas 的操作。

那么如何更高效地尋找合法的 nonce 呢?

我們回想比特幣挖礦,一個挖礦任務(wù)中,不僅有 nonce,還有 extraNonce [4]。

bitcoin

在比特幣區(qū)塊的 Coinbase 字段中,有一個自由修改的區(qū)域,修改這個區(qū)域會導(dǎo)致 MerkleRoot 被修改,從而實現(xiàn) Header 被修改,具有 nonce 的效果,因此被稱作 extraNonce。

為什么需要引入 extraNonce 呢?原因在于 nonce 為 32 bit 數(shù)字,搜索范圍只有 2^32,礦機(jī)幾乎一瞬間就遍歷完了,通過不斷修改 extraNonce 來擴(kuò)大本地搜索范圍,我們甚至可以不修改 nonce 只修改 extraNonce 來挖礦。

也許黑客也想到了這一點,他們通過提前部署 1000 個代理合約來實現(xiàn)有 1000 個 extraNonce 的效果。 至此,攻擊方法升級到了第 3 代:

部署合約 用戶 --------------------------------------> 管理合約 C      調(diào)用合約C,預(yù)先創(chuàng)建代理合約(extraNonce) 用戶 --------------------------------------> 1000個代理合約      調(diào)用合約C,循環(huán)嘗試可以成功攻擊的代理合約 用戶 --------------------------------------> 部署合約(嘗試攻擊)

顯而易見,這種攻擊方式同時實現(xiàn)了 2 個效果:

  • 提升了攻擊成功率

  • 減少了攻擊合約部署數(shù)量,大大減少了 Gas 消耗。

  • 彩蛋二:黑客預(yù)先創(chuàng)建的合約數(shù)量與中獎概率

前文提到黑客預(yù)先部署 1000 個代理合約,這個數(shù)字有什么講究呢?

if((seed - ((seed / 1000) * 1000)) < airDropTracker_)

seed 經(jīng)由一系列以太坊鏈上環(huán)境以及多次 Hash 運算得出。Hash 結(jié)果對 1000 取余數(shù),可以得到 0~999 的偽隨機(jī)數(shù)。

我們假設(shè)哈希輸出結(jié)果是均勻的,并且哈希是抗碰撞的,那么平均每次中獎的概率為 1/1000。

模擬結(jié)果:

probability-sim

公式運算結(jié)果:

probability-calculate

盡管更多合約能夠提供更高的中獎概率,但是需要考慮到 Gas 消耗與 Gas Limit 等因素,不宜過大。

安比(SECBIT)實驗室認(rèn)為黑客選擇部署 1000 個合約,是根據(jù)概率代碼 1/1000 想當(dāng)然做出的判斷。

彩蛋三:黑客可能利用了空投概率計算的另一個 bug

黑客仍然需要更高效地攫取利潤,他們甚至“發(fā)現(xiàn)”了 Fomo3D 空投規(guī)則在這種攻擊方式下暴露出的缺陷。

攻擊合約需要在最開始獲取空投獎勵信息,作為后續(xù)操作的依據(jù)。因此,攻擊合約會先依次調(diào)用游戲合約的兩個查詢接口,分別是 0xd87574e0 airDropPot_() 和 0x11a09ae7 airDropTracker_()。

Fomo3D 空投獎勵的 airDropTracker_ 計算方式為如下方法:

if (_eth >= 100000000000000000) {    airDropTracker_  ;    if (airdrop() == true)     {...} }

Fomo3D 判斷是否能中空投獎勵使用了如下方法:

if((seed - ((seed / 1000) * 1000)) < airDropTracker_)  return(true);

根據(jù)我們分析,0x820d 后期更新的攻擊合約直接去除了對 airDropTracker_ 的判斷,但這樣做其實有利有弊。

如果你了解細(xì)節(jié),猜出了黑客的用意,或者知曉這種做法的優(yōu)缺點,歡迎添加小安同學(xué)微信(secbit_xiaoanbi),她會把你加入到「SECBIT 智能合約安全技術(shù)討論」的群里。

尾聲:下一個是誰?

8 月 14 日,BAPT-LW20 黑客團(tuán)隊的 0x820d 再次部署了兩個新版攻擊合約,這一次他們將炮筒又對準(zhǔn)了另一款一天前新部署的不知名合約。

望著大屏幕上 AnChain.ai 態(tài)勢感知態(tài)勢感知平臺不斷閃爍的紅點,安比(SECBIT)實驗室和 AnChain.ai 都很清楚,區(qū)塊鏈?zhǔn)澜缋锏膽?zhàn)役還遠(yuǎn)遠(yuǎn)沒有結(jié)束。

2009年,中本聰創(chuàng)造了一個虛擬的去中心化新世界。這仿佛是一片流著奶和蜜糖的應(yīng)許之地,人們歡呼雀躍,蜂擁而至。但與所有的生態(tài)系統(tǒng)一樣,新世界有生命,就有捕食者。有交易者,就有黑客。區(qū)塊鏈上的應(yīng)用在進(jìn)化,攻擊者也同樣,我們給大家展示的是區(qū)塊鏈?zhǔn)澜绮粸槿酥牧硪幻妫盗饔縿印R饬现猓苍谝饬现小?/span>


合約 游戲 攻擊 黑客 地址
分享到:

1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。


專題報道

主站蜘蛛池模板: SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 防锈油-助焊剂-光学玻璃清洗剂-贝塔防锈油生产厂家 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 磁力抛光机_磁力研磨机_磁力去毛刺机-冠古设备厂家|维修|租赁【官网】 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | HDPE储罐_厂家-山东九州阿丽贝防腐设备| 江西自考网-江西自学考试网 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 酒店厨房设计_中央厨房设计_北京商用厨房设计公司-奇能商厨 | 辊道窑炉,辊道窑炉厂家-山东艾希尔 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 真空上料机(一种真空输送机)-百科 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | LNG鹤管_内浮盘价格,上装鹤管,装车撬厂家-连云港赛威特机械 | 电动手术床,医用护理床,led手术无影灯-曲阜明辉医疗设备有限公司 | 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 【连江县榕彩涂料有限公司】官方网站 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 海外仓系统|国际货代系统|退货换标系统|WMS仓储系统|海豚云 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 德国UST优斯特氢气检漏仪-德国舒赐乙烷检测仪-北京泽钏 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 |