公司新闻

铭说|关于复杂挖矿木马-Minas的技术分析

来源:聚铭网络    发布时间:2023-05-24    浏览次数:
 

摘要

近期,技术人员在用户现场检测时发现系统进程中存在一段可疑的 Shellcode,随后对其进行了深入调查,最终在系统的隐蔽位置中发现了挖矿木马——Minas。


重建Minas复杂感染链

虽然目前还无法重现整个感染过程,但是能够从执行的 PowerShell 对它的套路进行了复盘,如下图所示:


图1.Minas攻击执行流程


  1. PowerShell 脚本首先打入系统内部,运行后通过计划程序从远程服务器下载 lgntoerr.gif 文件;

  2. 脚本对 lgntoerr.gif 文件解密后生成一个.NET DLL,然后加载该DLL;

  3. .NET DLL 从其资源中提取并解密出三个文件:两个 DLL 和一个加密的有效负载,并放置在程序数据目录中;

  4. .NET DLL 同时会先创建一个任务,以便在系统启动时能够通过任务计划自动运行合法的 ilasm.exe 组件;

  5. 任务计划程序从 ProgramData 目录启动 ilasm.exe;

  6. 然后 ilasm.exe 在同一目录启动 DLL,劫持 Fusion.dll 后进行融合,.dll 加载第二个解密的 DLL;

  7. 该 DLL 创建一个挂起的 dllhost.exe 进程,并从加密的二进制文件中解密有效负载;

  8. 解密的有效负载再作为 DLL 加载到 dllhost.exe 进程中;

  9. dllhost.exe 将进程中的PID保存到 ProgramData 目录中的文件中,并将控制权传递给解密的有效负载;

  10. 最后,有效负载 DLL 提取并启动内存中的矿工 DLL。

通过数据库的检索和比对后,确认此恶意软件名为 Minas。根据技术人员对感染链的重建,发现它起源于作为任务运行的 PowerShell 脚本,而该脚本一般则通过 GPO 进行创建。


图2.编码后的PowerShell命令

Minas技术剖析说明

PowerShell 脚本的核心功能是启动恶意软件安装过程。为此,PowerShell 脚本从远程服务器下载加密的有效负载,使用自定义XOR加密算法(密钥“fuckkasd9akey”)对其进行解密,并将有效负载加载到内存中:



图3.解码的PowerShell命令



有效负载是由 .NET 二进制文件 (DLL)传递的三个参数:

$a.GetType(“I.C”).GetMethod(“I”).Invoke($null, ([Byte[]]($d),“A5D9FD13”,0));

  1. $d:.NET DLL 作为字节数组;

  2. A5D9FD13:(用于解密 .NET DLL 中的资源的密钥);

  3. 0:(用于阻止创建多个主有效负载进程的参数)。

此 .NET 二进制文件(以下简称“安装程序”)负责后续安装 .NET DLL 资源中包含的恶意软件组件。

首先,用哈希函数(Ap,SDBM,RS)安装程序创建一个目录结构:


图4.示例文件和目录


接下来,它将检查系统上是否存在合法的 ilasm.exe 文件(版本 4.0.30319 位于 %windir%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe 或版本 2.0.50727 位于 %windir%\Microsoft.NET\Framework64\v2.0.50727\ilasm.exe)(如果系统上存在 ilasm.exe,则它应该位于这些目录之一中)。如果未找到该文件,安装过程将终止,一旦找到 ilasm.exe就会创建一个计划任务作为持久性机制:



在此之后,将文件复制到先前创建的目录中。然后,恶意软件安装程序的前100个字节将会追加到从“_64_bin”.NET DLL 资源中提取的文件 {RSHash(MachineName)},并生成加密的文件。此外,多达 10240个随机字节会附加到 fusion.dll 和 {SDBMHash(MachineName)}.dll 文件中,从而使反恶意软件产品的哈希检测无效。

接下来,安装程序启动先前为 ilasm.exe 创建的任务,该任务又加载位于同一目录中的恶意 fusion.dll 库,假设它使用的是合法的 fusion.dll (DLL劫持)。

恶意软件执行过程由两个加载程序组成:DLL 劫持者融合 .dll 和下一阶段加载程序 {SDBMHash(MachineName)}.dll,同时 DLL 劫持者通过以下步骤进行检查:

  1. 隐藏 ilasm.exe 进程的控制台;

  2. 确定进程的名称是否为 ilasm.exe,否则它将终止进程;

  3. 基于 SDBM 哈希函数,构建路径 C:\ProgramData\{SDBMHash(MachineName)}\{SDBMHash(MachineName)}.dll尝试通过 LoadLibraryA API 函数将该 DLL 加载到内存中。

{SDBMHash(MachineName)}.dll DLL 会再次检查进程的名称是否为 ilasm.exe。然后,生成文件路径 C:\ProgramData\{SDBMHash({SDBMHash(MachineName)})}并检查它是否存在。如果该文件存在,它将从中读取值(十进制数),此十进制数是 dllhost.exe 进程的 PID 乘以上一次Minas运行创建的0x1F4,然后加载程序尝试使用该 PID 终止进程。

接下来,它读取并解密位于 C:\ProgramData\{ApHash(MachineName)}\{RSHash(MachineName)}\{RSHash(MachineName)} 的主有效载荷(矿工)。此外,加载程序会创建一个进程环境变量 (SetEnvironmentVariable) 配置,其值为 {“addr”:“185.243.112.239:443”,“p”:“143e256609bcb0be5b9f9c8f79bdf8c9”}。

图5.通过流程传递参数


之后,{SDBMHash(MachineName)}.dll 创建一个挂起的 dllhost.exe 进程,创建一个部分,将其映射到 dllhost.exe 进程,并写入先前读取和解密的文件(带有矿工组件的原始加载器)。然后,它读取 dllhost.exe 进程的内存,确定主线程的入口点并将其重写为:


将创建的 dllhost.exe 进程中的 PID 乘以 0x1F4 写入 C:\ProgramData\{SDBMHash({SDBMHash(MachineName)})}后, dllhost.exe 进程恢复,终止 ilasm.exe 进程。最后,dllhost.exe 将控制流传递给解密的原始加载程序,使加载程序在进程内存中映射XMRig矿工(DLL 文件形式的 XMRig 矿工程序集),然后使用反射加载启动它,矿工使用 GetEnvironmentVariable 获取流程环境变量配置的值掘加密货币。

图6.流程环境变量值


结论

虽然目前无法准确掌握最初的 PowerShell 命令是如何执行的,但可以确定攻击向量是通过 GPO 执行的味着攻击者已经破坏了不遗余力地安装工木马。

Minas 挖矿木马由于能够加密、随机生成名称并使用劫持和注入等技术手段进行入侵,使常规的安全检测方难以发现,需要提高网络安全防范意识,避免感染此类病毒。




 
 

上一篇:聚铭成立七周年之际,南京总部迎来焕新升级!

下一篇:《商用密码管理条例》2023年修订版全文公布