恶意代码分析实战-实验7

本文最后更新于:2021-08-17 下午

Lab 7-1

1.当计算机重启,这个程序如何确保它继续运行(达到持久化驻留)?

创建了一个系统服务来随系统启动,可以看到StartServiceCtrlDispatcherA函数。其中还有一个结构 ServiceStartTable。

1
2
3
4
typedef struct _SERVICE_TABLE_ENTRYA {
LPSTR lpServiceName;
LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
} SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;

这个服务的名称是Malservice,servicemain函数是sub_401040。

2.为什么这个程序会使用一个互斥量?

程序创建了一个名为“HGL345”的互斥量。

这是为了防止运行多个程序,首先调用OpenMutexA函数尝试打开名为“HGL345”互斥量句柄,如果已经存在就代表程序已经在运行了,就会退出,如果没有就调用 CreateMutexA创建互斥量。

3.可以用来检测这个程序的基于主机特征是什么?

名为”Malservice“的服务或者是”HGL345“互斥量。

4.检测这个恶意代码的基于网络特征是什么?

在StartAddress函数中,会有联网的行为,可以看到其中的agent信息和URL。

5.这个程序的目的是什么?

首先是创建互斥量防止启动多个。然后是创建一个名为Malservice的服务。然后开始设置时间,将时间设置为了2100年的1月1日0点。

然后调用WaitForSingleObject进入等待,等到前面设置的时间2100年1月1日0点。然后创建二十个同样的线程,来访问http://www.malwareanalysisbook.com

可以理解为一个DDOS的恶意程序。

6.这个程序什么时候完成执行?

不会完成执行,到2100年会创建20个线程,但是每个线程都是一个无线循环。

Lab 7-2

1.这个程序如何完成持久化驻留?

这个程序没有持久化驻留,执行一次完成后就会退出。

2.这个程序的目的是什么?

程序首先初始化了COM,然后创建了一个COM对象。

其中rclsid的值如下图所示,类标识符,对应的是Internet Explorer。

riid接口标识符对应的是IWebBrowser2。

返回的COM对象保存在ppv中,会调用偏移为0x2C处的函数,而这个函数是Navigate函数,函数调用后,就会打开浏览器浏览“http://www.malwareanalysisbook.com/ad.html”,之后就是一些清理工作。

3.这个程序什么时候完成执行?

当执行完访问页面之后就会结束。

Lab 7-3

DLL

先来分析一下DLL文件

使用IDA打开DLL文件,首先可以看到,尝试打开一个互斥对象,如果不存在就创建一个互斥对象,互斥对象名为SADFHUHF

然后就是SOCKET通信的流程,关于通信的流程可以参考传输技术-SOCKET通信 ,这里地址是127.26.152.13:80,一个本地地址,真实情况肯定不会是一个本地的地址。

发送的信息是hello,然后会关闭这个send连接。

然后是recv函数接收信息,如果收到的信息是sleep就会调用sleep函数。

如果收到的信息是exec就会调用CreateProcessA来启动一个进程。进程是lpCommandLine这个参数。

看这个参数,看到是从第五个字节开始,而我们接收到的命令是exec XXXX,XXXX就是需要启动的进程。这是从远端发送过来的。

到这里基本上DLL就分析完毕了,再来分析一下EXE。

EXE

分析一下EXE

要成功执行这个EXE还有一些限制,参数必须为WARNING_THIS_WILL_DESTROY_YOUR_MACHINE才可以执行这个程序。

像这样运行

当满足条件后会开始运行程序,先创建了两个文件,C:\Windows\System32\kerne132.dll(注意这里不是“l”而是“1”)和Lab07-03.dll,还把它们映射到内存中。

再往下的代码比较多也比较复杂,我也没有过多分析,按照书上这部分是在比较内存、写入偏移或者写入内存。直接到后面来分析

在进行完上述操作之后,先关闭句柄,然后复制文件,将Lab07-03.dll复制到C:

\Windows\System32\kerne132.dll,如果这个DLL已经存在的话,就不会调用4011E0这个函数,如果不存在复制过后就调用这个函数。

来查看这个函数,它的参数是C:\*,进来之后它会调用FindFirstFileA和FindNextFileA来遍历所有的文件,然后判断文件类型是否为EXE,

如果是exe的话,就会调用4010A0函数它会将文件映射到内存中,然后调用IsBadReadPtr验证调用进程是否具有对指定内存范围的读取访问权限。

然后检查加载的DLL中是否存在kernel32.dll,如果存在的话就会让kerne132.dll替换它。

打开process monitor监控行为,可以看到大量的文件操作。

打开一个calc.exe查看其加载的DLL,可以看到加载了kerne132.dll。

1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?

在计算机中的每个EXE中都植入了一个DLL,相当于一个后门。

2.这个恶意代码的两个明显的基于主机的特征是什么?

一个是互斥量SADFHUHF,另一个是在C:\Windows\System32\文件夹下的kerne132.dll。

3.这个程序的目的是什么?

搜索所有的EXE文件,并且让它们加载恶意的DLL文件kerne132.dll,这个DLL文件会进行一个SOCKET通信来执行操作,一个操作是sleep,另一个操作是会执行发送过来的进程,可能是恶意进程。

4.一旦这个恶意代码被安装,你如何移除它?

如果安装,当前的exe文件都会加载这个恶意的DLL,可以写一个程序遍历所有的exe并且搜索其中的kerne132.dll,然后再用kernel.32替换它,或者复制kernel32.dll为kerne132.dll进行替换。