
Web3フィッシングの基本的な仕組みをやさしく解説:認証によるフィッシング、PermitとPermit2の違い
TechFlow厳選深潮セレクト

Web3フィッシングの基本的な仕組みをやさしく解説:認証によるフィッシング、PermitとPermit2の違い
もうやめる。お金を返せ。
執筆:ボサイ
ただ署名しただけなのに、なぜかお金がなくなってしまった!?「署名フィッシング」は現在、Web3のハッカーたちに最も好まれるフィッシング手法となっています。最近、余弦氏や各大手ウォレット、セキュリティ企業が次々と署名フィッシングに関する知識を啓蒙していますが、それでも毎日多くの人々が被害に遭っています。
ボサイはその原因の一つとして、大多数のユーザーがウォレット操作の根本的な仕組みを理解していないこと、そして技術初心者にとって学習コストが高すぎる点にあると考えました。そこで今回は、図解付きで署名フィッシングの仕組みを徹底解説し、技術を知らない人でも最大限わかりやすい言葉で理解できるように試みます。
まず前提として、ウォレットを使う際の操作は大きく分けて2種類しかありません。「署名(Signature)」と「インタラクション(Interaction)」です。簡単に言えば、「署名」はブロックチェーン外(オンチェーン外)で行われるもので、ガス代がかかりません。一方「インタラクション」はブロックチェーン上で発生する操作であり、ガス代が必要です。
一般的に「署名」は「あなた本人であることを証明する」ために使われます。たとえば、ウォレットでログインするときです。Uniswapでトークンを交換する場合、まずウォレットを接続する必要があります。このとき、サイトに対して「私はこのウォレットの所有者です」と証明するために署名を行います。この操作はブロックチェーン上のデータや状態に何の変化も与えないため、料金はかかりません。

一方「インタラクション」は、実際にUniswapでトークンを交換するときの操作です。たとえば100USDTでボサイコインを購入する場合、まずUSDTのスマートコントラクトに対して「Uniswapに私の100USDTの移動を許可します」という承認(approve)のトランザクションを送信し、ガス代を支払います。これを「承認(Approve)」と呼びます。その後、もう一度ガス代を支払い、Uniswapのスマートコントラクトに対して「今すぐ100USDTでボサイコインを交換していい」と指示を出します。これで交換が完了します。

「署名」と「インタラクション」の違いをざっくり理解したところで、次にフィッシングの仕組みについて説明します。ここでは3つの代表的な方法を取り上げます。「承認フィッシング」「Permit署名フィッシング」「Permit2署名フィッシング」です。これらは非常に頻繁に使われる攻撃手法です。
まず「承認フィッシング」から。これは過去のWeb3における最も古典的なフィッシング手法の一つです。先ほどのUniswapの例で見たように、「承認(approve)」とは「このスマートコントラクトに、自分のxxxトークンの移動を許可する」という意味です。ハッカーは見栄えの良い偽のNFTプロジェクトのフロントエンドを作り、「あなたのエアドロを受け取る」などという大きなボタンを用意します。しかし実際には、このボタンを押すと、ユーザーのウォレットに「自分のトークンをハッカーのアドレスに移動させる権限を与える」という承認画面が表示されます。ここで「確認」を押してしまうと、ハッカーのKPI達成が完了です。

ただし、承認フィッシングには弱点があります。ガス代がかかるため、最近はお金を消費する操作に対して警戒心を持つユーザーが増えています。見知らぬサイトで操作した際に少し注意すれば不審な点に気づきやすいため、ある程度防ぎやすいのです。
それでは本題に入ります。「Permit」と「Permit2」を使った署名フィッシングです。これは現在、Web3資産セキュリティにおいて最も深刻な問題領域です。なぜここまで防ぎにくいのか? それはDAppを利用する前に必ずウォレットの署名ログインを行う必要があるため、多くのユーザーが「これは安全な操作だ」と無意識に思い込んでしまいがちだからです。加えて、署名にはガス代がかからないこと、そしてほとんどの人が「署名ひとつひとつが何を意味しているのか」を理解していないことも要因です。
まず「Permit」について。これはERC-20標準の承認機能を拡張したもので、私たちがよく使うUSDTなどもERC-20トークンです。簡単に言うと、「他人があなたのトークンを移動することを、署名で許可できる」機能です。通常の「承認(Approve)」は「ガス代を払ってスマートコントラクトに『この相手にxxx量のトークンを動かす権限を与える』と宣言する」ことです。一方「Permit」は、あなたが誰かに「この紙切れ(署名)」を渡して、「私はこの人にxxx量のトークンの移動を許可します」と書いたもの。相手はこの「紙切れ」を持って、ガス代を払ってスマートコントラクトに提示し、「彼が私に許可してくれた」と伝えます。すると、あなたの資産が移動されてしまうのです。このプロセスで、あなたは「ただ署名しただけ」ですが、結果として「他人に承認をさせ、資産を奪わせる」ことになります。ハッカーはこの仕組みを使って、ログインボタンを「Permit署名」にすり替えた偽サイトを作れば、簡単にあなたの資産を盗むことができるのです。

では「Permit2」とは何でしょうか? 実はPermit2はERC-20の機能ではなく、Uniswapがユーザー利便性のために導入した新機能です。前述のように、UniswapでUSDTとボサイコインを交換するには、最初に「承認(Approve)」してガス代を払い、その後交換時にまたガス代を払う、という2ステップが必要でした。Uniswapはこれを面倒だと考え、「最初に一括で上限額を設定しておいて、あとは毎回署名するだけで処理できるようにしよう」というアイデアを採用しました。これがPermit2です。これにより、ユーザーは一度だけガス代を支払えば済み、しかも実際の支払いはPermit2コントラクトが代行してくれます(代行手数料は最終的に受け取るトークンから差し引かれます)。

ただし、Permit2によるフィッシング被害に遭うには条件があります。すなわち「かつてUniswapを使ったことがあり」「Permit2コントラクトに無制限の承認(infinite approval)を与えている」ことです。現在Uniswapのデフォルト設定は無制限承認であるため、該当するユーザーは非常に多いのが現状です。ハッカーはこうしたユーザーに対して、巧妙に「署名」を促せば、その承認範囲内のトークンを自由に移動できてしまうのです。
まとめると、「承認フィッシング」の本質は「あなたがガス代を払って、『自分のトークンをハッカーに移動させる権限を与える』とスマートコントラクトに伝えること」です。一方「署名フィッシング」は「あなたが他人に資産移動の許可を書いた『紙切れ』を渡してしまう」ことであり、ハッカーがその紙切れを使ってガス代を払い、「彼の資産を自分に移動する」とスマートコントラクトに要求するのです。現在、PermitとPermit2は特に狙われやすいフィッシング対象です。PermitはERC-20の承認拡張機能、Permit2はUniswapが提供する新しい利便機能です。
仕組みがわかったところで、どうやって防げばいいのか?
1. 何よりも重要なのはセキュリティ意識の育成です。ウォレットのすべての操作で、「今自分が何をしているのか?」を必ず確認してください。
2. 大口資金用のウォレットと日常的なチェーン上操作用のウォレットは分けて管理しましょう。万一フィッシングに遭った場合でも、被害を最小限に抑えられます。
3. PermitおよびPermit2の署名フォーマットを正しく識別できるようになりましょう。以下の項目が表示されたら、すぐに警戒してください:
-
Interactive:インタラクション先のURL
-
Owner:承認元のアドレス
-
Spender:承認先のアドレス
-
Value:承認される数量
-
Nonce:乱数(ナンス)
-
Deadline:有効期限

TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News










