恶意代码分析实战 第七章 实验部分

1、分析在文件Lab07-01.exe中发现的恶意代码。

prb.png

检查硬编码HGL345的互斥量是否存在,如果存在则退出,否则CreateMutexA创建互斥量,保证同时只有一个线程执行。

prb2.png

创建名为Malservice的新服务到服务控制管理器,通过服务实现持久化。互斥体硬编码和创建的HGL_345是基于主机的特征。

prb3.png

可以看到使用浏览器代理Internet Explorer 8.0访问urlhttp://www.malwareanalysisbook.com

这是基于网络的特征。

prb4.png

查看结构体,有一个SYSTEMTIME的结构体。

prb5.png
prb6.png

1异或自身edx为0,2,3,4,5赋值给结构体中的元素,步骤6将834h赋值给year,十进制的2100。

prb7.png

创建一个计时器,直到2100年1月1日,开启20个线程循环下载http://www.malwareanalysisbook.com

2、分析Lab07-02的恶意代码

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

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

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

查看导入表

07-02-1.png

从ole32库中导入了OleInitialize函数,这个程序可能使用了COM功能。

继续查看strings,存在可疑URLhttp://www.malwareanalysisbook.com/ad.html

Tips:这里需要设置让strings页面可以读取unicode编码的字符串。

07-02-2.png

跟进main函数

main.png

CLSID是0002DF01-0000-0000-C000-000000000046 (表示Internet Explorer)

IID是D30C1661-CDAF-11D0-8A3E-00C04FC9E26E (表示IWebBrowser2)

riid.png

CoCreateInstance执行结果保存在ppv,一旦结构体从调用返回,一旦结构体从CoCreateInstance处返回,COM客户端调用位于这个结构体某处偏移的一个函数,见下图。

navigate.png

1处拿到返回的结构体指针,2处将eax解引用并赋给edx,3处通过偏移调用IWebBrowser2Vtbl中的第12个函数Navigate,可以在struct页面尝试添加一个结构体(快捷键Insert)。每个函数4字节,第一个函数在0位置。

struct.png

该函数被调用后,Internet Explorer将导航至http://www.malwareanalysisbook.com/ad.html。该函数执行一些清理函数,但是没有持久化驻留,仅简单显示一个广告页面。

分析Lab07-03的EXE和DLL文件

对于这个实验,我们在执行前获取到恶意的可执行程序,Lab07-03.exe,已经DLL,Lab07-03.dll。声明这一点很重要,这是因为恶意代码一旦运行可能发生改变。俩个文件在受害者机器上的同一个目录下被发现。如果你运行这个程序,你应该确保俩个文件在分析机器上的同一个目录中。一个以127开始的IP字符串(回环地址)连接到了本地机器。(在这个恶意代码的实际版本中,这个地址会链接到一台远程机器,但是我们已经将它设置成连接本地主机来保护你。)
(warning:这个实验可能对你的计算机引起某些损坏,并且可能一旦安装就很难清除。不要在一个没有事先做快照的虚拟机中运行这个文件。)
这个实验可能比前面的那些有更大的挑战。你将需要使用静态和动态方法的组合,并聚焦在全局视图中,避免陷入细节。

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

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

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

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

首先分析Lab07-03.exe文件,查看导入表,有很多文件操作。

07031.png

查看strings视图

07032.png

1是仿冒的dll,说明该文件存在仿冒系统关键dll的可能,2说明可能调用了Lab07-03.dll,用IDA Pro打开查看代码。

argc.png

首先用eax保存命令行参数的格式,如果参数的个数不是2,会直接退出,并且比较了argv[1]是不是WARNING_THIS_WILL_DESTROY_YOUR_MACHINE这样保证了恶意代码不会在虚拟机中被自动执行,属于反动态检测的一种手段。

argv.png

打开两个文件C:\Windows\System32\Kernel32.dllLab07-03.dll映射到内存中。

map.png

接下来就是将C:\Windows\System32\Kernel32.dll 的导出表部分复制到Lab07-03.dll的导出表,这部分的操作需要对PE结构比较熟悉。

cpy.png

然后将Lab07-03.dll 复制到C:\\windows\\system32\\kerne132.dll将文件命名为和关键系统库相似的名称,进一步进行恶意行为。并跳转到loc_401806位置。先将参数C:\\*压栈,调用函数sub_4011E0

copyfile.png
4011e0.png

该函数如下,主要是遍历C盘文件,第29行找到.exe结尾的文件,调用函数sub_4010A0

4011.png

判断文件是不是以.exe结尾的逻辑主要在0x004013F6处。在0x004011E00x004013F6处设置断点,F9执行,查看栈上数据变化。可以看到这部分的执行逻辑和静态分析的结论一致。

4013f6.png
exe1.png
exe2.png

当结尾是.exe时候,不跳转,继续单步跟踪,运行到sub_4010A0函数。下面是伪代码。

4010a0.png

35行查找字符串kernel32.dll,37行调用qmemcpy进行复制,我们想要知道dword_403010位置是什么数据。继续跟进,光标放在dword_403010,使用快捷键A将此数据转换为string。

dword.png
covert.png

至此,程序功能清晰,就是将对kernel32.dll的调用,转换为kerne132.dll的调用,这样很多程序都会受到影响,很难清除。

动态调试发现比较字符串。之后使用repne scasb + rep movsd + rep movsb 内联实现 strcat

参考链接:

repne scasb + rep movsd + rep movsb 内联实现 strcat_hambaga的博客-CSDN博客

mm.png
copy22.png

分析Lab07-03.dll,查看导入表,有创建互斥体以及网络相关函数。

dll.png

查看strings,发现疑似恶意IP127.26.152.13还有几个其他可疑的字符串。

ip.png

跟进SADFHUHF字符串,可以看到这是一个互斥量名称硬编码,保证同一时刻只有一个恶意代码进程在执行。

sad.png

跟进127.26.152.13结构体sockaddr.data保存了host信息和端口信息。IP是127.26.152.13,端口是0x50(十进制80)

addr.png
111.png

buf中保存的是hello,发送这个字符串给C2,受害者已经上线,然后接收C2发送的命令,继续保存在buf中,检查buf的前五个字节是不是sleep如果是,跳出循环sleep60s,检查前四个字节是不是exec,如果是,使用CreateProcessA创建新的进程。关于此函数文档如下,lpCommandLine参数可以执行命令。说明此DLL文件带有后门功能。

https://docs.microsoft.com/zh-cn/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa
exec.png

Answer:

1、这个程序将自己复制到C:\windows\System32,并伪装成重要dll库,实际名称为kerna132.dll来执行持久化。

2、基于主机的特征是互斥量硬编码SADFHUHF,文件名kerna132.dll

3、目的是执行持久化操作,并留下后门,可以执行sleep和exec命令。

4、程序很难被移除,可以从快照恢复。

你可能感兴趣的:(恶意代码分析实战 第七章 实验部分)