一名网络空间安全专业学生学习本书过程中记录下所做实验,如有错误或有待改进的地方,还请大家多多指教。
使用 PEview 打开exe文件,查看SECTION .text下的IMPORT Address Table。
这个恶意代码的导入函数内容异常少,仅有一个ExitProcess,仅这么一个导入函数理论上无法使一个程序正常运行,怀疑出现了加壳或混淆。使用 PEiD 进行侦壳。
看来是加了壳的,壳为PEncrypt 3.1 Final -> junkcode。但这里题目并未要求脱壳,且是动态分析章的实验,就不脱壳再重复静态分析了。
但加壳不怎么会影响其中关键字符串信息。将exe文件复制到strings.exe同一目录下,在该目录下打开命令行,使用命令strings Lab03-01.exe 查看可打印字符串。
以上是导入函数内容及个人认为比较有意义的字符串内容。
开启 Process Explorer,监视进程运行情况。
开启 Process Monitor,设置过滤器,由于先前通过strings.exe看到了一个可疑字符串“vmx32to64.exe”,而该恶意代码名为“Lab03-01.exe”,因此设置如下两个过滤器。
开启 ApateDNS,点击“Start Server”监视DNS查询请求。
开启Wireshark监视网络流量包。
开启 Regshot ,点击“建立快照A”拍摄运行恶意代码前的快照。
运行Lab03-01.exe。
查看 ProcessExplorer,能够看到Lab03-01.exe确实已经在运行。
查看 Process Monitor 对进程行为的监视结果,了解该恶意代码都做了哪些方面的事情。
可以看到该恶意代码大概做了三方面的事:遍历了大量目录并对大量的dll文件进行了操作;对注册表键值对进行了大量的新建或修改;有网络行为,建立了TCP连接。
查看 ApateDNS 捕捉到的网络行为。
可以看到对“www.practicalmalwareanalysis.com”进行了访问。
在 Wireshark 中右键TCP包,点击“跟随TCP流”。
并没什么内容。
在 Regshot 上点击“建立快照B”,拍摄第二份快照并保存报告,然后点击“比较快照”。
其中个人认为比较重要的修改/新增如下:
修改了加密随机数生成器的种子。
修改了TCP/IP协议配置参数。
修改了网络设置。
当然,也还有大量其他修改,但我目前对恶意代码所会修改的注册表关键/常见键值对还不敏感,对重要表项的意义也不熟悉,因此暂无法作出更深入的分析。
此外,我们在strings.exe中看到了字符串“vmx32to64.exe”,怀疑该恶意代码会释放或通过网络下载一个vmx32to64.exe程序到计算机中,因此我们使用 Listary 在计算机上查找是否有该exe文件。
发现该文件在C:\WINDOWS\system32目录下,我们先前也确实在Process Monitor中看到恶意代码对该目录进行了许多操作。
此时,不禁想再回到Process Monitor中查看是否有相关操作。
果然,有exe文件的创建操作以及对“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”的修改,这个修改操作应是想让vmx32to64.exe能够开机自启动。
此外,并没有发现有请求资源下载的行为,Lab03-01.exe资源节中也没什么内容,怀疑这个vmx32to64.exe文件的来源。
使用Windows自带的 fc 工具比较了一下两exe文件的异同,发现一模一样,说明Lab03-01.exe只是单纯把自己复制到了C:\WINDOWS\system32目录下,并让自己能开启自启。
——综述:1.特定注册表键值对出现了与上面类似的修改、删除、增加;2.监视网络行为,出现了对“www.practicalmalwareanalysis.com”的访问;3.检查C:\WINDOWS\system32目录,出现了vmx32to64.exe。若有上述三种情况出现,则该计算机已被恶意代码感染。
由上述分析可得,该恶意代码虽然有访问网站的行为,但没有其他下载、请求资源或页面的行为(发的数据包也没啥内容),因此网络特征码应只是网址“www.practicalmalwareanalysis.com”。
当恶意代码为DLL文件时,想要运行起来动态分析往往有三种方法(或者也可说是两种,详细内容可见后面会发的学习笔记),而这里题目直言“自行安装”,这就强烈地暗示我们要利用DLL的导出函数进行安装。
使用 PEview 查看导出函数。
用于安装的函数为Install和installA,这里使用Windows下自带的rundll32.exe来调用installA函数实现安装,执行命令rundll32.exe Lab03-02.dll,installA。
正如上面看到的,执行了安装函数后,并不会返回什么信息,Lab03-02.dll也并不会因此就变成了Lab03-02.exe供我们运行,因此我们需要分析下这个安装过程都干了什么。一般来说它大概率是将自己安装成了一个服务,对注册表会有操作,由于它还并不是个exe,因此使用Process Monitor可能无法监视到其行为,这里就只用 Regshot 来查看安装前后的注册表变化,先利用虚拟机快照恢复功能恢复到安装前的状态,Regshot建立第一张快照。
执行命令,拍摄快照B,点击比较快照并确定。
新添加了几个键,看看是什么。
其他新加的键值、改变的键值没那么重要了,知道添加了这几个键即可,它们告诉我们运行这个dll的安装函数后创建了一个服务“IPRIP”,使用命令net start IPRIP运行服务。
服务启动成功,即让恶意代码运行起来了。在“运行”中输入“services.msc”查看服务。
查看到该服务,它甚至还给自己设置了开机自动启动。
打开 Process Explorer,点击“Find”–“Find Handle or DLL…”。
查找“Lab03-02.dll”。
看来是在svchost.exe进程下运行的。
该恶意代码依附在svchost.exe下运行,也就是父进程为svchost.exe,2.3问中可以看到父进程PID为1060。Process Monitor 中打开过滤器,选择“Parent PID”,填入“1060”。(先开启Process Monitor再net start开启服务)
在开启IPRIP服务前后又拍摄了注册表快照来分析键值对变化,
主要还是对IPRIP键进行了一些增改,没有什么太有标志性的变化,因此该恶意代码在主机上的感染迹象特征仍是:相关目录下出现“IPRIP”键;新增了一个IPRIP服务,且该服务被设置为开机自动启动。
在开启服务前使用 ApateDNS 监视网络访问行为。然后使用net start命令开启服务。
对网站“practicalmalwareanalysis.com”进行了访问,该网址即是这个恶意代码的网络特征码。
本实验要求在一个安全的环境中执行恶意代码,不禁怀疑
打开 Process Explorer ,记录下未运行前的进程情况。
运行Lab03-03.exe,再次查看Process Explorer。
多出来一个“svchost.exe”,但Windows系统中出现这个进程也很正常,可能是系统进程,需要进一步判断是否为恶意代码创建的进程,双击该进程,查看“Strings”,分别查看“Image”、“Memory”下的内容。
可以看到,在磁盘和内存中的内容差别非常之大,且在内存中的内容里有一些非常有意思、可疑的字符串。可疑确定这是恶意代码运行后创建的进程。
在Process Explorer中(3.1问图)我们可看到svchost.exe的PID为2236,在 Process Monitor 中设置过滤器。
可以看到svchost.exe在Lab03-03.exe同一目录下创建了一个“practicalmalwareanalysis.log”,并且在不断写入内容,赶紧去打开该文件查看一下内容是什么。
内容里有我刚打开的Process Monitor过滤器名,而该栏下的内容为“22366BACKSPACE”,回想一下,2236正是svchost.exe的PID,而我刚才在设置过滤器时不小心输入了“22366”,然后按下“BACKSPACE”键删掉了一个6,看来该恶意代码能够记录用户的键盘输入以及在什么进程中输入了内容。
新建一个txt并输入点东西验证一下。
因为涉及到键盘输入,因此该恶意代码确实会对内存有读取行为,然后会将得到的内容写进磁盘。
将有一个“svchost.exe”在运行,且该进程并非Windows的系统进程,查看其字符串能看到前一问图中相关内容;计算机中将出现一个“practicalmalwareanalysis.log”日志文件。
目的是记录用户的键盘输入内容以及在哪里(文件名、进程名、文件类型等)进行的输入并保存在practicalmalwareanalysis.log日志文件中。
打开ApateDNS并开启服务、打开Regshot并拍摄快照A、打开Process Explorer、打开Process Monitor,因为不清楚该恶意代码是否会像Lab03-03.exe一样创建另一进程,所以暂不设置过滤器。运行Lab03-04.exe。
一切发生的太快,啥东西闪了一下(疑似打开了cmd),Process Explorer的内容也发生了一下抽搐(疑似出现了个啥进程又消失了),然后再一看恶意代码文件夹,好家伙,这个进程没了??
Regshot中拍摄第二个快照,查看下有没有什么变化。
似乎没什么有意义的内容。
没办法,只能在Process Monitor中直接设置过滤器查看Lab03-04.exe的行为,希望它并不是创建了一个新进程去完成恶意行为而自己却不做什么。
倒确实能看到不少的内容,有大量文件和注册表相关操作,但我其实看不太出有什么很有意义的操作,我暂时觉得重要的是它确实打开了cmd,应该是执行了什么命令(导致闪了一下),再结合它运行完后直接消失,初步判断可能执行了文件删除命令。
只能再用静态分析来看看能不能发现什么。
使用 PEview 查看文件。
导入函数是真不少。Advapi32.dll中导入的函数主要与服务和注册表有关,怀疑它可能创建了一个新的服务并运行了,此外之前从Process Monitor中也可能看到对注册表进行了大量操作,但是Regshot却只发现了一点小修改,怀疑恶意代码运行完后还会恢复注册表的内容防止对其进行动态分析;
Kernel32.dll中导入的函数有:文件相关(创建、读、写、删除、复制文件等)、字符串相关(比较字符串、中繁体切换等)、线程同步相关、cmd相关(打开终端、获取cmd中运行该exe文件时的参数等)、堆相关等;
Shell32.dll中导入了ShellExecuteA函数,用来执行cmd命令;WS2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序,说明该恶意代码有联网、访问网站行为。(函数过多,就不写每个函数具体作用了)
使用 strings.exe 查看字符串,命令为strings Lab03-04.exe。
有意义的内容不少,最重要的还是最后一张图中的内容,可以明确看出该恶意代码会有网络访问行为,目标网站是“http://www.practicalmalwareanalysis.com”,且可能会有文件上传、下载行为;该恶意代码也确实会开启终端,并执行了文件删除命令,结合前面所说,应是将自己文件Lab03-04.exe给删了。
确实很奇怪,静态分析几乎能将它的主要行为全看出来:服务相关、网站访问相关、可能有的文件上传下载、注册表操作、cmd命令执行删除自身、可能有的文件创建复制读写删除等,但在先进行的动态分析中我们确实几乎没得到任何什么有意义的信息,看不出恶意代码干了什么。
这个现象对现在的我来说的确离奇,但在静态分析中我看到了一个十分关键的导入函数:从Kernel32.dll中导入的GetCommandLineA函数。
该函数的作用是检索指向当前进程的命令行字符串参数,即如果用户是通过命令行来运行该恶意代码,如:Lab03-04.exe [参数1] [参数2] … [参数n],则调用该函数能够得到指向字符串“[参数1] [参数2] … [参数n]”的指针,即得到了命令参数。那么也就是说该恶意代码可能需要正确的参数(该程序中定义的参数之一)才能正常运行,而可能有效的参数string.exe也已经列了出来:-cc、-re、-in。
由4.2中的分析,尝试用命令行来执行该程序,先试试-cc参数。
动态分析得到的内容和之前没什么变化。
然后又尝试了-re、-in以及三个参数都加上,执行结果似乎还是没什么变化,可能参数组合方式不正确或者有效参数并不是这些,又或者,这个恶意代码只是用于实验分析,所以怎么都无法触发它真正的功能。
这时我确实没什么分析方法可用了,其他的运行、分析方式应该需要用到后面章节要学的 逆向工程。