病毒分析教程第二话--动态行为分析

动态行为分析


教程参考自《恶意代码分析实战》
程序来自:http://www.nostarch.com/malware.htm


若样本经过了高级加密,使用静态特征分析将得不到太多有价值的信息,这时候就需要我们使用动态行为分析技术了,这种技术也叫行为监控。


Lab 3-1

本节实验使用样本Lab03-01.exe。
病毒分析教程第二话--动态行为分析

导入函数和字符串

查看导入表,只有一个ExitProcess,该样本应该是被加密过,通过导入表得不到什么信息。
病毒分析教程第二话--动态行为分析

样本被加密过的,但在字符串表中我们却发现了很多可视化的字符串,接下来我们就使用动态行为分析技术来看看这些字符串背后的恶意行为。
病毒分析教程第二话--动态行为分析

Process Explorer

运行样本后,使用ProcExp查看进程信息,点击View->Lower Pane View->Handles,可以在下方的窗口中发现该进程创建了一个名为WinVMX32的互斥量。
病毒分析教程第二话--动态行为分析

点击View->Lower Pane View->DLLs,可以查看该进程导入了哪些DLL,如下图中的红色框,我们发现了该进程导入了几个与socket有关的DLL,那么就可以猜测该进程发起了网络连接。
病毒分析教程第二话--动态行为分析

Process Monitor

运行程序前先配置ProcMon的规则,我配置了以下3个过滤规则(用于筛选出我们关心的恶意行为):

  1. 进程名为Lab03-01.exe
  2. 写注册表的操作
  3. 创建文件的操作
    病毒分析教程第二话--动态行为分析
    配置完过滤规则后,ProcMon就可以开始监控了,然后运行Lab03-01.exe。

ProcMon成功监控到了Lab03-01.exe的可疑行为,但其中非红框中的行为是合法的,因为每一个程序启动时都会帮随机数发生器更新种子。
病毒分析教程第二话--动态行为分析
红框中有两个可疑行为:

  1. 创建文件vmx32to64.exe,大小为7168字节,细心的同学可能会发现大小跟Lab03-01.exe大小一样,应该是样本自复制到了系统目录。
  2. 在注册表自启动项\Run\VideoDriver中写入了一个新的注册表键值,双击可以发现其写入的值是:
    C:\Windows\system32\vmx32to64.exe,这样就实现了每次开机自启动vmx32to64.exe。
    病毒分析教程第二话--动态行为分析

网络数据包

通过Wireshark抓包可以发现进程发起了DNS请求,域名为www.practicalmalwareanalysis.com。然后一直发送HTTPS的数据包,由于数据包经过加密,所以无法获取其内容。
病毒分析教程第二话--动态行为分析


Lab 3-2

本节实验使用样本Lab03-02.dll。

导入导出函数

由于该样本是个DLL,我们可以从它的导出函数中找到很多有价值的信息。如下图,我门一下就可以发现了两个与服务有关的函数,看来这个样本会将自己安装成一个服务,安装函数就是intallA。
病毒分析教程第二话--动态行为分析

再看导入函数,果然也有许多与服务相关的函数。其中还有一些操作注册表的函数(这是当然的,注册服务必然要再注册表中配置)。
病毒分析教程第二话--动态行为分析

也存在许多网络连接的函数。
病毒分析教程第二话--动态行为分析

字符串

字符串中中显示了许多与要创建的服务相关的信息。
病毒分析教程第二话--动态行为分析

Process Monitor

打开ProcMon按Lab03-1的过滤规则进行配置,开始监控rundll32.exe。然后在命令行中输入rundll32.exe Lab03-02.dll,installA运行样本。ProcMon立马监控到了修改注册表的行为,样本首先在服务项下创建了IPRIP健,然后为这个键添加了很多相应的键值,这是典型的创建服务的操作。
病毒分析教程第二话--动态行为分析

每个键值都描述了IPRIP服务的信息。这样,一个恶意的服务就创建完成了。
病毒分析教程第二话--动态行为分析

Process Explorer

创建完IPRIP服务后,我们使用命令net start IPRIP来启动该服务,启动后,可以发现该服务出现在了一个svchost进程中。
病毒分析教程第二话--动态行为分析

网络数据包

过了一会儿,我们通过Wireshark发现了该样本的恶意行为,首先它发起了对域名practicalmalwareanalysis.com的DNS请求,然后访问了这个网站的serve.html。点开细看后,我们发现了端倪,User-Agent处的值居然夹藏着我的主机信息,样本将我的主机信息传输到了黑客服务器。
病毒分析教程第二话--动态行为分析


Lab 3-3

本节实验使用样本Lab03-03.exe。

导入函数和字符串

先看字符串,得到的信息不多,但我们看到红框中的字符串,更像是终端中显示的调试信息,所以我们可以选择在终端中运行该程序,以获得更多提示信息。
病毒分析教程第二话--动态行为分析

导入函数中可以得到的信息就多了,第一个红框中的函数暗示了该样本有进程注入的行为(先调用SetThreadContext修改傀儡进程的EIP,指向恶意代码,然后调用ResumeThread恢复傀儡进程的运行),第二个红框暗示了样本会从自己的资源节中读取数据,所以我们可以猜测样本资源节中存放的就是一段恶意代码,样本运行后将其注入到傀儡进程中。
病毒分析教程第二话--动态行为分析

Process Monitor

打开ProcMon监控Lab03-03.exe的运行,没有发现篡改注册表,建立网络连接等操作,但却发现有许多对svchost.exe的文件操作,结合上面的进程注入行为,可以猜测样本是运行了svchost进程然后对其进行注入。
病毒分析教程第二话--动态行为分析

Process Explorer

使用ProcExp监控也印证了上面的观点,Lab03-03.exe运行后启动了进程svchost,将恶意代码注入到svchost进程之后退出。
病毒分析教程第二话--动态行为分析

Procexp还有个强大的功能,右键svchost.exe->Properties->Strings,选择下方的Memory选项,即可查看该进程在内存中的所有字符串。然后看到红框部分,这些字符串显得非常可疑,praticalmalwareanalysis.log说明进程可能会创建这个文件,下面的都是一些跟键盘按键相关的特征,有理由猜测进程在进行键盘记录的恶意行为。
病毒分析教程第二话--动态行为分析

最后我在样本目录下找到了practicalmalwareanaysis.log文件,原来它就是用来记录按键的文件。它记录了用户在哪个窗口下敲下了哪些按键。
病毒分析教程第二话--动态行为分析


Lab 3-4

本节实验使用样本Lab03-04.exe。

导入函数和字符串

导入函数跟上一节的实验的样本相似,也是啥可疑函数都有,如:服务函数、注册表操作函数、网络连接函数。
病毒分析教程第二话--动态行为分析

病毒分析教程第二话--动态行为分析

可疑的字符串比较多,我们先来看第一个红框,都是日期,这个暂时不能猜测其目的。。。接着看第二个红框,有一些HTTP的操作,GET、DOWNLOAD、UPLOAD,看来该样本会跟黑客服务器进行通信。最后的一个红框,有cmd.exe,应该是会调用cmd.exe干什么。
病毒分析教程第二话--动态行为分析

Process Monitor

使用ProcMon进行监控,没有可疑的注册表操作和文件操作,只有一个创建进程的操作比较可疑。同时,Lab03-04.exe运行后消失了!
病毒分析教程第二话--动态行为分析

点开这个创建进程的行为,真相大白,原来是该样本调用cmd.exe运行命令把自己给删除了,这是个典型的自删除手法。
病毒分析教程第二话--动态行为分析

其余的也没发现什么可疑的网络连接,看来需要后续的逆向技术才能分析出该样本的具体行为了。


总结

  1. 使用Process Monitor犹如沙箱一样可以监控样本的一举一动,但是设置过滤规则是一门艺术,确保监控到所有可疑行为的同时又要减少噪声,还有就是,排除噪声也需要平时经验的积累,如上面实验中的注册表项\RNG\Seed。

  2. 使用Process Explorer可以查看每个进程的详细信息,其中查看进程的内存字符串是用的最多的方法,因为一个样本再怎么加密,加载到内存中后都是以明文的方式显示,这时候再检测该内存中的可疑字符串,就可以判断该进程是否合法。

  3. 网络数据包抓包也是很关键的一步,现在主流的恶意软件如挖矿、蠕虫、木马都需要跟C&C服务器保持连接,这时监控终端的网络连接就显得很重要,但棘手的是,网络数据包可以经过复杂加密,所以有时得到加密的网络连接是很难判断行为的合法性的。

  4. 本节介绍的动态行为分析技术其实就是沙箱的雏形,想必大家也看到了沙箱的弊端,一是监控过程中噪声很多,很难把控,二是像最后一个例子Lab03-04.exe运行后没有明显的可疑行为,这可能是我们运行样本时传入的参数不对,或是该样本运行可能要在特定的时间点等等,要深究这些样本的底层原理就必须使用逆向技术对它们进行分析。