你沒有過這樣的經歷:將一筆資金發送到某個賬戶後,這筆資金卻不翼而飛?你可能是遭了“清道夫”的毒手。我們來幫你解除危機。

如果你的私鑰被盜,作惡者通常會安排一個“清道夫” 程序來監控你的賬戶,然後伺機吃掉你的賬戶中的資產—— 無論你在這個賬戶中存入ETH 或其它代幣,還是收到了空投,或有任何類似情況。

本文概述了“清道夫” 是如何吃掉用戶資產的,並提供了三種方法來挽救還沒有被吃掉的資金(如押金)。

用戶私鑰是如何洩漏的?

我們最近看到有很多用戶冒充Telegram 群組的管理員,然後在這些合法群組的主要頻道向用戶提供“幫助”(雖然他們不是真正的管理員,他們複製了正牌管理員的簡介,只是略微改動了用戶名)。冒牌管理員通常會利用專業話術來迷惑用戶,向用戶分享看似合法的網站(因為有品牌背書)的鏈接。這些網站會要求用戶提供私鑰或助記詞。

然後你的代幣就沒了,而且會有“清道夫” 開始監控你的賬戶。

這裡有一個釣魚網站的例子:

- 感謝研究員 @dubstard 發現了很多冒充WalletConnect 的活動! -

“清道夫” 是如何工作的?

“清道夫” 是一段用來監控區塊鏈(包括交易池,從技術層面上來說,交易池不在鏈上)的代碼。它有著比人類更快的反應速度,按照編好的程序為符合規則的特定交易簽名。

也就是說,“清道夫”是看不到你的,它不知道你正在區塊鏈瀏覽器上查看你的地址,或將你的地址“連接” 到某個dApp 的用戶界面。僅當你簽署某個交易並將其廣播到網絡時,它才會看到你的活動。

隨著時間的推移,“清道夫” 連同利用“清道夫” 的釣魚騙局也在不斷進化中。

“清道夫” 的演化

2017 年有一類騙局非常流行,利用了具備鎖定功能【即,無法成功調用transfer()】同時有餵價的代幣。 Dave Appleton 發文揭露了這類騙局。

在這類騙局中,騙子會先獲取這類能夠被鎖定的代幣,但是區塊瀏覽器依然會提供這類代幣【其中最流行的是Minerum(MNE)】的價格。然後,騙子會(裝作無意間)將存有這類代幣的地址的私鑰公佈出去,引誘受害者來取走地址中的代幣。為了取走代幣,受害者會將ETH 轉到該地址上作為gas 費。然而,騙子早就安排了“清道夫”,以迅雷不及掩耳之勢將受害者轉入的ETH 轉移到自己的賬戶中。從理論上來說,被鎖定的代幣被認為是沒有價值的, 因此騙子試圖從沒有戒心的貪婪用戶那裡收回一些鎖倉價值。

如今,被黑的地址已經被大範圍放置了基礎的ETH “清道夫”。還有一些詐騙集團採用邏輯上更高級的“清道夫” ,會基於餵價吃掉ERC 20 代幣。

前段時間,我對一個被黑的地址進行了研究,發現這些“清道夫” 還在繼續進化:

1)“清道夫” 喜食高價值資產,即使這意味著需要花更多交易費。

2)“清道夫” 會使用所有可用的ETH 來竊取盡可能多的價值,而且其交易在同一nonce 上獲勝的概率很高。

3)“清道夫” 有一個配對引擎,將其原生代幣與質押代幣進行配對(即,xKNCa = KNC),以便獲得質押代幣的餵價。

4)“清道夫” 有自己的內部nonce 計數器,如果其最高nonce 在一段時間內沒有得到確認(或是被丟棄/替換),就會定期將nonce 重置為 eth.getTransactionCount() 的輸出。

5)我們可以透過一些鏈上活動看出,如果某個高價值資產成了“清道夫” 眼中的獵物,“清道夫” 甚至會向相關賬戶轉入一些ETH 作為gas 費,以便迅速將該資產從賬戶中轉出。

6)一些“清道夫” 會為資產價值設置一個最低閾值。 “清道夫” 不會吃掉低於該閾值的資產。這就意味著,你可能察覺不到你的賬戶裡有“清道夫”。細思極恐。

鑑於我們第一次撰寫關於“清道夫” 的文章是在2017 年,如今的“清道夫” 早已今非昔比,可以幫助運營者實現收益最大化,同時讓受害者的損失最大化。

住手吧!清道夫!

如何擊敗“清道夫”?

首先,身為人類的你是快不過代碼的,因此我們的解決方案將涉及代碼。這里為你提供了幾個不同的方案,雖然不能保證100% 有效,但是總有一款適合你。

你需要創建一個想要挽救的代幣列表(按優先級排序),以便輕鬆制定計劃。這張列表需要包含以下內容:

代幣合約地址該代幣是否已用於質押(解鎖是否有時間限制)代幣能否轉移代幣價值(由用戶主觀判斷或美元價值決定,以便確定優先級)

最重要的是,你必須有條不紊,才能快速而有效的執行該方案。正如那句至理名言所說:“凡事預則立,不預則廢。”

使用太極網絡(Taichi Network)

“清道夫” 的運作原理是監控交易池中向“獵物” 地址轉賬的交易。這樣一來,“清道夫” 就可以搶在該交易確認之前簽署好另一個交易並廣播該交易,從而取走轉入資金。

太極網絡可以讓你直接將已簽名的交易提交給礦工(即,星火礦池),無需將其廣播至公共交易池。這意味著,你的交易將進入“清道夫” 的視覺盲區,也就不會被“清道夫” 的機器人搶跑(至少以我的經驗來看是這樣)。

- 圖源:TAICHI.NETWOR

具體方法是,將你的所有交易預先按照nonce 順序簽好名,並以編程方式提交給太極網絡。大多數“清道夫” 只監控公共交易池中等待打包的以太坊交易,不會調用每個新區塊的eth_getBalance (這是為了節省CPU 循環和RPC 調用)。也就是說,“清道夫” 是看不到通過隱私交易池發送至“獵物” 賬戶的ETH 的,也就不會吃掉它。

你需要做一些計算,確保發送到賬戶中作為gas 費的ETH 可以充分利用到每筆已簽名交易上。如果你算得很準的話,“清道夫” 可能會搶跑失敗! (通常情況下,我會默認將gas 費設得比GasNow 上的“極速(Rapid)” 參考值高幾個百分點,從而提高交易被打包進下個區塊的概率。)

你可以在離線狀態下使用MyCrypto 生成交易簽名,並在準備就緒時將它們發送至太極網絡,或使用ethers.js(或其它代碼庫)編寫代碼來創建已簽名交易。

使用帶有自毀功能的智能合約

這個方法和使用太極網絡差不多。我們可以使用智能合約將ETH 轉入賬戶,同時不會在公共交易池中暴露這筆交易。為此,我們可以通過一個安全的地址部署智能合約,並通過其構造函數將ETH 發送到被黑的地址上(這將是一筆內部交易)。

pragma solidity >=0.7.0 <0.9.0;contract MoveETH { constructor(address sendToAddress) payable { address payable addr = payable(address(sendToAddress)); selfdestruct(addr); }}通過部署該合約,我們可以將ETH和被黑地址的字符串發送至構造函數的參數。該合約會在同一筆交易中創建並自毀。其中,selfdestruct() 意味著我們會在同一筆交易中清除該合約的區塊鏈狀態(因此這個合約是一次性的),並將ETH 發送至被黑地址。

例子:

https://goerli.etherscan.io/tx/0x82ccb222eae55aaea73dd0efee1ea6ed7320f880889f280d4a343b8823f86692

請注意,這個方法雖然有效,但是會額外增加成本,因為我們要做的操作不只是將ETH 從一個賬戶轉移到另一個賬戶。這個方法需要大約7 萬gas 的成本。當gas 價格處於高位時,僅gas 成本就高達0.0112 ETH。

接下來,我們將通過太極網絡廣播來自被黑地址的已預先簽署過的交易(這裡也可以使用公共節點,請將賬戶中的全部ETH 餘額設為gas 費,以免被“清道夫” 搶跑(至少盡量降低這種可能性),因為在這種情況下, “清道夫” 必鬚髮送更多ETH 到被黑賬戶才能在gas 費競價中勝出)。

使用 Flashbots

一般來說,我們需要支付ETH 才能讓交易上鍊(因為交易費由交易發送方支付)。但是,有了Flashbots,我們就可以在不支付gas 費(即交易費)的情況下將來自外部賬戶的交易上鍊,只需使用另一個賬戶中的資金來“賄賂” 礦工即可。也就是說,我們不需要向被黑地址轉入一筆ETH 作為手續費,就可以取走這個地址上的代幣。沒錯,就是這樣!

這個方案需要用到兩個賬戶—— 被黑賬戶和用來賄賂礦工的賬戶。

Flashbots 團隊已經發布了一個名為Flashbots/searcher-sponsored-tx 的項目,其中介紹瞭如何通過這個方案將交易上鍊的基本原理。

我們將使用另一個賬戶中的資金來支付交易費,因此不需要被黑賬戶中有ETH。事實上,我們巴不得被黑賬戶裡沒有ETH,畢竟我們最不想看到的,就是騙子/“清道夫” 察覺到我們想要取走資金,使用賬戶內原有的ETH 來搶跑我們。

為了確保被黑賬戶中沒有ETH,我們強烈推薦大家運行一個燃燒器機器人(burner bot)。

我們通常建議在一台以上的機器上運行燃燒器機器人,並針對每個實例使用不同的RPC 節點。例如,使用Infura 在本地運行一個燃燒器,並使用其它提供商(如Quiknode)在遠程服務器上運行一個燃燒器。這樣就可以實現冗餘,以防高網絡延遲或節點故障等問題(例如,速率限制、同步問題等)。

Flashbots/searcher-sponsored-tx 中的代碼需要根據你的具體需求進行修改,不過這裡有個引擎可以幫助你挽救被黑地址中的代幣。 Flashbots 引擎具有很高的靈活性,可以支持單個transfer() 調用,或unstake() 和transfer()調用。

!!! 如何從根本上規避“清道夫”? !!!

最好的防範措施當然是保護好自己的地址不被“清道夫” 侵入,也就不需要與“清道夫” 鬥智斗勇了。

近年來,我們已經在一些app 的UI 上看到了反面例子—— 允許用戶在dapp 界面上使用原始保密信息。這是很不安全的做法,不應該被鼓勵。

永遠不要在聯網設備以及任何網頁上輸入你的原始保密信息(私鑰、key store 文件和助記詞)。

我們建議使用硬件錢包來確保私鑰存放在獨立設備上—— 如果你使用MetaMask 與dApp 進行交互,MetaMask 最近發布了一個更新,可以讓用戶使用多個硬件錢包地址。

購買 Ledger購買 Trezor

如果你使用移動設備與dApp 進行交互,我們建議使用WalletConnect 簽署消息(注:WalletConnect 永遠不會要求你提供保密信息)。


原文鏈接:

https://blog.mycrypto.com/how-to-beat-an-ethereum-based-sweeper-and-recover-your-assets/

作者: Harry Denley

翻譯&校對:閔敏 &阿劍