从0开始CTF-PWN(三)没有system怎么办?构造你的shellcode
2020-05-26 17:43:33 Author: bbs.pediy.com(查看原文) 阅读量:460 收藏

[翻译]QBot恶意软件样本分析(第二部分)

21小时前 254

介绍

我终于找到时间继续分析QBot了。在之前的博客中,已经介绍了脱壳方法字符串解密算法,可以点击链接查看。

本博客将介绍QBot注入explorer.exe之前的整个执行过程。我会讲解QBot实现的抗分析方法并解释注入过程,最后会快速讲一下注入任务执行的脱壳过程。

进程执行链

QBot注入explorer.exe之前,有一个很有意思的进程执行链。样本被脱壳后会检查是否有运行的已知反病毒程序,接着通过/C参数来探测是否在虚机里运行。(这一过程中所采取的所有抗分析方法将在下一部分说明。)

父进程通过调用WaitForSingleObject保持执行状态,直到子进程QBot.exe /C执行完成。

如果子进程检测到是在虚机里,会发送一个事件让父进程停止执行。如果检测到不是在虚拟机里,父进程会将自己和配置文件放入随机创建的文件夹Roaming/Microsoft中。

一旦执行了该文件夹中文件,开始的二进制文件就会被父进程用calc.exe覆盖,在系统上不会留下明显的恶意软件线索。

抗分析方法

QBOt实现了大量抗分析方法来保护自己,一旦检查出任何分析行为都会杀掉自己的进程。


1)反病毒程序

第一种检查方法是列举所有进程并搜索已知的恶意行为防护进程。值得注意的是不管QBot的参数是什么,这个方法都会执行。

首先,初始化一个解密字符串表,利用函数Process32Next列举所有进程,利用strcmpiA函数将进程与表中字符串一一比对,一旦有匹配上的进程QBot会立即停止。这是它要防护的进程列表:

ccSvcHst.exe
avgcsrvx.exe
avgsvcx.exe
avgcsrva.exe
MsMpEng.exe
mcshield.exe
avp.exe
egui.exe
ekrn.exe
bdagent.exe
vsserv.exe
vsservppl.exe
AvastSvc.exe
coreServiceShell.exe
PccNTMon.exe
NTRTScan.exe
SAVAdminService.exe
SavService.exe
fshoster32.exe
WRSA.exe
vkise.exe
isesrv.exe
cmdagent.exe
MBAMService.exe
ByteFence.exe
mbamgui.exe
fmon.exe

2)虚拟机设备

虚拟机和沙箱会在系统中留下痕迹,这些痕迹可以在Windows的注册表中找到。QBot会列举设备列表并尝试从中找出以下设备:

VMware Pointing
VMware Accelerated
VMware SCSI
VMware SVGA
VMware Replay
VMware server memory
CWSandbox
Virtual HD
QEMU
Red Hat VirtIO
srootkit
VMware VMaudio
VMware Vista
VBoxVideo
VBoxGuest
vmxnet
vmscsi
VMAUDIO
vmdebug
vm3dmp
wdsk
vmx_svga
ansfltr
sbtisht

3)虚拟机进程

不只是反病毒进程会被检测,QBot还会检测沙箱环境中的普通进程:

vmtoolsd.exe
vmacthlp.exe
metsvc-server.exe
windump.exe

4)沙箱的DLL

例如沙箱中使用的SbieDll.dll,如果检测到这些DLL文件在运行,QBot就会停止。

ivm-inject.dll
SbieDll.dll

5)沙箱文件名称

你不能将一个正在运行的恶意软件样本命名为sample,因为恶意软件可能因为自己的名称是可疑名称而停止运行。这就是一个活生生的例子:

sample
mlwr_smpl
artifact.exe

6CPUID检查

Qbot还实现了CPUID检查。通过执行eax=1指令,其返回值会体现处理器的特性。

最后一位是0表示是物理机,1表示是虚拟机。

7)用calc.exe覆盖自己

为了隐藏自己,QBot会利用以下命令用calc.exe覆盖自己的启动文件:

qbot.exe的图形概况)

(覆盖qbot.exe的程序的图形概况)

注入到explorer.exe

一旦二进制文件被删除,QBot会创建一个挂起的进程explorer.exe并通过VirtualAlloc函数创建一个新的内存页。Qbot会注入到这个进程,挂起的线程会被ResumeThread调用。

如果注入成功,父进程会再次等待传入事件发生,如果失败则重新开始注入。

我已经将注入的代码与脱壳的QBot二进制代码进行了比较,并确定它将自己注入到explorer.exe而不是自定义代码。

有效载荷的脱壳

现在介绍注入过程。一旦挂起的线程重新开始运行,脱壳程序也会开始运行。

重新分配内存,其进程权限设置为可执行。


到目前为止,我确定了至少一个影响脱壳过程的程序。我将在下一篇博客文章中讨论这个问题

(上述过程的图形概况)


结论

我已经花了一些时间来逆向QBot,虽然还不能全部了解它,但已经取得了一些重大进展。从我的角度来看,我认为QBot试图检测虚拟机以及分析运行环境的方法是非常多的。如果你不这样认为,我很乐意听听你的意见。

下一篇博客中我会介绍脱壳过程。

IoC

SHA256: c23c9580f06fdc862df3d80fb8dc398b666e01a523f06ffa8935a95dce4ff8f4

原文链接:https://malwareandstuff.com/an-old-enemy-diving-into-qbot-part-2/

翻译Green

校对:lumou

[推荐]看雪工具下载站,全新登场!(Android、Web、漏洞分析还未更新)

最后于 21小时前 被Green奇编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-259742.htm
如有侵权请联系:admin#unsafe.sh