背景
最近、フィッシング攻撃を受けたユーザーから支援要請を受けました。ユーザーはウォレット内に異常な認証記録を発見し、認証の取り消しを試みましたが失敗し、影響を受けたウォレットアドレス(9w2e3kpt5XUQXLdGb51nRWZoh4JFs6FL7TdEYsvKq6Wb)を提供しました。オンチェーン分析の結果、ユーザーのアカウント所有者権限がアドレスGKJBELftW5Rjg24wP88NRaKGsEBtrPLgMiv3DhbJwbzQに移行されていたことが判明しました。さらに、ユーザーは300万ドル以上の資産を盗まれ、約200万ドル相当の資産がDeFiプロトコルに保管されていましたが、移転できませんでした(この200万ドル相当の資産は、関連するDeFiプロバイダーの支援により、現在、無事に回復されています)。

(https://solscan.io/tx/524t8LW1PFWd4DLYDgvtKxCX6HmxLFy2Ho9YSGzuo9mX4iiGDhtBTejx7z7bK4C9RocL8hfeuKF1QaYMnK3itMVJ)
被害者は承認を確認するため、アカウントから自身のアドレスへの送金を試みましたが、すべての取引が失敗しました。この状況は、TRONエコシステムで頻繁に発生する「悪意のあるマルチシグネチャ」攻撃と非常に類似しています。つまり、この攻撃は従来の「承認窃取」ではなく、攻撃者によってコア権限(所有者権限)が置き換えられ、被害者は資金の送金、承認の取り消し、DeFi資産の操作といった権限を奪われているのです。資金は「見える」状態ですが、もはや被害者の管理下にはいません。
Solanaのオーナー変更メカニズム
攻撃者は、2 つの直感に反するシナリオを使用して、ユーザーをクリックさせることに成功しました。
1. 通常、ウォレットはトランザクションに署名する際に、トランザクションの実行結果をシミュレートします。資金に変化があった場合、インタラクティブインターフェースに表示されます。しかし、攻撃者が巧妙に細工したトランザクションでは、資金の変化は表示されません。
2. 従来の Ethereum EOA アカウントは秘密鍵によって所有されており、ユーザーは Solana がアカウントの所有権を変更できることに気づいていません。
Solana Ownerの変更が具体的に何であるかを分析してみましょう。
アカウントの所有権
ウォレットにアカウントを作成する際、所有者は通常システムアカウント(1111111111111111111111111111111111)になります。トランザクション中、システムはトランザクション署名が対応する公開鍵で署名されているかどうかを検証します。Solana Accountコマンドを使用して、アカウントの基本情報を確認できます。

もう1つのタイプのアカウントはPDAアカウントと呼ばれ、スマートコントラクトから派生したもので、主にスマートコントラクトデータの保存に使用されます。その所有者は、そのアカウントの派生元であるスマートコントラクトです。例えば、トークンの発行情報と保有情報の保存に使用されるアカウントはPDAアカウントです。Solanaアカウントを使用してアカウントの基本情報を表示すると、その所有者がトークンスマートコントラクトTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DAであることがわかります。

どちらのタイプのアカウントでも所有者は変更できますが、ルールと制限が異なります。
通常アカウント
オーナーはコマンドやスクリプトを介して外部から直接変更することはできませんが、スマートコントラクトの呼び出しを通じて変更することは可能です。主な指示は以下の通りです。

`assign`コマンドは、アカウントの所有者を現在の値から`new_owner`に変更します。デプロイ後、このコマンドはSolana CLIまたはクライアント(Solana Web3.jsなど)を使用して呼び出されます。今回のフィッシング攻撃では、この機能を悪用して被害者を騙し、`assign`コマンドを含むトランザクションに署名させ、被害者のウォレットアドレスから所有者を密かに移転させていました。
PDAアカウント
つまり、PDAアカウントはオーナーを変更できますが、アカウントのデータは空である必要があります。これは`assign`コマンドを使用して実行されます。オーナーを変更した場合のフィードバックについて、いくつかのシナリオで簡単なテストを実施しました。
1. 新しく作成されたPDAアカウントには任意の所有者を指定できます。所有者がアカウントを作成したプログラムでない場合、そのプログラムには書き込み権限がありません。
2. 新しく作成された PDA アカウントの所有者を変更しようとすると、次のエラーが発生します: 「命令によりアカウントのプログラム ID が不正に変更されました」。
3. PDA アカウントに最終的にデータが割り当てられる前に、所有していないアカウントのデータを書き込む命令が変更されます。
アカウントの所有者が変更されると、ユーザーはアカウントの制御を失い、攻撃者は CPI 呼び出しを通じてアカウント資産を転送できるようになります。
所有権の変更でよくあるもう1つのタイプは、トークンアカウントの所有権です。これは基本的に、Solanaの基盤となるロジックではなく、スマートコントラクト内のロジックによって制御される所有権です。しかし、これはフィッシング攻撃でも頻繁に利用されるため、ユーザーはこの種のフィッシング攻撃に注意する必要があります。
ミストトラック分析
オンチェーン追跡およびマネーロンダリング対策ツールMistTrackによる被害者のアドレス9w2e3kpt5XUQXLdGb51nRWZoh4JFs6FL7TdEYsvKq6Wbの分析によると、この攻撃における資金移動経路は複雑でした。攻撃者は主に、BaBcXDg…(1への送金)と7pSj1R…(2への送金)という2つのコアアドレスを通じて資産を流用していました。
流れ方向1: BaBcXDgbPgn85XtEQK7TZV8kZuFpT4iWVAs4QJoyNSmd
最初の主要な経路は、約238万ドル相当の資産に関係しており、「多層的な拡散 + CEXを通じた分散型預金 + 複数のアドレス仲介者」を特徴としています。攻撃者はこのアドレスを使用して、様々なトークン(PAYAI、CASH、CARD'S、JitoSOL、POLYFACTS、PUMP、PYUSD、CAPなど)をSOLに交換しました。具体的には、PUMPはSOLに交換される前に7E4eNkK…に転送されました。

交換されたSOLの主な行き先は次のとおりです。
1) 717.5 SOLがYDrMfsB…に送金され、一部のSOLはBinanceプラットフォームに送金され、残りの資金は約4つのトランジットアドレスに分散されて残りました。

2) 7,556.89 SOL + 2,218 SOL(PUMP取引所から)が7E4eNkK…に均一に集約され、その後、一部のSOLはLetsexchangeプラットフォームに転送され、5,050.93 SOLはFyB2jDJbTdmW…に転送され、残りの資金は約13のトランジットアドレスに分散され残りました。

3) 2,161.88 SOLと前述の5,050.93 SOLは、FyB2jD…でさらに分散され、複数のプラットフォーム(HTX、Binance、Kucoin、ChangeNOW、Changelly)に送金され、一部は不明なアドレス(25nULbv…)に流入しました。残りの資金は分散され、約25のトランジットアドレスに留まりました。

4) 2,053 SOLが6qdtH5D…に送金され、一部のSOLはLetsexchangeプラットフォームに送金され、残りの資金は約15のトランジットアドレスに分散され残りました。

5) 20 SOL は 5rJdvkp… に転送され、その後転送されてアドレス 2etvjZH… に残ります。

6) 2,142 SOLは2xFzAda…に転送され、352 SOLはBinanceプラットフォームに転送され、200 SOLはLetsexchangeプラットフォームに転送され、残りの資金は約11のトランジットアドレスに分散され残りました。

流れ方向2: 7pSj1RxHf77G3XeisvnNAtbyx5AFjYPcChswWhZe9bM8
2つ目の主要な経路は約79万ドル相当の資産に関係しており、その主な特徴は「クロスチェーンおよびマルチチェーンの循環交換」です。攻撃者はまた、受け取った様々なトークンをSOLに交換しており、JitoSOL、PUMP、POLYFACTSの割合が比較的高いことが分かりました。

交換されたSOLの主な行き先は次のとおりです。
5,742 SOL が FiywJZ2Z… に転送されましたが、このアドレスは、MistTrack によって「フィッシング」とマークされた別のフィッシング イベント アドレスからも 2,772.8 SOL を受信しました。

攻撃者はRelay.linkを使用して8,579.92 SOLをETHに交換し、Arbitrumアドレス0xDCFa6f…にクロスチェーンしました。その後、1inchを使用してその資金をSOLに交換し、複数のSolanaアドレスにクロスチェーンしました。その後、攻撃者は1inchを繰り返しクロスチェーン操作に使用しましたが、これについてはここでは詳しく説明しません。

FiywJZ2Z…は残りの215.89 SOLをAh5Rs916…に送金し、これは29,875 USDCに交換されました。その後、USDCはRelay.linkを介して5000、5000、5000、5000、19,875.38の単位でDAIに交換され、チェーンを介してBaseアドレスとEthereumアドレス0xd2c1c2A…に転送されました。5000 USDCのトランザクションのうち2つは返却されましたが、DAIはまだ送金されていません。


DeFi資産の救済
さらに、複数の関係者の協力により、被害者のDeFiに残っていた資産は、アドレスfgR5PJF…を通じて正常に引き出し、送金されました。これには約217万PYUSDと4,548 USDCが含まれています。

この資金の流れは、攻撃者の行動パターンを明確に示しています。急速な分散、複数のアドレスジャンプ、マルチプラットフォームミキシング、クロスチェーン流通、CEXデポジットとDeFi資産の同時再利用など、追跡の難易度を大幅に高める多層・クロスエコシステムマネーロンダリングネットワークを構築しています。MistTrackはすでに関連するすべてのアドレスをマークしています。
同様の攻撃を防ぐにはどうすればよいでしょうか?
一般ユーザーにとって、この種の攻撃は本質的に「フィッシング攻撃」です。攻撃者は、エアドロップ、報酬、タスク、早期テスト資格など、様々な方法でリンクを偽装したり、公式発表を装ったりして、単純な操作だと思わせます。しかし実際には、ポップアップ署名には所有者の変更など、リスクの高い権限が隠されています。署名されると、ウォレットは事実上乗っ取られてしまいます。したがって、最も重要な予防策は、リンクや「署名」をクリックする前に、慎重に検討することです。ソースは信頼できるか?このページは公式か?この署名は実際には何をするのか?ウォレットにポップアップ表示されるコンテンツが全く理解できない場合、または突然、奇妙な権限、見慣れないアドレス、不可解な認証要求が表示された場合は、直ちに中止し、決して無理やり「確認」をクリックしないでください。
日常的なやり取りには、多額の資産を保有するウォレットの使用は避けてください。タスク、プロジェクト、エアドロップなどには、専用のアカウント(残高は少額)を用意してください。本当に重要な資産は、別のウォレット、あるいはコールドウォレットに保管しましょう。こうすることで、誤ってサインインしてしまった場合でも、損失を最小限に抑えることができます。また、無制限の権限付与は避け、可能な限り権限の範囲と量を制限することで、攻撃者がサービスを悪用する余地を減らしましょう。
つまり、念入りに確認し、二重チェックを行い、無作為にクリックしたり署名したりせず、自分自身のために多層的な保護を構築しましょう。また、大きな資産は別々に保管し、やり取りにはセカンダリアカウント、保管にはプライマリアカウントを使い分けましょう。異常に気づいたらすぐに停止し、リスクを冒さないでください。これらの対策を講じることで、この種のフィッシング攻撃を受けるリスクを大幅に軽減できます。最後に、「ブロックチェーン・ダークフォレスト・セルフヘルプ・ハンドブック」(https://darkhandbook.io/)をぜひお読みください。
