样本简介
RevCode WebMonitor RAT是一款商业远控,采用C2-as-a-Service(C2aaS)模式分发, 即“命令与控制服务器即服务”,最初在2017年投放市场销售,从官方公开的描述中可知该远控可使用Web浏览器进行控制受害者机器。
近来疫情的影响再一次让在线协作工具流行起来,其中就包括在线会议软件Zoom。近期深信服安全团队捕获了一个伪装成Zoom安装包的恶意文件,实质捆绑了远控后门,用户一旦安装完成后,便会安装远控木马,本地机器就会变成受控端。
虽然该恶意文件达到的效果确实为一个安装包文件,比如本地双击运行后,也会自动弹出一个正常的安装进度条,之后启动正常的带数字签名的Zoom主程序,但确实会释放木马,极具伪装性。
样本分析
对安装包进行分析发现是采用了Delphi开发的恶意文件,编译时间是Delphi编译后自带的,没有参考性。
母体运行的过程中会检测虚拟机,在虚拟机环境下是无法成功运行远控的,但后续正常的Zoom安装程序会启动,如下。
经分析后续母体会新建线程来执行恶意代码,线程地址为0045437C。采用CreateToolhelp32Snapshot方式遍历当前进程并存入当前所有的进程列表信息,之后通过拼接字符串得到所需的进程名进而对比检测是否存在相应进程。
以下是检测是否存在进程,如果检测到则自身母体进程退出。
所有会被检测的进程列表如下:
aswidagent.exe
avastsvc.exe
avastui.exe
avgsvc.exe
avgui.exe
avp.exe
bdagent.exe
bdwtxag.exe
dwengine.exe
mpcmdrun.exe
msmpeng.exe
nissrv.exe
ollydbg.exe
procexp.exe
procexp64.exe
procmon.exe
procmon64.exe
windbg.exe
进程检测完毕后进入003E00F7,这里是反调试检测,存在两次反调试检测。
反调试如下,类似NtQueryInformationProcess(),这个函数是ntdll.dll中一个API,它用来提取一个给定进程的信息。它的第一个参数是进程句柄,第二个参数告诉我们它需要提取进程信息的类型。第二个参数是一个枚举类型,其中与反调试有关的成员有ProcessDebugPort(0x7)、ProcessDebugObjectHandle(0x1E)和ProcessDebugFlags(0x1F)。例如将该参数置为ProcessDebugPort,如果进程正在被调试,则返回调试端口,否则返回0。ProcessDebugFlags参数用于获取调试标识,DebugFlag的值若为0则处于调试状态,若为1则处于非调试状态。
还通过采用FS寄存器中检测调试的标志位来检测是否存在反调试,如下。
反调试检测结束后,母体自身会检测所在的路径下是否存在malware、sample、sandbox等字符串,如果存在就自身进程退出,这里主要是为了防止在沙箱环境中运行。
以上反调试流程结束后,便开始寻找资源并加载资源。
读取的资源如下,大小0x47B。
申请内存,从上面资源里提取了0x47B大小的数据。
第一段16字节为RC 4密钥,解密的数据包括路径,以及一段VBS脚本内容。
脚本内容:sEt LyDYPTNvrAsucNC = crEateobjeCT("Wscript.sheLL")..lyDypTNVrASUcNc.ruN """%ls""", 0, False
后续采用了API HASH的方式获取对应的API函数地址,主要是为了防止静态分析。kernel32.CreateMutexW创建互斥量,之后拼接得到Unicode字符串\notepad.exe,后续会对notepad程序进行进程注入。
组合拼接所需的shellcode,后续会注入到记事本进程(notepad.exe)。
先启动"C:\Windows\system32\notepad.exe"进程,采用APC注入方式注入到shellcode到新进程中。
以下是注入的大体流程,采用APC注入方式。
进程注入成功后,会直接判断eax,如果满足条件就退出进程,让被注入shellcode的进程执行后续的恶意操作。
后续对进程注入的payload内容进行分析,首先会动态获取到的所有API函数,整理出的所有API函数如下。
kernel32.CopyFileW
kernel32.DeleteFileW
kernel32.CreateDirectoryW
kernel32.WriteFile
kernel32.CreateFileW
kernel32.CloseHandle
kernel32.GetFileSize
kernel32.ReadFile
kernel32.LoadLibraryA
kernel32.CreateProcessW
kernel32.GetFileAttributesW
kernel32.SetFileAttributesW
kernel32.SetFilePointer
kernel32.VirtualFree
kernel32.GetModuleHandleA
kernel32.GetProcAddress
kernel32.VirtualAlloc
kernel32.ExitProcess
kernel32.GetTempPathW
kernel32.OpenMutexW
kernel32.Sleep
kernel32.GetModuleFileNameW
kernel32.VirtualProtect
kernel32.GetSystemDirectoryW
kernel32.755F0000
shell32.75700000
user3 2.76900000
shell32.SHGetFolderPathW
shell32.ShellExecuteW
user3 2.wsprintfW
user3 2.wsprintfA
user3 2.MessageBoxA
user3 2.MessageBoxW
动态获取所需的API函数后,接着判断互斥量确保单一实例,打开本地母体文件读取文件内容,复制到C:\Users\onion\AppData\Roaming\Downloads\Zoom.exe,之后创建进程启动,删除本地文件,最后退出。
采用通用的shellcode动态获取API函数的步骤,如下。
shellcode的入口点如下
notepad.exe进程会创建VBS脚本文件,写入到对应系统启动目录下:C:\Users\onion\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Zoom.vbs
目前产生的脚本内容如下:
sEt LyDYPTNvrAsucNC = crEateobjeCT("Wscript.sheLL") lyDypTNVrASUcNc.ruN """C:\Users\onion\AppData\Roaming\Downloads\Zoom.exe""", 0, False
此处的Zoom.exe为之前的复制到该目录的原始母体恶意文件。
会创建以下文件:C:\Users\onion\AppData\Roaming\Downloads\Zoom.exe:ZoneIdentifier
notepad进程退出后,之前的C:\Users\onion\AppData\Roaming\Downloads\Zoom.exe 进程会进行本地文件自删除。
在Temp目录下会创建随机的批处理文件,作用是删除产生的文件,避免留下痕迹。文件内容如下,同名的文件是之前复制到该处的母体恶意文件。
批处理文件内容:
:Delfile
del "C:\Users\onion\AppData\Local\Temp\0gKnYbbp612TgY9q"
If Exist "C:\Users\onion\AppData\Local\Temp\0gKnYbbp612TgY9q" Goto Delfile
del "C:\Users\onion\AppData\Local\Temp\0gKnYbbp612TgY9q.bat"
同目录下的ZoomInstaller.exe文件为正常的带数字签名的安装文件,便于后续启动正常的安装流程,让用户不易察觉,同时会在Temp目录下创建文件ULrs.tmp,写入0x30内容。
安装包的产生是由后续母体流程中加载了资源里较大的数据块,之后解密出的正常Zoom安装包文件(如上图中的ZoomInstaller.exe),写入Temp目录下,改名为ZoomInstaller.exe,达到伪装的目的。
之后母体里通过命令行执行正常的Zoom安装包文件,来开启正常的流程安装Zoom。
最后会启动安装界面,出现安装进度条,然后启动成功,此时用户可以正常使用Zoom软件。
后续又加载了多段资源,并对它们进行合并解密,采用RC 4 内存解密出新的PE文件,此处产生的PE文件实质为远控木马。
采用进程镂空技术,先挂起进程,挖空并填充之后重新恢复执行真正的WebMonitor远控木马。
最新评论