トークン承認を確認する方法:ウォレットを安全に守るには
AndroidユーザーはAPKを直接ダウンロードできます。VPN不要。
トークン承認(Token Approval)はDeFiのやり取りで最もよく行われる操作の一つであり、同時にウォレットのセキュリティ上で最も見落とされやすいリスクポイントでもあります。DEXでトークンを交換したりDeFiプロトコルに参加するたびに、通常はコントラクトに対してトークンの使用を承認する必要があります。悪意あるコントラクトを承認したり、承認額が大きすぎた場合、資産が盗まれるリスクがあります。本記事では、トークン承認のメカニズムと安全な管理方法を網羅的に解説します。
一、トークン承認メカニズムの詳細
1.1 トークン承認とは何か
イーサリアムおよびEVM互換チェーンにおいて、ERC-20トークン標準にはapprove関数が定義されています。DEXアプリ(Uniswapなど)でトークンを交換する際のフローは以下の通りです。
- 承認ステップ(Approve):自分のウォレット内の特定のトークンをUniswapのRouterコントラクトが使用できるよう承認する
- 取引ステップ(Swap):Uniswapのコントラクトがウォレットからトークンを取り出して交換を完了する
なぜ2ステップに分かれているのか? ERC-20トークン自体がスマートコントラクトであり、自分の残高はトークンコントラクト内に記録されているからです。別のコントラクト(DEXのルーターコントラクトなど)が自分のトークンを操作するには、まずトークンコントラクトからの承認を得る必要があります。
1.2 承認の技術的な仕組み
approve(spender, amount)
- spender:承認されたコントラクトのアドレス
- amount:承認額
spenderがtransferFromを呼び出して自分のアドレスからトークンを転送する際、トークンコントラクトは承認額が十分かどうかを確認します。
1.3 無制限承認の問題
ほとんどのDAppはデフォルトで無制限承認(Maximum Approval)を要求します。つまり:
amount = 2^256 - 1 (天文学的な数字)
これが意味すること: 承認されたコントラクトはいつでも、追加の承認なしにウォレット内のそのトークンの全残高を転送できます。
DAppが無制限承認を使う理由:
- ユーザーが一度承認するだけで、その後の取引で繰り返し承認する必要がない
- Gas代の節約(承認ごとにオンチェーントランザクションが必要なため)
- ユーザー体験の向上(操作ステップの削減)
しかしリスクがあります:
- 承認されたコントラクトに脆弱性があれば、攻撃者がその脆弱性を利用してトークンを転送できる
- 誤って悪意あるコントラクトを承認した場合、トークンが即座に転送される
- そのDAppを使わなくなっても、承認は有効なまま残る
二、承認リスクの事例
2.1 実際のセキュリティインシデント
事例1:BadgerDAO攻撃(2021年)
- 攻撃者がフロントエンドに悪意あるスクリプトを注入
- ユーザーを誘導して悪意あるコントラクトを承認させた
- 承認を利用してユーザーの資産を転送
- 損失は約1億2千万ドル
事例2:Transit Swap攻撃(2022年)
- アグリゲーターのコントラクトの脆弱性が悪用された
- 攻撃者がユーザーの無制限承認を利用
- 脆弱性を通じてユーザーのトークンを転送
- 損失は約2,300万ドル
2.2 よくある承認リスクの場面
| 場面 | リスクレベル | 説明 |
|---|---|---|
| 著名プロトコル(Uniswapなど)を承認 | 低 | 監査済みだが、ゼロリスクではない |
| 新規プロジェクトのコントラクトを承認 | 中〜高 | コントラクトに脆弱性やバックドアがある可能性 |
| フィッシングサイトのコントラクトを承認 | 極高 | 悪意あるコントラクトが即座にトークンを転送する |
| 長期間放置された無制限承認 | 中 | 元のコントラクトが安全でも攻撃面が増大する |
三、トークン承認確認ツール
3.1 Revoke.cash
ポジション: 最もよく知られたトークン承認管理ツール。
サポートチェーン: イーサリアム、BSC、Polygon、Arbitrum、Optimism、Avalancheなど50以上のチェーン。
使用方法:
revoke.cashにアクセス- ウォレットを接続するか、アドレスを直接入力
- 確認したいブロックチェーンネットワークを選択
- ページにすべてのトークン承認記録が表示される
表示される情報:
- トークン名:承認されたトークン
- 承認額:無制限(Unlimited)または具体的な数量
- 承認先:承認を受けたコントラクトアドレスとラベル
- 最終更新時間:承認が行われた時間
承認の取り消し手順:
- 取り消したい承認記録を見つける
- 「Revoke」ボタンをクリック
- ウォレットでトランザクションを確認
- 少量のGasを支払う
- 承認が取り消される
3.2 Etherscan Token Approval Checker
アクセス先: etherscan.io/tokenapprovalchecker
使用方法:
- 上記アドレスにアクセス
- ウォレットを接続するか、アドレスを入力
- ERC-20とERC-721の承認リストを確認
- 「Revoke」をクリックして不要な承認を取り消す
利点: Etherscanの公式ツールとしてデータの正確性が保証されている。
3.3 BscScan Token Approval Checker
アクセス先: bscscan.com/tokenapprovalchecker
機能はEtherscan版と同様で、BSCチェーン専用です。
3.4 DeBankの承認管理
DeBankはその資産パネルで承認管理機能も提供しています。
- DeBankで自分のアドレスを確認
- 「Approval」または「承認」タブを見つける
- すべての承認を確認・管理する
3.5 各ツールの比較
| ツール | サポートチェーン数 | UI | 取り消し機能 | 無料 |
|---|---|---|---|---|
| Revoke.cash | 50以上 | シンプル | 対応 | 無料 |
| Etherscan | イーサリアムのみ | 標準 | 対応 | 無料 |
| BscScan | BSCのみ | 標準 | 対応 | 無料 |
| DeBank | 100以上 | 総合的 | 対応 | 基本機能は無料 |
| Rabby Wallet | マルチチェーン | 統合 | 対応 | 無料 |
四、承認管理のベストプラクティス
4.1 承認前のチェック
いかなるコントラクトを承認する前にも:
- サイトの正真性を確認する:URLが正しいかどうかを確認し、フィッシングサイトを避ける
- コントラクトが検証済みか確認する:ブロックチェーンエクスプローラーでコントラクトコードが公開されているかを確認
- 承認先を理解する:どのコントラクトを承認しているかを確認する
- 承認額を検討する:本当に無制限の承認が必要か
4.2 精確な承認額の設定
多くのウォレットとDAppは承認額のカスタマイズをサポートしています。
MetaMaskでの承認額の変更方法:
- 承認のポップアップが表示されたら、「許可を編集」をクリック
- 「カスタム支出上限」に今回の取引に必要な正確な金額を入力
- 変更後の承認を確認する
精確な承認の利点:
- コントラクトが攻撃されても、損失の上限が承認額に制限される
- 毎回再承認が必要で、Gas代はかかるが安全性が高い
精確な承認の欠点:
- 毎回2つのトランザクション(承認+操作)が必要
- Gas代の出費が増える
- 操作ステップが増える
4.3 定期的な承認の整理
定期的に承認を確認する習慣をつけることをお勧めします。
確認頻度の目安:
- アクティブなDeFiユーザー:週1回
- 一般ユーザー:月1回
- 大額資産のウォレット:操作のたびに確認
優先的に取り消すべき承認:
- 既に使用しなくなったDAppの承認
- 不明または識別できないコントラクト
- セキュリティインシデントが発生したプロジェクト
- 無制限の古い承認
4.4 ウォレット分離戦略
異なる用途の資産を異なるウォレットに分散する。
| ウォレットタイプ | 用途 | 承認戦略 |
|---|---|---|
| ホットウォレット(少額) | 日常的なDeFiのやり取り | 承認可能、定期的に整理 |
| 中間ウォレット(中額) | より大きなDeFiの操作 | 精確な承認、頻繁に整理 |
| コールドウォレット(大額) | 長期保管 | できる限りコントラクトを承認しない |
4.5 セキュリティ機能を持つウォレットの活用
一部のウォレットには承認管理機能が内蔵されています。
Rabby Wallet:
- トランザクション前に承認リスクの評価を表示
- 高リスクの承認リクエストをマーク
- 承認管理ページを内蔵
MetaMask Snaps:
- 一部のセキュリティ系Snapsが承認前に警告を発することができる
- 悪意あるコントラクトの識別を助ける
五、ERC-721(NFT)の承認
5.1 NFT承認の種類
NFTの承認はERC-20よりも複雑で、2つのタイプがあります。
個別NFTの承認:
approve(operator, tokenId)
特定の1つのNFTの操作のみを承認する。
全コレクションの承認(setApprovalForAll):
setApprovalForAll(operator, true)
そのNFTコントラクト内のすべてのNFTの操作を承認する。
5.2 NFT承認のリスク
setApprovalForAllは極めて高いリスクを持ちます。
- 一度承認すると、相手はそのコレクション内の全てのNFTを転送できる
- これはNFTフィッシング攻撃の主な手段
- 多くのNFTマーケット(OpenSeaなど)がNFTの販売を手伝うためにこの承認を必要とする
予防策:
- 信頼できるNFTマーケットでのみ
setApprovalForAllを承認する - NFTの取引を完了した後は承認の取り消しを検討する
- Revoke.cashなどのツールでNFTの承認を確認する
- 高価値のNFTは専用のコールドウォレットで保管する
六、Permit署名のリスク
6.1 Permitとは何か
ERC-20 Permit(EIP-2612)は新しいタイプの承認方式です。従来のapproveとは異なり、Permitはオフチェーンの署名で承認を行い、オンチェーンのトランザクションは不要です。
フロー:
- ユーザーがPermitメッセージにウォレットで署名する(オンチェーンに記録されず、Gas代不要)
- 署名をコントラクトに渡す
- コントラクトが署名を検証して承認を得る
6.2 Permitのリスク
Permit署名は単なる「署名リクエスト」のように見え、見落とされやすいです。
- ユーザーがトークンを承認していることに気づかない場合がある
- フィッシングサイトがユーザーを誘導してPermitに署名させる
- 署名自体がオンチェーンに記録されないため、Revoke.cashなどのツールでは未使用のPermit署名を検出できない
6.3 Permitフィッシングの予防
- 署名内容をよく読む:MetaMaskはPermit署名の詳細情報を表示する
- 署名の種類に注意する:「Permit」や「allowance」などの文字が見えたら特に注意する
- 理解できない内容には署名しない:不確かな署名リクエストはすべて拒否する
- セキュリティ重視のウォレットを使う:RabbyなどのウォレットはPermit署名に対して明確な警告を発する
七、緊急時の対応
7.1 不審な承認を発見した場合
ウォレット内に見知らぬ承認を発見したら:
- 即座に取り消す:Revoke.cashで全ての不審な承認を取り消す
- 資産を確認する:資産が転送されていないか確認する
- 資産を移動する:残った資産を新しい安全なウォレットに移す
- 原因を調査する:怪しいサイトにアクセスしたり、不明なリクエストに署名したりしなかったか思い返す
7.2 資産がすでに盗まれた場合
承認の脆弱性によって資産が転送されてしまった場合:
- すべての承認を即座に取り消す:さらなる資産の盗難を防ぐ
- 残りの資産を移動する:まだある資産を新しいウォレットに移す
- 証拠を記録する:トランザクションハッシュ・攻撃者のアドレスなどを保存する
- 報告する:関連チェーンのセキュリティチームとコミュニティに報告する
- 教訓を活かす:今後の承認管理を強化する
7.3 Revokeの競争
状況によっては、取り消す前に攻撃者が資産を転送してしまうことがあります。この場合:
- 承認取り消しのトランザクションを素早くオンチェーンに記録する必要がある
- Gas代を上げてトランザクションの確認を早める
- Gas代が高いチェーン(イーサリアムなど)では、これは時間との戦いとなる
八、承認セキュリティチェックリスト
DeFiのやり取りを行う前:
- [ ] URLが正しいことを確認する
- [ ] 承認されるコントラクトアドレスが妥当かどうかを確認する
- [ ] 無制限承認ではなく精確な承認を使うことを検討する
- [ ] 署名する内容を理解する
毎週・毎月:
- [ ] Revoke.cashで全チェーンの承認を確認する
- [ ] 使わなくなったDAppの承認を取り消す
- [ ] 見知らぬ承認記録がないか確認する
- [ ] 特にNFTの
setApprovalForAll承認を確認する
ウォレットのセキュリティ:
- [ ] 大額の資産は専用の保管ウォレットで管理する
- [ ] 日常的なDeFiのやり取りは少額のホットウォレットで行う
- [ ] 大口のトランザクションはハードウェアウォレットで署名する
- [ ] ウォレットのセキュリティ警告機能を有効にする
まとめ
トークン承認はDeFiの基本的なメカニズムですが、ウォレットのセキュリティにおいて最もよく悪用される攻撃の入り口の一つでもあります。承認メカニズムの原理を理解し、Revoke.cashなどのツールで定期的に承認を確認・整理し、精確な承認やウォレット分離などの戦略を採用することで、承認に関連するセキュリティリスクを大幅に低減できます。
覚えておいてください:すべての承認はサードパーティのコントラクトへの信頼です。ブロックチェーンの世界では、信頼よりも検証が常に重要です。
AndroidユーザーはAPKを直接ダウンロードできます。VPN不要。
AndroidユーザーはAPKを直接ダウンロードできます。VPN不要。