-
-
[原创]【病毒分析】Mallox勒索家族新版本:加密算法全面解析
-
发表于: 2024-12-6 14:39 2297
-
Mallox 勒索家族首次于 2021 年 5 月出现。最初,Mallox 勒索家族通过利用未受保护的 Microsoft SQL(MS SQL)来针对 Microsoft Windows 系统。此后,它已演变为影响 Linux 系统和 VMware ESXi 环境。
近年来,Mallox家族显著扩大了其业务。该家族已转型为勒索软件即服务(RaaS)模式,招募了合作伙伴以扩大其影响力。这一转变导致相关活动显著增加,2023 年中期观察到激增。
与其他勒索软件类型一样,Mallox家族通过加密数据和威胁泄露被盗信息来实施双重勒索策略,除非支付赎金。这种策略对组织来说尤其危险,因为数据泄露的可能性增加了满足赎金要求的压力。
为了进一步对受害者施加压力,该组织在暗网上运营一个专门的泄密网站,发布拒绝支付赎金的受害者被盗数据。泄密网站定期更新新的受害者及其受损数据,充当公开羞辱平台和进一步货币化其攻击的手段。
每个受害者都会在勒索信中获得一个私钥,用于与Mallox家族互动并协商条款和付款。
输入私钥后会进入唯一的聊天框页面,该页面会展示赎金金额、mallox家族比特币钱包地址及聊天框等信息。
Mallox 主要通过利用易受攻击且公开暴露的服务获得初始访问权限,特别关注 MS-SQL(Microsoft SQL Server)和 ODBC(开放数据库连接)接口。其常见的攻击目标包括旧版远程代码执行(RCE)漏洞的未修补实例,例如 Microsoft SQL Server 中的 CVE-2019-1068 和 Microsoft SQL Server Reporting Services 中的 CVE-2020-0618。 此外,该组织还频繁采用暴力破解手段,针对暴露于公共互联网的弱配置服务和应用程序进行攻击。在近期的活动中,Mallox 攻击者通过对弱 MS-SQL 接口发起字典暴力攻击,成功获取初始访问权限。不过,据了解,Mallox 的关联团体还使用其他攻击媒介,例如通过网络钓鱼电子邮件投递 Cobalt Strike 和 Sliver 攻击框架。
文件名: mallox.exe
编译器: Microsoft Visual C/C++(2017 v.15.5-6)[EXE32]
大小: 197120(192.50 KiB)
操作系统: Windows(XP)
架构: 386
模式: 32 位
类型: GUI
字节序: LE
MD5: b54d7da0fe6869006ffd3b9b470f0dc4
SHA1: 5d0b9521cca0c911d49162e7f416a1463fbaefae
SHA256: df29d5c4a750663440ce76d6804ce88e03faeef9591ec0b3b9ca348a6c930b7f
FILE RECOVERY.txt
sierting.txt
加密文件名 = 原始文件名+.mallox ,例如:sierting.txt.mallox
文件末尾会多100 bytes大小的内容,数据结构为:
由cure25519算法产生的share_key的sha256的前16位组成。
由CryptGenRandom函数生成4字节大小的数据当做梅森旋转算法的种子,然后生成256组随机数据,取最后4组,一组4个字节大小的数据为IV。
由CryptGenRandom函数生成4字节大小的数据当做梅森旋转算法的种子,然后生成256组随机数据,取最后10组,一组4个字节大小的数据为KEY和nonce,Key则为前8组,32字节大小的数据。
由CryptGenRandom函数生成4字节大小的数据当做梅森旋转算法的种子,然后生成256组随机数据,取最后10组,一组4个字节大小的数据为KEY和nonce,Nonce则为最后2组,8字节大小的数据。
其中的2E2F09F7A49A1A578998935C
为ID,成分为user_public_key
的前12位的值。既加密文件末尾32字节开头的12字节位置的值。
进入到Winmain函数可以看到,程序运行的开始会检查系统语言,遇到俄语、哈萨克语、白俄罗斯语、乌克兰语和土库曼语不加密。
设置电源计划为高性能模式。
将当前时间戳设置为srand函数的种子
创建进程删除指定的注册表和影卷
进入到del_RegKeys_shadow函数可以看到具体的实现,删除了指定注册表的键,并且通过vssadmin命令实现删除系统中的所有卷影副本。
开创一条线程来执行stop_process函数,实现系统恢复的禁用和停止指定的服务
)
进入stop_process函数可以看到具体实现,通过调用sub_3345BF函数执行命令实现系统恢复的禁用,最后调用sub_335FF6函数实现指定进程的关闭。
进入到sub_3345BF(命令执行)函数可以看到命令执行的具体实现,主要就是通过API函数ShellExecuteW执行cmd.exe+参数
进入到sub_335FF6(关闭服务)函数,可以看到主要调用API函数Process32NextW开始遍历所有进程,然后获取进程的可执行文件进行比较,如果一样就调用API函数TerminateProcess对该进程进行关闭,如果不一样,则遍历下一个进程。
创建一个线程执行stop_server函数, 实现对指定服务的关闭。
进入到stop_server函数可以看到具体的实现,可以看到主要就是调用API函数ShellExecuteA实现命令的执行
完成了上述的三个线程的处理函数后,会获取当前可执行文件的文件名
创建三个线程的互斥体
定义窗体的属性与消息处理sub_33679A函数、
进入到sub_33679A函数可以看到具体的实现,如果遇到窗体关闭的事件,则阻止关闭,返回0,其他的照旧。
完成上述的窗体属性定义后,将调用API函数CreateWindowExW开始创建窗体,然后调用API函数ShutdownBlockReasonCreate对用户进行提醒如下消息:
在完成了上述窗体的创建后,将调用sub_3342CE函数实现对指定的注册表的修改,以实现对关机、重启和注销选项的隐藏
继续调用sub_3342CE函数对实现对修改注册表的修改,以实现对远程桌面连接的最大持续时间、用户断开连接的最大时间和会话空闲时间的最大值为0。
完成了上述的服务关停和注册表的修改等行为后,将调用start_enc函数,开始执行文件加密行为。
进入到start_enc函数可以看到具体的实现,首先会获取参数,参数功能如下:
参数使用方法:
以下二者若是CryptAcquireContextW函数获取加密对象失败则选择使用运行时间方式当做随机数的种子,如果没有失效则选择CryptGenRandom函数来生成随机数的种子。
第一是通过获取当前系统中各种运行时间和线程进程的ID,将其相乘当做随机数生成的种子
第二是调用API函数CryptAcquireContextW获取一个RSA的加密对象,并且调用API函数CryptGenRandom随机产生4个字节,当做随机数的种子。
经过多次测试,发现会选择第二种,采用CryptGenRandom函数的方式获取随机数种子。
之后会将该种子当做是梅森旋转算法的随机数种子
接着会初始化一个public_key,然后与后面的一组56个字节大小的内容(C盘序列号+CPUID+固定内容+计算机名称)的sha256进行一个cure25519算法的密钥生成。这里命名public_key和56字节大小的数据的sha256产生的share_key为user_private_key
这里命名public_key和56字节大小的数据的sha256产生的share_key为user_private_key,接着再利用这个生产的私钥产生一个对应的公钥,然后再用这个私钥和黑客的hack_public_key生成一个共享密钥share_key。
这里具体可以参考Babyk家族分析中的算法分析那部分的内容,都是一样的。接着会获取该share_key的sha256,其中这个share_key的sha256的前半部分是用于后续AES加密算法的密钥。
完成上述过程后,会先遍历一下C盘下的所有文件,如果无法遍历出现错误则将当前文件句柄关闭。
然后调用sub_E4441C函数,将user_public_key的前12位字符转换成hex的形式,然后将其值当初target_id
,用作后续的数据回传的target_id
字段。进入到sub_E4441C函数可以看到具体实现,这里将其命名为string_to_hex函数。
接着会调用CreateThread函数,创建一个线程来执行send_network函数。
进入到send_network函数可以看到具体的实现,主要就是使用Sleep函数,每隔一段时间段执行sub_E45B7E函数进行数据的回传,最多传七次。
进入到sub_E45B7E函数可以看到具体的回传细节,主要就是向如下URL地址http://193.106.191.141/QWEwqdsvsf/ap.php
发送磁盘的文件大小和ID等信息,字段格式如下:
并且上述函数还会创建一个TargetInfo.txt文件,将Target_ID和系统信息等数据写入到其中
完成了上述的回传分析后,将继续执行剩余的加密前的流程。
调用sub_E45423函数来进行文件遍历和数据加密的过程。
进入该函数内部可以看到具体实现。首先会调用CreateIoCompletionPort函数,来获取IO端口,如果获取失败则退出,成功则进行后续内容。
如果IO端口获取成功,则会调用GetSystemInfo函数来获取系统信息,并且根据处理器的核心数来计算出合适的线程数量,但是最大不超过64。
然后创建指定数量的加密线程,其中加密线程所执行的函数是StarAddress函数。
进入到StarAddress函数可以看到具体的实现,其中包括了随机密钥的生成和加密文件的具体过程。
首先会调用梅森旋转算法所生成的随机数种子来生成256组随机数
接下来死循环来不断地调用GetQueuedCompletionStatus函数来获取CompletionPort句柄中的值,可以理解为管道一样的东西,只要后面的目录遍历功能中,调用PostQueuedCompletionStatus函数往该句柄中扔符合条件的文件路径时,这边就会接收到,然后交给下面的操作。
如果CompletionKey=0,则代表接收到的文件路径是文件,则执行enc_file函数,对该文件进行加密操作。如果CompletionKey=1,则代表接收到的文件路径是文件夹,则执行write_ransomware_note函数,向该文件夹中写入勒索信。
这里直接进入到enc_file函数,来看文件加密的具体过程。首先会先获取一下后续AES加密算法的IV,获取方法就是从传入的256组随机数中,取后4组数据,然后一组数据是4个字节组成,一共16个字节。
然后继续接着上面的v7的位置从后往前再取10组数据,一共40个字节,当做ChaCha20加密算法的Key和Nonce。
接着就是开始初始化一下ChaCha20的Key和Nonce还有AES的IV。
调用AES-128-CTR加密算法,来对40个字节的ChaCha20的Key和Nonce数据进行加密。
其中在aes_init函数的初始化部分可以看到key的具体使用,主要去了share_key的sha256的前16个字节的内容。
这里写一个脚本可以模拟一下这个过程:
到这里开始,就将进入文件加密的核心环节。
首先会获取文件句柄,如果获取失败则执行下面的错误处理,错误处理这里没什么用就不分析了。
获取到了文件的句柄后,将继续获取文件的大小,并且根据其文件大小来选择合适的加密大小。如果文件大小小于10000字节大小,则不进行加密。反之如果大于10000字节大小,则进行下面的加密内容。
如果文件大小大于10000字节,则会将文件大小分为十个块。如果a4不为0,则循环进行qword_E648F8标志的更新操作,但是这里a4=0,所以不进行如下循环的操作。
接下来,会将本来已经将文件大小分成10个块的大小后,又将每个块分成100个大小,并且每个块的大小必须是4096。
然后开始判断,如果文件的大小大于102400字节大小,则进行进行分块加密,每个块为4096字节大小,如果不足4096字节大小的快,则强行扩展至4096大小。
获取到了每块大小后,循环进行加密,加密算法使用了ChaCha20。
如果文件的大小小于等于102400字节,则直接一次性全部加密,然后写入再写入到文件中。
最后会调用SetFilePointerEx函数将文件指针移向末尾,然后写入100字节的内容,这些内容的大小与结构如下:
以上便是文件内容的全部加密过程。
在完成了文件加密以后将会对文件名进行修改,末尾会加上.mallox
的字样,用来说明该文件已被加密。
在文件加密部分的StarAddress函数中**,接收到的路径是文件的,则会进行上述的加密行为,如果是文件夹则会写入勒索信,而写入勒索信的部分的内容则是sub_E44C7B函数实现。**
进入到sub_E44C7B函数可以看到具体的实现,首先会先获取一下ID,这个ID跟上面的那个回传使用的target_id是一样的,都是使用了生成的user_public_key的前12位为ID。
然后替换到勒索信{id}中
最后写入勒索信到指定目录中
当分析完毕了文件加密部分的内容以后,继续文件加密前的准备过程部分的剩余内容。
在创建了指定数量的文件加密线程后,将会执行sub_E45326函数来实现横向移动的操作,其中会携带两个参数:
第一个参数是v53,是-l 参数的内容,在开始加密部分即可看到。
第二个参数是sub_E44B1A函数,用来执行复制自身,创建Windows服务,实现持久化操作。
进入到sub_E45326函数可以看到具体的实现过程。首先会检查-l参数是否存在内容,如果存在,则会直接向-l参数指定的地址中进行横向移动操作。
如果-l参数并未指定内容,则开始执行else中的内容,调用API函数GetIpNetTable,获取ARP中的所有IP,来对该表中的所有IP来进行横向移动。
具体的横向移动的实现是使用了sub_E44B1A函数实现**,进入到sub_E44B1A函数可以看到具体的实现。**
主要就是循环来进行文件的复制,复制的文件名为mallox.exe,然后创建windows服务,实现持久化,服务名称为mallox。
完成了上述的持久化以后,将继续回到加密前的准备过程中,执行剩下的文件遍历部分的内容。
目录遍历这部分会遍历所有的物理磁盘还有共享文件夹等内容,基本上流程都是一样的,这里主要分析第一部分。
首先如果**-p参数有指定目录的话,会先遍历指定目录中的文件,但是在遍历时需要对遍历到的文件路径进行过滤,这里的文件遍历主要使用了sub_E44E64函数**。
进入到sub_E44E64函数可以看到具体的实现,首先会获取完整的文件路径,然后加上遍历通配符,最后获取文件句柄,开始循环遍历。
接着会对遍历的文件进行过滤,首先如果遍历到的文件路径是文件夹,则会对该文件夹进行递归判断,如果允许递归,则会对该路径进行过滤,过滤的字符如下:
如果文件路径是文件,则会对该文件的文件名和文件后缀进行过滤,首先会对文件名进行过滤,过滤的内容如下:
如果不包含上述内容,则继续向下执行,进行下一层的过滤,过滤内容如下:
如果文件中不包含上述过滤内容,则会进行下一层的过滤,过滤内容如下:
如果文件中也不包含上述过滤内容,则会进行下一层的过滤,过滤内容如下:
如果文件包含上述的过滤字符串,则会将v17变量的值从0设置为1。接下来会进行最后一个过滤,但是该过滤会根据a3参数的值来进行判断是否开启,如果开启,则过滤内容如下:
当遍历的文件如果未包含上述所有的文件名和后缀,则会通过PostQueuedCompletionStatus函数,将该路径放入到CompletionPort中,供文件加密部分的GetQueuedCompletionStatus函数来进行获取并加密。
最后调用FindNextFileW函数循环遍历下一个文件,如果所有文件遍历完毕,则调用FindClose函数关闭文件句柄,然后调用write_ransomware_note函数向遍历的文件夹路径中写入勒索信。
在加密完毕以后,将调用sub_3342CE函数实现对指定的注册表的修改,以实现对关机、重启和注销选项的显示,并且允许用在未登录的时候可以关闭计算机。
在加密过程中,病毒通常采用强加密算法AES,来加密用户的文件,生成唯一的加密密钥。这些加密算法不仅确保了文件的安全性,同时也使得解密过程极为复杂和耗时。为了进一步增加恢复难度,部分病毒会修改系统设置或禁用安全软件和恢复工具,防止用户通过常规手段恢复文件或修复系统。这种操作使得受害者在遭受攻击后几乎无法自行解密文件,迫使其依赖攻击者提供的解密工具。与此同时,病毒通常会在文件加密后显示赎金通知,要求受害者支付特定金额的比特币或其他加密货币,以换取解密密钥或工具。
病毒家族 | mallox |
---|---|
首次出现时间/捕获分析时间 | 2024/03/18 |
威胁类型 | 勒索软件,加密病毒 |
加密文件扩展名 | .mallox |
勒索信文件名 | FILE RECOVERY.txt |
有无免费解密器? | 无 |
联系邮箱 | mallox.resurrection@onionmail.org |
检测名称 | 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.mollax)。桌面上会显示一条勒索要求消息。网络犯罪分子要求支付赎金(通常以比特币)来解锁您的文件。 |
感染方式 | 受感染的电子邮件附件(宏)、恶意广告、漏洞利用、恶意链接 |
受灾影响 | 所有文件都经过加密,如果不支付赎金就无法打开。其他密码窃取木马和恶意软件感染可以与勒索软件感染一起安装。 |
Hello
Your files are encrypted and can not be used
To
return
your files in work condition you need decryption tool
Follow the instructions to decrypt all your data
Do not
try
to change or restore files yourself,
this
will
break
them
If you want, on our site you can decrypt one file
for
free
. Free test decryption allowed only
for
not valuable file with size less than 3MB
How to get decryption tool:
1) Download and install TOR browser by
this
link: https:
//www.torproject.org/download/
2) If TOR blocked in your country and you can't access to the link then use any VPN software
3) Run TOR browser and open the site: xxxxxxyhwqrgo4a45wdvvwhen3cx4euie73qvlhkhvlrexljoyuklaad.onion/mallox/privateSignin
4) Copy your
private
ID in the input field. Your Private key:
5) You will see payment information and we can make
free
test decryption here
Our blog of leaked companies:
xxxxxxyhwqrgo4a45wdvvwhen3cx4euie73qvlhkhvlrexljoyuklaad.onion
If you are unable to contact us through the site, then you can email us: mallox.resurrection@onionmail.org
Waiting
for
a response via mail can be several days. Do not use it
if
you have not tried contacting through the site.
Hello
Your files are encrypted and can not be used
To
return
your files in work condition you need decryption tool
Follow the instructions to decrypt all your data
Do not
try
to change or restore files yourself,
this
will
break
them
If you want, on our site you can decrypt one file
for
free
. Free test decryption allowed only
for
not valuable file with size less than 3MB
How to get decryption tool:
1) Download and install TOR browser by
this
link: https:
//www.torproject.org/download/
2) If TOR blocked in your country and you can't access to the link then use any VPN software
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!