从无解到破解:Mallox家族linux版本的分析以及解密器的制作
本帖最后由 Solarsec 于 2024-10-24 16:52 编辑# 1.背景
Mallox勒索软件首次出现于2021年5月,并在2021年10月扩展到中国市场。截至2024年,它仍然活跃。Mallox通过加密受害者文件并要求支付赎金来恢复数据,使用唯一的加密密钥加密文件,受害者的文件通常会添加“.mallox”或“.malox”等扩展名。同时,它会在每个受感染的文件夹中生成勒索信,命名为“FILE RECOVERY.txt”,要求受害者通过比特币或门罗币支付赎金以获得解密工具。
## 1.2 技术特征
Mallox勒索软件的加密算法通常是ChaCha20或AES,具体取决于攻击的目标系统。它会生成唯一的密钥和IV(初始化向量)来控制文件加密过程。此外,Mallox通过多种方式规避检测,例如使用MSBuild注入恶意代码,从而绕过杀毒软件的监控。它还利用反射加载技术,直接将恶意代码注入内存中,避免在磁盘上留下明显的痕迹。Mallox专门针对Microsoft SQL Server等数据库系统,通过终止关键数据库进程如`sqlserv.exe`和`mysql.exe`,并加密备份文件。
## 1.3 联系方式与文件后缀
在对Mallox勒索家族的信息收集中,我们发现该家族的勒索信通常提供多种联系方式,包括早期的邮箱地址**mallox.resurrection@onionmail.org**,而近期则更改为**mallox@onionmail.org**。除了电子邮件,Mallox主要通过自建的暗网网站(TOR)进行联系。该暗网平台包含三个页面:**登录页**、**谈判页**和**数据泄露页**。
1. **登录页**:勒索信中提供TOR地址,受害者通过输入勒索信中的唯一ID访问,验证后会跳转至谈判界面,未获取ID的用户无法访问谈判页面。
2. **谈判页**:此页面包含受害者ID、数据公开状态、赎金金额、折扣金额、黑客的比特币钱包地址以及聊天窗口。受害者可以通过聊天窗口与黑客沟通,进行文件测试传输或讨价还价。
3. **数据泄露页**:展示部分受到Mallox家族攻击的知名公司,通常这些公司市值较高。每个受害者展示框包含公司名称、简介以及数据泄露的详细信息。点击“View”按钮后,受害者的详细信息页面会显示公司名称、详细介绍、赎金金额和被勒索的数据量等关键信息。
常见的加密文件后缀包括**.mallox**、**.rmallox**、**.lmallox**和**.malloxx**,这些后缀随着不同变种的演进而使用。
登录页
谈判页
数据泄露页
# 2. 恶意文件基础信息
## 2.1 加密器基本信息
| **文件名:** | lmallox勒索病毒加密器 |
| ------------- | ------------------------------------------------------------ |
| **编译器:** | |
| **大小:** | 26936(26.30 KiB) |
| **操作系统:** | Ubuntu Linux(20.04.2,ABI: 3.2.0) |
| **架构:** | AMD64 |
| **模式:** | 64 位 |
| **类型:** | DYN |
| **字节序:** | LE |
| **MD5:** | 8d0fd41d35df82d3e7e2ff5c1747b87c |
| **SHA1:** | 93ef3578f9c3db304a979b0d9d36234396ec6ac9 |
| **SHA256:** | f4b64976d7dcb04466f0a89d81cd2eb158158c752c042ec248549415799965bf |
## 2.2 勒索信
READ_THIS_NOW.txt
```Plain
======================================={ Mallox v1.0 }======================================
1. What happened?
Your computer has been breached, and your important files have been stolen and encrypted.
You no longer have access to any of these files.
2. What can you do?
Not much. Any attempt to recover your files by yourself will very likely fail, and could
result in permanent destruction of your data in a way even we won't be able to recover.
3. How can we help?
We will provide you with a decryption tool that will automatically decrypt your files, and
we will delete all copies of your stolen files from our server. But you will need to make a
small payment to the address listed below. Once you do, you can contact us on either Tox or
Session chat with your client ID to get the decryption tool. You can easily find instructions
on how to buy bitcoin (BTC) or monero (XMR) through google.
If you don't make this payment before the deadline listed below, your decryption fee will
be doubled, or we will simply delete your decryption key from our server, making your files
unrecoverable. We will also publish all your private data that we obtained.
PAYMENT INFORMATION
~~~~~~~~~~~~~~~~~~~
Client ID:
BTC Address:18CUq89XR81Y7Ju2UBjER14fYWTfVwpGP3
Amount (USD):$ 5.0
Deadline:21:07:24 27/04/2024 GMT (72.0 hours)
Tox chat ID:290E6890D02FBDCD92659056F9A95D80854534A4D76EE5D3A64AFD55E584EA398722EC2D3697
==============================================================================================
```
## 2.3 其他注意事项
分析的样本中加密器与解密器不配套,但patch部分数据后即可搭配使用,后文将详细解释
# 3. 加密后文件分析
## 3.1 威胁分析
| **病毒家族** | mallox |
| ----------------------------- | ------------------------------------------------------------ |
| **首次出现时间/捕获分析时间** | 2024/10/14 \|\| 2024/10/14 |
| **威胁类型** | 勒索软件,加密病毒 |
| **加密文件扩展名** | .lmallox |
| **勒索信文件名** | READ_THIS_NOW.txt |
| **有无免费解密器?** | 无 |
| **联系邮箱** | |
| **检测名称** | Avast (Win32:Malware-gen), AhnLab-V3 (Trojan/Win.Generic.C5576951), ALYac (Gen:Variant.Tedy.512515), Avira (no cloud) (TR/Ransom.imrnt), BitDefenderTheta (Gen:NN.ZexaF.36802.yq0@aSdxC8m), CrowdStrike Falcon (Win/malicious_confidence_100% (W)),Cylance(Unsafe),DeepInstinct(MALICIOUS),Emsisoft(Gen:Variant.Tedy.512515 (B)),ESET-NOD32(A Variant Of MSIL/Filecoder.LU),GData(Gen:Variant.Tedy.512515), Ikarus (Trojan.MSIL.Crypt),K7GW(Trojan ( 0052f4e41 )) |
| **感染症状** | 无法打开存储在计算机上的文件,以前功能的文件现在具有不同的扩展名(例如,solar.docx.lmallox)。桌面上会显示一条勒索要求消息。网络犯罪分子要求支付赎金(通常以比特币)来解锁您的文件。 |
| **感染方式** | 受感染的电子邮件附件(宏)、恶意广告、漏洞利用、恶意链接 |
| **受灾影响** | 所有文件都经过加密,如果不支付赎金就无法打开。其他密码窃取木马和恶意软件感染可以与勒索软件感染一起安装。 |
加密的测试文件为`sierting.txt`,具体内容如下
经过`lmallox勒索病毒加密器`加密之后如下
文件的大小固定增加了16Byte,经过多次实验结果仍然相同,因为其加密算法原因,会有涉及填充问题,所以会不定长再增加0~15Byte。
# 4. 逆向分析
整体执行流程图:
## 4.1 删除自身
该程序在入口函数处就会调用unlink函数实现对自身的删除
## 4.2 初始化加密配置信息
#### 4.2.1 整体配置信息
```cpp
{"about": "test file", "amount": 5.0, "arch32": false, "bitcoin": "18CUq89XR81Y7Ju2UBjER14fYWTfVwpGP3", "deadline": 72.0, "debug": false, "demo": false, "extension": ".lmallox", "ignore": [".bashrc", ".bash_aliases", ".profile", ".ssh"], "iv": "7qArgITGOciJGUeY/yurPw==", "jobs": 39, "key": "qpXpTLg079B9rOeTDwL++fCGYlhA9ik/g6iEKq/XAQs=", "maxsize": "", "monero": "", "name": "server 03", "nolog": false, "nonote": false, "note": "======================================={ Mallox v1.0 }======================================\r\n\r\n1. What happened?\r\n\r\n Your computer has been breached, and your important files have been stolen and encrypted.\r\nYou no longer have access to any of these files.\r\n\r\n2. What can you do?\r\n \r\n Not much. Any attempt to recover your files by yourself will very likely fail, and could \r\nresult in permanent destruction of your data in a way even we won't be able to recover.\r\n\r\n3. How can we help?\r\n\r\n We will provide you with a decryption tool that will automatically decrypt your files, and\r\nwe will delete all copies of your stolen files from our server. But you will need to make a\r\nsmall payment to the address listed below. Once you do, you can contact us on either Tox or\r\nSession chat with your client ID to get the decryption tool. You can easily find instructions\r\non how to buy bitcoin (BTC) or monero (XMR) through google.\r\n\r\n If you don't make this payment before the deadline listed below, your decryption fee will\r\nbe doubled, or we will simply delete your decryption key from our server, making your files\r\nunrecoverable. We will also publish all your private data that we obtained.\r\n\r\n\r\n PAYMENT INFORMATION\r\n ~~~~~~~~~~~~~~~~~~~\r\n\r\n Client ID:7cc49d60f71e4ca4\n BTC Address:18CUq89XR81Y7Ju2UBjER14fYWTfVwpGP3\n Amount (USD):$ 5.0\n Deadline:21:07:24 27/04/2024 GMT (72.0 hours)\n Tox chat ID:290E6890D02FBDCD92659056F9A95D80854534A4D76EE5D3A64AFD55E584EA398722EC2D3697\n\r\n\r\n==============================================================================================\r\n", "note_name": "READ_THIS_NOW.txt", "persist": false, "recommend": false, "secdel": false, "session": "", "static": false, "symbols": false, "target_id": "7cc49d60f71e4ca4", "targets": ["/home", "/root", "/var/www", "/var/lib/mysql", "/var/log", "/var/mail", "/opt", "/media", "/mnt", "/srv"], "tox": "290E6890D02FBDCD92659056F9A95D80854534A4D76EE5D3A64AFD55E584EA398722EC2D3697", "verbose": false, "xor_key": 155}
```
#### 4.2.2 执行流程
1.程序在入口函数处,首先会先执行init_config函数,来实现对加密所需的配置信息的初始化等操作
2.深入分析init_config函数,发现存在多处异或函数,分别都是与0X9B进行异或,还有base64解码与aes解密等操作。
3.通过对内容进行分析,发现off_开头的硬编码的内容中保存着所有的配置所需的信息
4.基本流程就比较清晰了,首先该函数会对两端数据进行异或,即获得对应AES的KEY和IV,之后对Base的数据进行Base64_Decode,再进行xor_0x9b,最后利用刚才解密的Key和Iv对xor后的数据进行解密即可。
5.这里可以手动的去编写一个脚本来实现对这部分数据的解密,这里选择最长的那一串内容。
可以看到最长的这一串被解密出来了,是勒索信的内容。
之后其他的数据有依旧如此。
## 4.3 文件遍历
#### 4.3.1 执行流程
1.该程序只会遍历运行系统中指定的目录
#### 4.3.2 指定目录
```cpp
"/home", "/root", "/var/www", "/var/lib/mysql", "/var/log", "/var/mail", "/opt", "/media", "/mnt", "/srv"
```
2.一共十个路径,之后启动多线程,创建十个进程,来调用start_routine函数,实现遍历每一个指定路径下的内容,遍历通过find_deep_path函数实现。
3.在遍历时,会先判断该路径是否可写
4.读取该路径的子目录后,如果遇上子目录中有'.'或者'..'的,则不处理
5.在读取到一个子路径后,会对其进行绝对路径的完整拼接,然后对其进行校验,如果路径中存在如下内容则不处理。
#### 4.3.3 不加密的路径
```cpp
".bashrc", ".bash_aliases", ".profile", ".ssh"
```
4.完成校验通过之后,则会对当前路径的类型进入判断,如果是目录的话则进行递归遍历,如果是文件的话,则会检查,是否有可写权限,并且还会检查文件的末尾是否是.lmallox结尾,如果都符合则加入到v14这个待加密列表中,用于后续的加密函数的使用。
## 4.4 文件加密
#### 4.4.1 流程图
#### 4.4.2 加密文件结构
因为采用了AES加密,需要满足每次加密的数据块的大小最小为16字节,故需要填充,所以就会有下面的填充字节。
#### 4.4.3 执行流程
1.当完成了前面对于指定目录的遍历后,获得了完整的可加密的文件内容列表,之后则开启多线程,调用encrypto_thread函数对其中的文件进行加密。
2.加密的流程也比较简单,首先会获取两个IO流,一个是原始文件的,用于数据的读取,一个是加密文件的,用于加密数据的写入。
3.接着会调用RAND_bytes随机数函数生成一个16字节的IV,用于后续的加密,并且会先将其写入到加密文件的开头。
4.开始加密,加密结束后则关闭两个IO流,并且会将原始文件删除掉。
5.加密核心算法采用的就是个简单的AES,并且加密的长度是全加密,并未对文件的后缀进行校验选择等。
6.加密结束后,我们就可以在系统内看到被加密的文件了。
## 4.5 勒索信写入
#### 4.5.1 执行流程
1.这部分流程比较简单,首先会判断勒索信的路径是否是‘/’,如果是则写入。
2.如果不是则获取write_ransomware_note_path_list列表中的路径,并且在该路径下写入勒索信。
# 5.病毒分析概览
Mallox勒索病毒在执行时,首先删除自身文件,接着初始化加密配置信息,配置数据通过异或和AES解密方式还原。它会遍历系统中特定目录,加密符合条件的文件,并排除如.bashrc和.ssh等文件。每个文件使用随机生成的IV进行AES全盘加密,完成后删除原文件。加密过程采用多线程并行执行,保证效率。同时,勒索信会写入多个指定目录,通知受害者支付赎金以获取解密工具。整体流程展现了精确的目录控制和加密机制。
# 从无解到破解:Mallox家族linux的解密器制作
# 1.背景
本篇文章主要讲解mallox家族lmallox勒索病毒的破解方法,背景详情可参考本文上述内容
# 2.恶意文件基础信息
## 2.1 加密器基本信息
| **文件名:** | encrypto |
| ------------- | ------------------------------------------------------------ |
| **编译器:** | |
| **大小:** | 26936(26.30 KiB) |
| **操作系统:** | Ubuntu Linux(20.04.2,ABI: 3.2.0) |
| **架构:** | AMD64 |
| **模式:** | 64 位 |
| **类型:** | DYN |
| **字节序:** | LE |
| **MD5:** | 8d0fd41d35df82d3e7e2ff5c1747b87c |
| **SHA1:** | 93ef3578f9c3db304a979b0d9d36234396ec6ac9 |
| **SHA256:** | f4b64976d7dcb04466f0a89d81cd2eb158158c752c042ec248549415799965bf |
## 3.逆向分析
### 加密算法分析:
这里直接从文件的加密部分开始分析,sub_364A函数部分可以看到该程序加密的开始
进入到sub_2cd7函数可以看到具体所采用的加密算法等信息
从该函数可以了解到,整体的文件数据的加密采用了AES的加密算法,CBC的加密模式。
解密思路:
解密需要获取到他的加密KEY和IV,其中IV的部分我们上面已经了解到,IV是随机生成的,并且写入到了文件的开头部分,而加密所需的KEY就是解密配置所使用的KEY。
###解密核心代码:`func decode_file(wg *sync.WaitGroup, path string) bool { defer wg.Done() hexKey := "310e72d723af744be6377c08949965626b1df9c3db6db2a418331fb1344c9a90" key, err := hex.DecodeString(hexKey) key = xor0x9b(key) cipherText, err := ioutil.ReadFile(path) if err != nil { log.Fatalf("Error reading file: %v", err) return false } iv := cipherText[:16] // First 16 bytes for IV encryptedData := cipherText // Remaining part is encrypted data block, err := aes.NewCipher([]byte(key)) if err != nil { log.Fatalf("Error creating cipher: %v", err) return false } mode := cipher.NewCBCDecrypter(block, iv) decrypted := make([]byte, len(encryptedData)) mode.CryptBlocks(decrypted, encryptedData) decrypted = pkcs7Unpad(decrypted) if decrypted == nil { return false } outputpath := strings.Replace(path, ".lmallox", "", 1) err = ioutil.WriteFile(outputpath, decrypted, 0644) if err != nil { log.Fatalf("Error writing decrypted data to file: %v", err) } fmt.Printf("[+]文件: %s 解密成功!!\n", path) os.Remove(path) return true } `
### 解密结果:
### 工具解压密码:solarsecurity
dreamrise 发表于 2024-10-28 09:15
所以,如果没有加密的key,仍然不能解密对吗?
在现代加密体系中,密钥的随机性、长度和生成方式对于算法的安全性至关重要。当密钥生成过程存在漏洞,或密钥长度不足以抵御当今计算能力的攻击时,整个加密算法就会面临严重的风险。例如,弱密钥的生成可能会导致对称加密算法暴露于暴力破解攻击之下,因为攻击者能够通过穷举所有可能的密钥来解密信息。如果密钥的随机性不够,也会导致攻击者可以利用统计分析或频率分析方法来推测出密钥,从而解密数据。此外,随着量子计算的发展,现有的许多传统算法在过短的密钥长度下将变得脆弱,因为量子计算能够大幅缩短攻击时间。因此,当密钥管理不当,或者生成算法设计不合理时,算法的安全性将失去保障,从而导致敏感信息暴露的风险大大增加,而这个勒索也是因为没有考虑到加密文件的密钥会被泄露,所以导致的可以被破解。 谢谢大佬分享,让我有了思路,记得上次碰到一个另外的勒索病毒扩展名会变成cargo,我分析了加密文件和病毒本体研究出了加密方法,就是找不到随机iv和密钥哎 膜拜大佬,感谢分享 膜拜膜拜 重要数据全部备份
重装能不能应对? 谢谢楼主
膜拜大佬,这就是天书啊。 学习了,写的很详细,工具也非常使用。 楼主太厉害了,路过学习一下!! 学习学习,感谢 这种必须一步一步来!太难了!