小心那些利用Etherscan招搖撞騙的人

買賣虛擬貨幣

區塊鏈索引服務依賴於合約事件來幫助歸檔資料,並在一個漂亮的使用者介面中給我們提供交易記錄,其通常被稱為“區塊瀏覽器”,比如etherscan。但惡意合約可以表現得無比“正常”,卻會汙染這些事件,從而欺騙區塊瀏覽器,向毫無戒備的使用者提供關於代幣來源的誤導性資訊。

例如,惡意使用者可以部署一個簡單erc20合約和“空投”代幣給一群使用者,在自動做市商上建立一個看起來健康的流動資金池,等待使用者根據錯誤的宣傳購買或出售代幣,認為此代幣是已知開發人員/實體的一部分。

分解

erc20代幣(它是代幣介面的通用標準)是合約的屬性、函式、輸入、輸出和事件的集合。只要我們的合約具有正確的函式特徵,我們就可以在這些函式中使用自定義邏輯——即使是提供不正確資料的函式。

例如,如果合約部署者傳送一個代幣,我們可以讓一些/所有區塊瀏覽器向終端使用者(在某些檢視中)顯示不同的地址。假設如下;

  • 合約部署者是有惡意的,想要為他們的代幣制造一些炒作。

  • 代幣在amm中有一些流動性(如uniswap)供使用者購買/出售,主要的流動性提供者頭寸屬於代幣背後的團隊。

  • 許多使用者都知道傳送者,而不是某個隨機的地址。

這不僅僅是erc20的問題……受汙染的資料可以被插入到任何代幣標準事件中,如nft (erc721, erc1155),以迷惑使用者和潛在投資者,讓他們認為專案有特定的利益方/影響者,而實際上並沒有。

這個問題並不“新鮮”,但我們寫這篇文章是為了強調正在發生的事情,以及使用者在“模仿”“看起來合法”的專案之前應該做些什麼。

當區塊瀏覽器看到交易發出的事件時,他們將其記錄在他們的鏈下資料庫中,並與其他資料建立關係,這樣他們就可以建立一個很好的交易關係圖,在他們的ui中顯示給終端使用者。

概念驗證

我們將部署一個概念驗證合約,使用一個老版本的 solidity,同時也要證明它與任何solidity版本或以太坊中的任何東西都沒有問題,其是一個來自鏈下應用程式信任合約的信任問題。一般來說,對事件的繼承信任是“正確”的,它是一種合約將可用資料提供給鏈下程式進行索引的方式。

在上面的合約(位於0x3afe99bd92b1aed3237196b26743681766d4940e)中,我們修改了邏輯,將 transfer 事件中的傳送者地址更改為流行區塊瀏覽器上標記為“opensea:wallet”的地址,前提是我們(建立合約的人)傳送代幣。

它所做的是,當區塊瀏覽器索引該事件時,它從transfer事件中看到地址為0x5b32…1073傳送了代幣,而不是實際的發起者0x11b6…04c9,這可能導致該方法被不良行為者利用,誘使使用者認為;

  • 一個受歡迎的人物在代幣上有既得利益

  • 一個受歡迎的人物正在“解除安裝”大量的代幣

  • 代幣是合法的,因為在區塊瀏覽器上,它顯示了已知的實體與代幣合約“互動”

讓我們從合約部署者地址呼叫transfer(),看看區塊瀏覽器索引了什麼。我們只是將代幣從我的地址(0x11b6…04c9)移動到一個目標地址(0x4bbe…1520)。

“opensea: wallet”erc20活動檢視顯示它似乎已經傳送了一個名為opensearevenueshare的代幣到目的地。

交易表明(在“token transferred”中)“opensea: wallet”將代幣傳送到目標地址。

目標地址顯示“opensea: wallet”給他們轉移了10個代幣。

尋找什麼?

大多數這樣的以利用使用者的惡意合約都沒有被“驗證”,又因為我們只能接觸到區塊瀏覽器上的位元組碼,如果事件被汙染了不良資料,再基於某些條件,都很難讓使用者進行驗證,就像我們的概念驗證一樣。如果合約沒有被驗證,比如我們無法看到solidity/vyper/...程式碼,並且只暴露於位元組碼,那麼在與合約互動之前,我們應該採取預防措施。

如果一個代幣被“空投”給我們或其他實體,我們應該謹慎,特別是當我們試圖在dex上清算代幣時,因為過去有一些事件是利用人為製造價格的方法從竊取的。

一種快速的方法是檢查事件引數是否與交易發起者匹配,這並非萬無一失,因為空投者有多傳送方合約。例如,如果交易“from”欄位與事件不匹配,請謹慎處理。

用不良資料汙染事件的方法正在主網上進行。一個已知的問題。例如,如果我們在 google bigquery 上執行以下查詢,我們就可以瞭解合約發生了什麼,它們在發出事件來欺騙索引者,讓他們認為vitalik buterin正在使用他們的代幣。

例子

elonplaid (0 x907f3040e13bd57f3b00f89bb8ee19424a95b065)

在建構函式上發出一個被 vitalik buterins 地址汙染的 transfer() 事件,用於整個代幣供應。

使用代幣開始交易時,發出一個被vitalik buterin地址汙染的transfer()事件。

  • 合約創造者向dex (4eth價值)提供流動性

  • 三天後,移除6eth的流動性,有2eth的利潤

kenshainu (0 x3a7eaa257181719965f8ebe64bb7c13ffbbca36b)

在建構函式上發出一個被 vitalik buterins 地址汙染的 transfer() 事件,用於整個代幣供應。

  • 合約創造者向dex (5eth價值)提供流動性

  • 三天後,撤掉6.9eth的流動性,1.9eth的利潤

irondoge (0 xf6072df56114e1a1c76fe04fb310d468c9ba8c38)

在建構函式上發出一個被 vitalik buterins 地址汙染的 transfer() 事件,用於整個代幣供應。

  • 合約創造者向dex (4eth價值)提供流動性

  • 一天後,移除5.8eth的流動性,使專案獲得 1.8eth 的利潤

這只是許多例子中的三個。不法分子正利用汙染事件來欺騙使用者,他們的目標不僅是vitalik buterin的已知地址。

總結

儘管區塊瀏覽器在視覺化區塊鏈資料方面非常有用,但它們的邏輯可能被濫用來顯示誤導性/不正確的資料。區塊鏈的古老格言“不要信任,要驗證”似乎是合適的,特別是當我們都相信區塊瀏覽器可以提供絕對準確的資料,而不考慮它們如何解釋資料時。

這是一個已知且潛在的難以解決的問題,我希望這篇文章能夠幫助人們在“模仿”一個專案之前少一些fomo,多一些小心,因為它看起來像是有人投資了,而實際上他們並沒有。



免責聲明:

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

推荐阅读

;