Update on Attacks by Threat Group APT-C-60

In JPCERT/CC Eyes, we previously reported on attacks conducted by Attack Exploiting Legitimate Service by APT-C-60. JPCERT/CC continues to observe similar attack activities in Japan. This report provides an update on the attacks confirmed between June and August 2025, focusing on developments since our last article. The following topics are covered:

  • Attack flow
  • Updates to the downloader and SpyGlace
  • SpyGlace encoding functions and communication methods
  • Decoy documents used in the attacks
  • Analysis of the GitHub repository

Attack Flow

The attacks confirmed by JPCERT/CC were targeted spear-phishing emails sent to recruitment staff, in which the attackers impersonated job seekers. This pattern is closely similar to attacks that occurred around August 2024. Figure 1 shows the flow of the attack. In the previous attacks, victims were directed to download a VHDX file from Google Drive. However, in the latest attacks, the malicious VHDX file was directly attached to the email. When the recipient clicks the LNK file contained within the VHDX, a malicious script is executed via Git, which is a legitimate file.

Figure 1: Flow of malware infection


The LNK file executes gcmd.exe (a legitimate Git file), and it runs the script glog.txt stored in the VHDX file.

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

The script executed by Git is responsible for displaying a decoy document, creating files, and executing those files. The created WebClassUser.dat (hereafter referred to as “Downloader1”) is registered in the registry as shown below, and then it gets persisted and executed through COM hijacking.

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

Updates to Downloader1 and Downloader2

For attackers to identify compromised devices, Downloader1 periodically communicates with a legitimate statistics service called statcounter. The request headers are created in the following format. Compared to earlier versions, the current one is different in that it identifies compromised machines by their volume serial number and computer name.

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

Downloader1 combines a filename derived from the volume serial number and the computer name with a URL embedded in the malware sample to generate a path in the following format, and it is used for communication.

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

The attackers check the referrer value sent to statcounter and then upload a file named "[VolumeSerialNumber + ComputerName].txt" corresponding to the infected device to GitHub. DownLoader1 then retrieves that file from GitHub. Based on the URL in the retrieved file, DownLoader2 is downloaded and executed. In addition to specifying the download URL, the "[VolumeSerialNumber + ComputerName].txt" can execute the following commands in Table 1. For example, the command "1*" can change the interval at which a GET request is sent to statcounter.com from the default of one hour to six hours. Such capability indicates the attackers’ intent to monitor the victim environment more cautiously.

Table 1: Commands of the downloader
Command Contents
"1*" Change the interval settings
"0" or "40" Reset the interval settings
"http*" Download DLL

Like earlier versions, the retrieved files are XOR-decoded and then executed using "sgznqhtgnghvmzxponum" as the key. Downloader2 can download and execute SpyGlace and its loader. The malware’s dynamic API resolution uses an encoding scheme based on ADD and XOR. The value has changed from earlier versions, and now XOR 0x05 is performed after add 0x04. The SpyGlace loader uses the same encoding scheme. As in earlier versions, files retrieved by Downloader2 are XOR-decoded with the key "AadDDRTaSPtyAG57er#$ad!lDKTOPLTEL78pE" and then executed by COM hijacking.

Updates to SpyGlace

JPCERT/CC has observed three versions of SpyGlace: 3.1.12, 3.1.13, and 3.1.14. Compared with Version 3.1.6, which was observed by JPCERT/CC in 2024, the previously implemented commands prockill and proclist have been modified to perform no action. JPCERT/CC also confirmed a new command, uld, has been added. The command calls a specific function of a loaded module and then unloads the module two seconds after that. This is possibly intended for modules that must execute a specific function before being unloaded. Additionally, in the screenupload command, the file path and the export function name for what appears to be a screenshot-related module have been changed to those shown below. Since the Clouds.db module itself has not been observed, its functionality is unknown, but it is believed to be related to the screenshot command. For a full list of implemented commands, see Appendix D.

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

There are slight differences among the observed versions, 3.1.12, 3.1.13, and 3.1.14. However, JPCERT/CC confirmed that the Mutex value is different between them. From version 3.1.14, the automatic execution path has also changed from %public%\AccountPictures\Default\ to %appdata%\Microsoft\SystemCertificates\My\CPLs. An article published in September 2025 [1] describes a campaign in which version 3.1.14 was used, but this is likely a separate campaign observed overseas because the GitHub repositories and other resources used in the campaign do not overlap with those observed by JPCERT/CC.

Details of SpyGlace’s Encoding Functions and Communication Methods

SpyGlace’s characteristic encoding scheme combines a single-byte XOR with a SUB instruction. This is heavily used for strings the malware employs and for resolving dynamic APIs. The "Download" command, one of SpyGlace’s commands, downloads an encrypted file. The file is decrypted using AES-128-CBC with the KEY and IV shown below and is created to the path %temp%\wcts66889.tmp. Figure 2 shows a part of the Download command code.

KEY: B0747C82C23359D1342B47A669796989
IV: 21A44712685A8BA42985783B67883999

Figure 2: Part of Download command code


SpyGlace communicates with its C2 servers using BASE64 and RC4. The format of the request headers used in the initial communication is shown below. The a001 value contains the userid value "GOLDBAR", and it is the same string reported by Positive Technologies [2] and was also used in attacks observed in Japan last year, suggesting that it may indicate the targeted region or a specific campaign. Regarding encoding scheme, SpyGlace has employed a modified RC4 since at least version 3.1.6.

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

The modified RC4 increases the number of KSA cycles and performs additions to the value that is to be XORed. The variant can be decoded with the following Python script.

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)

Decoy Document Used

Figure 3 shows a part of the decoy document used in this campaign. Because the attackers targeted recruitment officers, the fabricated resume disguise the writer as a researcher and list multiple academic papers in the CV. However, the authors of those papers do not include the name of the email sender. The name on the resume partially matches the Gmail account name used by the sender, suggesting that the attackers may have created the account specifically for this attack.

Figure 3: Part of the used decoy document


Analysis of GitHub Repositories

Because the attackers use GitHub to distribute their payloads, all payloads distributed in the past can be retrieved unless the repository is deleted. Table 2 shows the uploaded SpyGlace versions and the periods during which they were available on GitHub.

Table 2: Upload dates of each SpyGlace version on 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

JPCERT/CC has identified email addresses recorded in the commit logs of the GitHub repository managed by the attackers, as well as information on compromised devices composed of their volume serial numbers and computer names. The details are provided for reference in Appendices E and F.

In Closing

As with previous cases, attacks by APT-C-60 continue to primarily target Japan and other East Asian regions. While several changes have been identified, such as a shift in infrastructure from Bitbucket to GitHub and updates to the malware itself, many characteristics remain consistent, including the abuse of legitimate services and the behavior of the malware. JPCERT/CC recommends remaining alerted to this threat. C2 and hash values of the confirmed malware are listed in the Appendix. Please note that the C2 information includes legitimate services.

Yuma Masubuchi (Translated by Takumi Nakano)

References

[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

Table 3: List of IoC Files
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: Other IoC

Table 4: Other 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

Table 5: List of SpyGlace commands
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******(Names have been masked as they may contain personal information)
3761538073DESKTOP-PVKDUAM
3537034124JKS
3472318429******(Names have been masked as they may contain personal information)
1620260207DESKTOP-6LO36DE
1347261043DESKTOP-0V7K7HA
2352730816DESKTOP-4QC5J5Q
3362573326DESKTOP-43R2GH0
Back
Top