フィッシング攻撃による数百億円規模の損失が発生する増加傾向が見られます。そのため、技術的な観点だけでなく、一般的なフィッシング手法をユーザーに周知し、フィッシング攻撃を回避する方法を教育する必要があります。
フィッシング攻撃の種類
一般的なフィッシング攻撃には、次の4つの種類が存在します。
-
直接トークン転送: 攻撃者は、ユーザーを誘導してネイティブトークン(Ether)またはERC20/ERC711トークンを攻撃者管理下の口座に直接送金させます。
-
承認フィッシング: 承認とは、承認トランザクションに署名することで、ユーザーのトークンを支出者に委任するメカニズムです。攻撃者は、ユーザーに署名させて、攻撃者にトークンを承認させ、その後、攻撃者は被害者のトークンを送金することができます。
-
アドレスポイズニング: 偽トークン攻撃、ゼロバリュー攻撃、ダスト転送攻撃など。
-
NFTゼロバイフィッシング: 攻撃者は、ユーザーを誘導して、NFTを低価格または無料で売却するトランザクションに署名させます。
-
その他。
直接トークン転送
最初のタイプは直接トークン転送と呼ばれます。攻撃者は、ユーザーにEtherを直接攻撃者管理下の口座に転送するトランザクションに署名するように求めます。高度な攻撃では、悪意のあるスマートコントラクトにSecurityUpdateまたはClaimRewardsという名前の関数を使用し、ユーザーにトランザクションに署名させます。


前の図(右側)は、スマートコントラクトのSecurityUpdate関数を含むフィッシングトランザクションの例を示しています。ユーザーがこのトランザクションに署名すると、そのEtherはこのスマートコントラクトに転送され、その後攻撃者に送金されます。
承認フィッシング
承認とは、ユーザーが他のユーザー(支出者)に自身のトークンを使用させるメカニズムです。例えば、ユーザーはUSDCをスマートコントラクトに承認することで、スマートコントラクトがユーザーの代わりにUSDCトークンを操作できるようになります。例えば、USDCを他のトークンと交換するなどです。ユーザーは自身のトークンをスマートコントラクトに承認しているため、スマートコントラクトがユーザーのUSDCトークンに対して行う操作には、ユーザーからの追加の確認(または新しい署名メッセージ)は必要ありません。これにより、全体のフローがスムーズになります。
しかし、攻撃はこのメカニズムを悪用しています。攻撃者は、ユーザーを誘導して、自身のUSDC(または他の価値あるトークン)を攻撃者管理下のコントラクトまたはEOAアドレスに承認するトランザクションに署名させることができます。その後、攻撃者はユーザーのトークンを自身のものに送金することができます。

前の図は、USDTを攻撃者に承認するトランザクションを示しています。承認権限は、ユーザーが明示的に取り消さない限り失効しないことに注意してください。そのため、悪意のある承認はできるだけ早く取り消してください。
また、正規のコントラクトを利用した新しいタイプのフィッシング攻撃があり、Web3フィッシング攻撃におけるROPと呼んでいます。詳細については、弊社のブログをご覧ください。
アドレスポイズニング
このビデオでは、アドレスポイズニングがどのように発生するか、偽トークン攻撃、ゼロバリュー攻撃、ダスト転送攻撃を含めて説明し、Etherscanで不審なトランザクションをどのように見つけるかをお見せします。
ゼロバリュー転送: 攻撃者は、被害者からフィッシングアドレスに、人気のあるトークン(例:USDC)のゼロバリュー転送記録を作成します。このフィッシングアドレスは、被害者のトランザクション履歴にあるアドレスと似ています。被害者が次の送金のために履歴からアドレスを直接コピーすると、トランザクション履歴からフィッシングアドレスをコピーしてしまう可能性があります。詳細については、弊社のTwitter、Coinbaseの調査123、その他をご覧ください。
NFTゼロバイフィッシング
NFTマーケットプレイス(例:OpenSea)でNFTを販売する際、ユーザーはまず、価格を指定してNFTを売却する意向を示すトランザクションに署名します。その後、このNFTを購入したい人が署名された注文メッセージを取得して注文を成立させます。
これにより、詐欺師はユーザーを誘導し、特に低価格(または無料)でNFTを売却するトランザクションに署名させる機会を得ます。攻撃者はこのトランザクションを利用してNFTマーケットプレイスでこの注文を成立させ、被害者のNFTを低価格(または無料)で入手できます。
ユーザーが注文に署名する際の意味を理解するのが難しい場合があるため、このフィッシングは広く行われています。

前の図は、OpenSeaの注文に署名する際のMetaMaskのUIを示しています。残念ながら、このような情報はユーザーが理解するのが困難です。
自己防衛の方法
- まず、理解できるトランザクションにのみ署名してください!トランザクションについて疑問がある場合は、署名しないでください。
- 次に、複数のウォレットを使用してトランザクションを実行してください。日常的なトランザクションには少額のトークンしか持たないウォレットアドレスを使用してください。ほとんどのトークンは、最初のウォレットへのトークン転送以外のトランザクションに署名しない別のウォレットアドレスに保管してください。
- 第三に、承認を確認し、不要なものは削除してください。この目的のために、MetaSuitesの承認診断を利用できます。



