新型VVS Stealerマルウェアが難読化されたPythonコードを介してDiscordアカウントを標的に
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
VVS Stealerは、Telegramで販売されている新しく観測されたPythonベースの情報スティーラーです。Pyarmorで難読化され、PyInstallerでパッケージ化され、Windowsのスタートアップフォルダ経由で持続化します。このマルウェアはDiscordトークン、ブラウザの資格情報、クッキー、履歴、パスワード、スクリーンショットを収集します。また、アクティブなDiscordセッションをハイジャックするために悪意のあるJavaScriptペイロードを注入することも可能です。
調査
Palo Alto Networks Unit 42は、このマルウェアを開示し、2025年4月から販売されていると指摘しました。研究者たちは、その難読化技術、配布モデル、資格情報の窃取やDiscord注入を含む機能を説明しました。このレポートは、スティーラーに焦点を当てたTelegramグループで活動するフランス語を話す脅威アクターにツールを関連付けています。
緩和策
組織は、未知のPyInstaller実行ファイルとスタートアップフォルダ内の予期しないショートカットを監視するべきです。難読化されたPythonスクリプトや疑わしいJavaScriptペイロードのエンドポイント検出ルールを展開します。Discordやブラウザアカウントに多要素認証を強制し、資格情報収集が悪用される可能性のある管理権限を制限します。
対応
VVS Stealerが検出された場合、影響を受けたエンドポイントを隔離し、メモリおよびファイルアーティファクトを収集し、IOCを抽出します。悪意のあるスタートアップエントリを削除し、注入されたDiscordプロセスを終了し、侵害されたアカウントのパスワードを強制的にリセットします。追加の盗まれた資格情報を見つけるために完全なフォレンジック調査を実施し、リモートC2インフラストラクチャがブロックされていることを確認します。
“graph TB %% Class definitions classDef action fill:#99ccff classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef technique fill:#ffff99 %% Nodes mal_vvs_stealer[“<b>マルウェア</b> – <b>VVS Stealer</b><br/><b>説明</b>: PyInstallerでパッケージ化され、PyArmorで難読化された情報スティーラー。”] class mal_vvs_stealer malware tool_pyinstaller[“<b>ツール</b> – <b>PyInstaller</b><br/><b>説明</b>: Pythonアプリケーションをスタンドアロンの実行ファイルにバンドルする。”] class tool_pyinstaller tool tool_pyarmor[“<b>ツール</b> – <b>PyArmor</b><br/><b>説明</b>: マルウェアのロジックを隠すためにPythonバイトコードを難読化する。”] class tool_pyarmor tool tech_T1027[“<b>手法</b> – <b>T1027 難読化されたファイルまたは情報</b><br/><b>説明</b>: 敵は悪意のあるコードを隠すために難読化を使用する。”] class tech_T1027 technique action_download_js[“<b>アクション</b> – 追加のJavaScriptペイロードをダウンロード”] class action_download_js action tech_T1027_006[“<b>手法</b> – <b>T1027.006 HTMLスモグリング</b><br/><b>説明</b>: 防御を回避するために悪意のあるコードをHTMLに埋め込む。”] class tech_T1027_006 technique tech_T1505[“<b>手法</b> – <b>T1505 サーバーソフトウェアコンポーネント</b><br/><b>説明</b>: 悪意のある活動を支えるために追加のサーバー側コンポーネントをインストールする。”] class tech_T1505 technique action_persistence[“<b>アクション</b> – スタートアップフォルダを介して持続性を確立する”] class action_persistence action tech_T1037_005[“<b>手法</b> – <b>T1037.005 スタートアップ項目</b><br/><b>説明</b>: ログオン時に実行されるようにユーザーのスタートアップフォルダに実行ファイルを配置する。”] class tech_T1037_005 technique tech_T1547[“<b>手法</b> – <b>T1547 ブートまたはログオンの自動実行</b><br/><b>説明</b>: ブートまたはログオン時に自動実行するプログラムを登録する。”] class tech_T1547 technique action_fake_error[“<b>アクション</b> – 偽の致命的なエラーポップアップを表示する”] class action_fake_error action tech_T1562_011[“<b>手法</b> – <b>T1562.011 セキュリティ警告の偽装</b><br/><b>説明</b>: 利用者を欺くために偽造のセキュリティ警告を表示する。”] class tech_T1562_011 technique action_screenshot[“<b>アクション</b> – スクリーンをキャプチャする”] class action_screenshot action tech_T1113[“<b>手法</b> – <b>T1113 スクリーンキャプチャ</b><br/><b>説明</b>: 被害者のデスクトップのスクリーンショットを記録する。”] class tech_T1113 technique action_browser_harvest[“<b>アクション</b> – ブラウザデータ(クッキー、パスワード、履歴)を収集する”] class action_browser_harvest action tech_T1555_003[“<b>手法</b> – <b>T1555.003 ウェブブラウザからの認証情報</b><br/><b>説明</b>: 保存された認証情報とクッキーをブラウザから抽出する。”] class tech_T1555_003 technique action_discord_hijack[“<b>アクション</b> – Discordクライアントを終了し、悪意のあるJavaScriptを挿入する”] class action_discord_hijack action tech_T1539[“<b>手法</b> – <b>T1539 ウェブセッションクッキーの盗難</b><br/><b>説明</b>: ブラウザからアクティブなウェブセッションクッキーを取得する。”] class tech_T1539 technique tech_T1134_003[“<b>手法</b> – <b>T1134.003 アクセストークンの操作</b><br/><b>説明</b>: 認証トークンを盗むまたは偽装する。”] class tech_T1134_003 technique action_c2_exfil[“<b>アクション</b> – ウェブベースC2を介してデータを流出させる”] class action_c2_exfil action tech_T1071_001[“<b>手法</b> – <b>T1071.001 アプリケーションレイヤープロトコル: ウェブプロトコル</b><br/><b>説明</b>: 標準的なウェブトラフィックを使用してコマンドと制御を行う。”] class tech_T1071_001 technique tech_T1102[“<b>手法</b> – <b>T1102 ウェブサービス</b><br/><b>説明</b>: データ流出のためにリモートサーバとウェブサービスを介して通信する。”] class tech_T1102 technique %% Connections mal_vvs_stealer u002du002d>|uses| tech_T1027 mal_vvs_stealer u002du002d>|packaged with| tool_pyinstaller mal_vvs_stealer u002du002d>|obfuscated with| tool_pyarmor mal_vvs_stealer u002du002d>|downloads| action_download_js action_download_js u002du002d>|uses| tech_T1027_006 action_download_js u002du002d>|uses| tech_T1505 action_download_js u002du002d>|establishes persistence via| action_persistence action_persistence u002du002d>|uses| tech_T1037_005 action_persistence u002du002d>|leverages| tech_T1547 action_persistence u002du002d>|displays| action_fake_error action_fake_error u002du002d>|uses| tech_T1562_011 action_fake_error u002du002d>|captures| action_screenshot action_screenshot u002du002d>|uses| tech_T1113 action_screenshot u002du002d>|harvests| action_browser_harvest action_browser_harvest u002du002d>|uses| tech_T1555_003 action_browser_harvest u002du002d>|targets Discord and injects JS| action_discord_hijack action_discord_hijack u002du002d>|uses| tech_T1539 action_discord_hijack u002du002d>|uses| tech_T1134_003 action_discord_hijack u002du002d>|exfiltrates via| action_c2_exfil action_c2_exfil u002du002d>|uses| tech_T1071_001 action_c2_exfil u002du002d>|uses| tech_T1102 “
攻撃フロー
検出
異常なディレクトリ内のPythonファイル作成(ファイルイベント経由)
表示
DiscordのC2チャンネルとしての可能性のある悪用(DNSクエリ経由)
表示
DiscordのC2チャンネルとしての可能性のある悪用(プロキシ経由)
表示
自動起動位置における疑わしいバイナリ/スクリプト(ファイルイベント経由)
表示
PyInstallerの利用の可能性(ファイルイベント経由)
表示
VVS Stealer PyInstallerパッケージおよびDiscord終了 [Windowsプロセス生成]
表示
シミュレーション実行
前提条件: テレメトリおよびベースラインのプレフライトチェックに合格していること。
根拠: このセクションは、攻撃者の手法(TTP)の正確な実行を説明し、検出ルールを発動するように設計されています。コマンドと説明は、識別されたTTPを直接反映し、検出ロジックによって期待された正確なテレメトリを生成することを目的とします。抽象的または無関係な例は、誤診につながります。
-
攻撃の説明およびコマンド:
攻撃者は、Windowsワークステーションで低権限ユーザーアカウントを侵害しました。PowerShellドロッパーを使用して、PyInstallerでパッケージ化された悪意のある実行ファイル(VVS_Stealer.exe)を起動し、まずコマンドラインに“PyInstaller”を含むプロセスを生成します。このペイロードは、その後トークンスティーリングの注入ステージに備えて実行中のDiscordクライアントを強制終了します。すべてのアクションは現在のユーザーコンテキストの下で行われ、一つの プロセス生成 イベントがルールの基準に一致する形で生成されます。ステップバイステップ:
- 悪意のあるPyInstallerバンドルを
%TEMP%. - にコピーします。
- “PyInstaller”という言葉を明示的に含むコマンドラインでそれを実行します。
その悪意のあるバイナリは内部的にその悪意のあるバイナリは内部的に - を呼び出してDiscordを終了します。 プロセス生成 終了は、
イメージフィールドがDiscordの実行ファイルパス(C:Users<user>AppDataLocalDiscordapp-... Discord.exe)に解決され、元の生成コマンドラインが“PyInstaller”を依然として含んでいる
- 悪意のあるPyInstallerバンドルを
-
イベントを生成します。 回帰テストスクリプト:
notepad.exeプロセスを起動しますが、 PyInstallerでパッケージ化された実行ファイルである かのように振る舞い、コマンドラインにキーワードを埋め込みます。また、Discordプロセスを終了して“Image endswith Discord.exe”という条件を模倣します。# ------------------------------------------------- # シミュレーションスクリプト – Sigmaルール #f63685c4-feea-431b-a749-55cf8661e6ac をトリガー # ------------------------------------------------- # 1. Discordが実行中であることを確認します(オプション、停止を保証するために)。 $discordPath = "$env:LOCALAPPDATADiscordapp-1.0.9005Discord.exe" if (-Not (Get-Process -Name "Discord" -ErrorAction SilentlyContinue)) { Start-Process -FilePath $discordPath -WindowStyle Hidden Start-Sleep -Seconds 5 } # 2. コマンドラインに「PyInstaller」を含むダミープロセスを起動します。 # 無害なプレースホルダとして、notepad.exeを使用。 $dummyCmd = "C:WindowsSystem32notepad.exe" $cmdLine = "PyInstaller_dummy_execution -run $dummyCmd" Start-Process -FilePath $dummyCmd -ArgumentList $cmdLine -WindowStyle Hidden Write-Host "[+] PyInstallerキーワードを含むダミープロセスを起動しました。" # 3. Discordをすぐに終了してDiscord.exeイメージイベントを生成します。 if (Get-Process -Name "Discord" -ErrorAction SilentlyContinue) { Stop-Process -Name "Discord" -Force Write-Host "[+] Discord.exeを終了しました。" } # 4. オプション: 短時間後にダミーのノートパッドウィンドウをクリーンアップします。 Start-Sleep -Seconds 8 Get-Process -Name "notepad" -ErrorAction SilentlyContinue | Stop-Process -Force Write-Host "[+] クリーンアップ完了。" -
クリーンアップコマンド: 以下のPowerShellスクリプトは、検出ルールを発動するために必要な正確なテレメトリを再現します。これは意図的に本物の悪意のあるペイロードを避け、代わりに無害な
残存プロセスが残っていないことを確認します。