PromptSpy:生成AIを活用したAndroidを狙う新たな脅威の到来
ESETの研究者が、実行フローで生成AIを悪用する初のAndroidマルウェア「PromptSpy」を発見
2026/03/09 Lukas Stefanko
ESETの研究者が、実行フローで生成AIを悪用する初のAndroidマルウェア「PromptSpy」を発見
2026/03/09 Lukas Stefanko
ESETの研究者は、生成AIを悪用し、コンテキストに応じてユーザーインターフェイスの操作を行うAndroidマルウェアの初の事例を発見しました。機械学習は、すでに同様の目的で使用されています。つい最近、Dr.WEBの研究者がTensorFlow機械学習モデルを用いて広告スクリーンショットを分析し、検出された要素を自動クリックして大規模な広告詐欺を行うAndroid.Phantomを発見しています。しかし、こうした形で生成AIが展開されたのは今回が初めてです。攻撃者は、悪意のあるUI操作を誘導するためにAIモデル(この例ではGoogleのGemini)のプロンプトに依存しているため、ESETはこのマルウェア系統をPromptSpyと名付けました。AIを活用したマルウェアをESETが発見した事例としては、2025年8月のPromptLockに続いて、これが2件目になります。
生成AIが展開されているのは、PromptSpyのコードの比較的小さな部分(常駐化の実現)に限定されていますが、それでもマルウェアの適応性に大きな影響を与えています。具体的には、Geminiを使用して現在の画面を分析し、悪意のあるアプリを「最近使ったアプリ」のリストに固定された状態を維持するための段階的な手順をPromptSpyに提供することにより、システムによる強制終了やスワイプ削除を防止します。AIモデルとプロンプトはコード内で事前定義されており、変更できません。AndroidマルウェアはUI操作に依存することが多いため、生成AIを活用することで、攻撃者はほぼあらゆるデバイス、レイアウト、OSバージョンに対応できるようになり、潜在的な被害者層を大幅に拡大できます。
PromptSpyの主な目的は、内蔵VNCモジュールを展開し、オペレーターが被害者のデバイスにリモートからアクセスできるようにすることです。また、ユーザー補助サービスを悪用して不可視のオーバーレイでアンインストールを阻止し、ロック画面のデータを取得し、動画を記録します。VNCプロトコル経由でC&Cサーバーと通信し、AES暗号化を使用します。
言語ローカライゼーションの手がかりと分析中に観察された拡散経路から、このキャンペーンは金銭的動機によるものであり、主にアルゼンチンのユーザーを標的にしていると見られます。興味深いことに、分析されたPromptSpyの検体からは、中国語圏の環境で開発されたことが示唆されます。
PromptSpyは専用のWebサイトを通じて配布されており、Google Playで提供されたことはありませんが、ESETはApp Defense Allianceのパートナーとして、調査結果をGoogleと共有しました。Androidユーザーは、Google Playサービスを搭載したAndroidデバイスにおいてデフォルトで有効になっているGoogle Play Protectによって、このマルウェアの既知のバージョンから自動的に保護されます。
本ブログの要点:
PromptSpyの機能のうち、Geminiを使用しているのは1つだけですが、こうしたAIツールを組み込むことで、マルウェアをより動的なものにし、従来のスクリプティングでは困難だった操作を自動化する方法を攻撃者に提供できることを示しています。 すでに簡単に触れたとおり、Androidマルウェアは通常、タップ、座標、UIセレクターなどのハードコードされた画面要素に依存しています。これらは、デバイスやOSバージョンの違い、あるいはメーカー独自のカスタマイズによってUIが変更されると機能しなくなる可能性があります。PromptSpyは、デバイスやメーカーによって異なる「最近使ったアプリにアプリをロックする」ジェスチャーを実行して、「最近使ったアプリ」のリストに埋め込まれた状態を維持し、常駐化を図ります(詳細なプロセスは分析セクションをご覧ください)。したがって、Androidマルウェアが従来使用してきた固定スクリプトによる自動化が困難になります。
そのため、PromptSpyは、Geminiに現在の画面のXMLダンプとともに、自然言語のプロンプトを送信し、すべてのUI要素の詳細(テキスト、タイプ、画面上の正確な位置)をAIに把握させます。
Geminiはこの情報を処理し、実行する操作(タップなど)とその位置を指示するJSON形式の応答をマルウェアに返します。マルウェアは、以前のプロンプトとGeminiの応答の両方を保存するため、Geminiはコンテキストを理解し、多段階の操作を調整できます。
図1は、PromptSpyがGeminiとの通信を初期化する際のコードスニペットを示しており、最初に使用されるプロンプトも含んでいます。Geminiに意思決定を委ねることで、マルウェアは正しいUI要素を認識し、適切なジェスチャーを実行できるため、ユーザーが終了を試みてもマルウェアを存続させることが可能です。

PromptSpyは、AIがアプリのロックが成功したことを確認するまでGeminiにプロンプトを送り続けます。これは、マルウェアが検証を待った上で次に進むというフィードバックループを示しています。
2026年2月、ESETは未知のAndroidマルウェアファミリーの2つのバージョンを発見しました。VNCSpyと命名された最初のバージョンは、2026年1月13日にVirusTotalに出現し、香港からアップロードされた3つの検体として観測されました。2026年2月10日には、VNCSpyを基盤とするより高度なマルウェアの4つの検体がアルゼンチンからVirusTotalにアップロードされました。
アルゼンチンからの検体を分析した結果、GoogleのGeminiを悪用した悪意のあるペイロードを持つ多段階マルウェアであることが明らかになりました。こうした発見に基づき、ESETはこのマルウェアの第1段階をPromptSpyドロッパー、そのペイロードをPromptSpyと命名しました。
ESETのテレメトリでは、PromptSpyドロッパーやそのペイロードの検体はまだ確認されておらず、どちらも概念実証段階にある可能性を示唆しています。しかし、後述するように、配布ドメインが存在する可能性があることから、PromptSpyドロッパーとPromptSpyが実環境に存在する可能性を否定できません。
VirusTotalのデータによると、4つのPromptSpyドロッパー検体はすべて、Webサイトmgardownload[.]comを通じて配布されました。しかし、分析時点では同サイトはすでに停止していました。
PromptSpyドロッパーをインストールして起動すると、m-mgarg[.]comでホストされたWebページが開きました。このドメインも停止していましたが、Googleのキャッシュ版から、Chase Bank(法的にはJPMorgan Chase Bank N.A.)のサイトになりすましている可能性が高いことが判明しました(図2を参照)。

このマルウェアは同様のブランディングを使用しており、アプリ名はMorganArg、アイコンはChase Bankを模倣したものとなっています(図3を参照)。「Morgan Argentina」の略語と思われるMorganArgも、キャッシュされたWebサイトの名前として表示されることから、この地域が標的であることが示唆されます。

m-mgarg[.]comドメインをVirusTotalでのピボットに使用したところ、さらに別のAndroidマルウェアの検体(Android/Phishing.Agent.M)にたどり着きました。VirusTotalは、なりすましのWebサイトをスペイン語で表示し、「Iniciar sesión」(ログイン)ボタンがあることから、このページは銀行のWebサイトを模倣したものと思われます(図4を参照)。
このトロイの木馬は、VNCSpyとPromptSpyの背後にいる同一の攻撃者によって開発されたコンパニオンアプリケーションとして機能すると見られます。バックグラウンドでは、トロイの木馬がサーバーに接続して設定ファイルを要求します。設定ファイルには、別のAPKをダウンロードするためのリンクが含まれており、被害者にはスペイン語で「更新」として提示されます。調査では設定サーバーにアクセスできなくなっていたため、正確なダウンロードURLは不明です。しかし、PromptSpyドロッパーと同じ銀行偽装サイト、アプリ名、アイコンを使用していること、そして特に重要な点として同じ開発者証明書で署名されていることを踏まえると、このアプリがPromptSpyのインストールへと被害者を誘導する初期段階として設計された可能性が強く疑われます。
VNCSpyとPromptSpyはどちらもVNCコンポーネントを含んでおり、被害者がユーザー補助サービスを有効にすると、オペレーターは侵害されたデバイスへの完全なリモートアクセスを得られます(図5を参照)。これにより、マルウェアのオペレーターは、デバイス上のすべての操作を監視し、あたかも物理的にデバイスを持っているかのようにタップ、スワイプ、ジェスチャー、テキスト入力を実行できます。

VNCSpyにすでに含まれている悪意のある機能に加えて、PromptSpyはAI支援型UI操作を追加します。これにより、悪意のあるアプリを「最近使ったアプリ」のリストにロックして常駐し続けます(リスト内でのロック表示の例は図6を参照)。

この機能は、VNCセッションが確立される前に、ユーザーまたはシステムが「最近使ったアプリ」のリストからPromptSpyの活動を強制終了させないように使用されると考えられます。図7は、PromptSpyとGemini AIの間のネットワーク通信を示しています。

PromptSpyの分析では、簡体字中国語で書かれたデバッグ文字列が含まれていることが明らかになりました。さらに、中国語のさまざまなユーザー補助イベントタイプの処理(図8を参照)、コードでは無効化されていたものの削除されていないデバッグメソッドも含まれています。このメソッドの主な目的は、Androidデバイスで発生するさまざまなユーザー補助イベントについて、ローカライズされた中国語の説明を提供することです。これにより、生の整数コードを表示するだけでなく、中国語話者のユーザーや開発者がイベントログを理解しやすくなります。

これらの詳細から、中程度の確度ではあるものの、PromptSpyが中国語圏の環境で開発されたことが示唆されます。
ESETの技術分析は、PromptSpyドロッパーとそのペイロードであるPromptSpyに焦点を当てています。PromptSpyは、ドロッパーのアセットディレクトリ内に埋め込まれています(app-release.apk)。このAPKが、中核となる悪意のある機能を保持しています。ドロッパーを起動すると、アプリの更新版と思われるものをインストールするよう促すプロンプトが表示されます。この「更新」は、実際にはPromptSpyペイロードであり、ユーザーは手動でインストールする必要があります(図9を参照)。

インストールされて起動したPromptSpyは、ユーザー補助サービスの権限を要求し、画面上のコンテンツを読み取ったり、自動クリックを実行したりする機能をマルウェアに付与します。

「Loading, please wait」画面がユーザーに表示されている間に、PromptSpyはユーザー補助サービスを使用して「最近使ったアプリ」画面を開き、詳細なUI情報(表示テキスト、コンテンツの説明、クラス名、パッケージ名、画面境界)を収集します。この動的UIスナップショットをXMLとしてシリアライズし、Geminiへのプロンプトに含めます。Geminiは、「アプリロック」ジェスチャーを実現する方法について、段階的なタップ指示を返します。
このプロセスは、以下の連続ループを形成します。
「最近使ったアプリ」でアプリが正常にロックされたことをGeminiが確認するまで、このループが続きます。構成例を以下に示します。
Geminiが提案されるすべての操作(タップ、スワイプ、ナビゲーション)は、ユーザー補助サービスを通じて実行されるため、マルウェアはユーザー入力なしにデバイスとやりとりできます。
PromptSpyの主な悪意のある機能は、組み込みのVNCサービス内にあります。これにより、攻撃者は被害者の画面をリアルタイムで遠隔監視し、デバイスを完全に制御できます。
マルウェアは、VNCプロトコルを使用して、ハードコードされたコマンドアンドコントロール(C&C)サーバー(54.67.2[.]84)と通信します。メッセージはハードコードされた鍵でAES暗号化されます。この通信チャネルを通じて、マルウェアは以下を実行できます。
PromptSpyはまた、削除を防止するメカニズムとしてもユーザー補助サービスを悪用します。ユーザーがペイロードのアンインストールやユーザー補助サービスの無効化を試みると、マルウェアは特定の画面領域(特にstop、end、clear、Uninstallなどのサブ文字列を含むボタン上)に透明な長方形を重ねます。こうしたオーバーレイはユーザーには見えませんが、操作を妨害するため、除去が難しくなります。図11では、開発者が残したデバッグフラグを有効にした状態でPromptSpyを実行しています。このフラグを有効にすると、本来は透明な長方形に色が設定され、具体的に表示される場所を可視化できます。ただし、実際のデバイスでは完全に不可視です。

PromptSpyが画面上に不可視要素を重ねてアンインストールを阻止するため、被害者がこれを削除する唯一の方法は、セーフモードでデバイスを再起動することです。セーフモードでは、サードパーティアプリが無効化され、正常にアンインストール可能になります。
セーフモードに入るには、通常、電源ボタンを長押しし、さらに「電源を切る」を長押して、「セーフモードで再起動」のプロンプトを確認する必要があります(正確な方法はデバイスやメーカーによって異なる場合があります)。セーフモードで再起動したら、「設定」→「アプリ」→「MorganArg」を選択し、干渉を受けることなくアンインストールできます。
PromptSpyは、Androidマルウェアの不穏な進化が始まっていることを浮き彫りにしています。画面上の要素を解釈し、操作方法を決定するために生成AIに依存することで、このマルウェアはほぼすべてのデバイス、画面サイズ、UIレイアウトに適応できます。ハードコードされたタップの代わりに、画面のスナップショットをAIに渡すだけで、正確な段階的な操作指示を受け取るので、UIの変更に耐性のある常駐化手法を実現しています。
より広い観点では、このキャンペーンは、生成AIがマルウェアをはるかに動的にし、リアルタイムの意思決定を可能にし得ることを示しています。PromptSpyは、生成AIを活用したAndroidマルウェアの初期の事例であり、攻撃効果を高めるために攻撃者がAIツールを迅速に悪用し始めている実態を物語っています。
ESET Japanブログ、WeLiveSecurityに掲載されているESETの研究に関するお問い合わせは、threatintel@eset.comまでご連絡ください。
ESETは、プライベートのAPTインテリジェンスレポートとデータフィードを提供しています。詳細は、ESET脅威インテリジェンスのページをご確認ください。
| SHA-1 | ファイル名 | 検出 | 説明 |
|---|---|---|---|
| 6BBC9AB132BA066F63676E05DA13D108598BC29B | net.ustexas.myavlive.apk | Android/Spy.VNCSpy.A | Android VNCSpyマルウェア。 |
| 375D7423E63C8F5F2CC814E8CFE697BA25168AFA | nlll4.un7o6.q38l5.apk | Android/Spy.VNCSpy.A | Android VNCSpyマルウェア。 |
| 3978AC5CD14E357320E127D6C87F10CB70A1DCC2 | ppyzz.dpk0p.ln441.apk | Android/Spy.VNCSpy.A | Android VNCSpyマルウェア。 |
| E60D12017D2DA579DF87368F5596A0244621AE86 | mgappc-1.apk | Android/Spy.PromptSpy.A | Android PromptSpyドロッパー。 |
| 9B1723284E311794987997CB7E8814EB6014713F | mgappm-1.apk | Android/Spy.PromptSpy.A | Android PromptSpyドロッパー。 |
| 076801BD9C6EB78FC0331A4C7A22C73199CC3824 | mgappn-0.apk | Android/Spy.PromptSpy.A | Android PromptSpyドロッパー。 |
| 8364730E9BB2CF3A4B016DE1B34F38341C0EE2FA | mgappn-1.apk | Android/Spy.PromptSpy.A | Android PromptSpyドロッパー。 |
| F8F4C5BC498BCCE907DC975DD88BE8D594629909 | app-release.apk | Android/Spy.PromptSpy.A | Android PromptSpy。 |
| C14E9B062ED28115EDE096788F62B47A6ED841AC | mgapp.apk | Android/Phishing.Agent.M | Androidフィッシングマルウェア。 |
| IP | ドメイン | ホスティングプロバイダー | 最初に確認された日付 | 詳細 |
|---|---|---|---|---|
| 52.222.205[.]45 | m-mgarg[.]com | Amazon.com, Inc. | 2026年1月12日 | フィッシングWebサイト。 |
| 54.67.2[.]84 | N/A | Amazon.com, Inc. | N/A | C&Cサーバー。 |
| 104.21.91[.]170 | mgardownload[.]com | Cloudflare, Inc. | 2026年1月13日 | 配布Webサイト。 |
この表は、MITRE ATT&CKフレームワークのバージョン18を使用して作成されています。
| 手法 | ID | 名前 | 説明 |
|---|---|---|---|
| 常駐化 | T1398 | ブートまたはログオン初期化スクリプト | PromptSpyは、デバイス起動時に動作を開始するため、BOOT_COMPLETEDブロードキャストインテントを受信します。 |
| T1541 | フォアグラウンドでの常駐化 | PromptSpyは、フォアグラウンドでの常駐化によりサービスを実行し続けます。 | |
| 防衛機能の回避 | T1516 | 入力の挿入 | PromptSpyは、ユーザー補助サービスを悪用し、その削除を阻止します。 |
| 認証情報へのアクセス | T1417.002 | 悪意のあるサードパーティーキーボードアプリ:GUIの入力情報の取得 | PromptSpyは、Androidのロック画面のPINとパスワードを傍受できます。 |
| 探査 | T1426 | システム情報の検出 | PromptSpyは、デバイス名、モデル、OSバージョンを取得します。 |
| 収集 | T1418 | ソフトウェアの検出 | PromptSpyは、インストールされたアプリケーションのリストを取得できます。 |
| T1513 | 画面キャプチャ | PromptSpyは、画面を録画できます。 | |
| C&C(コマンド&コントロール) | T1663 | リモートアクセスソフトウェア | PromptSpyは、VNCを使用して、侵害されたデバイスを遠隔操作できます。 |
| T1521.001 | 標準の暗号化プロトコル:対称暗号方式 | PromptSpyは、AESを使用してC&C通信を暗号化します。 | |
| 情報の外部への送信 | T1646 | C&Cチャネルからの送信 | PromptSpyは、収集したデータを自動的にC&Cサーバーに流出させることができます。 |