AhnLab SEcurity intelligence Center(ASEC)は、韓国国内の VPN 会社のホームページにマルウェアがアップロードされていることを確認した。この攻撃は、マルウェアの配布方式や使用されたマルウェアなどの特徴から、2023年から韓国国内の VPN 会社を攻撃してマルウェアを配布していた攻撃者と同じ犯行と見られる。過去の事例において、攻撃者は最終的に SparkRAT、MeshAgent、Sliver のようなバックドアマルウェアをインストールし、感染システムを操作したが、最近、確認された攻撃事例でも類似した PDB パスを持つ MeshAgent が使用されている。今回、確認された攻撃事例は、過去とは異なり VPN 会社のホームページがその対象であり、過去の事例と同じく MeshAgent を使用することもあるが、NKNShell という名前のバックドアが新しく確認された。NKNShell は C&C サーバーとの通信時に NKN と MQTT というプロトコルを活用するのが特徴である。
- 韓国国内の VPN インストーラーに含まれて拡散している SparkRAT
- 韓国国内の VPN インストールから MeshAgent 感染へと続く攻撃事例の分析
- 韓国国内のプログラム開発企業を通じて拡散している Sliver C2
1.マルウェアの配布
韓国国内の VPN 会社のホームページでは、2025年11月現在でもマルウェアがダウンロードされる。ホームページからダウンロードした圧縮ファイルの解凍と実行を行うと、正常な VPN インストールと同時に PowerChell を利用して PowerShell スクリプトをダウンロードし、実行する。PowerShell スクリプトは様々なマルウェアをインストールするが、最終的に NKNShell という名前のバックドアと MeshAgent、そして gs-netcat がある。ここでは、それぞれの流れに従ってマルウェアを分析する。

図1. 韓国国内 VPN ホームページでのダウンロード
2. マルウェア分析
2.1. 偽装インストーラー

図2. フローチャート
偽装インストーラーは Go 言語で作成されたマルウェアであり、NVIDIA に偽装した無効な証明書で署名されている。実行時、仮想マシンかどうかをチェックするが、このルーチンは GoDefender のコードを持ち来て使用した。[1] その後、PowerShell ダウンロードコマンドを引数に、自身を子プロセスに実行する。このコマンドによって実行された子プロセスは、ダウンロードアドレスから PowerChell をダウンロードし、メモリにロードして Base64 でエンコードされたコマンドを実行する。
参考に、PowerChell は C/C++ で開発された PowerShell コンソールであり、AMSI のようなセキュリティ機能を無効化する。すなわち、攻撃者は PowerChell を利用してコマンドを実行しても、AMSI を活用するセキュリティ製品を通じて検知を回避することができる。PowerChell を通じて実行されるコマンドは、外部から「sql-auto.ps1」スクリプトをダウンロードして実行する機能を担う。
2.2. PowerShell Downloader スクリプト – 1 (sql-auto.ps1)
「sql-auto.ps1」スクリプトは、他のマルウェアをインストールする機能を担う Downloader である。後の事例でも取り上げるが、攻撃者は生成型 AI を利用してマルウェアを製作したものと見られるが、これは実行ファイル形式のマルウェアだけでなく、PowerShell スクリプトも同様である。

図3. AI で作成したものと推定されるコメント文字列
「sql-auto.ps1」は、機能が多様だが、コメントアウトされて動作しない部分も多数存在する。このスクリプトは、Windows Defender を無効化し、例外処理パスを登録し、BlackShell256 が開発した「Null-AMSI」スクリプトを実行して AMSI を回避しようと試みた。[2] 「sql-auto.ps1」の最も重要な機能は、外部から追加ペイロードをダウンロードすることである。ダウンロードするものは二つに分かれるが、一つは現在基準でコメントアウトされているが、SQLMap マルウェアをインストールすることであり、もう一つは、別の Downloader スクリプトである「install.ps1」をインストールすることである。
2.3. PowerShell Downloader スクリプト – 2 (install.ps1)
「install.ps1」スクリプトは、現在基準でコメントアウトされているが、「Invoke-NullAMSI」を利用して ETW(Event Tracing for Windows)を無効化する機能が含まれており、「Cleanup」という名前の WMI フィルターを登録して持続性を維持する。「Cleanup」フィルターは、内部に存在する実際の Downloader スクリプトを実行する機能を提供する。このようなプロセスが完了すると、以後マルウェアインジェクションの対象になるプロセスを終了し、そのスクリプトを直接実行する。

図4. 登録された WMI フィルターおよびコンシューマー
最終的に実行されるスクリプトは、15個の UAC Bypass 手法をサポートしているが、実際には使用されていない。サポートする機能は、それぞれ fodhelper.exe、slui.exe、silentcleaunp タスク、sdclt.exe、perfmon.exe、eventvwr.exe、compmgmtlauncher.exe、computerdefaults.exe、トークン操作、cmstp.exe 等、知られている UAC バイパス方式である。
スクリプトの実質的な機能は、ダウンロードであり、gs-netcat、MeshAgent、NKNShell バックドアのインストールを担う。参考に、NKNShell バックドアの場合、Microsoft Edge、メモ帳、計算機、ペイントのプロセスを実行してインジェクションする。
2.4. MeshAgent
MeshCentral は、オープンソースでありながら無料でリモートコントロールを提供する管理ツールである。MeshCentral が提供する MeshAgent は、コマンド実行やファイルダウンロードなどの各種システムコントロールコマンドだけでなく、VNC、RDP のようなリモートデスクトップ機能を提供する。攻撃者は、過去から MeshAgent を持続的に使用していることが特徴である。過去から攻撃に使用されてきた MeshAgent は、攻撃者が直接製作した形態であり、以下のような PDB 情報を持つ。
- C:\Users\anfdh\Downloads\MeshAgent-master\MeshAgent-master\Release\MeshService64.pdb
- C:\Users\anfdh\Downloads\MeshAgent-master (1)\MeshAgent-master\Release\MeshService64.pdb
- C:\Users\anfdh\Downloads\MeshAgent-master (2)\MeshAgent-master\Release\MeshService64.pdb
「new-ms.ps1」スクリプトは、「%LOCALAPPDATA%\svchost\services.exe」パスに MeshAgent をダウンロードし、同じパスに「services.msh」設定ファイルをともに置いて、当該設定を使用するようにした。設定ファイルには以下のように C&C サーバーのアドレスが含まれている。

図5. C&C サーバーのアドレスが含まれている設定ファイル
2.5. gs-netcat
Global Socket のツールの一つである gs-netcat は、GSRN(Global Socket Relay Network)という中継網を利用して通信する。gs-netcat は netcat の GSRN バージョンであり、内部網に位置していても設定したパスワードを利用して通信が可能である。
「gsocks.ps1」スクリプトは、「file.zip」圧縮ファイルをダウンロードして「c:\windows\linux」パスに解凍するが、ここには「cached.exe」という名前で gs-netcat が含まれている。また「windows.sh」を作成し、「bash.exe」を利用してこれを実行するが、「windows.sh」には gs-netcat のパスワードが設定されている。攻撃者は、このパスワードを通じて外部から感染システムにアクセスすることができる。すなわち、「gsocks.ps1」スクリプトは gs-netcat を利用したリモートシェルをインストールする機能を担っている。

図6. gs-netcat インストールパスおよび実行スクリプト
参考に「bash.exe」を利用した「windows.sh」スクリプトの実行振る舞いは、「Windows Linux System」という名前のタスクに登録され持続性が維持される。このほかにも gs-netcat のパスワードを含んだシステムの基本情報は PowerShell コマンドを通じて C&C サーバー、すなわち攻撃者に伝達される。

図7. ログ送信ルーチン
2.6. NKNShell
“PX.exe” という名前でインストールされ実行されるマルウェアは、Go 言語で作成されたバックドアである。Go 言語の関数や「NKN Shell Client」などの文字列から、マルウェア製作者が NKNShell と名付けたことが分かる。NKN は New Kind of Network の略で、ブロックチェーンベースの P2P ネットワークプロトコルである。実際のマルウェアは C&C サーバーとの通信に NKN プロトコルだけでなく、MQTT(Message Queueing Telemetry Transport)というメッセージングプロトコルも使用する。
NKNShell の特徴の一つは、製作者が AI を活用して製作したものと推定されるという点である。過去の PowerShell スクリプトと同様に、マルウェアのバイナリ内部には韓国語のコメントが含まれており、使用されている絵文字を見れば製作者が生成型 AI を活用したものと見られる。

図8. バイナリに含まれているコメント文字列
A. C&C 通信
Go 言語で製作された NKNShell は C&C サーバーとの通信過程で NKN と MQTT プロトコルを使用し、これを利用してコマンドを受け取る。C&C サーバーとの通信にブロックチェーンベースの P2P ネットワークプロトコルである NKN を使用した事例は過去にも存在するが、代表的なものに NKAbuse や[3] オープンソースマルウェア NGLite がある。[4] マルウェアは、固有の ID、すなわち NKN アドレスを生成したあと、これを活用して Seed ノードに接続し、その後バイナリにハードコーディングされているアドレスの攻撃者に収集した情報を送信する。

図9. Seed ノードへのリクエストパケット
NKNShell は C&C サーバーとの通信過程で、メッセージングプロトコルである MQTT も一緒に活用する。まず、以下のような MQTT ブローカーに接続するが、感染システムの Client ID は NKN で使用したものと同じように使用される。参考に、接続過程で特定のトピックに Will メッセージ(LTW:Last Will & Testament)を一緒に送信する。また、NKN プロトコル方式のように感染システムで収集した情報を送信する。これにより、以降そのトピックを購読していた攻撃者は感染システムに関する情報を収集することができる。
- MQTT ブローカーアドレス – 1:broker.emqx[.]io:1833
- MQTT ブローカーアドレス – 2:broker.hivemq[.]com:1833
- MQTT ブローカーアドレス – 3:broker.mqtt[.]cool:1833
- MQTT ブローカーアドレス – 4:broker.mosquitto[.]org:1833

図10. MQTT ブローカー接続過程でのパケット
参考に、NKNShell は Client ID を活用して MD5 を計算し、その値を文字列とするトピックを購読するが、攻撃者もまた Will メッセージで伝達された Client ID を通じて感染システムがどの MD5 文字列を持つトピックを購読するのかを知ることができる。すなわち、攻撃者はそのトピックにメッセージをパブリッシュすることによって、コマンドを伝達することができるだろう。
| 項目 | 情報 |
|---|---|
| arch | アーキテクチャ |
| cpuusage | CPU 使用量 |
| hostinfo | コンピュータ名 |
| isadmin | 管理者権限の有無 |
| lanip | IP アドレス |
| mac | MAC アドレス |
| num_cpu | CPU コアの個数 |
| os | OS |
| osinfo | OS 情報(Windows バージョン等) |
| pathinfo | マルウェアパス |
| ram | RAM 情報 |
| username | ユーザー名 |
| version | 1.0.7 |
| wanip | External IP |
Table 1. 送信する情報リスト
B. 対応するコマンド
NKNShell は NKN、MQTT を通じて以下のようなコマンドを受け取る。ほとんどのバックドアが対応している情報収集、リモート操作と関連した一般的なコマンドに対応し、一部は実装されていない。
| コマンド | 機能 |
|---|---|
| ps | プロセスリストの照会 |
| bof | BOF (Beacon Object File) 実行 |
| rem | Rem Proxy |
| ping | Ping |
| attack | DDoS 攻撃コマンド(tcp、udp、http flood) |
| config | 設定ファイルのダウンロード |
| command | コマンド実行 |
| sideload | DLL サイドローディング |
| spawndll | DLL メモリロード |
| file_list | ファイルリストの照会 |
| injection | コードインジェクション |
| migration | 実装されていない |
| clear_log | イベント、レジストリ、Prepatch ログの削除 |
| execution | コマンド実行 |
| disconnect | 接続解除 |
| execute_pe | メモリ上での PE 実行 |
| screenshot | スクリーンショット |
| codesigning | 実装されていない |
| steal_token | トークン窃取 |
| file_delete | ファイル削除 |
| file_upload | ファイルアップロード |
| file_execute | ファイル実行 |
| clone_session | クローンセッション |
| file_download | ファイルのダウンロード |
| inject_process | プロセスインジェクション |
| postmsf_cshrp | 実装されていない |
| set_encryption | メッセージの暗号化 |
| execute_csharp | アセンブリ実行 |
| python | Python スクリプトの実行 |
| get_systeminfo | アーキテクチャ、CPU、バージョン情報等、システム情報の収集 |
| ps_session_exec | PowerShell セッションの実行 |
| execute_assembly | アセンブリ実行 |
| impersonate_user | ユーザーの偽装 |
| ps_session_start | PowerShell セッションの開始 |
| ps_session_stop | PowerShell セッションの終了 |
| execute_shellcode | シェルコードの実行 |
| enumerate_sessions | セッション列挙 |
| execute_powershell | PowerShell 実行 |
| hijack_codesigning | コードサイニングに偽装 |
| migrate_cobaltstrike | 実装されていない |
| process_manipulation | プロセス操作(inject_dll, memory_dump, hijack_token, kill, resume, suspend) |
| execute_charp_bypass | 実装されていない |
| inject_system_process | システムプロセスインジェクション |
| spoof_microsoft_signature | 実装されていない |
表2. NKNShell がサポートするコマンド

図11. MQTT プロトコルで ping コマンドを受信
C. アップデート
NKNShell は一般的なコマンドによってアップデートするのではなく、別のインフラを活用する。追加の C&C サーバーや、匿名ブログのテレグラフ(telegra[.]ph、te.legra[.]ph、graph[.]org)を活用することが特徴であり、定期的にアドレスのうち1つをランダムに選択し、後ろに URL を付け加えたアドレスに接続する。
そのアドレスに接続すると、以下のように攻撃者がアップロードした Base64 文字列が表示される。Base64 の復号化を行うと、アップデートするマルウェアのペイロード アドレスを確認することができる。

図12. テレグラフにアップロードされたアップデートアドレス
2.7. SQLMap マルウェア
分析時点では PowerShell スクリプトではコメントアウトされていたが、「main.exe」すなわち SQLMap マルウェアは、実際の攻撃で使用されることもあった。SQLMap は、引数で渡された特定のアドレスを対象に、Web アプリケーションに対する SQL インジェクションの脆弱性をチェックしてくれるオープンソースツールである。SQLMap マルウェアが実行されると、同じパスに「sqlmap-win64」フォルダーに SQLMap ツールを作成する。

図13. SQLMap マルウェアの実行ログ
以降、別の C&C サーバーからスキャン対象のアドレスを受け取るものと推定され、特定の MQTT トピックに対して持続的にメッセージをパブリッシュしていることから、スキャン結果をそのトピックに送信するものと見られる。
3. 結論
近年、Larva-24010 攻撃者が韓国の VPN 業界のホームページを通じてマルウェアを配布しており、それによりその VPN のホームページからインストーラーをダウンロードして実行するとマルウェアがインストールされる場合がある。Larva-24010 攻撃者は少なくとも2023年から韓国の VPN ユーザーを対象にマルウェアを配布しており、最終的に MeshAgent、gs-netcat、NKNShell のような様々なバックドアマルウェアをインストールする。これにより、攻撃者はその VPN がインストールされた感染システムを操作し、感染システムに保存されているユーザーの機密情報を窃取することができる。
Categories: Uncategorized