一名网络空间安全专业学生学习本书过程中记录下所做实验,如有错误或有待改进的地方,还请大家多多指教。
第1章 静态分析基础技术(实验)
- Lab 1-1
- Lab 1-2
- Lab 1-3
- Lab 1-4
- 4.1 将Lab01-04.exe文件上传至http://www.ViresTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
- 4.2 是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
- 4.3 这个文件是什么时候被编译的?
- 4.4 有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
- 4.5 有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
- 4.6 这个文件在资源段中包含一个资源。使用Resource Hacker工具来检查资源,然后抽取资源。从资源中你能发现什么吗?
Lab 1-1
这个实验使用Lab01-01.exe和Lab01-01.dll文件,使用文章描述的工具和技术来获取关于这些文件的信息。
1.1 将文件上传至http://www.ViresTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
访问http://www.ViresTotal.com/(现应为 https://www.virustotal.com/gui/),点击“Choose file”,分别上传Lab01-01.exe和Lab01-01.dll文件。
对Lab01-01.exe的分析结果:
对Lab01-01.dll的分析结果:
——显然,文件匹配到了已有的反病毒软件特征。
1.2 这些文件是什么时候编译的?
打开 PE Tools ,将Lab01-01.exe直接拖入GUI中,将出现详细PE信息。
点击“文件头”,查看文件头详细信息。
点击“时间/日期”后的按钮,查看解码后的编译时间。
同理,查看Lab01-01.dll的编译时间。
1.3 这两个文件中是否存在迹象说明他们是否被加壳混淆了?如果是,这些迹象在哪里?
直接使用侦壳工具 PEiD 进行查看,分别将两文件拖入GUI中。
——并未发现加壳
1.4 是否有导入函数显示出了这个恶意代码时做什么的?如果是,是哪些导入函数?
可以使用 PEview 打开该exe文件,然后在 .rdata 节中点开 IMPORT Address Table 查看导入的DLL文件及引用的函数。
也可以使用 PEiD 进行查看,点击“子系统”后的按钮查看PE细节信息。
点击“目录信息”中“输入表”后的按钮查看输入表。
点击DLL文件查看从该DLL中导入的函数。
比较重要的是从Kernel32.dll中导入的函数,这些函数大部分与文件相关,其中FindFirstFileA、 FindNextFileA组合使用能够遍历一个目录下的所有文件;CreateFileA用于创建文件,CopyFileA复制文件,这里或许是一起使用来将某一文件复制到某处。其他函数都可在Microsoft Docs中直接搜索函数名来了解具体作用。
这里再使用 strings.exe 来查看文件中的可打印字符串,来大概了解下它想复制的文件是什么以及想复制到什么路径下。
将Lab01-01.exe复制到string.exe同一目录下,使用命令strings Lab01-01.exe
前面都是一些没什么意义的字符串,最下面比较有意义的字符串中,能看到导入函数、dll、几个路径和“Lab01-01.dll”等。
可猜测该exe文件要进行的操作可能是:寻找Lab01-01.dll文件(字符串“C:*”意味着可能会遍历整个C盘),将其内容复制到新建的exe文件中并运行(当然,这不一定对),因此Lab01-01.dll中很可能有一些对计算机威胁较大的行为。
因此再用与先前相同的方式查看Lab01-01.dll中的相关信息。
从Kernel32.dll中导入的函数:CreateProcessA创建进程、Sleep休眠、CreateMutexA和OpenMutexA与互斥量相关(确保同一时间只有一个恶意代码实例在运行);MSVCRT.dll中导入的函数:malloce动态内存分配、free内存释放、strncmp字符串比较;WS2_32.dll:Windows Sockets应用程序接口,用于进行一些联网行为。
而strings列出的字符串中列出了一个IP:127.26.152.13,说明Lab01-01.dll确实有联网行为,会访问该IP。还有其他一些或许有什么意义的字符串。
这样看来,Lab01-01.exe中的文件创建和复制功能也可能是:先创建一个exe文件,然后调用Lab01-01.dll,访问上述IP后向远程服务器请求一个exe文件,可能并不能直接下载下来,这里可理解为创建了一个请求对象,对象中包含请求的exe文件的内容,然后复制到创建的文件中,实现文件的“下载”。
由于这一题问了恶意代码是做什么的,因此查看和分析了远多于“导入函数”的信息,也给出了自己关于“恶意代码做了什么及其目的”的结论,因此接下来的1.5、1.6、1.7问中就不再做详细分析。
1.5 是否有任何其他文件或基于主机的迹象,让你可以在受感染系统上查找?
正如1.4中的分析,该恶意代码运行后会有新的文件生成(理论上应是在Lab01-01这两个文件的同一目录下);此外还会有对特定IP的访问行为,如果在运行前开启了Wireshark进行抓包,或使用了ApateDNS等网络行为分析工具,将会看到对上述IP的访问。
1.6 是否有基于网络的迹象,可以用来发现受感染机器上的这个恶意代码?
查看Lab01-01.dll的导入函数可看到导入了WS2_32.dll,该dll为Windows Sockets应用程序接口,用于进行一些联网行为。
使用strings查看其中的可打印字符串后发现了一个IP地址。
因此该恶意代码有网络行为,将访问该IP地址,监视相关网络访问行为,可以发现受感染机器上的这个恶意代码。
1.7 你猜这些文件的目的是什么?
1.4中已经做出了较多的分析,可得出结论——该恶意代码行为是:Lab01-01.exe创建一个exe文件,然后调用Lab01-01.dll,访问上述IP后向远程服务器请求一个exe文件,可能并不能直接下载下来,这里可理解为创建了一个请求对象,对象中包含请求的exe文件的内容,然后复制到创建的文件中,实现文件的“下载”,并可能会执行。
当然,由静态分析得到的碎片信息拼出的恶意代码行为并不一定正确,想知道恶意代码到底做了什么,还是需要后面章节中的动态分析,不过也可直接在VirusTotal检测结果的BEHAVIOR中查看做了什么,以下实验同理。
Lab 1-2
分析Lab01-02.exe文件。
2.1 将Lab01-02.exe文件上传至http://www.VirusTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
同实验1中的步骤,访问网站并上传文件,得到结果。
2.2 是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果改文件被加壳,请进行脱壳,如果可能的话。
使用 PEview 查看,发现节名都变成了UPXn,节表信息解析也出现问题。
怀疑应该加了UPX壳。
使用 PEiD 直接查看壳。
呦呵,有壳,且是UPX壳,这种常见壳的脱法一般有两种:直接下载对应的脱壳器自动脱壳、使用OllyDBG进行动态分析手动脱壳。而我暂时并不熟悉手动脱壳方法,且后续也有专门的OllyDBG使用、脱壳章,因此这里就只用脱壳器自动脱壳。
选择“解压缩”,将exe文件拖入脱壳工具 FUPX。
点击“解压缩”进行脱壳。
再使用 PEiD 进行侦壳。
已成功脱壳。
2.3 有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
使用 PEview 打开exe文件,查看SECTIOON .rdata下的IMPORT Address Table。
从Advapi32.dll中导入的函数:CreateServiceA创建一个服务、OpenSCManagerA用于与指定计算机上的服务管理器建立连接并打开指定的服务控制管理器数据库、StartServiceCtrlDispatcherA函数在SCM启动服务程序时会被调用;
从Kernel32.dll中导入的函数:CreateWaitableTimerA创建计时器对象、SetWaitableTimer激活指定的计时器、WaitForSingleObject用于等待手动重置事件对象(如计时器对象)发出信号、CreateThread创建线程、CreateMutexA和OpenMutexA设置互斥量防止共享资源由多个线程同时访问;
WinINet.dll接口用于使用Internet协议,InternetOpenA初始化应用程序对WinINet函数的使用、InternetOpenUrlA用于打开由完整的FTP或HTTP URL指定的资源。
Advapi32.dll中导入的函数意味着这个恶意代码将创建一个服务并启动;Kernel32.dll中导入的函数在实现多个执行线程间同步时常会用到,几个时间相关的函数暗示多个线程的某些行为可能由计时器给出信号触发;WinINet.dll中导入的函数意味着这个恶意代码很可能联网并请求资源。
2.4 哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
由2.3中导入函数可看出这个恶意代码将创建一个服务并启动,服务必然是有名字的,这个名字在恶意代码中便是一个可打印字符串;此外,WinINet.dll中的函数暗示这个恶意代码应该有联网、访问服务器的行为,目标地址也将是个可打印字符串。因此我们使用 strings.exe 进行查看。
比较有意思的内容还是在最后导入函数之后。
“MalService”应该是恶意代码要创建的服务的名字,出现两次应该是因为先创建、再启用时都有这个字符串作为函数参数;"hxxp://www.malwareanalysisbook.com"是恶意代码要访问的目标网站;此外还有“Internet Explorer 8.0”字符串,应该是要从目标网站下载IE8。
因此,查看计算机服务,如果有名为“MalService”的服务,则该机器已被恶意代码所感染;监视网络行为,如果有对“hxxp://www.malwareanalysisbook.com”的访问,或计算机上本没有IE8,但突然出现了IE8浏览器,则机器已被恶意代码所感染。
Lab 1-3
分析Lab01-03.exe文件。
3.1 将Lab01-03.exe文件上传至http://www.ViresTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
直接进行一个传的上。
3.2 是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
先使用 PEview 查看。
并没有像上一个exe一样,直接出现了UPX节之类的明显迹象,但PE文件结构异常,应该有加壳或混淆。再使用 PEiD 侦壳。
加了FSG壳,这里还是使用脱壳工具来脱。
脱壳工具在同一目录下生成了一个unpacked版本的exe文件,使用PEiD查看脱壳情况。
可看到已经成功脱壳。
3.3 有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
使用 PEview 打开exe文件,在第一个SCETION下的IMPORT Address Table里查看导入的函数。
Msvcrt.dll 是C语言运行库执行文件,提供了很多C语言库函数的具体运行实现;Oleaut32.dll 是对象链接与嵌入(OLE)相关文件;Ole32.dll 是链接与嵌入在应用程序中的对象的过程文件。
说实话以我的水平并无法从这些导入函数看出恶意代码要做什么,对OLE的了解也很少,可能大概是实现了一段C语言代码的运行?
3.4 有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
使用 strings.exe 查看字符串信息。
可以看到一个网址,因此该恶意代码应该是利用OLE相关组件实现了对该网址的访问,监视网络行为,若有访问该网址的行为,则该机器应已被恶意代码感染。
Lab 1-4
分析Lab01-04.exe文件。
4.1 将Lab01-04.exe文件上传至http://www.ViresTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
上传并查看报告。
4.2 是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果该文件被加壳,请进行脱壳,如果可能的话。
直接使用 PEiD 进行侦壳。
使用 PEview 查看。
PE文件结构正常,导入表信息等都能正常查看,并没有加壳或混淆的迹象。
4.3 这个文件是什么时候被编译的?
使用 PE Tools 打开文件,在“文件头”—“时间/日期”中查看解码后的时间。
4.4 有没有任何导入函数能够暗示出这个程序的功能?如果是,是哪些导入函数,它们会告诉你什么?
使用 PEview 查看导入表。
该恶意代码导入的函数非常之多。从Advapi32.dll中导入的函数:OpenProcessToken用来打开与进程相关联的访问令牌;LookupPrivilegeValueA查看系统权限的特权值并返回到一个LUID结构体里;AdjustTokenPrivileges用于启用或禁止指定的访问令牌的特权。
从Kernel32.dll中导入的函数:GetProcAddress、LoadLibraryA用于加载函数;WinExec用于运行exe文件;File相关的几个函数能够创建、移动、写文件;Resource相关的几个函数应该是对资源节中的资源进行一些操作;GetTempPathA获取用户的临时文件夹的路径;GetWindowsDirectory用来获取Windows目录的完整路径名;OpenProcess打开本地进程对象;GetCurrentProcess获取当前进程的一个伪句柄;CreateRemoteThread能够创建一个在其他进程空间中运行的线程。
此外可以在PEview中查看资源节内容。
可以看到资源节中确实有个结构上形似PE文件的资源。
综合来看,个人认为该恶意代码应该会将资源节中的资源释放出来,且该资源大概率是一个exe文件,然后可能会将该exe文件移动到用户的临时文件目录下,运行该exe文件并提升其特权。
4.5 有哪些基于主机或基于网络的迹象,可以被用来确定被这个恶意代码所感染的机器?
4.4问中的分析得到该进程最主要的功能应该是从资源节中释放一个exe文件并运行,而释放的exe一般都至少会有文件名,所以还是使用 strings.exe 来查看是否有可疑字符串。
winlogon.exe主要用于管理XP用户的登录和退出,wupdmgr.exe是系统自动升级程序,不过病毒木马也经常将自己伪装成这两个exe来运行,但最让人注意的还是“\winup.exe”,winup.exe并不是Windows系统会自带的exe文件,而是至今仍被广泛使用的infecter病毒技术的被感染文件。因此可以猜测:该恶意代码的资源节中存放了winup.exe。
然而以上并不是strings.exe给出的所有可疑内容,继续往下看,能够看到出现了另一PE文件的导入函数库,这是当然的,因为刚才分析资源节中也是个PE文件,导入函数相关字符串后又出现了一些有意思的字符串。
导入函数URLDownloadToFileA和一个网址“hxxp://www.practicalmalwareanalysis.com/updater.exe”意味着这个资源节中的exe文件将从该网址下载updater.exe,那么理论上来说,“\system32\wupdmgrd.exe”应该就是将改文件下载后存放的路径。
综上所述,如果电脑中出现了winup.exe、在C:\Windows\system32文件夹下出现了wupdmgrd.exe,则该机器被恶意代码所感染;监视网络行为,如果有向“hxxp://www.practicalmalwareanalysis.com/updater.exe”发送请求,则该机器被恶意代码所感染。
4.6 这个文件在资源段中包含一个资源。使用Resource Hacker工具来检查资源,然后抽取资源。从资源中你能发现什么吗?
打开 Rusource Hacker,将Lab01-04.exe拖入。
RH单独提取出了资源节部分的内容,选择“Action”–“Save *.bin resource…”,保存为“resource.exe”文件。
使用 PEview 打开该文件,查看导入表。
再用 strings.exe 进行查看。
导入表信息、可疑字符串信息和我们使用strings.exe查看Lab01-04.exe时在最后看到的基本一致。用红框框起来的四个导入函数作用分别是:执行exe文件、获取临时文件夹路径、获取Windows目录路径、从指定url请求下载资源。
综述,该exe文件被从恶意代码导出后应名为winup.exe,被运行后将从上述网站请求下载updater.exe,将其更名为wupdmgrd.exe、放在C:\Windows\system32\目录下后执行。