ウォレットを蝕む静かなる脅威:危険なスマートコントラクトの承認(Allowance)を監査・取り消す方法

仮想通貨にまつわるパラノイア(偏執的な恐怖)で、初めて本当に冷や汗をかいた時のことを覚えています。
シードフレーズをなくしたからではありません。
DiscordのDMで怪しいリンクをクリックしたからでもありません。
それは、3年前に使ったDeFiプロトコルが、今でも私のウォレットからすべてのUSDTを抜き取る許可を持っていることに気づいたからでした。
私たちは秘密鍵やシードフレーズを守ることに多くの時間を費やしています。
しかし、大きく開けっ放しにしている裏口をしばしば無視してしまいます。それが スマートコントラクトの承認(Allowances) です。
これこそが、仮想通貨における静かなる殺人者です。
毎年数百万ドルもの損失が、これによって引き起こされています。
そして恐ろしいことに? あなた自身がそれを許可した可能性が高いのです。
今日は、これらの「承認(Allowances)」が一体何なのかを正確に解説します。
その後、一緒にあなたのウォレットを監査します。
最後に、あなたの資金を脅かすアプリへのアクセス権を取り消します。
あなたの資産を確実に守りましょう。
その正体を理解する:アロワンスとは何か?

ウォレットがどのように空にされるのかを理解するには、イーサリアムやEVM(イーサリアム仮想マシン)チェーンがどのように機能するかを理解する必要があります。
Uniswapのような分散型取引所(DEX)でトークンを取引したい場合、ただ取引することはできません。
スマートコントラクトは、あなたの明示的な許可なしにウォレットからトークンを引き出すことはできないのです。
これはバグではなく、セキュリティ機能です。
そのため、最初のスワップを行う前に、「Approve(承認)」と呼ばれるトランザクションに署名する必要があります。
「無制限」の罠
ここからが危険なところです。
ほとんどの分散型アプリケーション(dApps)は、シームレスな体験を提供したいと考えています。
取引のたびにガス代を払ってトークンを「承認」する手間をユーザーにかけさせたくないのです。
そのため、彼らが許可を求める際、スワップしようとしている100トークン分の許可だけを求めるわけではありません。
彼らは 無制限 の使用許可を求めてくるのです。
技術的なデータを見ると、その数字は実質的に「無限(infinity)」になっています。
私はこれを数え切れないほど見てきました。
あなたは「確認(Confirm)」をクリックし、50ドルの取引を承認したつもりでいます。
しかし実際には、あなたが将来保有するその種類のトークンすべてを、そのスマートコントラクトが永遠に引き出せるように承認してしまったのです。
なぜ今、これが重要なのか
「だから何だ? Uniswapは安全だろ」と思っているかもしれません。
一般的には、その通りです。
しかし、あなたがこれまでに使ってきた、何十もの無名のファーミングプロトコル、NFTのミントサイト、ブリッジのことを考えてみてください。
それらはすべて、今でも安全でしょうか?
管理者の鍵(Admin keys)が侵害されていたりしませんか?
もしハッカーが、あなたが2021年に承認したスマートコントラクトの脆弱性を見つけたら、彼らはその古い「許可証」を使って、今日のあなたのウォレットを空にすることができます。
その時、あなたがオンラインである必要すらありません。
リスク:お金を失う2つのパターン

これらの無制限のアロワンスが仇となる主なパターンは2つあります。
どちらも異なるレベルの警戒が必要なので、両方知っておいてほしいと思います。
1. プロトコルの脆弱性(エクスプロイト)
これは先ほど説明したシナリオです。
あなたは正規のプロジェクトとやり取りをします。
相手を信頼して、無制限の使用許可を与えます。
半年後、そのプロジェクトのスマートコントラクトにバグが見つかります。
ハッカーはそのバグを悪用(エクスプロイト)します。
コントラクトはあなたの資金を動かす許可を持っているため、ハッカーはそのコントラクトを使ってあなたのトークンを彼らのウォレットに転送します。
シードフレーズは一度も侵害されていません。
ハードウェアウォレットは引き出しの中に安全に保管されていました。
しかし、残っていた許可(パーミッション)のせいで資金は消えてしまいます。
2. フィッシング詐欺による「承認」
これは最近非常に一般的になってきています。
あなたは正規のNFTミントやエアドロップ請求に見せかけたウェブサイトにアクセスします。
「Connect Wallet(ウォレットを接続)」をクリックします。
トランザクションがポップアップします。単純な「Claim(請求)」や「Verify(確認)」ボタンのように見えるかもしれません。
しかし、細かい文字をよく読むと、実際には setApprovalForAll という関数に署名しようとしているのです。
賢い人たちがこれに引っかかるのを何度も見てきました。
これに署名することで、あなたはエアドロップを請求しているわけではありません。
詐欺師のウォレットに、あなたのNFTやステーブルコインを抜き取る許可を与えているのです。
監査:リスクをチェックする方法
私が皆さんを怖がらせてしまったところで、行動に移りましょう。
誰があなたのデジタルなポケットに手を入れているのかを確認する必要があります。
私は月に一度、自分のアロワンスをチェックしています。
これは私のデジタル衛生管理(Digital Hygiene)ルーティンの一部です。
使用するツール
これにはいくつかの信頼できるツールがありますが、私は主に Revoke.cash を推奨します。
これは業界標準です。
オープンソースであり、高い評価を得ています。
あるいは、EtherscanやBscScanにも独自の「Token Approval」チェッカーがあります。
しかし、ユーザー体験の観点からは、Revoke.cashが最も見やすいです。
リストを見て受ける衝撃
やるべきことは以下の通りです。
ウェブサイトにアクセスします(常にURLをトリプルチェックしてください)。
ウォレットを接続します。
あなたが保有するすべてのトークンがリストアップされたダッシュボードが表示されます。
トークンの横には、「Spenders(使用許可を持っているコントラクト)」のリストが表示されます。
これらが、あなたのお金を動かす許可を持っているコントラクトです。
私が初めてこれを行った時、衝撃を受けました。
何年も前にラグプル(持ち逃げ)されたプロジェクトのコントラクトが見つかりました。
買ったことさえ忘れていたミームコインに対する「無制限」のアクセス権がありました。
それはまるで、まだ私のアパートの鍵を持っている元恋人たちのリストのようでした。
すぐに鍵を交換しなければならないと直感しました。
修正:アクセス権を段階的に取り消す方法
ウォレットをきれいにするのは気持ちが良いものです。
しかし、コストもかかります。
アロワンスを取り消す(Revoke)たびに、それはオンチェーン・トランザクションとなります。
つまり、ガス代を支払う必要があります。
取り消し(Revoke)の手順
ダッシュボード上で、もう使っていないコントラクトを見つけます。
または、怪しいと思われるコントラクトを見つけます。
「Revoke」ボタンをクリックします。
ウォレット(MetaMask、Rabbyなど)がポップアップし、トランザクションへの署名を求められます。
トランザクションがブロックチェーン上で確認されると、その許可は削除されます。
そのスマートコントラクトは、もうあなたの資金に触れることはできません。
優先順位をつける
もし長く仮想通貨に関わっているなら、何百もの承認が残っているかもしれません。
イーサリアムメインネットですべてを取り消そうとすると、ガス代だけで数百ドルかかる可能性があります。
ガス代が高い場合、盲目的にすべてを取り消すことはお勧めしません。
トリアージ(選別)が必要です。
高優先度:
- USDT/USDC/DAI: ステーブルコインはハッカーの主要な標的です。これらの古い承認はすぐに取り消してください。
- 不明なコントラクト: 「Unknown Contract(不明なコントラクト)」や、覚えのないプロジェクトがある場合は、削除してください。
- 高額な資産: 大量のETHやWBTCを保有している場合は、それらの特定の資産を守ってください。
低優先度:
- Dust(ゴミ)トークン: 価値が0.00ドルになった草コインを承認していた場合、取り消すために5ドルのガス代を払う価値はおそらくありません。
「接続解除(Disconnect)」の誤解
ひとつ、はっきりさせておく必要があります。
MetaMaskの設定で「接続済みのサイト(Connected Sites)」から切断しても、許可は取り消されません。
切断は、そのウェブサイトにアクセスした際に、サイト側があなたのウォレット残高を見られないようにするだけです。
それはあくまでプライバシー機能であり、セキュリティ機能ではありません。
スマートコントラクトの許可は、ブラウザのキャッシュではなく、ブロックチェーン上に存在します。
それを取り除くには、トランザクションを実行しなければなりません。
今後のためのベストプラクティス
過去を清算するのは素晴らしいことです。
しかし、そもそも散らかすのをやめましょう。
二度と「ウォレットが空になった朝」を迎えないために、私が現在実践している方法を紹介します。
カスタム使用限度額(Spending Limits)を使う
DEXでスワップする際、ウォレットのポップアップで通常、「Default」(無制限)か「Custom」(カスタム)の承認を求められます。
私は常に「Custom」を選びます。
もし500 USDCをスワップするなら、承認限度額として「500」と入力します。
これは、次回取引する時にもう一度承認しなければならないことを意味しますか?
はい。
次回も余分なガス代を払うのは面倒ですか?
多少は。
しかし、これはもしプロトコルがハッキングされても、彼らは私が許可した分しか盗めないことを意味します。
もし私の承認額が500で、アロワンスの残りが0であれば、彼らは何も盗むことができません。
バーナーウォレット(使い捨てウォレット)戦略
私はメインの「保管用(Vault)」ウォレットを新しいdAppに接続することは決してありません。
Vaultは長期保管専用です。
何とも相互作用させません。
新しいプロトコルを試したり、リスクの高いミームコインを買いたい場合は、「バーナー(Burner)」ウォレットに資金を送ります。
取引はそのウォレットで行います。
もし私がミスをして悪い承認に署名してしまったとしても、被害はバーナーウォレットの中だけで済みます。
Vaultにある私の全財産は手つかずのままです。
定期的な監査をスケジュールする
カレンダーに入れておきましょう。
毎月最初の日曜日。
コーヒーを飲みながら座ります。
Revokeツールを開きます。
各チェーン(Ethereum, Arbitrum, Base, Solana)をスキャンします。
1ヶ月間使っていないものがあれば、取り消します(Revoke)。
デジタルのゴミ出しのようなものだと考えてください。
最後に
仮想通貨のセキュリティ管理は疲れるものです。
至る所に地雷が埋まっているように感じることもわかります。
しかし、アロワンスを理解しているだけで、一般ユーザーよりも圧倒的に有利な立場に立てます。
ほとんどの人は、仮想通貨の魔法をブラックボックスのように見ています。
ボタンをクリックして、うまくいくことを祈るだけです。
承認(Approvals)をコントロールすることで、あなたは自分の経済的な運命をコントロールすることになります。
「静かなる資金流出」によって、あなたの仮想通貨の旅を終わらせないでください。
今すぐ10分だけ時間を取ってください。
ウォレットを監査してください。
リスクを取り消してください。
そして今夜は、少しだけ安心して眠りましょう。