Coinnoti
☰
日本語ja
ブログに戻る

送信していない送金がウォレットに表示される理由:ゼロ金額取引とアドレス・ポイズニング

見覚えのない送金履歴があっても、ウォレットがハッキングされたとは限りません。ゼロ金額の記録、よく似たアドレス、実際の資産移動から何が分かるのかを解説します。

この履歴からウォレットについて何が分かるのか?

履歴に突然、見知らぬアドレスへ0 USDTを送ったと表示されても、それだけで誰かが秘密鍵にアクセスしたとは言えません。第三者は、あなたの署名や正の金額を使う許可がなくても、あなたのアドレスを記載した特定のゼロトークン送金記録を作れます。自分で開始していなくても、その記録はブロックチェーン上に存在し得ます。

確認すべき点はもっと具体的です。どの資産か? 実際にいくら移動したか? 誰が取引を送信したか? 実際の支出は何によって承認されたか?

  • トークン数量ゼロのイベントは、あなたが署名や支出をした証拠にはなりません。正規トークンで正確にゼロなら、その送金ではトークンは移動していません。
  • 見慣れたトークン名の送金でも資産は特定できません。無関係なコントラクトが同じ名前とシンボルを使用できます。
  • ごく少額の入金は本物であっても、履歴に誤解を招く送信者アドレスを仕込むことがあります。
  • 正規資産の確認済みで説明のつかない出金は調査が必要です。別の欄にゼロとあるからといって見過ごしてはいけません。

このガイドはEthereum、BNB Smart Chain(BSC)、およびEthereum方式のトークンコントラクトを使う類似ネットワークを対象とします。例は意図的に単純化した架空の記録で、特定のウォレットのスクリーンショットや調査結果ではありません。

まず、どの項目がゼロなのか確認する

「ゼロ金額取引」という言葉は複数の意味で使われます。次のうち、トークン数量がゼロだと示すのは一つだけです。

  • トークン数量:0 USDC。正規のUSDCコントラクトで正確にゼロなら、その送金でUSDCは移動しません。
  • 取引のValue:0 ETH。主な取引にETHが付加されていないという意味です。それでもトークンは移動でき、コントラクトの処理も実行できます。
  • 推定評価額:$0.00。画面には法定通貨換算額が表示されています。トークン数量を示すものではありません。

BSCではネイティブコインの欄には通常ETHではなくBNBが使われます。ネイティブ通貨のValueがゼロでも、コントラクト呼び出しによってトークン送金、支出権限の変更、その他の処理が行われ得ます。ネイティブ通貨のValueは取引の入力データとは別です。

わずかな正の数量も$0.00に丸められることがあります。信頼できる価格がない資産では、法定通貨の表示が役に立たない場合もあります。トークン数量を最大精度で表示してください。数量が0.00と表示されても、より小さな正の数量が隠れている場合があります。ポートフォリオの評価額の変化から、口座に入出した単位数を正確に判断することはできません。

トークン数量としてゼロは認められているため、ゼロだけでは攻撃の証拠になりません。類似アドレスやコピーされた支払い情報は調べるべき手掛かりです。

二つのFrom欄が一致しない理由

ウォレット履歴は異なる層の情報を組み合わせることがあります。

  1. 取引:ネットワークに提出された署名済みの命令です。通常のEthereum取引では、主なFrom欄は署名したアカウントを示します。
  2. トークンイベント:実行中にコントラクトが出力する記録です。Transferイベントには独自のFrom、To、数量があります。
  3. 履歴行:ウォレットやエクスプローラーによる情報の表示です。イベント内であなたのアドレスが送信者とされているため、OUTと表示する場合があります。

この二つのFrom欄は同じ意味ではありません。イベントにあなたのアドレスがあっても、ウォレットによる署名ではありません。悪意あるコントラクトはイベントデータにあなたのアドレスを入れられますが、そのログが正規トークンコントラクトから出たことにはなりません。したがって、イベントを発行したコントラクトは重要な証拠です。

同様に、トランザクションハッシュは取引を特定するだけで、あなたの同意を示しません。取り込まれた取引のSuccess表示は外側の実行がリバートしなかったことを示します。トークン、受取人、目的が承認されたという意味ではありません。

注釈付きの取引履歴例5件

例1:署名していない、トークン数量ゼロの出金

履歴表示:OUT · 0 USDC · あなたのアドレスから見知らぬ類似アドレスへ。

  • 取引のFrom:無関係なアカウントが取引を送信しました。
  • トークンイベントのFrom:イベントにあなたのアドレスが記載されています。
  • イベント発行元のトークンコントラクト:このネットワークの正規USDCコントラクト。
  • 正確なトークン数量:ゼロ。

分かること:正規トークンコントラクトが、あなたのアドレスを送信者とするゼロトークンのTransferを記録しました。この送金でUSDCは動いていません。あなたのウォレットが署名したこと、呼び出し元が正の数量を使う権限を持つこと、秘密鍵が盗まれたことは証明されません。

仕組み:一般的なトークン規格ERC-20では、数量ゼロの送金でもTransferイベントを発行する必要があります。一般的な実装では、委任送金関数transferFromは要求量が呼び出し元のallowanceを超えるか確認します。ゼロはallowanceがゼロでも超えません。コントラクトのその他の規則を満たせば、事前承認なしで呼び出しが成功し得ます。

ただしすべてのトークンに当てはまるわけではありません。個々のコントラクトには追加制限があり得ます。

次に確認すること:取引全体を調べてください。ゼロの行が説明するのはその行だけで、別の処理には異なる影響があるかもしれません。不審な支出や権限変更を伴わない孤立したポイズニング記録なら、ウォレットの交換が必要と決めつけず、仕込まれたアドレスを避けるのが適切です。

例2:多額のトークン数量を示す偽の取引

履歴表示:OUT · 2,500 USDC · あなたのアドレスから見知らぬアドレスへ。

  • 表示されたトークンシンボル:USDC。
  • イベント発行元コントラクト:正規USDCではない無関係なコントラクト。
  • イベントに記載された数量:2,500。
  • この取引での正規USDCの移動:なし。

分かること:別のコントラクトがUSDCというラベルで表示される記録を発行しました。正規USDCが2,500口座から出た証拠ではありません。

ウォレットで偽の取引と見えるものも、解釈が誤解を招く実際のブロックチェーンデータであり得ます。攻撃者はトークン名とシンボルを複製し、数量を含めて過去の支払いに似たイベントを発行できます。標準外のコントラクトは、自身の残高変化に対応しない送金記録を発行することもできます。

次に確認すること:ネットワークとイベントを出した正確なコントラクトを特定してください。そのアドレスを、当該ネットワークについて発行者から独立して入手したコントラクト情報と照合します。見慣れたティッカー、ロゴ、ソースコード検証の表示だけでは発行者の同一性は証明されません。

例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。

  • 呼び出しに付随するネイティブ通貨のValue:0 ETH。
  • 正規トークン送金:あなたのアドレスから2,500 USDC。
  • この取引によるUSDC残高変化:2,500 USDCの減少。
  • 実行状態:Success。

分かること:この例では正規USDCが流出しました。ゼロは呼び出しに付随するETHの数量です。USDCの送金を表すわけでも、ガス代がないことを示すわけでもありません。

まだ分からないこと:なぜ支払いが起き、それが意図したものかです。スワップ、預け入れ、予定された操作、間違ったアドレスへの支払い、または不正な支出かもしれません。分類する前に自分が行った操作と意図した宛先に照らしてください。

例5:正規トークンが流出したが、取引を送ったのは別のアカウント

履歴表示:OUT · 正規USDC 500 · 見知らぬ宛先。

成功した取引で正規USDC残高が500減ったのに、主なFrom欄には別人が記載されているとします。

分かること:トークンは移動しました。取引の送信者が違っても、その移動が偽物にはなりません。

以前に承認された支出者は、引き出しのたびにあなたの新しい署名を求めず、トークンのallowanceを使えます。一部のトークンはpermit署名にも対応しており、他者が提出できる署名済みメッセージでallowanceを承認します。スマートアカウントや委任ウォレットでは、別人が承認済み操作を提出する方法がさらに増えます。

次に確認すること:支出者、関連するallowanceや署名済み権限、ウォレット操作を調べます。引き落としを説明できない場合はセキュリティインシデントとして扱ってください。有害な承認、欺瞞的な署名、アカウント支配権の侵害が疑われますが、その行だけでは区別できません。

通常の直接署名された取引では、主な取引From欄にあなたのアドレスがあることは、そのアカウントの有効な署名の証拠です。ただし、操作を理解していたこと、その受取人を意図したこと、または自分で開始したことまでは証明しません。トークンイベントのFrom欄ははるかに弱い証拠です。

2億7,000万件のポイズニング試行が実際に測定したもの

2022年7月1日から2024年6月30日までのEthereumとBSCの活動を分析した2年間の調査では、1,700万アドレスを標的にした約2億7,000万件のポイズニング送金記録が特定されました。

記録は三つの区分に分かれます。

  • 1億4,770万件のゼロ金額送金。
  • 1億1,840万件の偽トークン送金。
  • 400万件の微少額送金。

これらの送金記録は約1,820万件の取引に含まれます。攻撃者は複数の記録をまとめられるためです。標的アドレス数は、人の数、侵害されたウォレット数、金銭的被害者数と同じではありません。

分析では、少なくとも総額8,380万ドルに達する6,633件の攻撃成功後の送金が確認されました。複数回支払った被害者もいます。検出は特定のステーブルコインに焦点を当てたため、損失推計はその対象範囲における下限であり、すべてのトークンやチェーンの総額ではありません。

実務上、ゼロ金額だけを確認すると攻撃の相当部分を見逃します。偽の履歴は意味のある支払いを模倣でき、ごく少額の入金は実際のトークンを動かしながら危険なアドレスを持ち込めます。

自分の不明な履歴を調べる方法

  1. 正しいネットワークで取引を開く。ウォレットのエクスプローラー機能、またはEtherscanやBscScanなどの既知のエクスプローラーを使い、取引状態を確認します。公開取引情報を見るためにウォレット接続、トークン承認、メッセージ署名、リカバリーフレーズ入力は不要です。
  2. 実際の資産を特定する。ネイティブETHやBNBと、そうした名前を使うトークンを区別します。トークンでは正確なネットワークと発行コントラクトを信頼できる発行者情報と照合します。
  3. 数量を最大精度で読む。トークン数量とネイティブ通貨の取引Value、法定通貨換算額を分けます。
  4. 取引送信者とイベント送信者を区別する。スマートアカウントならウォレット操作と権限も調べます。誰か別人がガス代を払っていても、資産が動いていない証拠にはなりません。
  5. 取引全体を確認する。すべてのトークン移動、ネイティブ通貨送金、関係する権限変更を確認してください。エクスプローラーが取引単位の残高変化を示すなら、それで結果を照合します。今日の残高が変わっていないことは弱い証拠です。その後の入金や相殺する送金が以前の移動を隠すためです。
  6. 宛先を独立して確認する。受取人が信頼できる方法で提供した支払い情報、または以前に確認したアドレス帳の項目を使います。最近の履歴行は調査対象であって、正しい宛先の証拠ではありません。

エクスプローラーで結果が明確にならなければ、ウォレット提供元の公式サポートにネットワークと公開トランザクションハッシュを伝えます。想定していた操作があれば説明してください。この情報は、ウォレットを管理する秘密を明かさずに、見慣れないが意図した操作と説明のつかない支出を区別する助けになります。

確認後の対応

孤立したポイズニング記録しか見つからなかった場合

ウォレットが対応していればスパムを非表示にするか報告し、記載されたアドレスを使わないでください。履歴行を隠しても表示が変わるだけで、ブロックチェーン履歴を消したり権限を取り消したりはしません。

ゼロ送金はallowanceがゼロでも起こり得るため、その記録だけで全承認の取り消しや全資金の移動を行う理由にはなりません。その記録に対応する取り消すべき支出権限自体がない場合もあります。トークンの宣伝サイトや見知らぬ人の復旧リンクを使ってウォレットを「掃除」してはいけません。

不審な支出権限が見つかった場合

ウォレットの信頼できる承認管理機能で関連allowanceを確認し、取り消してください。ウェブサイトとの接続を解除しても、既存のオンチェーントークン承認は取り消されません。権限取り消しはその許可に対処するもので、盗まれた秘密鍵を修復することはできません。

意図せず正規資産が移動していた場合

トランザクションハッシュ、ネットワーク、対象資産、関連アドレスを保存します。公式サポート経由で最近の署名、承認、ウォレット操作を確認してください。

リカバリーフレーズや秘密鍵が流出した証拠がある場合は、信頼できる端末で新しいリカバリーフレーズを持つ新規ウォレットを作成し、残存資産を慎重な計画に従って移動します。漏えいしたフレーズから派生した別アカウントでは問題は解決しません。資金が自動的に消える場合はガス代を追加し続けないでください。スイーパーに奪われる可能性があります。

自分で支払いに署名したものの、ポイズニングされた宛先をコピーしていたなら、その違いを記録してください。支払いは正当に署名・実行されながら、誤った受取人に届いた可能性があります。それだけで秘密鍵が盗まれたとは言えません。

不明な取引についてのよくある質問

攻撃者のガス代を私が払わされたのですか?

通常のポイズニングでは攻撃者が取引を送信し、ネットワーク手数料を負担します。トークンイベントにあなたのアドレスを記すだけで口座に請求されることはありません。ただし、スポンサー付き取引やスマートアカウントがあるため、手数料の支払者だけで操作が無害かどうかは分かりません。実際の影響を調べてください。

取引が失敗した場合は?

リバートされたトークン送金は完了していませんが、ガス代は請求される可能性があります。ウォレットがアカウント委任を使う場合は別途確認してください。Ethereumでは後続の実行が失敗しても委任が残る場合があります。見覚えのない委任は調査すべきです。

ハードウェアウォレットならアドレス・ポイズニングを防げますか?

署名前に宛先を確認する場所が一つ増えます。ただし、攻撃者の宛先を承認してしまえば正しい宛先には変わりません。信頼できる署名画面に表示されたアドレス全体を、独立して確認した受取人情報と比較してください。

第三者がこうした履歴を追加するのを防げますか?

一般に、公開アドレスに第三者が資産を送ったり関連記録を生成したりすることは防げません。ウォレットやエクスプローラーのフィルターで表示を減らすことはできます。確認済み受取人を保存し、支払う前に宛先全体を調べてください。ゼロ金額の履歴を隠すだけでは、偽トークンや微少額送金のすべてを検出できません。