
Table of Contents
DAppによるトークンへのアクセスを取り除くには、そのDAppが持つ承認を見つけ、別途オンチェーンのトランザクションで取り消す必要があります。DAppを切断しても権限は削除されず、アローワンスが0に設定されるまでトークンは危険にさらされたままです。
重要なポイント
- 承認はオンチェーンに存在します。アプリやWalletConnectのセッションを閉じても何も変わりません。支出の権限は取り消すまで有効なままです。
- 無制限の承認は被害を大きくします。1つの無制限の権限があれば、コントラクトはそのトークンの現在および将来の残高すべてを使えます。
- 取り消しは将来の支出を防ぎますが、過去の盗難は取り戻せません。アローワンスをリセットすれば新たな送金は止められますが、ドレイナーがすでに移動させた資産を取り戻すことはできません。
DAppのトークン承認とは?
DAppのトークン承認とは、ウォレットの所有者がスマートコントラクトに対して、特定のトークンを設定した金額まで使う権限を与えることです。この承認がなければ、分散型取引所、レンディング市場、そのほかのDAppはトークンを動かせません。承認があるからこそ、DAppは操作の際にユーザーに代わってトークンをスワップしたり、ステーキングしたり、送金したりできます。
スマートコントラクトとは、あらかじめ定められた条件が満たされたときに自動的に処理を実行する、ブロックチェーン上のプログラムです。
DAppのトークン承認の仕組み
トークンの承認は決まった流れに沿って進みます。ウォレットをDAppに接続し、DAppが承認をリクエストし、それがオンチェーンに記録され、それ以降DAppは再び尋ねることなく承認された動作を実行します。AaveやUniswapのような有名なDAppはこのように動作します。権限はアプリのセッションではなくブロックチェーン上に存在するため、DAppを使わなくなったあとも長く有効であり続けます。
承認にはいくつかの異なる形式があります。
- 制限付き承認:DAppは設定した金額(たとえば500 USDC)までしか使えず、それ以上を使うには新しい承認をリクエストする必要があります。
- 無制限承認:DAppは選択したトークンを金額の制限なく使えます。あとからウォレットに届くトークンも対象になります。
- トークン承認:スマートコントラクトが、USDCやUSDTのような特定の代替可能トークンを管理する権限を受け取ります。
- NFT承認:権限は単一のNFTにも、コレクション全体にも及びます。たとえば
setApprovalForAllを通じた場合です。
トークンの承認によってシークレットフレーズが明かされることはなく、DAppにウォレット全体への無制限のアクセスを与えるものでもありません。承認されたトークン、NFT、金額、スマートコントラクトにのみ適用されます。
仮想通貨ウォレットのユーザーはいつトークンを承認するのか?
トークンの承認は、トークンのスワップ、レンディング、ステーキング、NFTの売却といった日常的なDeFiの操作で発生します。操作が終わったあとやDAppを切断したあとも、有効なまま残ることがあります。
DEXでのトークンのスワップ:UniswapでUSDCをスワップしてETHを得る場合を考えてみましょう。まず、USDCを使えるようにPermit2コントラクト(Uniswap Labsによる権限管理の仕組み)を承認します。無制限の承認は、スワップが完了したあともキャンセルされたあとも有効なまま残ることがあります。
レンディングプロトコルへのトークンの供給:AaveでUSDTを貸し出すには、ウォレットからトークンを移動させる権限をAave Poolコントラクトに承認します。使われなかったアローワンスは、預けた資金を引き出したあとやDAppを切断したあとも残ることがあります。
DApp経由でのトークンのステーキング:Aave Umbrella経由でステーキングする場合、選んだトークンをプールに移動させる権限をステーキングコントラクトに承認します。承認額が預入額を上回っていると、ステーキングを終了したあとも残ったアローワンスが有効に働き続けることがあります。
NFTの出品:OpenSeaにNFTを出品すると、マーケットプレイスはsetApprovalForAllを通じて、単一のNFTまたはコレクション全体へのアクセスをリクエストすることがあります。コレクション全体の承認は、ユーザーが別のトランザクションで取り消すまで有効であり続けます。
エアドロップでのトークンの受け取り:偽のエアドロップサイトは、普通のClaimボタンの裏に無制限の承認やPermitの署名を隠していることがあります。確認して署名すると、ウォレットドレイナーはウォレットに新たなリクエストを出すことなく、承認されたトークンやNFTを移動できます。
トークン承認のリスクとは?
危険なのは承認そのものではなく、それが時間とともに何に変わりうるかです。特に重要なリスクは3つあります。
- 無制限のアローワンス:コントラクトは、使うつもりだった金額だけでなく、承認したトークンの現在および将来の残高すべてを使えます。
- 残り続ける承認:権限は、そのDAppを最後に使ってから何か月も何年も有効に働き続けるため、忘れられた承認は悪用されうる状態のまま残ります。
- 侵害されたコントラクト:正規のDAppであっても承認を与えたあとにハッキングされることがあり、すでに署名して渡したアクセス権が攻撃者の手に渡ります。
仮想通貨のウォレットドレイナーとは?
仮想通貨のウォレットドレイナーとは、フィッシングサイトや偽のDAppを使って、トークンやNFTを送金する権限をだまして与えさせる悪意あるツールです。ドレイナーはシークレットフレーズを推測するのではなく、ユーザー自身に自発的にアクセス権を署名させ、それを使って最も価値のある資産を持ち出します。ドレイナーは大規模で活発な脅威です。2024年には約332,000のウォレットアドレスから4億9,400万ドルを盗み、前年から67%増加しました(Scam Sniffer、2024年)。
ウォレットドレイナーがトークン承認を悪用する手口
ドレイナーによる攻撃は、たいてい予測できる手順の連鎖で進みます。
- ユーザーが偽のミント、エアドロップ、投資のサイトにたどり着きます。
- サイトがウォレットの接続を求めます。
- ユーザーが承認またはPermitの署名を行います。
- ドレイナーがウォレットをスキャンし、最も価値のある資産を特定します。
- 承認済みのトークンやNFTが、新たな確認なしに送金されます。
ウォレットを接続しただけでは、誰も資産を動かせません。危険が始まるのは、承認や悪意あるトランザクションに署名したあとです。その1回の署名こそが、無害な接続と資産を抜き取られたウォレットとを分ける境界線です。
DAppを切断しても承認が取り消されない理由
切断と取り消しは別の操作であり、コントラクトの支出権限を取り除くのは一方だけです。切断はウォレットとDAppの間のインターフェースを閉じるもので、承認はオンチェーンに残り続けます。
| 操作 | 何が起きるか | 有効なまま残るもの |
|---|---|---|
| 切断 | ウォレットとDAppのインターフェースの間の接続を閉じる | 以前に与えられたオンチェーンの承認 |
| 取り消し | スマートコントラクトの支出権限を削除またはリセットする | DAppがトークンに再びアクセスするには新しい承認のリクエストが必要 |
違いを示すために、正規のDAppであるUniswapにGem Walletを接続し、USDCについてPermit2に無制限の承認を与えました。Uniswapを切断したあと、有効なWalletConnectのセッションは残っていませんでしたが、Revoke.cashには、USDCの全残高をリスクにさらされている金額として、その承認が引き続き表示されていました。切断はDAppとの接続を閉じるだけで、オンチェーンの承認は別途取り消しのトランザクションを行うまで残ります。
Uniswapで承認し、DAppを切断しても、Gem Walletではその承認がオンチェーンで有効なままです。
DAppのトークン承認を取り消す方法:ステップバイステップ
承認の取り消しには数分かかります。全体の流れは次のとおりです。
- 承認チェッカーを開きます。
- ウォレットアドレスを入力します。
- ブロックチェーンを選択します。
- 有効な承認を確認します。
- アローワンスを取り消すか減らします。
- トランザクションを承認します。
- 結果を確認します。
各ステップを詳しく見ていきましょう。
ステップ1:信頼できる承認チェッカーを開く
Revoke.cashやEtherscanのToken Approval Checkerのような承認チェッカーを開き、リンクをたどるのではなく自分でアドレスを入力します。これらのツールにはフィッシングの偽サイトが存在するため、何かを接続する前にドメインを二重に確認してください。
ステップ2:仮想通貨ウォレットのアドレスを入力する
まずは公開ウォレットアドレスを貼り付けて読み取り専用モードで始めます。これにより、接続も署名もせずに有効な承認をすべて確認できます。WalletConnectでの接続が必要になるのは、実際に取り消す準備が整ってからです。
ステップ3:正しいブロックチェーンを選ぶ
承認を与えたネットワークを選びます。チェーンごとに承認が別々に保存されているためです。イーサリアム、BNB Chain、ポリゴン、Base、そのほかのネットワークは個別に確認する必要があります。あるチェーンの承認は、別のチェーンからは見えません。
ステップ4:スペンダーとアローワンスを確認する
それぞれの項目について、トークン、スマートコントラクト(スペンダー)、承認された金額、付与された日付、リスクにさらされている金額を確認します。知らないスペンダーや、保有しているトークンに対する無制限の金額は、その承認を取り消すべき最も明確なサインです。
ステップ5:トークンの承認を取り消すか減らす
不要になった承認は完全に削除するか、実際に使う予定の金額までアローワンスを減らします。Revokeをタップすると、そのコントラクトの支出アローワンスを0にリセットするトランザクションが作成されます。
ステップ6:ウォレットでトランザクションを承認する
リクエストはWalletConnectを通じて、Gem Walletなどのウォレットで開きます。承認する前に、次の点を確認してください。
- 金額:承認済みのアローワンスが0 USDCに変わること。
- コントラクト:USDC。
- メソッド:Approve。
- スペンダー:Permit2。
- ネットワーク:イーサリアム。
これは権限を実際に取り除くオンチェーンのトランザクションであるため、承認にはネットワーク手数料(たとえばETH)が必要です。Gem Walletで承認して送信します。
ステップ7:承認が削除されたことを確認する
Revoke.cashを再読み込みし、承認が消えているか、その金額が変わっていることを確認します。私たちのテストでは、ダッシュボードの表示が承認0件、リスクにさらされている金額0ドル、承認リストは空へと更新されました。これは、コントラクトが改めて承認を求めない限りUSDCを使えなくなったことの証拠です。
Revokeをタップし、Gem Walletで0 USDCのアローワンスを承認して、承認が消えたことを確認します。
どのトークン承認を取り消すべきか?
すべての承認を削除する必要はありませんが、明らかに候補となるものもあります。次のような場合は承認を取り消しましょう。
- 使っていないDApp:その承認を持つDAppをもう使っていない場合。
- 知らないスペンダー:スペンダーのコントラクトに心当たりがない場合。
- 無制限の金額:承認が無制限の金額で与えられていた場合。
- 古いNFTの出品:すでに終了したNFTの出品に紐づく権限である場合。
- 公表されたハッキング:そのプロジェクトがハッキングや脆弱性の悪用を公表した場合。
- 疑わしい出どころ:怪しいミントやエアドロップのあとに承認が現れた場合。
- 理由が思い出せない:そもそもなぜ承認したのかを思い出せない場合。
仮想通貨ウォレットがすでに抜き取られてしまった場合の対処法
有効な承認はすべてただちに取り消してください。取り消しはそれ以上の支出を止めますが、すでに盗まれた資産を取り戻すことはできません。シークレットフレーズや秘密鍵が漏れた場合は、クリーンな端末で新しいウォレットを作成し、残っている資金をそこへ移します。スイーパーボットがそのアドレスを監視している場合は、資産を救出する個別の計画がないまま、侵害されたアドレスにガス代を送らないでください。
資産を抜き取られずにDAppを使う方法
取り消しはすでに与えた権限を整理する作業ですが、より安全な習慣は、署名する前に危険な承認に気づくことです。いくつかのルールでほとんどの場面に対応できます。
- ドメインの確認:接続する前にDAppの正確なURLを確認します。
- 承認を促す誘いを無視:エアドロップを受け取るためだけに、内容が不明確な承認に署名しないようにします。
- 金額の上限設定:無制限で与えるのではなく、承認する金額を制限します。
- setApprovalForAllに注意:コレクション全体に及ぶNFTの権限は特に慎重に扱います。
- スペンダーの確認:スペンダーのアドレスが本物のプロトコルのものかを確かめます。
- 定期的な整理:古い承認は決まったタイミングで削除します。
- リスクの分離:新しいDAppや信頼できないDAppには別のウォレットを使います。
Gem Walletなら、100を超えるブロックチェーンでDAppを利用できます。Gem Walletは完全にオープンソースのセルフカストディウォレットで、秘密鍵を端末に保存し、個人データを収集しません。Gem Walletをダウンロードして、鍵を完全に自分で管理したままWalletConnect対応アプリに接続しましょう。


