Seqrite Labsでの最近の調査で、.VBE(VBScriptエンコード)ファイルを介して拡散する、Masslogger認証情報窃取マルウェアの高度な亜種を特定しました。当初、この亜種は典型的なスクリプトベースの脅威のように見えましたが、詳細な分析の結果、悪意のあるペイロードの保存と実行にWindowsレジストリを多用する、多段階のファイルレスマルウェアであることが判明しました。
このブログ記事では、VBScriptコードの内部フロー、使用されている難読化メカニズム、そしてファイルレス状態を維持するためにシステムを操作する仕組みを分析しました。また、Stagersと最終的なMassloggerペイロードの機能についても説明しました。
初期感染経路:
感染は.VBEファイルから始まります。これはおそらくスパムメールやドライブバイダウンロードを介して拡散されたものです。.VBEファイルは、Microsoftの組み込みエンコード方式でエンコードされたVBScriptで、不用意な検査を検知します。デコードすると、スクリプトは多層的な難読化、モジュール化されたルーチン、そして真の機能を明らかにします。
デコードされた.VBS - [VBScript] ファイルの分析:
まず、.VBSファイルは、マルウェアが使用する特定のキーの下に複数のレジストリ値を準備し、書き込みます。これにより、ファイルレスペイロードを保存するための実行環境が構築されます。
レジストリキーと値の名前はハードコードされており、分かりやすいものです。しかし、重要な値データの一部はエンコードされたまま保存されておらず、ファイル実行時にデコードされます。
-コマンドとステージャー構成のレジストリ設定:
サブルーチンAKAAU()は、キーと値をレジストリに書き込む前に準備するために使用されます。値の名前と値データは、それぞれ「QORXG」と「ZBZLV」という別々の配列に格納されます。どちらの配列も「RegWrite」を使用してレジストリに書き込まれます。

システムが感染すると、レジストリ エディターで次の悪意のあるレジストリ エントリが見つかります。

以下は、レジストリ パス「HKCU\Software\」でシステムに書き込まれたレジストリ エントリの概要です。
| 値の名前 | 値のデータ | 製品概要 |
| cn | Stop-Process -Name conhost -Force | conhost.exe プロセスを強制的に終了します。 |
| i | 「AddInProcess32.exe」 | コード挿入の対象となるプロセス。 |
| in | "0" | PowerShell コマンドが既に実行されているかどうかを確認する制御フラグ。 |
| インスタント | LPICU | 難読化された PowerShell コマンド。難読化を解除し、Stager-1 をメモリに読み込みます。 |
| パス | esBbIgyFlZcXjUl | レジストリキーのパス名。「HKCU\Software\」の末尾に追加されます。 |
| r | ワジラ | 逆順に並べられた文字列形式で保存された .Net アセンブリ。Stager-2。 |
| s | RKFYI(DGSLP) | 64 進デコード文字列。逆順に Base1 形式で保存された .NET アセンブリ。Stager-XNUMX。 |
| v | ヒッコ() | PowerShell用の難読化コマンド。Stager-1の難読化を解除し、メモリに読み込みます。特にユーザー入力のシミュレーションに使用されます。 |
表1: 追加されたレジストリエントリの概要
これらのレジストリを書き込む前に、マルウェアは「ZGYHW()」というサブルーチンを呼び出し、ファイルが「C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” がその場所に存在します。
マルウェアは、その存在に応じて異なるバージョンのStagerを展開します。具体的には、このシナリオではStager-2が以下のようになります。

– 最終ペイロード展開のためのレジストリ設定:
上記のレジストリが設定され、書き込まれた後、別のサブルーチン「XSSAY()」が呼び出されます。この関数は、より大きな文字列データ(エンコードされたままのMassloggerの実際のペイロード)を読み取ります。このデータは25,000文字単位に分割され、セグメント化された形式で別のレジストリ値に書き込まれます。

各チャンクは、次のパスのレジストリに書き込まれます。
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*

-タスク スケジューラ:
マルウェアはWindowsのスケジュールタスクを介して永続性を確立し、システム内でマルウェアが継続的に実行されるようにします。タスクのトリガーは感染日(20xx-xx-xxT00:00:00)に開始され、1分ごと(PT1M)に繰り返されます。タスクはバッテリー関連の制限を無視して実行されるようにスケジュールされています。

タスクは作成されたレジストリキーと同じ名前を使用します。 esBbIgyFlZcXjUl .VBS ファイルの実行がトリガーされます。この .VBS ファイルは、ペイロードを実行する必要があるかどうかを示すレジストリが作成されているかどうかをチェックする永続的な実行ループとして機能します。
-タスクスケジューラスクリプト - ユーザー入力をシミュレート可能:
下の画像でわかるように:
- 約 10000 回実行され、各サイクルの間に 10 秒間スリープします。
- レジストリ値「i」を読み取ってプロセスの名前を取得し、実行中かどうかを確認します。
- 次にレジストリ値「in」が1に設定されているかどうかを確認します。
- はいの場合、レジストリに保存されている悪意のあるコマンドを「即時」実行します。
- 「in」の値が1に設定されていない場合。
- PowerShell を可視ウィンドウ モードで起動し、「.SendKeys」メソッドを使用して「v」および「cn」レジストリの値を入力し、その後に「{ENTER}」を押します。
- この手法は、PowerShell へのユーザー入力をシミュレートするようなものです。

要約表で見たように、
「cn」レジストリ conhost.exe プロセスの実行中のインスタンスを強制的に停止するために使用されます。
「インスタント」と「v」 レジストリは PowerShell として使用され、ディスクに触れることなく、メモリ内の Stager .Net アセンブリの難読化を解除し、準備して読み込みます。
システム保護ステータスを確認します。
マルウェアは標的システムの保護状態を確認し、実行中に検出されない可能性があります。これは、いくつかの重要なレジストリを照会することで行われます。以下は、AV/セキュリティ製品が通常その存在を記録するレジストリの一部です。
- 「HKLM\SOFTWARE\Microsoft\Security Center\Provider\Av」、
- 「HKLM\SOFTWARE\Microsoft\Security Center\Monitoring」
- 「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Security and Maintenance\Providers」、
- 「HKLM\SOFTWARE\Microsoft\Windows Defender\セキュリティセンター\プロバイダー」
これらのレジストリは、スクリプト内でエンコードされた形式で定義されています。マルウェアは上記のキーのサブキーを列挙し、「DisplayName」の値を読み取ろうとします。DisplayNameには、インストールされているアンチウイルス/セキュリティツールの名前が保持されます。標的のシステムに複数のセキュリティ製品がインストールされていることが判明した場合、マルウェアは実行を停止します。

-ステージャーのトリガー:
.VBEファイル内のサブルーチンSQSKP()は、マルウェア実行チェーンの重要な部分です。Windowsレジストリから取得した.NETステージャーをメモリ内で実行するPowerShellコマンドを動的に構築・実行します。

ここで、デコードされたテキストは、|path| を RVOYN に置き換えた後の難読化解除された PowerShell コマンドです。

図10からわかるように、
- この PowerShell コマンドが生成され、変数「LPICU」に割り当てられます。
- 変数の内容は、レジストリ キー「Computer\HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl」内に作成されたレジストリ値「\instant」に書き込まれます。
- 関数は構築された PowerShell コマンドをサイレントに実行します。ここで、「0」は PowerShell ウィンドウを非表示にします。
- 次に、PowerShell はレジストリ キー「HKCU\Software\esBbIgyFlZcXjUl\s」を読み取ります。このレジストリ キーには、信頼される Base1 エンコード形式で保存された Stager-64 が含まれています。

VIPKeylogger、Remcos、AsyncRAT など、最近の多くの認証情報窃取マルウェアでは、マルウェア作成者がこのエンコードの組み合わせを実装しているのが確認されています。
- PowerShellコマンドは文字列を反転して結合し、Base64文字列をデコードして、メモリ内の「[AppDomain]::CurrentDomain.Load()」関数を使用して.NETアセンブリとして読み込みます。このアプローチにより、マルウェアは以下のことが可能になります。
- 実際のマルウェア ファイルをディスクに書き込まないようにする (回避機能)。
- 実行時にペイロードを動的に構築してロードします。
- レジストリ パスを参照するエントリ メソッド「[vv]::v('esBbIgyFlZcXjUl')」を呼び出します。
さらなる分析のため、難読化解除されたStager-1ペイロードのダンプを取得しました。その結果、以下のことが分かりました。
Stager-1の分析:
Stager-1は、レジストリ「HKCU\Software\esBbIgyFlZcXjUl\s」にエンコードされた小さな実行ファイルです。.NETでコンパイルされており、サイズは約14KBです。
コードを分析したところ、ファイルは「r」という名前の別のレジストリ キー [HKCU\Software\esBbIgyFlZcXjUl\r] から内容を読み取ろうとしていることがわかりました。
これらの内容は反転され、別の .Net コンパイル済みバイナリ (stager-2) が形成されます。
このバイナリは「Assembly.Load()」によってメモリにロードされます。Stager-1はStager-2アセンブリ内のクラスr内のメソッドr()を見つけようとします。これがStager-2実行のエントリポイントとなります。

Stager-2の分析:
Stager-1のセットアップが完了すると、マルウェアはStager-2ローダーに進みます。この感染段階では、レジストリから実際のMassloggerペイロードを抽出し、標的のプロセスに挿入することに重点が置かれます。
Stager-2 は最初に、プロセスを起動してコード インジェクションを実行するための潜在的なファイル パスを構築します。
これらのパスのいずれかにファイル(名前はレジストリ値「i」から取得されます)が存在するかどうかを確認します。
私たちの場合、ターゲット ファイル/プロセス パスは次のとおりであることがわかりました。
「%WINDIR%\Microsoft.NET\Framework\v4.0.30319\AddInProcess32.exe」

さらに、マルウェアは、以前に確認した以下のレジストリの複数のレジストリ サブキーに (サブルーチン「XSSAY()」によって) 書き込まれた実際の Masslogger ペイロードを抽出します。
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*
クラス 'r' の BBX() 関数は、すべての値エントリを収集し、それらを連結し、結合された文字列を反転し、16進数から生のバイト列にデコードする役割を担います。この手法により、マルウェア作成者は複数のレジストリキーにまたがって完全なPEバイナリを隠すことができます。デコードされたペイロードは、プロセスハロウイングに使用されます。プロセスハロウイングは、関数 .XGP() を使用して実行されます。
これは、すべてをレジストリに保存し、実行にのみメモリを使用する賢い方法です。

-フランス特有のペイロード配信:
高度なマルウェアでは、被害者の所在地に基づいて動作を変更するために、地理情報をターゲットとしたペイロード配信が一般的になっています。この感染のStager-2は、現在のシステムの入力言語がフランス語「Fr」に設定されているかどうか、およびロケールに「France」が含まれているかどうかを確認します。

条件が満たされると、ハードコードされたURL(hxxps://144.91.92.251/MoDi.txt)から、特別に細工された追加ペイロードをダウンロードしようとします。分析時点では、このURLにはアクセスできませんでした。
-トレースを終了して終了する:
実行の最後に、マルウェアは conhost.exe および PowerShell.exe プロセスの実行中のインスタンスを強制的に終了します。

これらのプロセスを強制終了することで、マルウェアは自身の活動の痕跡を隠蔽しようとしていると考えられます。最後に、ProjectData.EndApp() を使用してアプリケーションを終了し、stager-2 のライフサイクルを完了します。
Masslogger 最終ペイロードの分析:
レジストリから最終ペイロードの難読化解除に成功すると、Masslogger は標的プロセス「AddInProcess32.exe」に注入されます。注入されたプロセスのメモリダンプには、このマルウェアのマーカーが以下のように確認できます。

マルウェアチェーンの最終段階を表すこのペイロードのメモリダンプを取得しました。このペイロードは、主要な認証情報、つまり情報窃取機能を実行する役割を担っています。
-データ収集:
多くのインフォスティーラー マルウェアと同様に、このマルウェアも複数の Web ブラウザーといくつかの電子メール クライアントをターゲットにして、保存されたユーザー名、パスワード、自動入力データなどの機密情報を盗みます。以下は、Masslogger がターゲットにしようとしている Web ブラウザーといくつかの電子メール クライアントのリストです。

マルウェアが Chrome ブラウザから保存されたログイン資格情報を収集しようとしているモジュールの 1 つを詳しく見てみましょう。

このマルウェアは、「ログインデータ」SQLiteデータベースにアクセスし、ユーザーのログインデータを特定します。ウェブサイトのURLと、それに対応するユーザー名およびパスワードを抽出し、今後の利用のために収集します。有効な認証情報が見つかった場合、ウェブサイト、ユーザー名、パスワードといった構造化された形式で保存されます。
ブラウザや電子メール クライアントを標的にして情報を盗むこと以外にも、Masslogger には次のような機能があります。
- キーロガーのアクティビティ。
- スナップショット ファイルを取得してクリアします。
- クリップボードのデータを取得します。
- GetForegroundWindow、GetWindowText などを呼び出して、ユーザー アクティビティを監視してみてください。
- IP アドレスや国などのシステムの詳細を読み取ります。
- 複数のファイルをサーバーにアップロードしています。
-データの抜き取り:
最終ペイロードの SpeedOffPWExport() メソッドは、収集した資格情報とシステム情報を FTP、SMTP、Telegram などの複数のチャネル経由でリモートの場所に送信することにより、データの流出を可能にします。
FTP が有効になっている場合、この方法では、ハードコードされた資格情報を使用して、盗まれたデータが .txt ファイルとしてリモート FTP サーバーにアップロードされます。

SMTP の場合、メッセージ本文または添付テキスト ファイルのいずれかにデータを含む電子メールを作成し、指定されたメール サーバーを使用して送信します。

Telegram の流出が有効になっている場合、被害者のユーザー名と IP を含むキャプションを含むデータが Telegram Bot API を使用してドキュメントとして送信されます。

まとめ:
Massloggerのファイルレス亜種は、情報窃取型マルウェアの進化する傾向を示しています。.VBEスクリプトを介して配信され、Windowsレジストリを悪用して実際の実行可能ペイロードを保存し、ディスクにアクセスすることなくそのペイロードを直接メモリにロードします。複数のブラウザやメールクライアントから保存された認証情報を収集し、複数のチャネル(FTP、SMTP、Telegramボット)を使用してデータを窃取する機能を備えています。
この亜種は、認証情報窃取型マルウェアがファイルレス化と複数段階(Stager-1、Stager-2)での動作へと移行していることを示しています。これは、従来のアンチウイルスやシグネチャベースの検出手法では対応が難しい課題です。これを克服するために、セキュリティ対策担当者は、行動検知やレジストリ異常の監視といった高度な検出メカニズムを導入する必要があります。
侵害の兆候 (IoC):
ファイル MD5:
.VBE: 29DBD06402D208E5EBAE1FB7BA78AD7A
.VBS: F30F07EBD35B4C53B7DB1F936F72BE93
Stager-1: 2F1E771264FC0A782B8AB63EF3E74623
Stager-2: 37F0EB34C8086282752AF5E70F57D34C
MassLogger Payload: 1E11B72218448EF5F3FCA3C5312D70DB
URL:
hxxps://144.91.92.251/MoDi.txt
Seqrite 検出:
スクリプト.trojan.49618.GC
トロイの木馬.MSIL
Trojan.YakbeexMSIL.ZZ4
MITER ATT&CK
| 戦略 | テクニックID | 技名 | サブテクニックID | サブテクニック名 |
| 初期アクセス | T1566 | フィッシング詐欺 | T1566.001 | スピアフィッシング添付ファイル |
| 実行 | T1059 | コマンドおよびスクリプト インタプリタ | T1059.005 | ビジュアルベーシック |
| 実行 | T1059 | コマンドおよびスクリプト インタプリタ | T1059.001 | PowerShellの |
| 固執 | T1053 | スケジュールされたタスク/ジョブ | T1053.005 | スケジュールされたタスク |
| 防衛回避 | T1140 | ファイルまたは情報の難読化解除/デコード | – | – |
| 防衛回避 | T1112 | レジストリを変更する | – | – |
| 防衛回避 | T1055 | プロセス射出 | T1055.012 | プロセス空洞化 |
| 防衛回避 | T1562 | 防御を弱める | T1562.001 | ツールを無効化または変更する |
| 防衛回避 | T1059 | コマンドおよびスクリプト インタプリタ | T1059.001 | PowerShellの |
| プーケットの魅力 | T1518 | ソフトウェアディスカバリー | T1518.001 | セキュリティソフトウェアの検出 |
| プーケットの魅力 | T1082 | システム情報の発見 | – | – |
| プーケットの魅力 | T1012 | クエリレジストリ | – | – |
| クレデンシャルアクセス | T1555 | パスワード ストアからの認証情報 | T1555.003 | Webブラウザからの認証情報 |
| クレデンシャルアクセス | T1056 | 入力キャプチャ | T1056.001 | キーロギング |
| 収集 | T1113 | スクリーンキャプチャ | – | – |
| 収集 | T1115 | クリップボードデータ | – | – |
| 収集 | T1056 | 入力キャプチャ | T1056.001 | キーロギング |
| 収集 | T1083 | ファイルとディレクトリの検出 | – | – |
| コマンドおよび制御 | T1071 | アプリケーション層プロトコル | T1071.001 | ウェブプロトコル |
| コマンドおよび制御 | T1071 | アプリケーション層プロトコル | T1071.002 | ファイル転送プロトコル |
| コマンドおよび制御 | T1071 | アプリケーション層プロトコル | T1071.003 | メールプロトコル |
| コマンドおよび制御 | T1105 | 入力ツール転送 | – | – |
| exfiltration | T1041 | C2チャネルを介した浸透 | – | – |
| exfiltration | T1567 | Web サービスを介した漏洩 | T1567.002 | クラウドストレージへの流出 |
| exfiltration | T1567 | Web サービスを介した漏洩 | T1567.001 | コードリポジトリへの流出 |



