展會(huì)信息港展會(huì)大全

科學(xué)家在行動(dòng):捕獵以太坊黑暗森林中的搶跑機(jī)器人
來(lái)源:互聯(lián)網(wǎng)   發(fā)布日期:2021-01-10 17:35:59   瀏覽:8503次  

導(dǎo)讀:鏈聞 ChainNews 微信號(hào):chainnewscom 搶先交易機(jī)器人如何截胡資金?如何避免被搶先交易的厄運(yùn)? 撰文:Alex Manuskin,加密貨幣錢(qián)包 Zengo 區(qū)塊鏈研究員,作者授權(quán)鏈聞發(fā)表該文章的中文版本 編譯:Perry Wang 以太坊黑暗森林 中的怪物可不是茶余飯后的玩笑...

鏈聞 ChainNews

微信號(hào):chainnewscom

搶先交易機(jī)器人如何截胡資金?如何避免被搶先交易的厄運(yùn)?

撰文:Alex Manuskin,加密貨幣錢(qián)包 Zengo 區(qū)塊鏈研究員,作者授權(quán)鏈聞發(fā)表該文章的中文版本

編譯:Perry Wang

以太坊黑暗森林中的怪物可不是茶余飯后的玩笑。這些搶先交易的機(jī)器人能分析智能合約指令和它們之前從未在智能合約中用過(guò)的函數(shù),以提取潛在收益。

要更好的了解這些機(jī)器人,本文提供了一次探尋以太坊黑暗森林的漫游之旅。讓我們進(jìn)一步深入該黑暗森林中,了解它們有多么猖獗。

我們?cè)O(shè)法「利用陷阱」,捕獲了一些常見(jiàn)類型的搶先交易機(jī)器人,并對(duì)其行為進(jìn)行了分析。

在這場(chǎng)漫游之旅中,我們研究了這些搶先機(jī)器人的效率,研究了各種交易被它們追獵的可能性。當(dāng)然,我們還測(cè)試了不同的逃避他們的方法。

以下,enjoy。

什么是搶先交易?

一般來(lái)講,搶先交易(https://en.wikipedia.org/wiki/Front_running)是指在已知的未來(lái)交易發(fā)生之前,在執(zhí)行隊(duì)列中插隊(duì)兌現(xiàn)交易的行為。

搶先交易的一個(gè)簡(jiǎn)單示例是交易所出價(jià)。假設(shè)某人即將在 Uniswap 上購(gòu)買(mǎi)大量 ETH,足以推動(dòng) ETH 價(jià)格上漲。從這種情境中受益的一種方法是在這筆大量買(mǎi)進(jìn) ETH 之前的瞬間搶先買(mǎi)入 ETH,此時(shí)價(jià)格仍然較低。然后,在 ETH 價(jià)格飆升之后,立即賣(mài)出以鎖定利潤(rùn)。

除了這種套利交易實(shí)例,還存在很多利用搶先交易攫取價(jià)值的途徑,包括清算、購(gòu)買(mǎi)罕見(jiàn)的 NFT,或者僅僅是制造用戶錯(cuò)誤。(交易或成交順序的可提取價(jià)值被稱為「礦工可抽取價(jià)值 MEV」)

以太坊中的搶先交易可以通過(guò)支付略高于正常水平的 gas 價(jià)格即可實(shí)現(xiàn),通過(guò)這種方式,可以鼓勵(lì)礦工在構(gòu)建區(qū)塊時(shí)將其交易排列在優(yōu)先順序。交易支付的手續(xù)費(fèi)用越高,執(zhí)行的順序越靠前。因此,如果兩筆交易都會(huì)從同一個(gè)區(qū)塊中的同一個(gè)調(diào)用智能合約的指令中獲利,只有先成交的那筆交易會(huì)最終獲利。

動(dòng)物行為學(xué)

Dan Robinson和Georgios Konstantopoulos在聯(lián)手撰寫(xiě)的「以太坊是一片黑暗森林」博客文章中描述了在一次試圖拯救以太坊一個(gè)智能合約中價(jià)值 12,000 美元代幣的行動(dòng)中,遭到套利機(jī)器人截胡的經(jīng)歷。這些超級(jí)掠食者機(jī)器人非常先進(jìn),能追蹤到以太坊交易池中任何有價(jià)值的交易,通過(guò)搶先交易的手段截胡。

鏈聞注:「以太坊是一片黑暗森林」中文版文章可參見(jiàn):

https://www.chainnews.com/articles/124072923888.htm

黑暗森林的故事令人「毛骨悚然」,以至于剛讀到文章時(shí)簡(jiǎn)直無(wú)法相信。實(shí)際上,確實(shí)有理由質(zhì)疑此類超級(jí)掠食者機(jī)器人的存在。為什么有人能從 Uniswap 協(xié)議中搞走資金呢?這個(gè)平臺(tái)可是被無(wú)數(shù)機(jī)器人虎視眈眈地監(jiān)視著?這些機(jī)器人是不是也就是一群普通的「套利者」而已?

今年稍早,我們發(fā)表過(guò)分析文章證實(shí)它們可不是普通的「套利機(jī)器人」。據(jù)我們所知,它們能設(shè)法調(diào)用以前從未調(diào)用過(guò)的智能合約函數(shù)。就算是通過(guò)代理智能合約對(duì)交易進(jìn)行了模糊處理,但這些機(jī)器人依然可以通過(guò)此類操作掠走資金。

至少可以這樣說(shuō),這令人震驚。能監(jiān)視交易池中任何交易的能力是一種威力無(wú)窮的武器。令人不安的是,一些服務(wù)商開(kāi)始公開(kāi)提供「暗池」交易層。

「暗池」交易層無(wú)需使用諸如 Infura 之類的服務(wù),甚至不使用私有節(jié)點(diǎn),直接將交易發(fā)送給礦工,礦工承諾不會(huì)將其廣播到網(wǎng)絡(luò)中的其余節(jié)點(diǎn),從而確保交易躲過(guò)掠食者的雷達(dá)。

著名白帽samczun曾聯(lián)合多位伙伴,從一個(gè)出現(xiàn)漏洞的智能合約中拯救出960 萬(wàn)美元的行動(dòng)中采用了類似的方法。不難想象,會(huì)有礦工開(kāi)始操縱搶先交易機(jī)器人,同時(shí)只為支付額外費(fèi)用的交易者提供安全通道。

鏈聞注:關(guān)于該故事的中文版文章可參見(jiàn):

https://www.chainnews.com/articles/551492636558.htm

這些機(jī)器人與以太坊的其它元素不同,只能活躍在以太坊主網(wǎng),而智能合約可以在開(kāi)發(fā)環(huán)境或測(cè)試網(wǎng)中進(jìn)行測(cè)試。除了進(jìn)行一些初步試驗(yàn)之外,讓這些機(jī)器人嘗試搶先交易測(cè)試網(wǎng)中的交易在財(cái)務(wù)上沒(méi)有意義。此外,由于隱藏了邏輯,因此這些機(jī)器人的運(yùn)行規(guī)則可能各不相同。

我們不清楚這些領(lǐng)先交易掠食者決定發(fā)起攻擊的條件。因此,在某些方面,追蹤這些掠食者類似于追逐稀有動(dòng)物。

我們不針對(duì)所有領(lǐng)先交易機(jī)器人,而只針對(duì)特定的,即廣義類型的這種機(jī)器人。

我們要確保抓住的搶先交易機(jī)器人是「真正的」廣義搶先交易者,需要一個(gè)獨(dú)特的「陷阱」。陷阱是一個(gè)新造的智能合約,以 SHA256 哈希值的秘密字符串發(fā)起,并附帶有一些資金。任何人只有給出秘密合約才能提取鎖定的資金。資金將直接發(fā)送到提取交易的發(fā)送者。

這個(gè)陷阱的構(gòu)想是以提供正確秘密合約的方式發(fā)送一個(gè)「誘餌」交易,以查看是否有人試圖復(fù)制并自己給出秘密合約,從而截胡資金。如果有人在誘餌交易之前截胡資金,則意味著有人在交易池中時(shí)能對(duì)交易池進(jìn)行分析,復(fù)制其相關(guān)內(nèi)容并自行給出秘密合約。

有意思的是,機(jī)器人能夠在一個(gè)以前所未有的智能合約中給出一個(gè)它們之前毫無(wú)所知的秘密合約來(lái)截胡資金它們確實(shí)是真正的廣義搶先交易機(jī)器人。

廣義搶先交易機(jī)器人的工作機(jī)制

該實(shí)驗(yàn)一個(gè)不可或缺的部分,是要了解廣義搶先交易機(jī)器人的工作機(jī)制。但是如果有人打造了一臺(tái)賺錢(qián)機(jī)器,他們是不可能在 Github 上進(jìn)行分享的。因此,我們只能對(duì)掠食機(jī)器人的行為進(jìn)行觀察和反向工程

打造廣義搶先交易機(jī)器人通常需要兩個(gè)組件:

第一個(gè)組件是一個(gè)以太坊賬戶,有或沒(méi)有智能錢(qián)包代理,它們篡改的交易將會(huì)被發(fā)送到這個(gè)錢(qián)包。

第二個(gè)是「后端」,即操作的大腦,通常發(fā)生在鏈下。

這些機(jī)器人的操作者使用某種技術(shù)掃描交易池中的每筆交易,對(duì)其進(jìn)行解析,替換其參數(shù)(例如,交易調(diào)用方),并判斷對(duì)其截胡是否有利潤(rùn)。

搶先交易機(jī)器人工作流

理性的機(jī)器人對(duì)于交易費(fèi)用超過(guò)可能獲利的交易不會(huì)發(fā)起截胡攻擊?傆(jì)交易費(fèi)用可能較高,尤其是在 Gas 價(jià)格高昂的時(shí)候,因此,要想讓搶先交易機(jī)器人攻擊我們的誘餌交易,需要一定的最低利潤(rùn)。

此外,由于機(jī)器人需要對(duì)交易池中的每筆交易(其中有很多交易)進(jìn)行分析,因此時(shí)間也很重要。以太坊平均需要 12 秒產(chǎn)出一個(gè)區(qū)塊。如果交易的 Gas 價(jià)格足夠高,則必須在下一個(gè)區(qū)塊產(chǎn)生之前對(duì)其進(jìn)行分析并足夠快地替換掉原交易。

這是一個(gè)存在一定概率的過(guò)程,在交易被廣播出去后,有可能有一個(gè)區(qū)塊被立即挖出,導(dǎo)致機(jī)器人沒(méi)有時(shí)間來(lái)成功分析該交易并廣播一個(gè)搶先交易。

考慮了這些因素以及一些想法,我們測(cè)試了搶先交易機(jī)器人出手截胡誘餌的條件。

設(shè)陷阱

我們的智能合約(付款方 Giver:https://etherscan.io/address/0x36cb72433fbe10f03988b9d61d6c479a97a2a0b0)設(shè)立時(shí)的最初余額為0.035 ETH,當(dāng)時(shí)價(jià)值約 20 美元。任何人向合約中存儲(chǔ)的哈希提供正確的秘密合約,就可以拿走這些資金。拿走這些資金的交易會(huì)觸發(fā)掠食者的搶先交易動(dòng)作,另一個(gè)賬戶(接受者 taker)會(huì)試圖給出合適的秘密合約來(lái)提取資金。

第一輪:直接調(diào)用合約

為了確保基準(zhǔn)陷阱正常運(yùn)行,我們首先使用了接收者帳戶來(lái)調(diào)用合同。第一次嘗試時(shí),Gas 價(jià)格相對(duì)較高(由以太框架確定),我們能夠成功收回資金。

我們能成功可能是因?yàn)榻睾@一交易的利潤(rùn)太低,不足以打動(dòng)掠食者,或者因?yàn)檫@一交易很快被寫(xiě)入?yún)^(qū)塊,機(jī)器人沒(méi)來(lái)得及采取行動(dòng)。顯然這不是我們期待的結(jié)果,我們的目標(biāo)是引誘掠食者進(jìn)入我們的陷阱。

第二輪:給掠食者留出思考時(shí)間

這一輪中我們解決了先前遇到的問(wèn)題。我們?cè)黾恿?strong>潛在利潤(rùn),并降低了 Gas 價(jià)格,因此交易不會(huì)太快地被寫(xiě)入?yún)^(qū)塊,從而使機(jī)器人有時(shí)間找到它。該合約的余額增加至 0.04 ETH(余額比以前增加了 0.005 ETH)。

這次我們?cè)獾搅斯。該筆交易在被寫(xiě)入?yún)^(qū)塊前滯留了約 3 分鐘,最終未能從陷阱智能合約中提取到價(jià)值。我們審視了合約的內(nèi)部交易,發(fā)現(xiàn)資金被別人截胡。

鏈聞注:該筆搶先交易地址為

https://etherscan.io/tx/0x5b8221dea090c630e056e7160f065a590138eea8680c634c9134b2c37c7c394a

植入追蹤器

既然我們的陷阱已經(jīng)成功地俘獲了一個(gè)機(jī)器人(我們也付出了一定的代價(jià)),我們可以提煉出一些有趣的洞察。

首先,交易顯示未直接執(zhí)行對(duì)智能合約的調(diào)用。該機(jī)器人不是復(fù)制了交易并從其擁有的帳戶中盲目發(fā)送,而是還通過(guò)代理智能合約傳遞了該交易,其代理智能合約充當(dāng)了執(zhí)行這些交易的智能錢(qián)包。

我們現(xiàn)在可以追蹤之前和未來(lái)的交易,仔細(xì)看一下這個(gè)機(jī)器人到底有多大神通,以及其如何運(yùn)行。

這個(gè)機(jī)器人使用其自有的代理合約

反向編譯(https://etherscan.io/bytecode-decompiler?a=0xc798d5ed657adef1ca7bc6090c590319dffe8979)該合約,顯示了兩個(gè)主要函數(shù):

Withdraw」主要是將該合約中的所有資金發(fā)送給機(jī)器人的運(yùn)營(yíng)者。另一個(gè)函數(shù)接受部分參數(shù):要調(diào)用的合約,參數(shù)清單并傳遞價(jià)值參數(shù)。

有了這個(gè)函數(shù),這個(gè)代理合約扮演了機(jī)器人運(yùn)營(yíng)者的智能錢(qián)包。除了能執(zhí)行調(diào)用外部函數(shù)的功能外,它還可以確保交易開(kāi)始時(shí)的余額至少等于結(jié)束時(shí)的余額,否則可以還原交易,從而避免在調(diào)用未知合約時(shí)可能造成的資金損失(當(dāng)然不包括 Gas)。

利用 Dune Analytics 工具,我們可以看到這個(gè)機(jī)器人自2018年 5 月開(kāi)始運(yùn)營(yíng)以來(lái)收獲頗豐。

假設(shè)這個(gè)機(jī)器人一直使用同一個(gè)智能代理和收款地址來(lái)發(fā)起搶先交易,我們可以估計(jì)其共賺到了約17 ETH

該機(jī)器人不同時(shí)間段賺到的資金 (以 ETH 為單位)

第三輪:這些機(jī)器人有多智能?

既然我們已經(jīng)確信這個(gè)機(jī)器人程序是主動(dòng)對(duì)我們發(fā)起攻擊,那么我們想測(cè)試是否可以通過(guò)第二個(gè)合約(代理合約)混淆我們對(duì)合約的調(diào)用,從而從合約中成功提取誘餌資金,該代理將調(diào)用一個(gè)函數(shù)來(lái)從誘餌合約(giver)中提取誘餌資金。(該合約還具有「收款」函數(shù),可將資金退還給我們)。

我們部署了ProxyTaker合約,調(diào)用適當(dāng)?shù)暮瘮?shù),試圖提取資金。由于通過(guò)代理的行動(dòng)的成本比之前略高一些, giver 合約的余額又上調(diào)至 0.055 ETH。結(jié)果是我們的交易立刻被另一個(gè)機(jī)器人搶先交易。

鏈聞注:

ProxyTaker 合約地址為

https://etherscan.io/address/0x68b1b608034e9f4d34e777e1529bc157e17f60c8

調(diào)用地址為

https://etherscan.io/tx/0xf4b8b57a6e61e97b954da6f9c6b66494aa764bdf0b3a4643e3beb8b276fd7b07

這一次機(jī)器人的手法更令人嘆為觀止。該機(jī)器人不僅能偵測(cè)出我們的提取交易,而且能從一個(gè)完全不同智能合約的內(nèi)部調(diào)用中識(shí)別該交易!而且這一切是以創(chuàng)紀(jì)錄的短暫時(shí)間內(nèi)完成,我們的提取交易是在幾秒后就被寫(xiě)入新區(qū)塊,掠食者的搶先交易也是。

該機(jī)器人的身份也很有意思。該機(jī)器人的智能合約(https://etherscan.io/address/0xea4df374e6b7b3772bb5f98cea1a22606a9eb54c)主要是被這一賬戶(https://etherscan.io/address/0x052ede4c2a04670be329db369c4563283391a3ea)運(yùn)營(yíng)。該賬戶在 Etherescan 發(fā)表過(guò)一條評(píng)論,當(dāng)時(shí)那條主貼是白帽討論從一個(gè)有漏洞的Bancor智能合約拯救資金的內(nèi)容。

運(yùn)營(yíng)者賬戶中的信息 (來(lái)源 : etherscan)

考慮到該機(jī)器人的相同行為特征(利用賬戶 A 調(diào)用代理,將資金轉(zhuǎn)至賬戶 B),以及與上述交易的臨近特征,有理由懷疑這個(gè)機(jī)器人在上述事件中也對(duì)白帽的資金拯救行動(dòng)進(jìn)行過(guò)(https://etherscan.io/tx/0x43f5612bacb17117f538e7a08822f9f7956d82755d5b7b406bfffcea588f5ebe)廣義搶先交易。

這個(gè)機(jī)器人比我們之前遇到的那個(gè)要智能很多。它不僅瞄準(zhǔn) ETH 交易,還進(jìn)行各種套利交易。

單從其賬戶余額來(lái)判斷,其收獲成果也要高出很多。目前該賬戶中余額約有 300 ETH(時(shí)價(jià) 18 萬(wàn)美元)。我們還可以從合約地址中算一下所有流入和流出的資金,以估算其收益,其總額約為900 ETH。

這只是一個(gè)粗略的估計(jì),因?yàn)樵搸艨赡苓M(jìn)行過(guò)與其搶先交易活動(dòng)無(wú)關(guān)的交易。這里是該機(jī)器人所有盈利的交易列表:

https://www.duneanalytics.com/queries/14863

為了讓挑戰(zhàn)更刺激,我們進(jìn)行了更模糊的嘗試,這一次使用了僅我們能夠使用的代理合約OwnedTaker。

這個(gè)陷阱與第三輪非常類似。Giver 合約余額為 0.05 ETH。同一筆交易中還包括了將資金返還我們的交易,而不是留在合約中。

第一次嘗試中,資金支付給 OwnedTaker 合約的該交易(https://etherscan.io/tx/0xce539b25b05e106c2f4ff0f6f76158efe436f1d8c9568048d4dcd1c016a6fef0)花了約 1 分鐘寫(xiě)入?yún)^(qū)塊,我們最終收回了資金。

我們隨之重復(fù)了這一實(shí)驗(yàn),這次 giver 合約余額提高至0.06 ETH,迄今我們使用的最高一次余額,確保不會(huì)因?yàn)閮r(jià)值太低讓搶先交易機(jī)器人覺(jué)得不值得出手。

加入只能由合約主人轉(zhuǎn)發(fā)交易的 Owned 代理合約,在兩次交易中使得上述兩個(gè)已知的領(lǐng)先交易機(jī)器人無(wú)法成功解析數(shù)據(jù)并截胡。

成功提款

也許是只允許合同主人執(zhí)行調(diào)用的要求,或者資金被發(fā)送到與調(diào)用合約不同的目標(biāo)地址這一事實(shí),能幫助避免機(jī)器人的搶先交易嘗試。

機(jī)器人很可能被調(diào)教為首先考慮自我保護(hù)。畢竟它們正在調(diào)用未知合約,該合約可能執(zhí)行任意代碼。可以合理地假設(shè):如果不能保證利潤(rùn),它們將避免不必要的風(fēng)險(xiǎn)或交易費(fèi)損失。

具體取決于您如何看待它。我們使用了新合約,但只有我們知道一個(gè)這個(gè)秘密合約。很明顯,我們發(fā)現(xiàn)的兩個(gè)領(lǐng)先交易機(jī)器人都是在交易池中進(jìn)行所有交易,并且從它們的利潤(rùn)來(lái)看,它們干的很不錯(cuò)。

我們?yōu)槭裁丛谧詈蟮膰L試中避免了被搶先交易的厄運(yùn)呢?

具體原因很難判斷。可能是機(jī)器人不愿冒與經(jīng)過(guò)身份驗(yàn)證的合同進(jìn)行通信的風(fēng)險(xiǎn),或者資金被轉(zhuǎn)移到另一個(gè)地址這一事實(shí)是出乎其意料。

這絕對(duì)不意味著這是避免被領(lǐng)先交易的完全可行的方法。最有可能的是,在以太坊交易池中潛伏著更復(fù)雜的機(jī)器人,它們只是根本不愿意冒險(xiǎn)冒險(xiǎn)獲得這么小的利潤(rùn)

在這一簡(jiǎn)短的實(shí)驗(yàn)中,我們能夠展示廣義搶先交易機(jī)器人的存在,以及其智能程度之高

當(dāng)然,我們很清楚我們的實(shí)驗(yàn)既不完整也不確定。還存在許多其他的機(jī)器人,它們的觸發(fā)機(jī)制運(yùn)營(yíng)方式截然不同,諸如潛在盈利、通信特征和最低復(fù)雜度(例如,通過(guò) gasLimit)等因素可能會(huì)影響其運(yùn)營(yíng)方式。

不過(guò)我們確信我們的工作提供了一種概念驗(yàn)證,讓人們進(jìn)一步弄清這些廣義搶先交易機(jī)器人的作案手法。

目前令人震驚的現(xiàn)實(shí)是,如果存在任何人都可以調(diào)用智能合約而獲利的交易,即使它非常晦澀難懂,現(xiàn)實(shí)是很有可能被某個(gè)搶先交易機(jī)器人捷足先登掠走資金。

因此了解這些機(jī)器人及其運(yùn)行方式至關(guān)重要,這樣我們才能在現(xiàn)在和將來(lái)構(gòu)建更安全的系統(tǒng)。諸如Flashbots之類的項(xiàng)目試圖通過(guò)讓 MEV 提取民主化并使其成為公共資源來(lái)做到這一點(diǎn)。我們希望這項(xiàng)研究有助于實(shí)現(xiàn)這一目標(biāo)。

感謝 Tal Be’ery、Omer Shlomovitz、Oded Leiba、Dan Robinson 以及其他幫助審閱本文的各位。

鏈聞注:文中作者所用相關(guān)合約代碼可在原文附錄查看:https://medium.com/zengo/ethology-a-safari-tour-in-ethereums-dark-forest-677566d7c575

加密原住民安全與隱私必備指南


贊助本站

相關(guān)內(nèi)容
AiLab云推薦
推薦內(nèi)容
展開(kāi)

熱門(mén)欄目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能實(shí)驗(yàn)室 版權(quán)所有    關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 公司動(dòng)態(tài) | 免責(zé)聲明 | 隱私條款 | 工作機(jī)會(huì) | 展會(huì)港