614D9828AD3C1E5E0F7C4C4DC70358F0 病毒分析

0x0 写在前面
和同学那里拿到的样本,感觉很有事意思,第一次写,多有遗漏,欢迎指正。

下面就是详细的分析流程:
0x1 概述
样本名:614D9828AD3C1E5E0F7C4C4DC70358F0.exe
MD5
614d9828ad3c1e5e0f7c4c4dc70358f0

壳信息:NullsoftInstallation System制作的安装程序
分析环境及工具:winXpsp3IDA6.8x64Dbg、火绒剑、哈勃分析系统


0x2、相关文件
614D9828AD3C1E5E0F7C4C4DC70358F0.exe
:样本主体

424 bl 3.ADO:数据文件

Guadalajara.dll:创建傀儡进程

MorwongDisciple:数据文件
System.dll
:内部调用Guadalajara.dll导出函数,创建傀儡进程

0x3、行为预览:
1.释放文件

2.添加自启动

3.检测虚拟机

4.创建互斥体

5.链接网络下载文件

6.跨进程读写数据

7.创建套接字,发送数据包

 

0x4、报告正文:

样本介绍:
该样本为一个安装包文件,通过释放4个文件,加载其中2dll,读取另外俩个文件,创建傀儡进程,反虚拟机,链接指定站点,下载文件,添加自启动,将自身拷贝到系统文件,自删除,获取系统路径,打开系统文件,在此创建系统傀儡进程,链接指定站点,创建套接字,发送数据包。
分析过程:
1.解压释放四个文件,system内部加载Guadalajara,之后在加载另外俩个文件,解密代码,创建相同文件的子进程,清空模块,将解压的代码写入,恢复进程完成傀儡进程的创建。

(1)   首先这个call内完成这个病毒创建傀儡进程:


(2)    内部进行了特别大的一个switch操作,为了节省时间这里通过火绒剑来进行行为分析,在关键api下断。




(3)    通过查看释放的4文件其中2个是dll,猜测会加载这2个dll,通过右键选择跨模块调用将所有的LoadLibrary类型函数断下,防止漏掉。



(4)    在加载system.dll后获取导出函数call,在内部加载了Guadalajara.dll,流程转移到Guadalajara.dll的唯一个导出函数Bisulphide。



(5)    接着打开另外的俩个文件,申请内存,读取解密,解密后是一个PE文件和内容为api函数名的字符串。



(6)   创建了一个相同的子进程(挂起),获取线程环境块,清空子进程,将解压出的pe文件写入,恢复线程。(傀儡进程创建完毕)




(7)    到此病毒的母体部分分析完毕,通过火绒剑和哈勃发现子进程(傀儡进程)才是病毒的实现。


2.这个pe文件在堆中创建2pe文件一个dll执行反调试,下载文件,一个exe执行启动regsvr.exe,创建傀儡进程,这俩个文件都已经dump和修复可在附件中查看。

(1)   需要用loadPE进行内存dump,之后修复PE文件,需要注意文件对齐的大小和节表需要用loadPE进行内存dump,之后修复PE文件,需要注意文件对齐的大小和节表

 的文件偏移。(在附件中有已经修复好的dump文件)

(2)    使用火绒和哈勃上传DUMP文件后,发现给出的行为分析和病毒样本的一模一样,这时候可以怀疑傀儡进程是病毒主要实现,使用x32Dbg进行跟踪调试后发现在进程创建后解密自身拷贝到堆栈,转移流程到堆空间执行在堆中申请空间解密代码,发现是pe文件,call到oep位置,通过分析发现这明显是个dll文件,采用内存dump,修复IAT。



(3)    拍摄快照,获取进程名,打开注册表,打开事件对象,打开文件,检测vbox虚拟机,在堆栈中发现了vm虚拟机进程名和注册表HARDWARE\ACPI\DSDT\VBOX__的关键字,在条件成立和循环结束处下断,去除反调试。








(4)  循环链接网络下载文件,加入计划任务创建自启动。




(5)    在环境变量中查找临时目录的位置,然后将创建文件将自身拷贝到文件夹下,之后启动进程。




3.挂起的方式创建进程是系统目录下的regsvr.exe,卸载主模块,内存映射,恢复进程,结束进程。

(1)    将堆中的exe文件dump出来修复iat,但是不可执行(还未找到原因),可以静态分析,dump好的可在附件中查看。

(2)    获取当前权限令牌


(3)创建傀儡进程,卸载主模块,创建内存映射,结束进程。




4.最后一层颇有意思,启动系统目录下regser.exe,卸载模块,通过创建内存映射,将2pe文件和一个修复iat表的一段代码映射到傀儡进程中,然后关闭自身,被创建的regser.exe再次通说过内存映射创建一个regser.exe

(1)      通过查看检查注册表,检测是否在虚拟机中运行,修改注册表降低浏览器的版本,容许使用受限制的协议,检查是否有网路分析工具。



(2)更改文件关联将,在注册表中写入超大的js脚本执行命令


(3)      创建线程,发送数据,下载文件,加密方式怀疑是base64(等号结尾,但是解密失败)。



(4)   写入启动项但是无法查看到,执行js脚本来进行启动。(因为在字符串前置0导致regedit.exe读取失败)。



(5)创建备份删除自身


总结:通过在注册表写入js代码前置0,逃避注册表监控,通过创建系统进程卸载主模块然后跨进程拷贝代码然后连接网络下载文件完成恶意行为。

流程图: