Howler Cell identified a new 32-bit malicious installer disguised as a Google Chrome installer, which kickstarts a multi-stage delivery chain, ultimately deploying the ValleyRAT remote access trojan.
The Howler Cell team identified Chinese language strings within the binary, including the internal DLL name, indicating that the installer is Chinese in origin.
The installer covers its activity by delivering a legitimate version of Chrome in the foreground to allay suspicion.
The targeted security solutions are known products from Chinese vendors, indicating that the campaign is targeting entities within China. Groups such as TA428 have a history of deploying ValleyRAT, and have a strong focus on the Government, Technology, Defense, and Critical Infrastructure industries in China.
Along with allowing a threat actor remote access, ValleyRAT’s capabilities include remote command execution, file upload/download, and persistence mechanisms. While the ultimate objective of the campaign is unknown, there are clear opportunities for cyber espionage
SHA256: a237f31b2d655dc2dd473db49a6bc599d8ddd39c084b6b28e2af011907080b07
Figure 1 Attack Chain of ValleyRAT
We identified that the Chrome installer was created using InnoSetup and extracted the associated files, including the InnoSetup script (ISS) and the compiled Pascal code.
Figure 2 Directory structure within Chrome Setup Installer
When executed, the installer drops four files to disk. These include a legitimately signed Google Chrome installer and several archived and encrypted components used to carry out malicious activity in the background. An overview of dropped files is provided in Table 1.
Table 1 Overview of dropped files
Filename |
Sha256 |
Description |
Setup.exe |
9a59260ff9b1ac88a5c75ed77524b4dbdf24bff78ea512a7c81d39e8b694ab51 |
Legitimate Google Chrome Setup |
Main.xml |
74dae91cbf43e27911c32efc6b757b54c0c06cec2e254f86d336be006dc156f7 |
Password-protected 7-Zip archive |
Server.log |
af053928eaeeede43bc4dfe1d47c76b1079885b4d484106f995411ed18585dea |
RC4-encrypted PE file |
Unzip.exe |
a6c324f2925b3b3dbd2ad989e8d09c33ecc150496321ae5a1722ab097708f326 |
Legitimate 7-Zip standalone extractor |
InnoSetup allows authors to customize setup behavior using Pascal scripting. In this case, the embedded compiled Pascal code was extracted and decompiled. During execution, the script uses the PowerShell Add-MpPreference cmdlet to create a Microsoft Defender exclusion for the target folder where additional malicious files are staged.
The script has the password embedded within it to un-archive the password-protected archive (Main.xml) and extracts the files to the target folder.
Figure 3 Hardcoded password highlighted within the script
During the unarchiving process, a 32-bit C++ compiled executable named man.exe is dropped and executed to continue the malicious attack chain.
On execution, Man.exe begins by creating a vector list of installed security products. This list is later used to remove their driver callbacks using a kernel driver, helping the malware evade detection and maintain persistence.
Figure 4 Vector initialization for targeted security processes
After creating the vector list, the executable drops a password-protected archive embedded within itself into the staging folder with the filename tree.exe. It then extracts the contents using the Chromium unzip library with the password Server8888. The files listed in Table 2 were dropped as a result of extraction.
Table 2 Overview of Extracted Files
Filename |
Sha256 |
Description |
Kail.exe |
72c33f24fb5853d2ef70adece5c7cacedd8e568a9025f7a82fd5ef5c2f9967c5 |
Legitimate 7-Zip standalone extractor |
Bypass.exe |
26612a0fc6ea86c665ae05391e0e4c1db8671b49ccb2eb684dc1983bda07a068 |
Acts as a loader for Nvidia.exe |
Nvidia.exe |
18ddb4a5600514dee770a6a3d5556442a51fc0bdf41d8ce397e0a22fde6da0a5 |
Executes AV Terminator |
Windows.log |
76af9143af06d8f6913f9e5f3d0dfeb92077a0a7a3cff324a7e7016f489e2c56 |
RC4-encrypted PE file |
Me.key |
38c2b968f93a39ef51d2660d9736814aca3acead017746f51ae778de8fe7d825 |
Password-protected 7-Zip archive |
After extracting additional components, man.exe launches bypass.exe using the WdcRunTaskAsInteractiveUser method. This API is resolved dynamically at runtime using GetProcAddress, as shown in Figure 5.
Figure 5 Invoking bypass.exe via WdcRunTaskAsInteractiveUser
Bypass.exe is responsible for invoking NVIDIA.exe with elevated privileges by abusing the CMSTP COM interface.
Figure 6 Bypass.exe invokes Nvidia.exe via UAC bypass
The purpose of this executable is to read an encrypted file named Windows.log and decrypt it using a custom RC4 key: ??Bid@locale@std. After decryption, a DLL (original name: R0Kill.dll) is loaded into memory. The executable then invokes its exported function named NtHandleCallback.
Figure 7 Decryption of Windows.log
When invoked, the export function attempts to get a handle to NSecKrnl64.sys if it exists. It then tries to terminate the security solution processes, whose names are hardcoded as strings within the unpacked executable, as shown in Figure 8.
Figure 8 Terminating Security solutions using NSecKrnl64.sys
While Nvidia.exe is running with elevated privileges, man.exe continues its execution and extracts another password-protected archive Me.key using the password ‘killstartup’. The following files are dropped into the staging folder as a result of this extraction. The overview of extracted files is shown in Table 3.
Table 3 Overview of Extracted Files
Filename |
Sha256 |
Description |
NtHandleCallback.exe |
c027cf868757babab33686bf4c41192339e04fa89ad868409a5cd4ed90a1f71e |
Legitimate signed file abused for sideloading |
Log.dll |
adc7c80f1a6f94d9ad18f880714fb0491c65f795f4affe7b670f4c64b0ddc9cb |
Malicious DLL executed via DLL -Sideloading |
Main.exe |
fb249bff9449bbd715d936e6bce4ce2354434dc9eb305e352ffadbc82562252f |
BlindEDR |
Rwdriver.sys |
1c763af41b74c7502d70093763723939a8025199e0ac7e39c04b5cf992f9e273 |
Driver abused by BlindEDR |
Rwdriver.cat |
e90b505e3b31e15e608f2f9fb1c0fabdff29b91988eb6a61a73556e05e182d4c |
Catalog file |
NtHandleCallback.exe, a legitimately signed binary by Hangzhou Shunwang Technology Co.,Ltd., is executed following the extraction. It is abused to sideload the malicious DLL named Log.dll.
When loaded, the log.dll functions as a loader for Valley RAT Downloader. It reads the RC4-encrypted file Server.log from the staging folder and decrypts it in memory using the same RC4 key (??Bid@locale@std) as used by Nvidia.exe.
Figure 9 RC4 decryption reproduced in CyberChef
The DLL then traverses the export directory of the decrypted DLL (original name: 上线模块.dll, translated as Online module.dll) and invokes its exported function NtHandleCallback. This function is responsible for downloading the final payload from the embedded C2 server and executing it. The configuration extracted from the binary is shown in Figure 10.
Figure 10 Downloader Configuration
Once a successful connection is established to the C2 server, the payload is downloaded and stored in the registry under the key d33f351a4aeea5e608853d1a56661059. The content is then read from the registry and injected into a newly spawned tracerpt.exe process via the Thread Execution Hijacking technique, as illustrated in Figure 11.
Figure 11 Thread Injection into tracerpt.exe
Based on prior analysis of WinOS 4.0 and known ValleyRAT samples, we have determined that the final downloaded payload is ValleyRAT.
Man.exe continues execution by registering a driver as a service using the sc command-line utility, then starts the service.
Figure 12 Kernel driver registered as a service
To advance the attack chain, man.exe runs main.exe with the arguments “Blind mode” and “Restore mode”, each invoked individually using WinExec.
Main.exe is a compiled version of the open-source project called BlindEDR. We also found references to this project and the POC to abuse them in a Chinese forum.
Based on the information available, we attribute main.exe as a slightly modified version of BlindEDR tool. It is used to clear kernel callbacks registered by the list of monitored security solutions using the registered driver rwdriver.sys, which is shown in Figure 13.
Figure 13 BlindEDR command line options
List of targeted security solutions
After completing the attack chain, man.exe creates a batch file named delete_self.bat to remove all files it had dropped during execution.
Figure 14 Clearing traces using delete_self.bat
These are general steps that apply broadly to mitigate ValleyRAT.
Our analysis revealed Chinese language strings within the binary, including the internal DLL name, and identified that the targeted security solutions are products from Chinese vendors. This indicates the attackers have knowledge of the regional software environment and suggests the campaign is tailored to target victims in China. The use of localized artifacts, combined with selective targeting, points to a focused effort against systems in Chinese-speaking regions.
Filename |
Sha256 |
Log.dll |
adc7c80f1a6f94d9ad18f880714fb0491c65f795f4affe7b670f4c64b0ddc9cb |
Main.exe |
fb249bff9449bbd715d936e6bce4ce2354434dc9eb305e352ffadbc82562252f |
Rwdriver.sys |
1c763af41b74c7502d70093763723939a8025199e0ac7e39c04b5cf992f9e273 |
Rwdriver.cat |
e90b505e3b31e15e608f2f9fb1c0fabdff29b91988eb6a61a73556e05e182d4c |
Bypass.exe |
26612a0fc6ea86c665ae05391e0e4c1db8671b49ccb2eb684dc1983bda07a068 |
Nvidia.exe |
18ddb4a5600514dee770a6a3d5556442a51fc0bdf41d8ce397e0a22fde6da0a5 |
Windows.log |
76af9143af06d8f6913f9e5f3d0dfeb92077a0a7a3cff324a7e7016f489e2c56 |
Me.key |
38c2b968f93a39ef51d2660d9736814aca3acead017746f51ae778de8fe7d825 |
Main.xml |
74dae91cbf43e27911c32efc6b757b54c0c06cec2e254f86d336be006dc156f7 |
Server.log |
af053928eaeeede43bc4dfe1d47c76b1079885b4d484106f995411ed18585dea |