作者:灑脫喜
注:你是否遇到過這樣的情況,當你發送一筆以太坊資金,然后就發現錢包里的錢立即被清空了,你可能被清掃器(sweeper)盯上了,這篇文章旨在幫你解決這個問題,原文作者是MyCrypto安全&反釣魚工程師Harry Denley,
當你的秘密遭到泄露時,惡意方通常會給你的賬戶設置一個清掃器(sweeper),以利用將來該地址上所發生的任何事情,比如當用戶存入ETH以嘗試提取一些代幣,發生空投或其它情況時。
本文概述了用戶的資金是如何被清掃走的,以及三種獨特的方法來挽救任何未被清掃的資金(例如質押資金)。
用戶是如何被釣魚的
近期,我們看到有大量用戶在冒充Telegram群管理員,這些假的管理員會向在主頻道中請求幫助的用戶提供幫助(盡管他們不是真正的管理員,他們復制了管理員簡介資訊,但用戶名有一些小的差異),這些冒名頂替者經常會說很多行話來迷惑用戶,并分享一個看似合法網站的鏈接,但它最終會要求你輸入助記詞或私鑰。
然后,你的加密資產就不見了,上面有一個清掃器。
這是這些假網站之一的示例:
清掃器的工作方式
清掃器是一些監控區塊鏈(包括txpool,從技術上講,它沒有在鏈上)的代碼,其以編程方式對一組規則的特定事務進行簽名的反應,要比人類更快,
這意味著,對于你在區塊鏈瀏覽器上查看你的地址或將其“連接”到dapp的UI,清掃器(sweeper)是看不見的,只有在你簽名并向網路廣播交易后,清掃器(sweeper)才能看到你的活動,
隨著時間的推移,我們看到了清掃器(sweeper)和利用它們的活動的演變。
清掃器的演變
2017年期間,有相當一部分活動利用了具有鎖定功能(即,你無法成功調用transfer() )但包含喂價的代幣。Dave Appleton發表了一篇關于這些活動的文章。
惡意方利用這種騙局的方式是,他們會將私鑰發布到這個地址(以某種看起來無辜或錯誤的方式),并等待人們將ETH存入該地址(以轉移地址中的代幣),然后惡意方會有一個該賬戶的清掃器程式,以將存入該地址的ETH快速轉移到他自己的賬戶。從理論上來說,鎖定的代幣被認為是毫無價值的,因此他們試圖從那些毫無戒心的“貪婪”用戶那里獲取利潤。
如今,遭泄露的的地址基本被部署了ETH清掃器程式,一些組織則使用更高級的清掃器程式邏輯來清掃基于喂價的ERC20代幣。
今年早些時候,我對一個泄露地址做了一些偵察研究,發現清掃器在不斷進化:
- 清掃器偏愛美元價值最高的資產,即使這意味著需要花費更多的交易費用來清掃;
- 清掃器將使用所有可用的ETH最大化清掃價值,同時也有很高的百分比是nonce的“獲勝”交易,
- 清掃器有一個匹配引擎,將質押代幣(即:xKNCa=KNC)與其原生代幣匹配,以便喂價反映在質押代幣上。
- 清掃器有自己的內部nonce計數器,如果其最高nonce隨機數未在一個時間范圍內得到確認(或被另一個丟棄/替換),則定期將nonce隨機數重置為eth.getTransactionCount()輸出。
- 如果存在清掃器所針對的高價值資產,則有一些活動會建議運行者通過資助地址來“犧牲”一些ETH,以嘗試從賬戶中快速清掃高價值資產。
- 如果美元價值低于某個閾值,則某些清掃器就不會清掃資產,這意味著你可能并不知道自己的賬戶被清掃器盯上了,這是很可怕的,
描述清掃器的文章,第一次出現是在2017年,而現在我們觀察到的清掃器已變得更加先進,它們的設計目的是最大化運行者的利潤,同時對受害者造成最大的損失,
如何擊敗清掃器?
首先,作為人類,我們是無法比代碼更快的,所以我們的解決方案只能涉及編碼,你可以選擇幾條不同的路線,它們均無法提供100%的保證,但對我們而言是有利的。
你需要創建一個想要嘗試搶救的代幣列表,按優先級排序,這樣你就可以輕松地確定你的計劃,你需要列出:
- 代幣合約地址;
- 代幣是否質押(以及解除質押是否是時間鎖定的);
- 代幣是否可轉讓;
- 代幣價值(以美元計算);
關鍵是你要有條不紊地完成這件事,這樣你才能快速有效地執行,正如一句名言:“如果你疏于計劃,那你就是計劃走向失敗”,
使用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 網站,