Pythonベースのインフォスティーラー・ビルダーが確認されました。攻撃者はこのツールを使い、ブラウザーの認証情報、決済カード情報、セッションCookie、Discordトークン、Wi-Fiパスワード、さらに広範なシステム情報を盗み出す、カスタマイズ済みのWindows向けペイロードを生成できます。
このパッケージは単発の窃取ツールではなく、ビルダーのインターフェースと埋め込み型ペイロードで構成されています。Malware-as-a-Service(MaaS)の運用モデルに沿った設計です。
オペレーターは、攻撃者が管理するWebhookを設定し、コンパイル方式を選択して、配布用のWindowsバイナリーを個別に生成できます。
この設計により、アフィリエイト(実行役)はハッシュも情報送信先のインフラも異なる検体を展開できます。そのため、相関分析やシグネチャベースの検知は難しくなります。
ビルダーは起動時に、必要なPython依存パッケージを自動でインストールします。クリーンなPython環境で活動する犯罪者にとっては、セットアップの手間が減ります。
この挙動から、開発用ではないアプリケーションによる想定外のpip.exeの実行は、有用な検知シグナルになり得ます。

ペイロードは実行時にこの処理を逆に行います。これにより、コンパイル後の実行ファイル内にWebhookが平文で現れることはありません。
オペレーターは、NuitkaやPyInstallerでペイロードをビルドできるほか、マルウェアを生のPythonスクリプトとして保存することもできます。
特にNuitkaは注目に値します。PythonコードをC経由でネイティブな実行ファイルにコンパイルするため、Pythonバイトコードの復元ツールが役に立ちにくくなります。
ビルダーは、この方式をアンチウイルス回避に優れるものとして宣伝しているとされています。一方、PyInstallerで作成したパッケージは、展開して.pycバイトコードを復元できることが多くあります。
ビルダーはさらに、tkinter、matplotlib、numpy、pandasといった不要なPythonライブラリを除外します。これはファイルサイズを減らし、検知されやすさを抑える狙いがあるとみられます。
K7 Security LabsはGBhackersに共有したレポートで、このマルウェアは不審な入れ子構造のアーカイブから見つかったと説明しています。最初は「my new program called 2.rar」というRARファイルで、その中に「TokenGrabberBuilder.zip」というZIPアーカイブが含まれていました。
Pythonベースのインフォスティーラー
埋め込まれたペイロードはstealer.pyとして追跡されています。Windows向けに設計されており、少なくとも17種類のChromiumベースのブラウザーを標的とします。
インターフェースは、選択されたWebhookのアドレスをローカルのwebhook.txtファイルに保存し、その宛先を生成するスティーラーに埋め込みます。埋め込む前に、URLは0x5AのキーでXOR暗号化され、Base64でエンコードされます。

このマルウェアは、Login Data、History、Web Data、Cookiesといったブラウザーのデータベースにアクセスします。保存されたユーザー名やパスワード、閲覧履歴、決済カードの詳細情報、セッションCookieを収集します。
保護されたChromiumの認証情報を復号するために、マルウェアはLocal Stateファイルからブラウザーの暗号化マスターキーを取得し、Windows DPAPIを使用します。該当する場合は、続けてAES-GCMで復号します。
Firefoxも標的で、%APPDATA%\Mozilla\Firefox\Profiles配下のプロファイルディレクトリーを狙います。
スティーラーは、閲覧履歴を求めてplaces.sqliteを、セッションCookieを求めてcookies.sqliteを読み取ります。パスワードを直接盗めない場合でも、認証済みのWebセッションが悪用される恐れがあります。
マルウェアはさらにnetsh wlan show profilesを実行し、key=clearオプションを使って、保存されたWi-Fiの認証情報を平文で取得します。
また、DiscordのLevelDBストレージからトークンを探し、有効な可能性のあるトークンをDiscordのAPIで検証します。加えて、Robloxアカウントへの不正アクセスにつながり得る.ROBLOSECURITYCookieも探索します。
解析を妨害するため、スティーラーは機密性の高い文字列を、XORで暗号化したBase64エンコードデータとして保持します。リスクの高いモジュールは必要なときだけ動的に読み込み、WindowsのAPI IsDebuggerPresent()でデバッガーの有無も確認します。

仮想化関連のプロセスを検出した場合、ディスク容量が50GB未満だった場合、サンドボックスのような実行条件に遭遇した場合も、動作を終了します。
永続化のため、マルウェアはHKCU\Software\Microsoft\Windows\CurrentVersion\Runに、偽装したWindowsUpdateエントリーを書き込みます。さらにONLOGONのスケジュールタスクも作成します。
この二重の手法により、再起動後やユーザーのサインイン時に、ペイロードが再び起動する機会が複数確保されます。
収集したデータは、StolenData_<USERNAME>.zipという名前のメモリ上のアーカイブに圧縮されます。これにより、ディスクに残る痕跡は抑えられます。
アーカイブには、盗まれたブラウザーデータや無線LANのデータに加えて、パブリックIP情報、国、都市、ISP、座標、タイムゾーン、ユーザー名、ホスト名が含まれる場合があります。
その後、HTTP POSTリクエストでオペレーターが設定したWebhookに送信されます。
防御側は、次のような兆候に注意が必要です。ブラウザーの認証情報ストアへの不審なアクセス、通常とは異なるnetshによるWi-Fiプロファイルの照会、予期しないRunキーの変更、新規作成されたスケジュールタスク、異常なpip.exeの実行、信頼できないWebhookサービスへの外部向けアップロードです。
ビルドごとに設定データやハッシュが異なる可能性があるため、静的な指標だけに頼るより、振る舞いに基づく検知のほうが信頼性は高いとみられます。
侵害指標(IoC)
| ハッシュ | 検知名 |
| 610f0c65a3f8e88559f89ed90ea9ee5c | Password-Stealer ( 006dba241 ) |
| 429ed63ab3fbda8d22d0ac750ecfe8cc | Password-Stealer ( 006dba241 ) |
| 9ffe0e45c7a3f20e4481206c1c3b0854 | Trojan ( 006e632e1 ) |
注記: IPアドレスとドメインは、誤って名前解決されたりハイパーリンク化されたりするのを防ぐため、意図的に無害化(例:[.])しています。元の形式に戻すのは、MISP、VirusTotal、自社のSIEMといった管理された脅威インテリジェンス基盤の中に限ってください。
SOCのアラート調査を1件あたり21分短縮。即時のIOCコンテキストでSOCを強化し、迅速な対応を実現: SOCにTI Lookupを統合する
翻訳元: https://gbhackers.com/python-based-infostealer/