承認フィッシングとは何ですか?通常の秘密鍵盗難とはどう違いますか?
承認フィッシング(approval phishing)が悪用するのは、ERC-20トークン規格に本来存在する合法かつ必要な機能である「承認(approve)」である。分散型取引所でトークンを交換したいとき、取引所のコントラクトはあなたに一定量のトークンの動用権限を先に承認してもらう必要がある。これはDeFiの日常運用における基礎的な仕組みであり、それ自体には何の問題もない。問題は承認の「上限額」と「対象」にある。正常な承認は、実際に使用している信頼できるコントラクトを対象とし、実際に取引する数量に限定されるべきものだが、攻撃者が作るフィッシング画面は、対象が攻撃者のコントラクトで、上限額が「無制限」の承認に署名させるよう誘導する。
秘密鍵盗難との本質的な違いは次の通りである。秘密鍵が盗まれた場合、相手はウォレットの完全な管理権限を直接手に入れる。一方、承認フィッシングでは、秘密鍵もシードフレーズもパスワードも最初から最後まで一切流出していない。あなたは単に「安全だと思っていたが、実際には特定トークンの無制限の動用権を相手に渡してしまったメッセージ」に署名しただけなのだ。これが、ハードウェアウォレットがこの種の攻撃に対して防御にならない理由でもある。デバイスはあなたが署名した内容を忠実に実行するだけで、その承認の背後にある意図が悪意あるものかどうかを判断できない。
なぜERC-20規格は「無制限承認」を要求できるように設計されているのですか?それ自体が設計上の欠陥ではないのですか?
無制限承認(unlimited approval)そのものは、ユーザー体験のために存在する合理的な設計であり、バグではない。もし取引のたびにその取引の正確な数量分しか承認できないとしたら、利用者は操作のたびに承認取引に改めて署名する必要があり、1回の取引につきガス代を2回支払い、署名も2回行うことになる。これは頻繁に取引する利用者にとって大きな摩擦コストとなる。そのため、多くのDeFiプロトコルはデフォルトで1回限りの高額または無制限の承認を要求し、利用者がその後は再承認なしに連続して取引できるようにしている。
この「利便性のため」に存在する設計が、まさに攻撃者にとって最も利用しやすい抜け穴となっている。なぜなら、利用者は「承認リクエストが表示されたら習慣的に確認をクリックする」よう訓練されており、正常な承認と悪意ある承認はウォレットのポップアップ画面上でほぼ同じに見えるからだ。両者の違いは、ほとんどの人が細かく確認しない項目——コントラクトアドレスと承認上限額——にしかない。これが、2026年以降攻撃者の戦略が明らかに「コードへの侵入」から「利用者の署名習慣への侵入」へとシフトしている理由でもある。前者はプロトコルの脆弱性を見つける必要があるが、後者は十分正常に見えるインターフェースを1つ作るだけで済むからだ。
承認フィッシングは実際にどのように発生し、攻撃者は承認を得た後どう行動するのですか?
典型的な攻撃は3つのステップで進む。第一に、攻撃者は有名なDeFiプロトコル、エアドロップ受け取りページ、またはウォレット検証ツールを模倣した偽サイトを構築し、SNS広告、公式アカウントのなりすまし、偽のエアドロップ通知などを通じてトラフィックを誘導する。第二に、利用者がウォレットを接続すると、サイトは承認取引をトリガーする。ウォレットのポップアップ画面には「コントラクトとのやり取り」と表示され、利用者がコントラクトアドレスと承認上限額を注意深く確認せずに確認をクリックすると、その時点で無制限承認に署名したことになる。第三に、攻撃者は必ずしもすぐには行動しない。数週間、時には数ヶ月待ち、十分な数の承認が蓄積されるか、特定のアカウントの残高が十分高くなるまで待ってから、自動化された「清掃(drainer)」スクリプトを使って一度にトークンを移動させる。このプロセスは通常わずか数十秒で完了する。
近年、攻撃ツールも「産業化」しており、いわゆるDrainer-as-a-Service(清掃サービス)が登場している。技術者が完全なフィッシング画面と清掃スクリプトの一式を作成し、技術力の低い下流の詐欺師にレンタルして分け前を得る仕組みである。2026年7月に公開追跡されたある事例では、攻撃者の清掃スクリプトは金額を自動調整する能力さえ備えていた。最初に整数の金額を引き出そうとして失敗(残高を超過)した後、スクリプトは36秒以内に自動的に再計算し、3件の取引に分割して、ウォレットに残っていた残高を正確に全額引き出した。これはこの種の攻撃の自動化がすでにかなり成熟していることを示している。
自分自身をどう守ればよいですか?承認が既に流出した可能性がある場合はどうすればよいですか?
最も効果的な日常習慣は、使わなくなった承認を定期的に確認し取り消すことである。ブロックチェーンエクスプローラー(EtherscanのToken Approval Checkerなど)や専用の承認管理ツールを通じて、自分のウォレットが現在どのコントラクトにどれだけの上限額を承認しているかを確認し、覚えていない、あまり使わない、または上限額が異常に大きい承認を積極的に取り消す(revoke)べきである。この行動が「今後の盗難防止」と同じくらい重要な理由は、たとえ今資産が安全であっても、過去に署名した無制限承認はいつでも起爆しうる不発弾であり続けるからだ。攻撃者はあなたが署名した後のどの時点でもそれを行使でき、あなたが改めて何か行動を起こしたり警告を受け取ったりする必要は一切ない。
署名する瞬間の核心的な防御習慣は、「承認」や「permit」への署名を求めるポップアップが表示されたら、必ず3つのことを確認することである——コントラクトアドレスが実際に使用している公式プロトコルのものかどうか、上限額が「無制限」ではなく実際に取引する数量と一致しているかどうか、そしてこの署名リクエストが自分が意図的にクリックした操作から生まれたものであり、ページが自動的に表示したものではないかどうか。コントラクトアドレスが公式のものか不確かな場合は、まず公式ドキュメントや公式コミュニティのアナウンスと照合すること。インターフェースが正常に見えるから、あるいは「ガス代不要の署名」だからといって警戒を緩めては絶対にいけない。むしろこのガス代不要の仕組みが、多くの利用者に「お金がかからない署名にはリスクがない」と誤解させており、これこそが攻撃者が利用する心理的な隙間なのである。
2026年7月、あるビットコイン保有者が悪意あるトークン承認に署名した後、自動化された清掃スクリプトによりわずか36秒で999,999 USDTを盗まれた。オンチェーンデータによれば、攻撃者は最初に100万ドルという整数額の引き出しを試みたが、残高がその金額をわずかに下回っていたため失敗した。スクリプトは直ちに自動的に金額を再計算し、3件の取引(639,999、159,999、200,000 USDT)に分割してアカウントの残高を正確に全額引き出した。ブロックチェーンセキュリティ企業Scam Snifferによれば、こうした署名フィッシングによる損失は2026年1月単月だけで前月比207%も急増しており、攻撃者の戦略は明らかに少数の高資産ウォレットを狙う「ホエールハンティング」モデルへとシフトしている。1回の署名だけで6桁から7桁ドル規模の損失を引き起こすことも珍しくない。
Unlimited approval spares DeFi users from re-signing before every single trade, substantially cutting the friction of repeated transactions and fees; the trade-off is that once a malicious contract's unlimited approval is signed, that risk persists indefinitely until the user actively revokes it — and most users never develop the habit of regularly checking and revoking idle approvals, letting risk quietly accumulate over time without their knowledge.