為什麼你的錢包顯示一筆你從未發出的轉帳:零金額交易與地址投毒
出現不明的轉出交易,不一定代表你的錢包遭到入侵。了解零金額紀錄、相似地址和實際資產移動各自能證明什麼。
這筆紀錄能證明我的錢包發生了什麼事?
如果你的交易紀錄突然顯示,你向陌生地址發送了 0 USDT,單憑這筆紀錄並不能證明有人取得你的私鑰。第三方可以在沒有你的簽名、也沒有權限花費非零金額的情況下,建立某些將你的地址列為轉出方的零代幣轉帳紀錄。即使你從未發起交易,這筆紀錄仍可能存在於區塊鏈上。
真正有用的問題更具體:這是哪一種資產?實際移動了多少?誰提交了交易?任何實際支出是如何獲得授權的?
- 零金額代幣事件不能證明你簽署了交易或花出了資產。對真正的代幣而言,精確的零金額表示該次轉帳沒有移動任何代幣。
- 顯示熟悉代幣名稱的轉帳無法確認資產身分。無關的合約也可以使用相同名稱與代號。
- 極小額的轉入款項可能是真實的,同時在你的交易紀錄中植入具誤導性的發送方地址。
- 已確認、原因不明的真實資產轉出需要調查。不要因為另一個欄位顯示零就忽視它。
本指南涵蓋 Ethereum、BNB Smart Chain (BSC),以及使用 Ethereum 類型代幣合約的類似網路。範例均為刻意簡化的虛構紀錄,不是螢幕截圖,也不是針對特定錢包的調查結果。
首先,確認是哪個欄位顯示零
人們會用零價值交易來指稱幾種不同的情況。以下只有一種顯示的是代幣數量為零:
- 代幣數量:0 USDC。對真正的 USDC 合約而言,精確的零金額表示該筆轉帳沒有移動 USDC。
- 交易價值:0 ETH。主交易沒有附帶 ETH,但代幣仍可能移動,合約操作也仍可能執行。
- 估計價值:$0.00。介面顯示的是法幣估值,並不能據此確定代幣數量。
在 BSC 上,原生幣欄位通常使用 BNB,而不是 ETH。原生幣價值為零的合約互動仍可能轉移代幣、修改支出權限,或觸發其他操作。原生幣價值與交易的輸入資料是不同的。
極小的正數金額可能被四捨五入成 $0.00。缺乏可靠定價的資產也可能顯示沒有參考價值的法幣金額。請展開代幣數量,查看完整精度;即使顯示為 0.00 的代幣數量,也可能隱藏更小的正數金額。投資組合估值的變化,並不是資產單位進出帳戶的可靠紀錄。
零是代幣允許的金額,因此零本身不代表遭受攻擊。相似地址與複製的付款資料才是值得調查的線索。
為什麼兩個 From 欄位可能不一致
錢包交易紀錄可能混合不同層次的資訊:
- 交易:提交到網路的已簽署指令。對傳統 Ethereum 交易而言,主要的 From 欄位指出簽名帳戶。
- 代幣事件:合約執行時發出的紀錄。Transfer 事件有自己的 From、To 和金額。
- 歷史紀錄列:錢包或區塊瀏覽器對這些資訊的呈現方式。若事件把你的地址列為發送者,介面可能將它標為 OUT。
這兩個 From 欄位不能混為一談。你的地址出現在事件中,不代表該事件有你的錢包簽名。惡意合約可以把你的地址寫進事件資料,但這不會讓其日誌變成由真正的代幣合約發出。因此,發出事件的合約是判斷證據的重要部分。
同樣地,交易雜湊只能識別一筆交易,不能證明你同意它。已上鏈並標記為 Success 的交易,表示其外層執行沒有回滾,並不是對代幣、收款人或用途的背書。
五個附有說明的交易紀錄範例
範例 1:你從未簽署的零代幣轉出
歷史紀錄:OUT · 0 USDC · 從你的地址到陌生的相似地址。
- 交易 From:由不相關的帳戶提交交易。
- 代幣事件 From:事件將你的地址列為發送方。
- 發出事件的代幣合約:此網路上真正的 USDC 合約。
- 精確代幣數量:零。
這能證明什麼:真正的代幣合約記錄了一筆以你的地址為發送方的零代幣轉帳。該次轉帳沒有移動任何 USDC。這不能證明你的錢包簽署了交易、呼叫者有權花費正數金額,或你的私鑰遭竊。
發生原理:常見的代幣標準 ERC-20 要求零金額轉帳也必須發出 Transfer 事件。在常見實作中,委託轉帳函式 transferFrom 會檢查請求金額是否超過呼叫者的授權額度。零不會超過零額度。因此,在符合合約其他規則的情況下,即使沒有事先核准,呼叫仍可能成功。
這並非對所有代幣的普遍保證。個別合約可能設有其他限制。
接下來要檢查什麼:檢查交易的其他部分。零金額紀錄只描述該筆紀錄;其他操作可能產生不同效果。如果這只是孤立的投毒紀錄,沒有可疑支出或權限變更,適當的做法是避開植入的地址,而不是直接認定錢包必須更換。
範例 2:顯示大量代幣金額的假交易
歷史紀錄:OUT · 2,500 USDC · 從你的地址到陌生地址。
- 顯示的代幣代號:USDC。
- 發出事件的合約:無關的合約,而非真正的 USDC。
- 事件報告的金額:2,500。
- 此交易中的真正 USDC 移動:沒有。
這能證明什麼:另一個合約發出了一筆以 USDC 標籤呈現的紀錄,不能證明有 2,500 枚真正的 USDC 離開你的帳戶。
錢包中的假交易可能是真實的區塊鏈資料,只是其解讀具有誤導性。攻擊者可以複製代幣的名稱和代號,並發出模仿你先前付款的事件,包括付款金額。非標準合約也可能發出與其自身餘額變化不相符的轉帳紀錄。
接下來要檢查什麼:確認網路,以及實際發出事件的合約地址。將該地址與透過獨立管道取得的發行方在該網路的合約資訊比較。熟悉的代號、標誌或原始碼驗證標籤,都不足以確認發行方身分。
範例 3:相似地址發來的真實小額款項
歷史紀錄:IN · 0.000001 USDC · 從陌生地址到你的地址。
假設真正的代幣合約確認了轉帳,而你的代幣餘額也增加了這個極小金額。此時確實有代幣轉入。接收代幣不需要你核准發送者,也不會賦予發送者支出權限。
陷阱在於地址。看看以下虛構範例,為方便辨認每個字元而加入空格分組。真正的地址不含空格;粗體的中間部分彼此不同:
已驗證的收款地址:0x7a2f 1111 2222 3333 4444 5555 6666 7777 8888 9c4d
植入的地址:0x7a2f aaaa bbbb cccc dddd eeee ffff 0000 1111 9c4d
只顯示開頭與結尾的介面,可能將兩者都顯示為 0x7a2f...9c4d。
這能證明什麼:有人從該地址發送了少量代幣給你。這不能證明發送者是你慣用的收款人,或是你控制的帳戶。可見字元相同也不能證明所有權。
接下來要檢查什麼:從另行驗證的聯絡人或收款人可信的帳戶頁面取得預定收款地址,逐字比較完整地址。地址投毒意圖把植入的歷史紀錄變成你日後付款時選用的地址。損失可能在之後才發生:你授權了一筆完全有效、但目的地錯誤的轉帳。
範例 4:ETH 為零,卻有 2,500 枚真正的代幣轉出
交易標頭:Value · 0 ETH。
- 呼叫附帶的原生幣價值:0 ETH。
- 真正的代幣轉帳:從你的地址轉出 2,500 USDC。
- 此交易造成的 USDC 餘額變化:減少 2,500 USDC。
- 執行狀態:Success。
這能證明什麼:在此範例中,真正的 USDC 已轉出。零指的是呼叫所附帶的 ETH,而不是 USDC 轉帳,也不表示沒有燃料費。
仍未知的事項:付款為何發生,以及你是否有意這麼做。它可能是兌換、存款、排程操作、誤付地址,或未經授權的支出。先對照你實際執行的動作與預定目的地,再為其分類。
範例 5:真正的代幣轉出,但交易由另一個帳戶提交
歷史紀錄:OUT · 500 枚真正的 USDC · 陌生的目的地。
假設一筆成功交易使你真正的 USDC 餘額減少了 500,但其主要 From 欄位卻顯示另一個人。
這能證明什麼:代幣確實移動了。交易發送者不同,不代表該資產移動是假的。
先前獲准支出的對象可以利用代幣授權額度提取代幣,不必每次提款都請你簽署新的交易。部分代幣也支援 permit 簽名,讓使用者透過簽署訊息授權額度,再由另一方提交。智慧帳戶與委託錢包則提供更多由他人提交已授權操作的方式。
接下來要檢查什麼:檢查支出者、相關授權額度或已簽署的許可,以及錢包操作。如果扣款仍然無法解釋,應視為安全事件。證據可能指向有害的核准、誘導性簽名或帳戶控制權遭入侵;單憑這筆紀錄無法區分。
對一般直接簽署的交易而言,主要交易 From 欄位中的你的地址,代表存在該帳戶的有效簽名。但這仍不能證明你理解操作、有意指定該收款人,或親自發起了交易。代幣事件的 From 欄位所提供的證據遠弱得多。
2.7 億次地址投毒嘗試的研究究竟衡量了什麼
一項涵蓋 2022 年 7 月 1 日至 2024 年 6 月 30 日、為期兩年的 Ethereum 與 BSC 活動分析,辨識出約 2.7 億筆針對 1,700 萬個地址的投毒轉帳紀錄。
這些紀錄分為三類:
- 147.7 百萬 筆零金額轉帳。
- 118.4 百萬 筆假代幣轉帳。
- 4.0 百萬 筆極小額轉帳。
這些轉帳紀錄包含在約 18.2 百萬 筆交易中,因為攻擊者可以將多筆紀錄打包。遭鎖定的地址數量不等於人數、遭入侵錢包數量或蒙受損失的受害者人數。
分析辨識出 6,633 筆成功得手的轉帳,總額至少 $83.8 百萬。部分受害者付款不只一次。偵測範圍聚焦於特定穩定幣,因此損失估計只是該範圍內的下限,不是所有代幣或區塊鏈的總額。
實務上的啟示是,只檢查零金額會漏掉攻擊中的相當大一部分。假紀錄可以模仿有意義的付款,而小額轉入也可能在移動真正代幣的同時引入危險地址。
如何檢查你遇到的那筆不明紀錄
- 在正確網路上開啟交易。使用錢包提供的區塊瀏覽器選項,或 Etherscan、BscScan 等知名瀏覽器。檢查交易狀態。閱讀公開交易資訊,不需要連接錢包、核准代幣、簽署訊息或輸入助記詞。
- 確認實際資產。區分原生 ETH 或 BNB 與使用相同名稱的代幣。對代幣而言,應依可信的發行方資料核對精確網路和發出事件的合約。
- 以完整精度閱讀金額。區分代幣數量、原生幣交易價值及法幣估值。
- 區分交易發送者與事件發送者。對智慧帳戶,還要檢查錢包操作與其權限。由別人支付燃料費,不代表你的資產不可能移動。
- 檢查整筆交易。查看所有代幣移動、原生幣轉帳及相關權限變更。如果瀏覽器提供交易層級的餘額變化,請用它核對結果。今天餘額沒有改變是較弱的證據:後續存款或相抵的轉帳可能掩蓋先前的移動。
- 獨立驗證目的地。使用收款人的可信付款資料,或先前已驗證的通訊錄紀錄。最近的一筆歷史紀錄值得檢查,但不是正確收款地址的證明。
如果區塊瀏覽器無法讓結果清楚明瞭,可向錢包供應商的官方支援團隊提供網路及公開交易雜湊。並說明你原本預期的操作(如有)。這些資訊有助於區分陌生但原本有意執行的操作與不明支出,而不必透露控制錢包的機密資料。
完成檢查後該怎麼做
如果只找到孤立的投毒紀錄
如果錢包支援,可以隱藏或回報垃圾紀錄,並避免使用其中的地址。隱藏紀錄只會改變介面,不會清除區塊鏈歷史或撤銷權限。
零金額轉帳可能在授權額度為零時發生,因此不能單憑該紀錄就撤銷所有授權或搬走全部資金。與該紀錄相關的支出權限可能根本不存在。切勿使用代幣宣傳的網站或陌生人提供的恢復連結來「清理」錢包。
如果發現可疑的支出權限
透過錢包可信的授權管理管道檢查並撤銷相關額度。中斷網站與錢包的連線不會撤銷網站既有的鏈上代幣授權。撤銷只能處理該項權限,無法補救已遭竊的私鑰。
如果真正的資產在你無意授權下移動
保存交易雜湊、網路、受影響資產和相關地址。透過官方支援管道檢查最近的簽名、授權與錢包操作。
如果有證據顯示助記詞或私鑰已外洩,請在可信裝置上建立使用新助記詞的新錢包,並謹慎規劃剩餘資產的轉移。從已外洩的助記詞衍生另一個帳戶並不能解除風險。如果資金自動消失,不要不斷補入燃料費資金:可能有自動掃款程式將其取走。
如果你明知自己簽署了付款,但複製的是遭投毒的目的地,應記錄這個區別。交易可能被正確簽署並執行,卻送到錯誤收款人。光憑這個結果不能認定私鑰遭竊。
關於不明交易的常見問題
攻擊者有讓我支付燃料費嗎?
在一般投毒情境中,攻擊者提交交易並支付網路費用。僅在代幣事件中列出你的地址,不會向你的帳戶收費。不過,贊助交易與智慧帳戶意味著,單看誰支付費用並無法證明操作無害。請檢查實際效果。
如果交易失敗了呢?
已回滾的代幣轉帳沒有完成該次轉移,但仍可能收取燃料費。如果錢包使用帳戶委託機制,請另外檢查:在 Ethereum 上,即使後續執行失敗,委託關係仍可能保留。不明的委託關係值得檢查。
硬體錢包能防止地址投毒嗎?
硬體錢包提供另一個在簽名前檢查目的地的機會。但若你核准的是攻擊者控制的地址,它也不能讓該地址變成正確地址。請在可信的簽名顯示畫面上,將完整地址與獨立驗證的收款資料逐一比對。
我能阻止陌生人新增這些紀錄嗎?
一般而言,你無法阻止第三方向公開地址發送資產或產生涉及該地址的適用紀錄。錢包與區塊瀏覽器的篩選功能可以減少你看到的內容。儲存已驗證的收款人,付款前檢查完整目的地;單靠隱藏零金額紀錄,無法攔下所有假代幣或極小額轉帳的變體。
