鏈上地址投毒讓你防不勝防

Abstract:

近一周,0U 轉賬的鏈上地址投毒攻擊愈演愈烈,截至12月2日,已經有超過37W地址被投毒,總計92個受害地址,被盜取金額超過164W USD。

本篇文章,X-explore 對攻擊態勢進行了全面分析,對攻擊者進行了鏈上溯源,同時也深入分析了攻擊的實現方式。

我們呼籲錢包APP加強風險提示,普通用戶在轉賬時謹防此類攻擊。因為我們注意到UTC時間11月2日10點38分,有一位鏈上用戶損失慘重,近100萬美金因投毒而被轉到黑客地址。

本文由X-explore 與吳說區塊鏈聯合發布。

1. 背景

近期,我們的鏈上風險監控發現ETH、BSC鏈上頻繁出現0u 轉賬現象,以下圖bsc鏈的交易數據為例,受害者A發出一筆正常交易將452 BSC-USD發給B後,會收到C轉來的0 BSC-USD,同時,在同一筆交易hash內用戶A自己也會不受控制的給C轉0 BSC-USD(實現了“一來一回”的0 BSC-USD轉賬操作)

用戶交易列表出現的現象

在社區中,很多用戶不知所以然,擔心自己的錢包私鑰已經洩漏,攻擊者正在竊取資產。

2. 攻擊意圖

其實遇到這種情況的用戶不用緊張,大家的資產是安全的,私鑰並沒有洩漏,只需要仔細確認地址小心別轉錯賬就沒事,黑客的手法很簡單:

  1. 在鏈上監控幾個穩定幣的轉賬信息,捕獲受害者地址A正常發送給用戶B的轉賬信息。

  2. 精心構造與用戶地址B首尾一致的黑客地址C,使受害者A與黑客地址C互相轉帳0U。 (這裡攻擊者可以使用靚號生成工具Profanity,在幾秒內生成與用戶地址前後7位相同的地址)

  3. 受害者A下次轉賬時粗心大意直接複製歷史交易的地址時,很容易錯誤複製到黑客準備的地址C,從而將資金轉錯賬

受害者給正常地址轉賬

黑客地址給受害者轉0U

受害者給黑客地址轉賬

我們認為這種攻擊是鏈上地址投毒攻擊:

  1. 首先,黑客讓自己的地址出現在用戶交易歷史中,誘導用戶誤認為是可信的交互地址。

  2. 此外,黑客構造出的地址與用戶可信地址首尾相同,被用戶當作下次交易的對象。鏈上投毒很容易使用戶產生資損,鏈上用戶需共同警惕!

3. 攻擊態勢

截止12月2日,在BSC與ETH鏈上的攻擊次數分別超過32萬次和5萬次,受攻擊影響的獨立地址數分別超過16萬個以及4萬個。

從趨勢上看,BSC鏈自從11月22日開始爆發,ETH鏈則從11月27日開始爆發,兩條鏈的攻擊規模均愈演愈烈。

此外,可以看到攻擊發生時間有顯著規律性,在每天UTC時間17點到0點攻擊量級顯著減少。疑似攻擊者處於亞洲時區。

截止12月2日,總共有92 個獨立地址受騙,累計被騙金額達到164萬USD。伴隨著攻擊者攻擊目標的增加,可以預見,近期還會不斷有大量用戶被騙。

此外,我們對攻擊者的攻擊成本進行了分析,目前總成本接近2.9W USD(50 BNB + 11 ETH),攻擊者對BSC-USD和USDT非常偏愛,與穩定幣的幣種流通量和用戶持有量有關

攻擊者溯源

我們對其中一個攻擊者進行了鏈上溯源追踪,與兩個主流中心化交易所關聯,其完整過程如下圖所示:

  1. 其攻擊資金的來源地址與OKX.com存在關聯,攻擊者通過使用Transit.Finance跨鏈橋將原始攻擊資金從TRON鏈轉移到BSC鏈上。

  2. 其盜取資金最終歸集到Huobi.com,攻擊者依然使用Transit.Finance跨鏈橋將盜取資金轉移到TRON鏈上。

讓我們進一步展開,針對盜取資金的流向進行溯源。

首先,受害者地址0xe17c2b2b40574d229a251fe3776e6da2cc46aa5e向攻擊者地址0x720c1cfe1bfc38b3b21c20961262ad1e095a6867分兩次,共轉賬1300U。

接著,攻擊者地址將資金歸集到地址0x89e692c1b31e7f03b7b9cbb1c7ab7872ddeadd49

攻擊者在0x89e692c1b31e7f03b7b9cbb1c7ab7872ddeadd49地址上進行了資金的跨鏈轉移,在txhash為0x72905bd839f682f795946d285500143ee7606e9690df2ad32968e878ad290d9f的交易中,如下圖所示,將10561 USDT通過Transit.Finance的合約(0xb45a2dda996c32e93b8c47098e90ed0e7ab18e39)進行了Cross操作。在這筆交易的Event Logs中,可以看到資金去向了TRON鏈的USDT,對應地址是TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD,對應TRON鏈上的交易hash是:716507136ad28717ffd5f2f437af753ff96d344d2bcbe83f24d801db49f5a884

最終,攻擊者將TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD 地址上的充值進了Huobi交易所。充值的入金地址分別是:TPtzsrCAG61QMwig3jZV8Px7Rd1WZVnRXG, TDp7r3S1hJeiNfH1CvCVXeY8notY47nagJ

攻擊原理分析

攻擊者案例1:

EOA: 0xBAA1451bE8C33998CD43F375c2e67E79c1a104AD

CA: 0x7ceBeb6035B231A73CB5Fb4119c2FbBC04Ec6fD1

攻擊者案例2:

EOA: 0x616384a80f32aDb65243522971aE2ba7664B62E3

CA: 0x6f00Ed594A6AceEf0E1A6FE023Ecd5Eb96c8665a

黑客控制不同地址並通過合約批量轉賬0 BSC-USD給受害者地址

針對bsc鏈上的token攻擊主要包含BSC-USD、BUSD、USDC、ETH等,大部分是通過攻擊合約批量調用transferFrom()函數,也有手動調用transfer()函數的情況和針對主幣的情況,原理基本一致。以下用BSC-USD 的一個攻擊合約舉例

transferFrom()

在攻擊者調用攻擊合約的一筆交易中,攻擊合約只調用了BSC-USD 的transferFrom() 函數,通過對參數填充sender、recipient、amount可以實現操控任意地址間的0 USD轉帳,同時產生授權Approval()與轉賬Transfer()的事件

Blocksec phalcon交易信息

來自Blocksec phalcon區塊鏈瀏覽器交易信息

BSC-USD 的合約源碼顯示transferFrom()函數順序調用了轉賬_transfer()與授權_approve()函數

_transfer()函數的作用很簡單,首先排除交易中的全零地址,然後給發送方減錢,接受者加錢,最後記錄轉賬事件。這裡用到的加減函數add()/sub()是OpenZeppelin的safemath庫,溢出會報錯回退

_approve()函數同樣排除全零地址,修改授權值,這個函數的重點在transferFrom中調用approve的參數計算裡,用到了_allowances[sender][_msgSender()].sub(amount, “BEP20: transfer amount exceeds allowance”) ,將已有的授權token數量減去轉賬數量,剩餘的授權數量放入approve重新授權。這裡用到的減函數sub是OpenZeppelin的safemath庫,溢出會報錯回退;但是如果整個流程的amount參數為零,沒有任何檢測機制能拒絕這筆交易,也就導致了鏈上大量的0U 轉賬能正常發送,而黑客只需要付出手續費即可收穫不菲的回報。

transfer()

調用transfer()函數的攻擊方式原理一致,整個流程只有加減的溢出檢測,沒有對零轉賬的過濾。

BNB

在token的攻擊追溯過程中,我們還發現了通過0 BNB轉賬的首尾相同釣魚攻擊,原理與token釣魚類似,構造首尾相同的地址進行釣魚

攻擊交易:https://bscscan.com/tx/0x5ae6a7b8e3ee1f342153c1992ef9170788e024c4142941590857d773c63ceeb3

構造地址後迷惑性非常高,一不小心就轉錯到黑客地址上

正常用戶地址:0x69cb60065ddd0197e0837fac61f8de8e186c2a73

黑客構造地址:0x69c22da7a26a322ace4098cba637b39fa0a42a73

6. X-explore 攻擊檢測

目前X-explore可針對此類攻擊行為進行實時的鏈上監測,為了避免危害進一步加劇,我們建議:

  1. 錢包App通過顏色或其他提示幫助用戶區分地址,並做好用戶提醒;

  2. 用戶在轉賬前仔細區分歷史交易地址,逐字確認,最好自己存一份地址簿。

與此同時,我們在Dune 中開源了此次攻擊事件的態勢感知大圖。

https://dune.com/opang/first-and-last-address-construction

敬請關注我們。

Mirror: https://mirror.xyz/x-explore.eth

Twitter: https://twitter.com/x_explore_eth

來源:bress

Total
0
Shares
Related Posts