Mallox ransomware, which is also known as Fargo, TargetCompany, Mawahelper, and so on, has been active since mid-2021. Their operation was also observed in transitioning into the Ransomware-as-a-Service distribution model from mid-2022.
Mallox group focuses on multi-extortion, encrypting their victims’ data and threatening to post it on their public TOR-based sites.
At initial versions, Mallox payloads are usually .NET-based, .EXE, or .DLL files which were spread through various methods, including exposed MS-SQL servers and phishing or spam emails to target Windows systems.
Now, the new Mallox ransomware Linux variants have been found in the wild. The attackers are using custom python scripts for the purpose of payload delivery and victim's information exfiltration. The malware encrypts user data and appends .locked extension to the encrypted files.
The Uptycs Threat Research team discovered a Python script named web_server.py during their investigation. Upon examining its contents and functions, it was identified as The Flask based Mallox ransomware web panel that can be used to create a fast and customizable ransomware for linux systems. The script connects to a backend database using environment variables for database credentials. It includes routes for user authentication, build management, and admin functions, supporting new user registration, login, password reset, and ransomware build creation, management, and downloading. Admins can manage users, view logs, and perform account actions. Additionally, the application features user profile management, a chat interface for builds, and a custom 404 error page.
The script (web_server.py) essentially creates a Mallox ransomware encryptor along with a decryptor for any user who registers. It contains an IP address: 185[.]73[.]125[.]6 in the host IP field. This ip is mainly used by someone to build newly linux ransomware builder for Mallox based on used config file, latter can be used for encrypt the system Following that 185[.]73[.]125[.]6/output reveals the following contents:
The above screenshot displays build IDs, and opening any of the links reveals the encryptor, decryptor, and config.json files.
Let's discuss the Ransomware Encryptor. Upon examining the strings of the sample, we notice a base64-encoded content that appears not to be standard base64.
The above base64 content is converted to hex and then xor with 0x9b (155 decimal) and then AES-256-CBC decryption with "iv": "/4EvHTiTUuIMrzjYSpnVLQ==", "key": "Byw184x2xrm0qF7sR7fptq1F/96GeD2TAYwbZDSX9dM="
After decrypting all the base-64 encoded content using the above logic, we obtained the ransomware configuration
We can see the entire configuration below which includes ransom-note,Client ID,BTC Address,Amount (USD),Deadline, Tox chat ID,note_name,persist,target-id and targeted directories.
From the above configuration, it is evident that the payload is Mallox Ransomware. The ransomware uses the same AES-256 CBC encryption to encrypt files on the victim's machine (similar to decrypting the config), with 'iv': '/4EvHTiTUuIMrzjYSpnVLQ==' and 'key': 'Byw184x2xrm0qF7sR7fptq1F/96GeD2TAYwbZDSX9dM='. AES is a symmetric algorithm and for any encrypted file it can be decrypted with the same key and IV. After encryption the Ransomware appends extension .lmallox and drops a Ransomnote with name READ_THIS_NOW.txt
Decryptor file is available on 185[.]73[.]125[.]6/output/{build-id}/decryptor for the corresponding encryptor. Uptycs Threat Research team has collected 7 decryptors for their corresponding encryptors for the following build-ids (chat-id):
Uptycs demonstrates robust detection capabilities, featuring built-in YARA support and advanced functionality for identifying such campaign activity threats with the detailed descriptions.
The Following Figure shows the Uptycs detection
Following graph show the how can we hunt for current mallox hosted server by performing following query on FOFA or Censys
Indicator Type |
Indicators |
File name |
IP |
185[.]73[.]125[.]6 |
|
IP |
91[.]215[.]85[.]142 |
|
IP |
91[.]215[.]85[.]135 |
|
MD5 |
3dde1507996cf8c3dd53a726501be33b |
Webserver.py |
MD5 |
b0770b7f24a436d256f2d58fc8581a18 |
decryptor |
MD5 |
231478ff24055d5cdb5fbec36060c8ff |
encryptor |
MD5 |
51d51696c7f3a0e3fba4b8ceab210bac |
decryptor |
MD5 |
8d0fd41d35df82d3e7e2ff5c1747b87c |
encryptor |
MD5 |
e9e087c52b97c7a3e343642379829e0a |
decryptor |
MD5 |
68785d476573955d50a3908dc18bf73b |
encryptor |
MD5 |
cb60ad37c9a632c697fb2da7add7ccb5 |
decryptor |
MD5 |
6bb2752ea73b4d6a5c33f543b5c29461 |
encryptor |
MD5 |
1448ce8abc2f0184ec898d55f9c338b4 |
decryptor |
MD5 |
5b0c1958a875c205951b88fd1c885900 |
encryptor |
MD5 |
7f099845d8e6849d6ab4d64b546477d6 |
decryptor |
MD5 |
4825f3a92780be4a285583b0f24fed99 |
encryptor |
MD5 |
be08c3e95df5992903a69e04cbab22e3 |
decryptor |
MD5 |
779aa15cd6a8d416e7f722331d87f47b |
encryptor |