-
-
[翻译]QBot恶意软件样本分析(第二部分)
-
发表于:
2020-5-25 19:07
13881
-
我终于找到时间继续分析QBot了。在之前的博客中,已经介绍了脱壳方法和字符串解密算法,可以点击链接查看。
本博客将介绍QBot注入explorer.exe之前的整个执行过程。我会讲解QBot实现的抗分析方法并解释注入过程,最后会快速讲一下注入任务执行的脱壳过程。
在QBot注入explorer.exe之前,有一个很有意思的进程执行链。样本被脱壳后会检查是否有运行的已知反病毒程序,接着通过/C参数来探测是否在虚机里运行。(这一过程中所采取的所有抗分析方法将在下一部分说明。)
父进程通过调用WaitForSingleObject保持执行状态,直到子进程QBot.exe /C执行完成。
如果子进程检测到是在虚机里,会发送一个事件让父进程停止执行。如果检测到不是在虚拟机里,父进程会将自己和配置文件放入随机创建的文件夹Roaming/Microsoft中。
一旦执行了该文件夹中文件,开始的二进制文件就会被父进程用calc.exe覆盖,在系统上不会留下明显的恶意软件线索。
QBOt实现了大量抗分析方法来保护自己,一旦检查出任何分析行为都会杀掉自己的进程。
(1)反病毒程序
第一种检查方法是列举所有进程并搜索已知的恶意行为防护进程。值得注意的是不管QBot的参数是什么,这个方法都会执行。
首先,初始化一个解密字符串表,利用函数Process32Next列举所有进程,利用strcmpiA函数将进程与表中字符串一一比对,一旦有匹配上的进程QBot会立即停止。这是它要防护的进程列表:
(2)虚拟机设备
虚拟机和沙箱会在系统中留下痕迹,这些痕迹可以在Windows的注册表中找到。QBot会列举设备列表并尝试从中找出以下设备:
(3)虚拟机进程
不只是反病毒进程会被检测,QBot还会检测沙箱环境中的普通进程:
(4)沙箱的DLL
例如沙箱中使用的SbieDll.dll,如果检测到这些DLL文件在运行,QBot就会停止。
(5)沙箱文件名称
你不能将一个正在运行的恶意软件样本命名为sample,因为恶意软件可能因为自己的名称是可疑名称而停止运行。这就是一个活生生的例子:
(6)CPUID检查
Qbot还实现了CPUID检查。通过执行eax=1指令,其返回值会体现处理器的特性。
最后一位是0表示是物理机,1表示是虚拟机。
(7)用calc.exe覆盖自己
为了隐藏自己,QBot会利用以下命令用calc.exe覆盖自己的启动文件:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-5-25 19:10
被Green奇编辑
,原因: