TAICHI、自毀智能合約和 Flashbots 三種方法或可挽救泄露地址中未被清掃的資金。

原文標題:《以太坊清掃機器人肆虐,一文了解三種解決方案
撰文:Harry Denley
編譯:灑脫喜

你是否遇到過這樣的情況,當你發送一筆以太坊資金,然後就發現錢包裏的錢立即被清空了,你可能被清掃器(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 轉發到了泄露地址。(示例)

請注意,這種方法雖然有效,但它會增加額外的成本,因爲我們要做的操作不僅僅是將 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 ‌網站。

來源鏈接:www.8btc.com