攻撃グループAPT-C-60による攻撃のアップデート

以前のJPCERT/CC Eyesで、正規サービスを悪用した攻撃グループAPT-C-60による攻撃について紹介しましたが、JPCERT/CCでは引き続き同様の攻撃活動を国内で確認しています。今回は、2025年6月から8月にかけて確認した攻撃について、前回からのアップデートを中心に以下の項目について解説します。

  • 攻撃の流れ
  • ダウンローダーおよびSpyGlaceのアップデート
  • SpyGlaceのエンコード関数、通信方式
  • 使用されたデコイ文章
  • GitHubリポジトリの分析

攻撃の流れ

JPCERT/CCが確認した攻撃は、2024年8月ごろに発生した攻撃と同様に、求職者を装い組織の採用担当に宛てた標的型攻撃メールでした。攻撃の流れを図1に示します。昨年の攻撃ではGoogle DriveからVHDXファイルをダウンロードさせる方式が使用されていましたが、今回の攻撃では悪性のVHDXファイルが直接添付ファイルとして送られていました。メールの受信者がVHDXファイル内に含まれているLNKファイルをクリックすることで、正規ファイルであるGit経由で悪性のスクリプトが動作します。

図1:マルウェア感染の流れ


LNKファイルによって次に示すgcmd.exe(Gitの正規ファイル)が実行され、VHDXファイル内に格納されているスクリプトのglog.txtが動作します。

P:\LICENSES.LOG\mingw64\bin\gcmd.exe "cd .\LICENSES.LOG\mingw64\bin && type glog.txt | gcmd.exe" && exit

Gitによって実行されるスクリプトはデコイ文書の表示、ファイルの作成、実行を担い、作成されたWebClassUser.dat(以降Downloader1と表示)は次に示すレジストリへ登録され、COMハイジャッキングによって永続化および実行されます。

HKCU\Software\Classes\CLSID\{566296fe-e0e8-475f-ba9c-a31ad31620b1}\InProcServer32

DownLoader1およびDownLoader2のアップデート

攻撃者による被害端末の把握を目的として、Downloader1はstatcounterという正規の統計サービスに対して一定間隔で通信を行います。そのリクエストヘッダーは次のフォーマットで作成されます。以前のバージョンと比較し、ボリュームシリアル番号コンピュータ名を使用して被害端末を識別している点が異なります。

Referer: ONLINE=>[Number1],[Number2] >> [%userprofile%] / [VolumeSerialNumber + ComputerName]

また、Downloader1はボリュームシリアル番号コンピュータ名によるファイル名と検体内に含まれているURLを組み合わせ、次のフォーマットのパスを作成し、通信を行います。

https://raw.githubusercontent.com/carolab989/class2025/refs/heads/main/[VolumeSerialNumber + ComputerName].txt

攻撃者がstatcounterへ通信されたリファラの値を確認し、その被害端末に対応した"[VolumeSerialNumber + ComputerName].txt"をGitHubへアップロードするとDownLoader1がそのファイルを取得します。その取得したファイルに記載されているURLを元に次のDownloader2のダウンロードおよび実行が行われます。 さらに、"[VolumeSerialNumber + ComputerName].txt"にはダウンロード先URLを指定するだけでなく、表1のコマンドを実行することが可能です。例えば、"1*"の場合、statcounter.comへGETリクエストを送る間隔をデフォルトの1時間から6時間へ変更することが可能になり、攻撃者による被害者環境のチェックをより慎重に行う意図がうかがえます。

表1 ダウンローダーのコマンド
Command Contents
"1*" Change the interval settings
"0" or "40" Reset the interval settings
"http*" Download DLL

なお、以前のバージョンと同様に取得したファイルは"sgznqhtgnghvmzxponum"を鍵としたXORデコード後に実行されます。

DownLoader2はSpyGlaceおよびそのローダーをダウンロードし、実行する機能を持っています。APIの動的解決手法にはADDとXORをベースとしたエンコード方式が使用されていますが、以前のバージョンから値が変更されており、add 0x04した後、XOR 0x05する方式となっています。なお、SpyGlaceのLoaderについても同様のエンコード方式となっています。以前のバージョンと同様にDownLoader2が取得したファイルは"AadDDRTaSPtyAG57er#$ad!lDKTOPLTEL78pE"を鍵としたXORデコード後にCOMハイジャッキングによって実行されます。

SpyGlaceのアップデート

JPCERT/CCではVersion 3.1.12、3.1.13、3.1.14の3つのバージョンのSpyGlaceを確認しています。2024年に確認したVersion 3.1.6と比較すると、コマンドprockillproclistは何もしないよう変更されており、また、新しいコマンドuldが追加されています。コマンドuldはロードしたモジュールの特定の関数を呼び出した後、2秒後にアンロードする機能となっています。モジュールをアンロードする際、特定の関数を実行する必要があるモジュールの場合に本コマンドの機能が必要と考えられます。また、screenuploadコマンドでは、スクリーンショット関連モジュールと思われるファイルパスおよびExport関数名が次のパスへと変更されていることを確認しています。本モジュールClouds.db自体は未確認のためどのような機能かはわかりませんが、スクリーンショットコマンド関連のモジュールと考えられます。なお、実装されているコマンドの一覧はAppendix Dを参照ください。

File path: %LocalAppData%\Microsoft\Windows\Clouds\Clouds.db
Export Function: mssc1

確認したVersion 3.1.12、3.1.12、3.1.14における差分はほとんどありませんが、それぞれMutexの値が異なる点や、これまで%public%\AccountPictures\Default\だった自動実行パスがVerison 3.1.14からは%appdata%\Microsoft\SystemCertificates\My\CPLsと変更されている点を確認しています。

なお、2025年9月にVersion3.1.14を使ったキャンペーンについて解説した記事[1]が公開されていますが、使用されたGitHubリポジトリなどは重複していないため、国外などで確認された別の攻撃キャンペーンと考えられます。

SpyGlaceのエンコード関数と通信方式の詳細

SpyGlaceの特徴であるエンコード方式は1バイトのXORとSUB命令を組み合わせたものが使用されており、マルウェアが使用する文字列や動的なAPIの解決などに多用されています。また、SpyGlaceのコマンドの一つである"Download"コマンドでは暗号化されたファイルがダウンロードされますが、復号には次のKEYとIVを使用したAES128-CBCにて復号され、%temp%\wcts66889.tmpのファイルパスに作成されることを確認しています。ダウンロードコマンドのコードの一部を図2に示します。

KEY: B0747C82C23359D1342B47A669796989
IV: 21A44712685A8BA42985783B67883999

図2:ダウンロードコマンドのコードの一部


SpyGlaceはC2サーバーとの通信にBASE64とRC4を使用しますが、その初期通信におけるリクエストヘッダーのフォーマットを次に示します。なお、a001の値に使用されるuseridである"GOLDBAR"という文字列はPositive Technologiesによる報告[2]や昨年の日本における攻撃の際に使用された文字列と同一であり、ターゲット地域やキャンペーンを指している可能性があります。また、エンコード方式について、少なくともVersion 3.1.6以降のSpyGlaceでは改変されたRC4が使用されています。

a001=[md5("GOLDBAR")]&a002=[md5(systeminfo)]&a003=["uid" or "info"]&a004=[BASE64(CustomRC4([ComputerName;UserName;CpuInfo;OS Version;SpyGlace Version]))]

改変されたRC4はKSAのサイクルを増やす点やXORする値に加算を行うなどの点が通常のRC4とは異なり、次に示すPythonスクリプトでデコードすることが可能です。

import base64

def CustomRC4(key: bytes, data: bytes) -> bytes:
    # --- KSA ---
    S = list(range(256))
    n = 3
    for round in range(n):
        j = 0
        keylen = len(key)
        if keylen == 0:
            raise ValueError("key must be non-empty")
        for i in range(256):
            j = (j + S[i] + key[i % keylen]) & 0xFF
            S[i], S[j] = S[j], S[i]

    # --- PRGA ---
    i = j = 0
    out = []
    for b in data:
        i = (i + 1) & 0xFF
        j = (j + S[i]) & 0xFF
        k = S[(S[i] + j) & 0xFF]
        S[i], S[j] = S[j], S[i]
        k2 = S[((S[((i >> 3) ^ (0x20 * j)) & 0xFF] + S[((0x20 * i) ^ (j >> 3)) & 0xFF]) ^ 0xAA) & 0xFF] + S[(S[j] + S[i]) & 0xFF]
        out.append( (b ^ k ^ k2) & 0xFF )
    return bytes(out)


def decode(base64in):
    key = b"90b149c69b149c4b99c04d1dc9b940b9"
    decoded = CustomRC4(key, base64.b64decode(base64in))
    print("Result: ", decoded)

使用されたデコイ文章

今回の攻撃で使用されたデコイ文章の一部を図3に示します。採用担当者をターゲットとしているため、作成された履歴書には研究者を装った経歴を載せており、経歴に複数の論文が記載されていますが、それら論文の著者にはメール送付者の名前は記載されていません。なお、その履歴書の本人の名前はメールの差出人のGmailのアカウント名とある程度一致しており、攻撃者は本攻撃のためにアカウントを取得した可能性があります。

図3:使用されたデコイ文章の一部


GitHubリポジトリの分析

攻撃者はペイロードの配布にGitHubを使用している関係で、リポジトリが削除されない限り、過去に配布されたペイロードをすべて取得することが可能です。表2にアップロードしたSpyGlaceとアップロードされていた期間の対応関係を示します。

表2 各バージョンにおけるGitHubにアップロードされた日時
SpyGlace Version Upload Date & Time
Version 3.1.12 Fri Jun 27 14:33:28 2025 +0900
Version 3.1.13 Thu Jul 3 18:25:18 2025 +0900
Version 3.1.14 Wed Jul 16 15:03:52 2025 +0900

なお、攻撃者が管理しているGitHubリポジトリへのコミットログに記載されたメールアドレスおよびボリュームシリアル番号コンピュータ名からなる被害端末情報を確認しています。それらの情報を参考としてAppendix E、Fにそれぞれ記載します。

おわりに

APT-C-60による攻撃はこれまでの傾向と同様に日本などの東アジア地域を中心に攻撃が行われています。攻撃の内容はBitbucketからGitHubへとインフラを移行した点やマルウェアのアップデートなど変更点は確認できるものの、正規のサービスを使った点やマルウェアの挙動など変わらない部分も多いため、これまでの傾向を踏まえ引き続き注意が必要です。確認したマルウェアの通信先やハッシュ値については、Appendixに記載していますのでそれぞれご確認ください。なお、通信先については正規のサービスも含まれるため、ご注意ください。

インシデントレスポンスグループ 増渕 維摩

参考情報

[1] Sangfor 【高级威胁追踪(APT)】深入分析“伪猎者”组织Github仓库加密载荷
https://mp.weixin.qq.com/s/A1UhFfqnGRLsEZywvaQA4A

[2] Positive Technologies DarkHotel. A cluster of groups united by common techniques
https://global.ptsecurity.com/en/research/pt-esc-threat-intelligence/darkhotel-a-cluster-of-groups-united-by-common-techniques/

Appendix A:IoC Network

  • https[:]//c.statcounter[.]com/13139439/0/1ba1a548/1/
  • https[:]//raw.githubusercontent[.]com/carolab989/class2025//refs/heads/main/
  • https[:]//raw.githubusercontent[.]com/football2025/class2025//refs/heads/main/
  • https[:]//raw.githubusercontent[.]com/fenchiuwu/class2025/refs/heads/main/
  • http[:]//raw.githubusercontent[.]com/Ridgley22387/r834829jf/refs/heads/main/datapages.txt
  • http[:]//raw.githubusercontent[.]com/Ridgley22387/r834829jf/refs/heads/main/datautils.txt
  • https[:]//bitbucket[.]org/clouds999/glo29839/downloads/
  • https[:]//raw.githubusercontent[.]com/goldbars33/ozbdkak33/refs/heads/main/
  • https[:]//185.181.230[.]71/wkdo9/4b3ru.asp
  • https[:]//185.181.230[.]71/wkdo9/t1802.asp
  • https[:]//185.181.230[.]71/wkdo9/n3tb4.asp
  • https[:]//185.181.230[.]71/wkdo9/2qpmk.asp

Appendix B:IoC File

表3 ファイル一覧
Content Filename Hash(SHA256)
Malicious VHDX CV & Professional Experience.vhdx f42d0fa77e5101f0f793e055cb963b45b36536b1835b9ea8864b4283b21bb68f
Malicious LNK Resume.rtf.lnk 25f81709d914a0981716e1afba6b8b5b3163602037d466a02bc1ec97cdc2063b
Part of Downloader1 wic60.ds ea37dfa94a63689c1195566aab3d626794adaab4d040d473d4dfbd36f1e5f237
Part of Downloader1 wic400.ds a80848cf7d42e444b7ec1161c479b1d51167893f47d202b05f590ad24bf47942
Part of Downloader1 wic900.ds 1e931c8aa00b7f2b3adedc5260a3b69d1ac914fe1c022db072ed45d7b2dddf6c
Dropper Script glog.txt c9c6960a5e6f44afda4cc01ff192d84d59c4b31f304d2aeba0ef01ae04ca7df3
Downloader1 WebClassUser.dat f102d490ad02b1588b9b76664cd715c315eaab33ac22b5d0812c092676242b15
DownLoader2 WebCacheR.tmp.dat 57a77d8d21ef6a3458763293dbe3130dae2615a5de75cbbdf17bc61785ee79da
DownLoader2 WebCacheR.tmp.dat 9e30df1844300032931e569b256f1a8a906a46c6a7efa960d95142d6bea05941
git.exe(Legitimate) gcmd.exe 96312254d33241ce276afc7d7e0c7da648ffe33f3b91b6e4a1810f0086df3dba
SpyGlace version 1.3.12 datautils.txt 669c268e4e1ced22113e5561a7d414a76fcd247189ed87a8f89fbbd61520966a
SpyGlace version 1.3.13 datautils.txt f96557e8d714aa9bac8c3f112294bac28ebc81ea52775c4b8604352bbb8986b8
SpyGlace version 1.3.14 datautils.txt 8b51939700c65f3cb7ccdc5ef63dba6ca5953ab5d3c255ce3ceb657e7f5bfae8
SpyGlace Loader datapages.txt d535837fe4e5302f73b781173346fc9031d60019ea65a0e1e92e20e399a2f387
SpyGlace Loader datapages.txt 6d8a935f11665850c45f53dc1a3fc0b4ac9629211bd4281a4ec4343f8fa02004
Downloader2 coninst3110.dat d287dc5264fd504b016ec7e424650e2b353946cbf14d3b285ca37d78a6fda6f4
Loader constart3110.dat 10278a46b13797269fd79a5f8f0bc14ff1cc5bc0ea87cdd1bbc8670c464a3cf1
Downloader1 ingredient.txt 156df8c8bea005bd7dc49eb7aca230ef85ada1c092e45bb3d69913d78c4fa1f9
Loader Scrpt UsrClass.sct 7ae86f2cb0bbe344b3102d22ecfcdda889608e103e69ec92932b437674ad5d2f
Loader Scrpt UsrClass.sct e8b3b14a998ce3640a985b4559c90c31a5d7465bc5be5c6962e487172d3c9094
Loader intersection.txt 09fcc1dfe973a4dc91582d7a23265c0fd8fc2a011adb2528887c1e1d3a89075a
Downloader opinsfile.dat 048b69386410b8b7ddb7835721de0cba5945ee026a9134d425e0ba0662d9aee4
Loader constafile.dat f495171e7a10fb0b45d28a5260782a8c1f7080bd1173af405476e8d3b11b21b6
Downloader coninsfile.dat 8ea32792c1624a928e60334b715d11262ed2975fe921c5de7f4fac89f8bb2de5
Malicious VHDX CV & Professional Experience.vhdx 94ccdaf238a42fcc3af9ed1cae1358c05c04a8fa77011331d75825c8ac16ffd8
Dropper Script volumelog.txt 299d792c8d0d38d13af68a2467186b2f47a1834c6f2041666adafc626149edaf
Part of Downloader1 vol60.dot ea37dfa94a63689c1195566aab3d626794adaab4d040d473d4dfbd36f1e5f237
Part of Downloader1 vol400.dot 94f6406a0f40fb8d84ceafaf831f20482700ee1a92f6bca1f769dff98896245c
Part of Downloader1 vol900.dot 45c1c79064cef01b85f0a62dac368e870e8ac3023bfbb772ec6d226993dc0f87
Downloader1 UsrClassCache.dat 50b40556aa7461566661d6a8b9486e5829680951b5df5b7584e0ab58f8a7e92f
Malicious LNK Resume.rtf.lnk 5da82fa87b0073de56f2b20169fa4d6ea610ed9c079def6990f4878d020c9d95

Appendix C:IoC Other

表4 その他のIoC
Content Value
Mutex K31610KIO9834PG79A90B
Mutex K31610KIO9834PG79AD7B
Mutex K31610KIO9834PG79A44A
CLASSID {566296fe-e0e8-475f-ba9c-a31ad31620b1}
CLASSID {64B8F404-A4AE-11D1-B7B6-00C04FB926AF}
File path %userprofile%\AppData\Local\Microsoft\Windows\WebClassUser.dat
File path %localappdata%\Microsoft\Windows\WebCache\WebCacheR.tmp.dat
File path %userprofile%ppdata\local\Microsoft\GameDVR\data\GameList.dat
File path %userprofile%ppdata\local\Microsoft\GameDVR\data\DataCache.dat
File path %temp%\wcts66889.tmp
File path %localappdata%\Microsoft\Windows\UsrClassCache.dat
File path %localappdata%\Microsoft\Windows\UsrClassLib.dat
File path %userprofile%ppdata\local\Microsoft\Edge\cache\Config.dat
File path %userprofile%ppdata\Local\Microsoft\Windows\UsrClassCache.dat
File path %userprofile%ppdata\local\Microsoft\Edge\cache\Cache.dat

Appendix D:Commands

表5 SpyGlaceのコマンド一覧
Command Contents
turn on Change the interval settings
turn off Reset the interval settings
cd Change directory
ddir List of the files in the directory
ddel Delete file and directory
ld Load module
uld unload module
attach Start module
detach Stop module
procspawn Start process
prockill None
proclist None
diskinfo Get disk information
download Download encrypted file
downfree Download file
cancel Remote shell
screenupload Upload screenshot
screenauto Upload screenshot automatically
upload Upload file

Appendix E:Email address used for the commit

kithatart@outlook.com
magnolia099@163.com
carolab989@proton.me
fenchiuwu@proton.me
Ridgley223870@proton.me

Appendix F:Victimized devices identified from the GitHub repository

1014988494f04da28046ba
1020301627MBE4OSU
2096821130DESKTOP-BN9A2SA
2958455713DESKTOP-NKVAKV1
4205732935******(個人名が含まれている可能性があるためマスクしています)
3761538073DESKTOP-PVKDUAM
3537034124JKS
3472318429******(個人名が含まれている可能性があるためマスクしています)
1620260207DESKTOP-6LO36DE
1347261043DESKTOP-0V7K7HA
2352730816DESKTOP-4QC5J5Q
3362573326DESKTOP-43R2GH0
≪ 前へ
トップに戻る