样本
这是一个轻量且隐蔽性高的远程访问木马,从github上开源下载的。经过编译后得到,所以没有加载程序。它可以完全运行在RAM中,避免被检测。
内存转储
该项目是用VB .NET开发的,占用44 KB的磁盘空间
对感染设备上属于该恶意软件的PID进行了内存转储,发现该RAT大小为44KB,已使用系统中130.45MB的 RAM空间。
在检查导入的DLL时,观察到只有mscoree.dll在磁盘上被使用。这是程序使用的,因为该恶意软件运行在.NET框架上。
当检查进程内存转储时,发现使用了几个显著的 DLL,例如 fastprox.dll、wbemcomn.dll、rpcrtremote.dll、rasman.dll、System。
检测到 Net.Http.ni.dll 及其他许多内容。
值得注意的是,虽然在磁盘上仅可见 mscoree.dll 的使用,但在内存中使用此类 DLL 表明恶意软件正在内存中进行所有恶意活动。它在磁盘上看起来像干净软件的事实帮助恶意软件躲避杀毒程序的检测。
恶意行为
在分析代码结构时,确定该恶意软件在内存中执行基于字符串的代码,并将必要的 DLL 加载到内存中。观察到这些 DLL 是合法的(legit)DLL,存在于磁盘上并转移到内存中。
网络操作
在内存中观察到Base64格式的编码。在资源中已识别出内存中执行的代码,它们都以=的形式存在。
Check 变量中的 Base64 编码代码已被解码,分析将继续进行对该代码结构的检查。
当 Check 变量中的 Base64 编码的 C#代码被解码时,它揭示了与网络相关的结构,其中 HTTP 请求被发送到 C2 服务器,响应以 JSON 格式返回。screenshot 变量充当一个标志,如果被服务器修改,则向客户端发出信号,捕获并将屏幕截图发送到 C2。然而,这个结构中没有屏幕截图捕获代码。
防御规避
Checker 变量中的 Base64 编码代码已被解码。
已确定此解码代码部分完全专注于沙箱、虚拟机、服务器和恶意软件分析工具的检测。
在检测到的情况下,恶意软件会自我终止并不执行。检查的虚拟机进程名称:“vmtoolsd”、“vboxservice”、“vmsrvc”、“vmusrvc”、“vboxtray”、“xenservice”、“qemu-ga”
检查的虚拟机 MAC 地址:“00:05:69”、“00:0C:29”、“00:50:56”、“00:1C:14”、“08:00:27”、“00:15:5D”、“00:03”、“00:0F:4B”
检查的虚拟机注册表项:“SOFTWARE\VMware, Inc.\VMware Tools”、“SOFTWARE\Oracle\VirtualBox Guest Additions”、“HARDWARE\DESCRIPTION\System\BIOS\SystemManufacturer”、“HARDWARE\DESCRIPTION\System\BIOS\SystemProductName”
检查沙箱的进程名称:“sbiectrl”、“snxhk”、“nspectr”、“wsb”、“capesandbox”、“joeboxcontrol”、“analyze”、“procexp”、“zenbox”
检查沙箱的已知文件路径:“C:\windows\sysnative\drivers\sandboxie.sys”、“C:\windows\system32\drivers\sandboxie.sys”、“C:\windows\sysnative\drivers\cuckoo.sys”、“C:\windows\system32\drivers\cuckoo.sys”、“C:\windows\sysnative\drivers\zenbox.sys”、“C:\windows\system32\drivers\zenbox.sys”、“C:\windows\system32\vmGuestLib.dll”、“C:\windows\system32\vm3dgl.dll”、“C:\windows\system32\vboxhook.dll”“C:\windows\system32\vboxmrxnp.dll”,“C:\windows\system32\vmsrvc.dll”, “C:\windows\system32\drivers\vmsrvc.sys”
检查恶意软件分析工具和虚拟机的进程名称:“processhacker”,“netstat”,“netmon”,“tcpview”,“wireshark”,“filemon”,“regmon”,“cain”,“procmon”,“sysinternals”,“nagios”,“zabbix”,“solarwinds”,“prtg”,“splunk”,“kismet”,“nmap”,“ettercap”,“vmtoolsd”,“vmwaretray”,“vmwareuser”,“fakenet”,“dumpcap”,“httpdebuggerui”,“wireshark”,“fiddler”,“vboxservice”,“df5serv”,“vboxtray”,“vmwaretray”,“ida64”,“ollydbg”,“pestudio”,“vgauthservice”,“vmacthlp”,“x96dbg”,“x32dbg”,“prl_cc”,“prl_tools”,“xenservice”,“qemu-ga”,“joeboxcontrol”,“ksdumperclient”,“ksdumper”,“joeboxserver”
检查 RDP 服务器的进程名称: “mstsc”, “rdpclip”, “conhost”
已观察到执行 WMI 查询以检测环境。
已输入“Select * from Win32_ComputerSystem”查询,以获取有关计算机系统的信息,并检查在虚拟环境中使用的某些设备名称的存在。
为了收集有关计算机显卡的信息,系统中执行了 WMI 查询“root\\CIMV2”,“SELECT * FROM Win32_VideoController”,并检查与虚拟机中使用的显卡信息是否匹配。
正在使用 WMI 查询“Select * from Win32_BIOS”检查计算机的 BIOS 信息。正在检查 BIOS 信息是否与虚拟机中使用的 BIOS 详细信息匹配。
计算机的 CPU 信息是通过 WMI 查询“SELECT * FROM Win32_Processor”获得的。此外,这些信息与虚拟机环境中使用的 CPU 详细信息进行比较。
计算机的主板信息是通过 WMI 查询 “Select * from Win32_BaseBoard” 获取的。此外,这些信息与虚拟机环境中使用的主板详细信息进行比较,以检查是否匹配。
所有提到的用于虚拟机检测的 WMI 查询都被反复使用,并且也用于检测诸如 VPS、沙盒和 RDP 等环境
RAT 使用Software\Microsoft\Windows\CurrentVersion\Internet Settings 注册路径来检测执行它的计算机上的代理状态。这里检查 ProxyEnable 设置。如果 ProxyEnable的值为 1,则表示代理使用处于活动状态;如果为 0,则表示代理使用处于非活动状态。
调试器检测是通过 Kernel32.dll 中的IsDebuggerPresent进行的。
代理和托管检测是在网络上进行的,使用的服务是 ipapi.com。
对 URL http://ip-api.com/line/?fields=proxy,hosting 发出 HTTP 请求。
有一种基于时间的检测算法用于识别虚拟环境。它捕获当前时间,等待 10 毫秒,然后再次检查时间以计算差异。如果差异不是 10 毫秒,则检测到虚拟环境。威胁行为者使用此算法,因为在虚拟环境中,时间有时会比物理环境流逝得更慢。
在系统中,RAT 检查 DLL “SbieDll”、“SxIn”、“Sf2”、“snxhk” 和 “cmdvrt32” 的存在,以确定它是否在沙盒环境中运行。
信息收集
登录变量中的 Base64 编码代码已被解码。
关于用户名、Windows 和 Windows 版本的信息是在系统内获取的。已观察到正在执行 SELECT * FROM Win32_OperatingSystem WMI 查询。
正在获取受感染机器上的 CPU、RAM、GPU 和磁盘信息。
正在获取有关 CPU 名称和处理器核心数量的信息。正在执行 WMI 查询“SELECT Name FROM Win32_Processor”和“SELECT NumberOfCores FROM Win32_Processor”。
正在获取线程数量和 GPU 信息,并执行 WMI 查询“SELECT NumberOfLogicalProcessors FROM Win32_Processor”和“SELECT Name FROM Win32_VideoController”。
正在从感染设备获取磁盘驱动器的型号名称和大小信息(以 GB 为单位)。
它正在获取计算机中 RAM 模块的信息,并执行 WMI 查询“SELECT Manufacturer, PartNumber, Capacity FROM Win32_PhysicalMemory”。
在代码的最后阶段,从系统获得的所有信息以 JSON 格式传输到恶意服务器,该服务器被分配给“EndPoint”变量,并被威胁行为者指定为 C2。传输的数据可以在服务器端以 JSON 格式读取,并被攻击者监控。
Screen 变量中的 Base64 编码代码已被解码,分析将继续进行对该代码结构的检查。
该代码结构使用从 C2 接收到的参数在系统上捕获屏幕截图,并将其传输到 C2 服务器,直到成功为止。
创建文件
Set 变量中的 Base64 编码代码已被解码
在这个代码结构中,文件在本地目录中创建一个名为’xzigzag’的文件夹,并将自身复制到该文件夹中。然后,它终止正在运行的进程并执行复制到本地目录的文件。
它通过将自己添加到任务计划程序来实现系统的持久性。这样,每次打开 Windows 会话时,恶意软件就会再次激活并继续在 RAM 中运行。
它使用 schtasks.exe 进行任务调度操作,并向 schtasks.exe 提供必要的命令以实现持久性。在系统内,它通过发出如下命令变得持久:
schtasks.exe /Create /SC ONLOGON /RL HIGHEST /TN “XZIGZAG” /TR “%LOCALAPPDATA%\xzigzag\X-ZIGZAG.exe”
使用 Action.ExecuteCsharpCodeAsync() 方法,位于资源部分的 Base64 编码 C# 代码直接在 RAM 中执行,而不与磁盘交互。凭借其独特的算法和无文件技术,X-ZIGZAG RAT 绕过了各种 antivirus 程序。