[6月|マルウェア解析レポート]最新のAgentTeslaマルウェアにおける多段階ロード構造と情報窃取手法の分析
サンズラボの脅威分析チームは、毎月マルウェアを選定して分析レポートを作成しています。
サンズラボの脅威分析チームは、毎月マルウェアを選定して分析レポートを作成しています。
専門的な分析で明らかになったマルウェアの特徴や脅威動向、関連情報を共有し、安全なサイバー環境の実現に貢献したいと考えています。
マルウェアに関する詳しい情報は、サイバー脅威インテリジェンスサービス <CTX> で確認できます。
1. 概要
AgentTeslaは、2014年頃の登場以来、進化を続けてきた情報窃取型マルウェアです。2024年にも世界で最も多く検出されたマルウェアのトップ10に入り、依然として高い危険性を持っています。特にフィッシングメールを通じて拡散し、さまざまな情報収集機能を組み合わせることで、企業と個人の双方に広範な被害をもたらしています。
今回分析したAgentTeslaは、AutoItスクリプトを用いたドロッパーで初期ロードを行います。ドロッパーは内包するシェルコードを復号してメモリにロードし、シェルコードはプロセスホロウイングによってインフォスティーラーのペイロードを実行します。この過程では明示的なファイル生成を最小限に抑え、実行フロー全体をメモリ内で処理して検知を回避します。また、静的解析を妨げるため、文字列の難読化、CRC32ハッシュを用いたAPIの動的解決、Export Tableの手動解析などのアンチ解析技術を採用し、スタートアップにVBSスクリプトを登録して永続化します。
システム環境の検出、認証情報の収集、キーロギング、SMTPによる情報流出など、AgentTesla系で共通して見られる機能を備えています。特に、Webブラウザーだけでなく、メールクライアント、VPN、FTPクライアントなど、多様なアプリケーションからユーザーの認証情報を幅広く窃取します。
本レポートでは、マルウェアの動作全体を「AutoItスクリプトによる初期ロード」「シェルコードの復号と実行」「インフォスティーラーによる情報収集と流出」の3段階に分け、各段階で用いられる技術的特徴と回避手法を詳しく説明します。これにより、最新のAgentTesla系マルウェアが用いる高度な検知回避技術を明らかにします。
2. マルウェア情報
分析対象のマルウェアは、"VALVES.bat" や "Project-Materials-RJ700-P73Q800-Technical-Details-pdf.txt" のような正常なファイルに見せかけて配布されていますが、実体はAutoItスクリプトを基にMicrosoft Visual C++でコンパイルされたPE実行ファイルです。内部には "Roca" と "underbalanced" という2つのバイナリリソースを含み、ユーザーが配布ファイルを実行すると、AutoItスクリプトがこれらを "%TEMP%" ディレクトリに展開・復号して、最終ペイロードを実行します。
AutoItで記述されたスクリプト "script.au3" は、感染チェーン全体の入口となり、実行時に内部のエンコード済みデータを復号して実行します。関数呼び出し、API名、文字列を分割したり、独自の関数で包んだりすることで静的解析を困難にしており、意味のない変数や関数も各所に挿入して解析を混乱させます。
.png)
[図1] 難読化されたAutoItスクリプト("script.au3")
"script.au3" の主な動作は次のとおりです。
① "Roca" と "underbalanced" のバイナリを "%TEMP%" ディレクトリにコピーします。
② "Roca" のバイナリを復号してメモリにロードし、オフセット9200から実行します。
"Roca" は復号後に実行されるx86シェルコードで、最終ペイロードであるインフォスティーラー "underbalanced" をメモリにロードする中間ローダーとして機能します。まず、ハードコードされたXORキーで "underbalanced" を復号し、対象プロセスを一時停止状態で生成して、復号したペイロードをプロセスホロウイングにより注入し、実行を継続します。
シェルコードはAPI呼び出し時に関数名を直接参照せず、CRC32ハッシュを用いて動的に解決します。そのためにPEB構造へ直接アクセスし、各DLLのExport Tableを手動で解析して必要なAPIアドレスを取得する、高度な回避手法も採用しています。デバッグの有無を検出する処理も含まれ、解析環境での実行を回避できます。永続化のため、"Roca" は初期配布ファイルを "eupolyzoan.exe" という名前で "%LOCALAPPDATA%\recomplaint" にコピーし、これを起動するVBSスクリプトをスタートアップフォルダーに作成して、システム起動時に自動実行されるよう設定します。
最終ペイロードの "underbalanced" は、Microsoft Visual C#で記述された.NET実行ファイルで、インフォスティーラーとして動作します。
コード内では、関数名と変数名を意味のない文字列に置き換え、不要な分岐や制御フローを挿入して静的解析を妨げています。

[図2] "underbalanced" の制御フロー操作と難読化の例
"underbalanced" は、感染システム上のWebブラウザー、メールクライアント、FTP/VPNクライアントなどに保存された認証情報に加え、システム情報とリアルタイムのキー入力ログを収集します。収集した情報をまとめてHTML形式に変換し、内部にハードコードされたSMTP送信先 "smt.treat@yandex.com" に送信することで、攻撃者が外部からリアルタイムに受信できるようにしています。
本レポートで取り上げたマルウェアの構成ファイルと役割を、次の表にまとめます。
ファイル名 | 説明と役割 |
|---|---|
VALVES.bat | 初期配布用の実行ファイル。AutoItスクリプトを実行 |
script.au3 | AutoItスクリプト。Rocaを復号してファイルレスでロード |
Roca | x86シェルコード。underbalancedの復号、プロセスホロウイング、スタートアップへの登録を実行 |
underbalanced | インフォスティーラー。情報を収集・流出 |
[表1] マルウェアの構成ファイルと役割
総じて、このマルウェアはAutoItドロッパー、x86シェルコードローダー、.NETインフォスティーラーを階層的に組み合わせた多段階の感染構造を持っています。ファイルの偽装、メモリ内実行、アンチ解析技術、プロセスホロウイングなどを巧みに組み合わせ、検知を回避しながら不正な動作を継続する高度な事例と評価できます。
3. マルウェアの動作フロー
攻撃者は、"VALVES.bat" や "Project-Materials-RJ700-P73Q800-Technical-Details-pdf.txt" のような正常なファイルに偽装した実行ファイルを配布します。ユーザーがこれを実行すると、まず内部に含まれるAutoItベースのドロッパー "script.au3" が動作します。
"script.au3" は、内包する2つのリソース "Roca" と "underbalanced" を "%TEMP%" にコピーします。その後、独自の復号ルーチンで "Roca" を復元し、オフセット9200からメモリ内で直接実行します。この段階は実行ファイルを生成せず、ファイルレスで処理することで解析を回避します。
復号された "Roca" は、初期配布ファイルを "eupolyzoan.exe" という名前でコピーし、そのコピーを起動してから現在のプロセスを終了します。
続いて "eupolyzoan.exe" は、"%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup" に自身を起動するVBSスクリプト "eupolyzoan.vbs" を作成します。これにより自動起動に登録され、システムの再起動後も不正な動作を継続できます。
その後、"eupolyzoan.exe" は "underbalanced" をメモリにロードし、ハードコードされたキーを使ってXORで復号します。そして、注入先となる正常なプロセス "svchost.exe" または "RegSvcs.exe" を生成し、復号した "underbalanced" をプロセスホロウイングで注入して、最終ペイロードをひそかに実行します。
"underbalanced" が実行されると、次の情報を収集します。
- Webブラウザー、メール、FTP、VPNクライアントに保存されたログイン認証情報
- ユーザー名、コンピューター名、OS名、CPUモデル名、メモリ容量
- キー入力ログ
収集した情報はHTML形式にまとめられ、外部のSMTP送信先 "smt.treat@yandex.com" に送信されます。

[図3] マルウェアの動作フロー
4. マルウェア解析
4.1. AutoItスクリプトによる初期ペイロードのロード
初期実行ファイルは、AutoItで記述されたスクリプト "script.au3" を基に動作するドロッパーで、スクリプト全体が難読化されています。関数名、文字列、API名はいずれも文字列の連結や独自関数の呼び出しで構成され、AutoItの標準関数 "Call" も分割された文字列を通じて実行されます。VirtualProtectなどの主要APIは、暗号化された数値配列を平文に戻してから呼び出すことで、静的解析を妨げています。本分析では、この難読化を手動で解除し、機能ごとにスクリプトを再構成して説明します。
.png)
[図4] 難読化されたAutoItスクリプトの例("script.au3")
スクリプトは "%TEMP%" に "Roca" を作成し、ファイル全体を読み込んでから独自の復号ルーチンを実行します。この処理では、文字列を "' & '" という区切りで分割し、それぞれを数値に変換した後、-5¹の演算を適用して再び文字に戻します。この過程で、メモリ上の "Roca" の元のバイナリを復元します。
¹ 4294967291は、2の補数表現では-5に相当します。

[図5] 独自の復号関数
"Roca" の復号後、スクリプトは同様の方法で "underbalanced" も "%TEMP%" に作成します。続いて、復号済みの "Roca" が置かれたメモリ領域に読み取り・書き込み・実行権限を付与し、オフセット9200をエントリーポイントとしてCallWindowProc APIを呼び出し、メモリ内で直接実行を開始します。"Roca" をディスクに保存したり、独立したPE実行ファイルとして起動したりする従来の方法とは異なり、コード全体をメモリ上で直接実行する典型的なファイルレス手法です。これにより、セキュリティ製品の検知を回避し、システムに実行痕跡を残さないようにします。

[図6] VirtualProtectによる権限付与とCallWindowProcの呼び出し
4.2. Rocaシェルコードによるインフォスティーラーのロードと実行
復号された "Roca" はx86シェルコードであり、インフォスティーラーのペイロード "underbalanced" をメモリにロードして実行する中間ローダーとして機能します。

[図7] 復号された "Roca" のエントリーポイントコード
"Roca" は静的解析を回避するため、Windows APIの関数名をコードに直接記述せず、CRC32ハッシュによる動的解決を用います。DLLのPE構造にあるExport Tableを直接解析し、各関数名のハッシュ値を計算して、目的のハッシュ値と一致する関数のアドレスを特定します。
"Roca" が動的に解決するAPIは次のとおりです。
- "kernel32.dll": 37個のAPI関数
- "user32.dll": 1個のAPI関数
- "advapi32.dll": 3個のAPI関数
- "shlwapi.dll": 1個のAPI関数
- "shell32.dll": 2個のAPI関数
API関数のアドレスを特定するため、「Roca」はまずPEB(Process Environment Block)にアクセスし、ロード済みDLLのリストを走査して「BaseDllName」の値を比較し、各DLLのImageBaseアドレスを取得する。

[図8]PEB構造を通じたロード済みDLLのベースアドレスの取得
続いて各DLLのExport Tableを解析し、関数名テーブル、関数アドレステーブル、Ordinalテーブルに基づいて関数名を走査し、CRC32ハッシュ値を比較して最終的に関数アドレスを特定する。

[図9]Export Tableの解析によるAPIアドレスの動的取得
「Roca」はアンチデバッグ機能も備えている。Sleep(500ms)を呼び出した直後に実際の経過時間を測定し、0.5秒より短い場合はデバッグ環境と判断してプロセスを終了する。

[図10]デバッグ検知ロジック
その後、「Roca」は実行中のプロセス「VALVES.bat」を「eupolyzoan.exe」という名前で「%LOCALAPPDATA%\recomplaint」にコピーし、そのコピーを実行する。

[図11]「eupolyzoan.exe」の作成に使用するパラメーターの設定

[図12]実行中の「VALVES.bat」の内容をメモリに読み込む処理

[図13]「eupolyzoan.exe」への「VALVES.bat」バイナリの書き込み
作成された「eupolyzoan.exe」は「VALVES.bat」のコピーであり、同じロジックを繰り返すが、内部の条件分岐で自身がコピーであると認識し、実行フローを切り替える。その後、スタートアップフォルダー(「%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup」)に自身を起動する「eupolyzoan.vbs」を作成し、システム起動時に自動実行されるよう設定する。
生成されるVBSスクリプトの内容は次のとおりである。
Set WshShell = CreateObject("WScript.Shell") WshShell.Run "C:\Users\<사용자명>\AppData\Local\recomplaint\eupolyzoan.exe ", 1 Set WshShell = Nothing |
この方法はレジストリではなくVBSファイルを使用して永続化を実現するため、一部のセキュリティ製品による検知を回避できる。
続いて「eupolyzoan.exe」は「underbalanced」をメモリにロードし、内部にハードコードされたキー「X0OHZLDCON3SG6XP92NOHLNH」を使用してXOR方式で復号する。復号が完了すると、次のいずれかの正規プロセスを一時停止状態で作成し、復号した「underbalanced」を注入してプロセスホロウイングを行う。
- "C:\Windows\System32\svchost.exe"
- "C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegSvcs.exe"
- "C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe"
作成したプロセスでは、元々ロードされていた実行ファイルをアンマップし、復号した「underbalanced」を新たにメモリへマッピングしてセクション情報を再構成する。その後、エントリーポイントを変更してプロセスを再開し、マルウェアの実行を開始する。この一連の処理は、ディスクに別途痕跡を残さず、正規プロセス内部に悪意のあるコードを隠して実行することで検知を回避する。つまり「Roca」は単なるシェルコードではなく、インフォスティーラーを実行するための復号、プロセスホロウイング、永続化などを担う多機能ローダーとして動作する。

[図14]既存メモリのアンマップとunderbalancedのマッピング

[図15]エントリーポイントの変更とプロセスの再開
4.3. underbalancedインフォスティーラーによる情報収集と外部送信
4.3.1. 環境に応じた回避とアンチ解析手法
「underbalanced」は情報の収集と外部送信に先立ち、さまざまな解析回避手法を実行する。HTTPS通信の証明書検証を無効化して通信の安定性を確保するとともに、デバッグ、仮想環境、システム時刻の操作の有無を確認して実行環境を点検する。これらの検知結果に応じてプログラムが終了したように装い、解析を妨害する。
まず、.NET通信時にサーバー証明書の有効性を検証するServerCertificateValidationCallbackに、常にtrueを返すコールバック関数を登録し、HTTPS証明書を無条件に信頼させる。これにより、無効な証明書や自己署名証明書も問題なく受け入れられる。また、SSL3からTLS 1.2までのプロトコルを使用するよう設定し、攻撃者のC2サーバーと安定して通信できるようにする。この構成からは、検知回避に加え、証明書エラーによる接続失敗を防ぐ意図もうかがえる。

[図16]証明書検証の回避ロジック

[図17]HTTP通信で使用するセキュリティプロトコルの設定
続いて実行環境を5つの条件で確認し、1つでも該当するとApplication.Exit()を呼び出して、プログラムが終了したように装う。ただし、この呼び出しは実際の終了にはつながらず、Application.Run()などの実行ルーチンとの接続も存在しない。つまり、解析者にプログラムが終了したと誤認させる仕掛けであり、Application.Exit()の呼び出し後も内部の悪意ある動作は停止せず継続する。実行環境の確認項目は次のとおりである。

[図18]実行環境の確認ロジック
① デバッグ環境の検知
CheckRemoteDebuggerPresent APIを呼び出し、現在のプロセスにデバッガーが接続されているかを確認する。接続されている場合は解析環境と判断する。
[図19]デバッグ環境の検知ロジック
② ホスティング環境の検知
外部API「http://ip-api.com/line/?fields=hosting」を呼び出し、応答が「true」の場合はホスティング環境と判断する。

[図20]ホスティング環境を検知するAPIの呼び出し
③ システム時刻操作の検知
Thread.Sleep(10)の呼び出し前後でシステムのTick値を比較する。経過時間が10L²より短い場合、Sleep関数がフックされているか時刻が操作されたと判断し、解析環境とみなす。
² 10L = 1,000ns

[図21]時刻操作の検知
④ 解析ツール関連DLLの検知
次のDLLのいずれかがプロセスにロードされている場合、解析環境と判断する。
- "SbieDll.dll" (Sandboxie)
- "SxIn.dll" (360 SOFTWARE)
- "Sf2.dll" (Avast)
- "snxhk.dll" (Avast)
- "cmdvrt32.dll" (Comodo Container)
⑤ 仮想マシンの検知
WMIクエリでシステムの製造元とGPU情報を確認する。以下の条件のいずれかを満たすと、仮想環境と判断する。
- 「Win32_ComputerSystem.Manufacturer」が「Microsoft Corporation」であり、「Win32_ComputerSystem.Model」に「VIRTUAL」が含まれる
- 「Win32_ComputerSystem.Manufacturer」または「Win32_ComputerSystem.Model」に「vmware」または「VirtualBox」が含まれる
- 「Win32_VideoController.Name」に「VMware」と「VBox」が同時に存在する(ただし、この条件には論理的な誤りが含まれる)
これらの検知ロジックは、解析ツールや仮想環境への露出を認識し、解析を回避するための防御戦略である。
特に、実行を停止したように見せかける方法は、実際の悪意ある動作の解析を困難にする。
4.3.2. システム情報の収集
「underbalanced」はまず感染したシステム固有の識別情報を収集する。最優先でハードウェアベースの識別子であるHWIDを生成し、そのために次の3つの値を取得する。
- マザーボードのシリアル番号:「Win32_BaseBoard.SerialNumber」
- CPU固有ID:「Win32_Processor.ProcessorId」
- MACアドレス:「Win32_NetworkAdapterConfiguration.MACAddress」(IPEnabledプロパティがtrueである最初のアダプターが対象)
これらの値を連結して固有のHWIDを生成し、被害者を識別する情報として利用できるようにする。

[図22]HWID生成のためのシステム固有識別子の収集とハッシュ処理
併せて、次の実行関連情報を取得し、内部変数に格納する。
- 現在実行中のプロセスのフルパス
- ハードコードされたディレクトリと実行ファイルのパス
- ログイン中のユーザー名とコンピューター名
設定によっては、外部APIにリクエストを送り、その応答も追加で収集できる。この機能が有効な場合、設定済みの外部APIへHTTPリクエストを送信し、応答内容を保存する。ただし、本レポートで解析したサンプルではこの設定が無効になっており、実際のリクエストは発生しなかった。
このように各種識別情報を収集することで、後の条件付きコマンド実行、システムの識別、被害者の追跡などに利用する基盤を整える。

[図23]実行ディレクトリとユーザー情報の保存構造
4.3.3. 認証情報の収集
「underbalanced」は、感染したシステム上のWebブラウザー、メールクライアント、FTPクライアント、VPNなど、さまざまなアプリケーションに保存された認証情報を収集する。まず、ログイン情報を保存するブラウザーのユーザープロファイルを特定するため、内部にハードコードされたパスに基づいてChromium系およびMozilla系ブラウザーを登録する。登録対象のブラウザーは次のとおりである。
- Chromium系ブラウザー
Opera Browser, Yandex Browser, Iridium Browser, Chromium, 7Star, Torch Browser, Cool Novo, Kometa, Amigo, Brave, CentBrowser, Chedot, Orbitum, Sputnik, Comodo Dragon, Vivaldi, Citrio, 360 Browser, Uran, Liebao Browser, Elements Browser, Epic Privacy, Coccoc, Sleipnir 6, QIP Surf, Coowon, Chrome, Edge Chromium
- Mozilla系ブラウザー
Firefox, SeaMonkey, Thunderbird, BlackHawk, CyberFox, K-Meleon, IceCat, PaleMoon, IceDragon, WaterFox, Postbox, Flock
これらのパスは、後でブラウザーの認証情報を抽出する際の基準パスとして使用される。

[図24]ブラウザープロファイルのパスを登録するロジック
続いて、認証情報収集器のリストにアプリケーション別の収集器を登録する。収集対象のアプリケーションは次のように分類される。
- Webブラウザー
Chromium, Mozilla, Internet Explorer/Edge, UC Browser, QQ Browser, Safari, Falkon
- メールクライアント
Outlook, Windows Mail, The Bat!, Becky!, IncrediMail, Eudora, Claws Mail, FoxMail, Opera Mail, Mailbird, eM Client, PocoMail
- FTPクライアント
FileZilla, WinSCP, CoreFTP, FlashFXP, FTP Navigator, SmartFTP, WS_FTP, FTP Commander, FTPGetter
- VPNおよびセキュリティソフトウェア
OpenVPN, NordVPN, Private Internet Access
- その他のアプリケーション
Windows Credential Store, VNC, Discord, Trillian, Psi, MySQL Workbench, Internet Download Manager(IDM), JDownloader

[図25]認証情報収集器の登録と実行フロー
すべての収集器を登録した後、各収集器を順に実行して保存済みの認証情報を抽出する。収集器はアプリケーションごとの設定ファイル、データベース、構成ファイルなどから認証情報を探し、収集結果をリストに蓄積する。
_%EB%A9%94%EC%84%9C%EB%93%9C_%EC%8B%A4%ED%96%89.png)
[図26]登録済み収集器の走査とGrab()メソッドの実行
収集した認証情報のリストはHTML形式の文字列に変換され、SMTPで外部サーバーに送信される。
ルーチン全体に例外処理が組み込まれているため、一部の収集器でエラーが発生しても収集処理全体には影響しない。この構造は、さまざまな環境で安定して情報を収集し、アプリケーションから認証情報を効率的に抽出できるように設計されている。
4.3.4. SMTP送信による情報の持ち出し
「underbalanced」は、収集した認証情報とシステム情報を外部SMTPサーバーに送信する。まず、次のシステム情報を収集し、HTML形式の文字列にまとめる。
- 現在時刻
- ユーザー名とコンピューター名
- オペレーティングシステム名
- CPUモデル名
- メモリ容量
- 公開IPアドレス(条件付き)
続いて、収集した認証情報とシステム情報を含むHTMLコンテンツから拡張子.htmlのファイルを作成し、添付ファイルとして使用する。ファイル名は「PW_사용자명/컴퓨터명_yyyy_MM_dd_HH_mm_ss.html」形式で指定され、メール本文は付けず、添付ファイルのみを送信する。
SMTP送信の設定は内部にハードコードされ、次の固定値が使用される。
- 送信者アカウント: "airlet@nffplp.com" / 送信者 パスワード: "$Nke%8XIIDtm"
- 受信者アカウント:「smt.treat@yandex.com」
SMTP送信にはポート587を使用し、TLSによる保護接続(STARTTLS)を介して通信する。
この際、システムに保存された認証情報は使用せず、コードにハードコードされたアカウント情報でSMTPサーバーにログインする。

[図27]SMTPサーバーとの通信とSTARTTLSコマンドによるTLSへの切り替え
このように、マルウェアは窃取したデータを攻撃者の外部SMTPサーバーへ送信する機能も備えている。送信に使用するメールアドレスとSMTP認証情報はすべてハードコードされており、解析当時、実際に稼働中のSMTPサーバーとの通信痕跡も確認された。
4.3.5. キーロギングと定期的な情報送信
「underbalanced」は、システム全体のキー入力をリアルタイムで監視するキーロギング機能を実行する。
ユーザーのすべての入力を記録し、定期的に外部サーバーへ送信する。まずSetWindowsHookEx APIを呼び出してシステム全体のキーボード入力を傍受し、コールバック関数でキーの値を文字列に変換して記録する。入力値はキーの種類に応じて次の規則で処理される。
- 通常キー:「a」「1」など(CapsLockとShiftの状態を反映し、大文字・小文字を正確に記録)
- 方向キー:{KEYUP}, {KEYDOWN}, {KEYLEFT}, {KEYRIGHT}
- ファンクションキー:{F1} ~ {F12}
- 制御キー:{CTRL}, {ALT+TAB}, {ALT+F4}, {Win}
- 編集キー:{BACK}, {TAB}, {DEL}, {Insert}
- 入力キー:{ENTER}, 空白(Space)
- その他:{ESC}, {CAPSLOCK}, {HOME}, {END}, {PageUp}, {PageDown}, {NumLock}
- ウィンドウが切り替わると、フォーカスされたウィンドウのタイトルも記録
マルウェアは30分ごとにキー入力ログを送信する。この定期送信処理は次の順序で繰り返される。
① まず「%TEMP%\log.tmp」が存在するかを確認する。
② ファイルが存在しない場合、現在収集済みのキー入力ログとシステム情報をHTML形式にまとめ、「KL_사용자명/컴퓨터명_yyyy_MM_dd_HH_mm_ss.html」形式のファイル名でSMTP送信を試みる。
③ 送信に失敗すると、キー入力データをHTML形式に変換して「log.tmp」に保存する。
④ 「log.tmp」が存在する場合は、まずその内容とシステム情報をHTMLファイルにまとめ、同じファイル名形式でSMTP送信する。
⑤ 送信に成功すると「log.tmp」を削除する。
⑥ 続いて現在収集済みのキー入力ログも同じ名前形式でSMTP送信を試み、失敗した場合は再び「log.tmp」に保存する。

[図28]キーロギング情報のSMTP送信フロー
クリップボード監視機能も含まれるが、有効化は設定値によって決まる。
この機能が有効な場合、クリップボードの内容が前回から変わったときだけ値を記録し、HTML解釈エラーを防ぐため「<」「>」などの文字をエスケープする。また、スクリーンショット取得機能はコード内に設定値のみが存在し、実際の画像収集・送信ルーチンは実装されていない。そのため、この機能は無効であり、コード構造上は存在しても実際の動作は発生しない。
一方、キーボード入力監視は、特殊キーの区別やウィンドウ切り替えの検知など、詳細なロジックを含む精巧な構造になっている。この構成は、攻撃者が視覚情報よりもユーザー自身の入力情報を重視していることを示す。つまり、ログイン時に入力するアカウント情報(ID/PW)、メールの作成内容、社内メッセンジャーでの会話、URLなど、機密性の高いテキスト情報の収集が目的である。
5. 収集・外部送信される情報
分類 | 詳細情報 | 対象プログラム/技術 |
|---|---|---|
Webブラウザー | - URL - ID - パスワード | # Chromium Opera Browser,Yandex Browser,Iridium Browser,Chromium,7Star,Torch Browser,Cool Novo,Kometa,Amigo,Brave,CentBrowser,Chedot,Orbitum,Sputnik,Comodo Dragon,Vivaldi,Citrio,360 Browser,Uran,Liebao Browser,Elements Browser,Epic Privacy,Coccoc,Sleipnir 6,QIP Surf,Coowon,Chrome,Edge Chromium # Mozilla Firefox,SeaMonkey,Thunderbird,BlackHawk,CyberFox,K-Meleon, IceCat,PaleMoon,IceDragon,WaterFox,Postbox,Flock # その他 Internet Explorer Microsoft Edge, UCBrowser, QQBrowser, Safari, Falkon |
メールクライアント | - サーバーアドレス - ユーザーのメールアドレス - パスワード | Outlook, WindowsMail, TheBat, Becky, IncrediMail, Eudora, ClawsMail, FoxMail, OperaMail, PocoMail, EmClient, Mailbird |
FTPクライアント | - FTPサーバーアドレス+ポート - ユーザー名 - パスワード | FileZilla, WinScp, CoreFtp, FlashFxp, FtpNavigator, SmartFtp, WSFtp, FtpCommander, FTPGetter |
VPN | - VPN識別子 - ユーザー名 - パスワード | OpenVpn, NordVpn, PrivateInternetAccess |
その他のプログラム | # Windows, Psi, MySqlWorkbench, IDM, JDownloader - 対象サービス - ユーザーアカウント - パスワード # Vnc - 接続用パスワード - VNCプログラム名 # Discord - Discord認証トークン # Trillian - アカウント名 - パスワード | Windows Credential Store, Vnc, Discord, Trillian, Psi, MysqlWorkbench, IDM, JDownloader |
基本システム情報 | - ユーザー名 - コンピューター名 - 現在時刻 - オペレーティングシステム - CPUモデル - システムのメモリ容量 | . |
キー入力情報 | - ユーザーが入力したキーの値 | キーボードフックAPI |
6. 結論
本レポートで解析したマルウェアは、AutoItベースのドロッパー、x86シェルコードローダー、.NETベースのインフォスティーラーからなる多段階構造を備えた、精巧な情報窃取型マルウェアである。実行時の実ファイル作成を最小限に抑え、メモリ上でのロードとプロセスホロウイングによって悪意のあるペイロードを隠して実行し、検知を回避する。さらにスタートアップへの登録などで永続化を確保し、認証情報収集やキーロギングなどによって各種情報を収集して外部へ送信する。
解析の結果、構造と動作全般においてAgentTesla系マルウェアとの高い類似性が確認された。
具体的な共通点は次のとおりである。
✅ 多段階のロード構造でインフォスティーラー本体を実行し、ファイルレス手法を使用する
✅ インフォスティーラーが.NETで記述されている
✅ Webブラウザー、メールクライアント、VPNなど、多様なアプリケーションの認証情報を収集する
✅ 収集情報をHTMLベースの形式にまとめ、.htmlファイルを作成する
✅ 「PW_사용자명/컴퓨터명_yyyy_MM_dd_HH_mm_ss.html」形式のファイル名を使用する
✅ ハードコードされたアカウント情報を使用してSMTPで外部送信する
これらの類似性は単なる機能の一致を超えており、AgentTeslaの亜種またはカスタムビルドと判断する根拠となる。そのため、初期配布の手段も、AgentTeslaで多用されるフィッシングメールによる攻撃である可能性が高い。
マルウェアは収集データを外部SMTPサーバーへ送信するが、送信元アカウントの「airlet@nffplp.com」はタイの食品会社の公式ドメイン(「nffplp.com」)に登録されたメールアドレスである。Webサイトを確認したところ、このドメインは当時も正常に運営されていた。攻撃者が実在する企業のメールアカウントを侵害し、SMTP認証に悪用した可能性が高い。

[図29]攻撃者に悪用されたとみられる正規企業のドメイン「nffplp.com」
受信者は「smt.treat@yandex.com」で、ロシアのポータルサイトYandexのドメインに登録されたメールアカウントである。
Yandexはロシアで最も広く利用されるポータルサイト兼検索エンジンである。このメールアカウントの利用者はロシア語環境に慣れている可能性が高く、攻撃者の国籍や活動地域を推定する間接的な手がかりと解釈できる。

[図30]受信者のメールアカウントが登録されたYandexのログイン画面
結論として、このマルウェアは情報窃取だけでなく、検知回避、永続化、正規ドメインを利用した外部送信経路の偽装まで備えた高度なインフォスティーラーである。AgentTesla系で継続的に観測されてきた典型的な技術的特徴を数多く持ち、今後もさまざまな亜種として再登場する可能性が高い。
特に、正規企業のメールサーバーを外部送信経路として悪用する方法は、セキュリティ製品の検知を回避する戦略と考えられる。情報収集から窃取に至るまで、高度な手法を利用した状況が明確に表れている。同様の脅威に備えるには、SMTP送信の異常動作を監視する仕組みの強化など、先回りした検知体制を整える必要がある。
また、このマルウェアはサンズラボのCTXプラットフォームでも「exe.trojan.autoit」という検知名で識別されており、関連する実行ファイルと各種IoC情報を
確認できる。確認されたIoCには、悪性ファイルのハッシュ、関連IPアドレス、通信に使用されたドメインなどが含まれ、類似サンプルの検知や追跡に活用できる。

[図31]サンズラボCTXで「exe.trojan.autoit」として検知された悪性ファイルと関連IoC情報
7. IoC情報
7.1. SHA-256ハッシュ
52AC94D05D81C00FAA5FFB989BA1B631B88790DEB41F8F982C120FBA5754F4D3 | VALVES.bat / eupolyzoan.exe |
2528904D8CF3D26B81573B487BFD63F8DC052CB2A9F4A1B9A643FBD9B6C4BDA5 | Roca |
ABC3718AD048C24D81C4C4CDFD42205C9C180EB38C193C98427AD30A5D0B736D | underbalanced |
4C74DEF4B786FD0F26C3D635A0A305F301E6275064400A2153A355A8EB40F934 | eupolyzoan.vbs |
7.2. IP
TCP 163.44.198.71:587
7.3. ドメイン
nffplp.com
7.4. SMTP
airlet@nffplp.com (PW: $Nke%8XIIDtm)
7.5. ファイルのドロップ先パス
C:\Users\<사용자명>\AppData\Loca\Temp\Roca
C:\Users\<사용자명>\AppData\Loca\Temp\underbalanced
C:\Users\<사용자명>\AppData\Loca\recomplaint\eupolyzoan.exe
C:\Users\<사용자명>\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\eupolyzoan.vbs


