以太坊清掃機器人肆虐,一文了解三種解決方案

買賣虛擬貨幣

注:你是否遇到過這樣的情況,當你傳送一筆以太坊資金,然後就發現錢包裡的錢立即被清空了,你可能被清掃器(sweeper)盯上了,這篇文章旨在幫你解決這個問題,原文作者是MyCrypto安全&反釣魚工程師Harry Denley。

當你的秘密遭到洩露時,惡意方通常會給你的賬戶設定一個清掃器(sweeper),以利用將來該地址上所發生的任何事情,比如當使用者存入ETH以嘗試提取一些代幣,發生空投或其它情況時。

本文概述了使用者的資金是如何被清掃走的,以及三種獨特的方法來挽救任何未被清掃的資金(例如質押資金)。

使用者是如何被釣魚的

近期,我們看到有大量使用者在冒充Telegram群管理員,這些假的管理員會向在主頻道中請求幫助的使用者提供幫助(儘管他們不是真正的管理員,他們複製了管理員簡介資訊,但使用者名稱有一些小的差異)。這些冒名頂替者經常會說很多行話來迷惑使用者,並分享一個看似合法網站的連結,但它最終會要求你輸入助記詞或私鑰。

然後,你的加密資產就不見了,上面有一個清掃器。

這是這些假網站之一的示例:

清掃器的工作方式

清掃器是一些監控區塊鏈(包括txpool,從技術上講,它沒有在鏈上)的程式碼,其以程式設計方式對一組規則的特定事務進行簽名的反應,要比人類更快。

這意味著,對於你在區塊鏈瀏覽器上檢視你的地址或將其“連線”到dapp的UI,清掃器(sweeper)是看不見的。只有在你簽名並向網路廣播交易後,清掃器(sweeper)才能看到你的活動。

隨著時間的推移,我們看到了清掃器(sweeper)和利用它們的活動的演變。

清掃器的演變

2017年期間,有相當一部分活動利用了具有鎖定功能(即,你無法成功呼叫transfer())但包含喂價的代幣。Dave Appleton發表了一篇關於這些活動的文章。

惡意方利用這種騙局的方式是,他們會將私鑰釋出到這個地址(以某種看起來無辜或錯誤的方式),並等待人們將ETH存入該地址(以轉移地址中的代幣)。然後惡意方會有一個該賬戶的清掃器程式,以將存入該地址的ETH快速轉移到他自己的賬戶。從理論上來說,鎖定的代幣被認為是毫無價值的,因此他們試圖從那些毫無戒心的“貪婪”使用者那裡獲取利潤。

如今,遭洩露的的地址基本被部署了ETH清掃器程式,一些組織則使用更高階的清掃器程式邏輯來清掃基於喂價的ERC20代幣。

今年早些時候,我對一個洩露地址做了一些偵察研究,發現清掃器在不斷進化:

  1. 清掃器偏愛美元價值最高的資產,即使這意味著需要花費更多的交易費用來清掃;

  2. 清掃器將使用所有可用的ETH最大化清掃價值,同時也有很高的百分比是nonce的“獲勝”交易。

  3. 清掃器有一個匹配引擎,將質押代幣(即:xKNCa=KNC)與其原生代幣匹配,以便喂價反映在質押代幣上。

  4. 清掃器有自己的內部nonce計數器,如果其最高nonce隨機數未在一個時間範圍內得到確認(或被另一個丟棄/替換),則定期將nonce隨機數重置為eth.getTransactionCount()輸出。

  5. 如果存在清掃器所針對的高價值資產,則有一些活動會建議執行者透過資助地址來“犧牲”一些ETH,以嘗試從賬戶中快速清掃高價值資產。

  6. 如果美元價值低於某個閾值,則某些清掃器就不會清掃資產,這意味著你可能並不知道自己的賬戶被清掃器盯上了,這是很可怕的。

描述清掃器的文章,第一次出現是在2017年,而現在我們觀察到的清掃器已變得更加先進,它們的設計目的是最大化執行者的利潤,同時對受害者造成最大的損失。

如何擊敗清掃器?

首先,作為人類,我們是無法比程式碼更快的,所以我們的解決方案只能涉及編碼。你可以選擇幾條不同的路線,它們均無法提供100%的保證,但對我們而言是有利的。

你需要建立一個想要嘗試搶救的代幣列表,按優先順序排序,這樣你就可以輕鬆地確定你的計劃,你需要列出:

  1. 代幣合約地址;

  2. 代幣是否質押(以及解除質押是否是時間鎖定的);

  3. 代幣是否可轉讓;

  4. 代幣價值(以美元計算);

關鍵是你要有條不紊地完成這件事,這樣你才能快速有效地執行。正如一句名言:“如果你疏於計劃,那你就是計劃走向失敗”。

使用TAICHI

清掃器的工作方式是監視txpool中轉到其清掃地址的傳入交易,而TAICHI允許你將簽名的交易直接提交給礦工(SparkPool),而無需透過公共txpool進行廣播,這意味著清掃器程式將是看不到的,並且很可能你的交易不會被清掃程式機器人搶先完成(至少以我的經驗來看)。

圖片來自TAICHI.NETWORK

這裡的方法是讓你的所有交易預先以nonce順序簽名,並以程式設計方式提交給TAICHI。大多數清掃器只監視公共txpool/mempool以獲取傳入的ETH交易,並且不在每個新區塊上呼叫eth_getBalance(以節省CPU週期和RPC方法呼叫的成本),這意味著它們將對透過專用txpool路由傳送到帳戶的ETH視而不見,也就不會對其進行清掃。

這需要你做一些數學工作,如果正確執行了數學運算,則嘗試搶先交易的清掃器程式可能會失敗!(通常,我預設gas價格比GasNow上的“快速”類別高几個百分點,因此礦工將更有可能在下一個區塊中確認你的交易。)

你可以離線使用MyCrypto來生成已簽名的交易,並在準備就緒時將其推送到TAICHI,或者使用ethers.js(或其他庫)建立程式碼來建立已簽名的交易。

方法2:使用一個自毀智慧合約

就像使用TAICHI方法一樣,我們可以使用智慧合約讓ETH進入賬戶,而不會在公共txpool中顯示出來。我們透過從安全地址部署智慧合約來做到這一點,然後在結構上將ETH傳送到被洩露的地址(這將是一筆內部交易)。

透過部署這個合約,我們可以在建構函式引數中傳送ETH以及遭洩露的地址字串。該合約透過在同一交易中建立合約並自毀來工作。使用selfdestruct()意味著我們清除了區塊鏈狀態(因為它是一次性使用合約),並且在一次交易中將ETH轉發到了洩露地址。

示例:

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

請注意,這種方法雖然有效,但它會增加額外的成本,因為我們要做的操作不僅僅是將ETH從一個帳戶傳送到另一個帳戶。這種方法的成本約為70,000 gas,在高昂的gas價背景下,使用這種方法的手續費成本就可能達到0.0112ETH。

方法3:使用Flashbots

一般而言,我們需要支付ETH才能讓一筆交易被確認(因為交易費用是由傳送方支付的)。然而,由於Flashbots‌的出現,我們可以更輕鬆地從EOA中透過用另一個帳戶中的資金“賄賂”礦工,以0 gas價格(即0美元交易費用)確認交易,這意味著我們可以將代幣從洩露的地址中轉移出來,而無需用ETH支付gas費用,是的,就是這樣。

該策略需要用到2個賬戶,一個是洩露賬戶,以及另一個賄賂礦工的帳戶。

Flashbots小組已釋出了一個名為Flashbots / searcher-sponsored-tx‌的專案,其具有設定此策略以從兩個帳戶中確認你的交易的基本原理。

由於我們將使用另一個帳戶支付交易費用,因此不需要向受損害的帳戶存入ETH。

為了確保洩露帳戶中沒有ETH,我們強烈建議你執行一個Burner機器人。

我們通常建議在每個例項上使用不同的RPC節點,在一臺以上的計算機上執行這個burner 機器人。例如,使用Infura在本地執行burner 機器人,並在具有其他提供商(例如Quiknode)的遠端伺服器上執行一個burner機器人。這樣,你就有了一個備案計劃,以防出現高網路延遲或節點問題(速率限制、同步問題)。

Flashbots/searcher-sponsored-tx中的程式碼需要根據你的特定需求進行修改,但這個引擎可以幫助你將代幣從洩露的地址中解救出來。這個Flashbots引擎足夠靈活,可支援單個 transfer()呼叫,或者unstake() 以及 transfer()呼叫。

如果你不太熟悉程式碼,你也可以嘗試使用@kendricktan/flashbots.tools ‌網站。

作者:灑脫喜,來源:巴位元資訊

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读