20155326《网络对抗》免考项目——恶意代码的研究与深入分析之恶意代码的静态分析

在对恶意代码的类型、生成、捆绑进行了研究和实践之后,我开始着手学习如何分析一段恶意代码。在询问过庞老师之后,我认真学习了老师给的指导材料以及“爱春秋”上的有关课程,从简单静态分析、动态分析、动静态结合分析三个方面,对示例代码展开分析和学习。

分类

按照分析过程中恶意代码的执行状态分成两大类:

  • 静态分析技术

利用分析工具(反汇编工具)对恶意代码的静态特征和功能模块进行分析的方法。

  • 动态分析技术

监视恶意代码运行过程来了解恶意代码功能。
根据分析过程中是否需要考虑恶意代码的语义特征分为外部观察法和跟踪调试法两种。

恶意代码静态分析技术

  • 优点:

恶意代码没有动态执行,对分析系统不会造成破坏,比较安全。
静态分析方法可以在可执行文件执行之前对整个代码的流程有个全局掌握。
不受具体进程执行流程的制约,可以对代码进行详尽的细粒度的分析。

  • 缺点:

由于静态分析本身的局限性,分析内容不全面,存在漏报。
绝大多数静态分析技术只能识别出已知的病毒或恶意代码,对采用了编码的多态变种或加壳压缩处理的程序则无能为力。

分析工具

将分析工具分为3类:

  • 虚拟执行环境

进行恶意代码分析具有很大的风险性,如果操作不当,会对分析系统造成严重破坏,所以需要在虚拟的相对安全的环境中分析恶意程序。虚拟执行环境包括VMWare、sandboxie(沙盘)等。

  • 静态分析工具

静态分析工具主要用于对PE文件或脚本文件的特征进行分析。包括文本及十六进制阅读及编辑工具(记事本、UltraEdit),PE文件格式处理工具(PEID、PE Explorer、PEview、Stud_PE、Dependency Walker等),脱壳工具(WSUnpacker),反汇编工具(IDA等)。

  • 动态分析工具

动态分析工具主要用于对恶意代码动态调试跟踪和外部监测。动态调试工具包括OllyDbg、SoftIce,外部监测工具有ProcessMon、RegMon、FileMon、TcpView、Ethereal等。

PS:

VMware介绍

由于恶意代码进行动态分析时,需要实际运行,宿主主机系统会遭到恶意代码污染,并且可能造成信息泄露等情况,所以必须要通过虚拟机技术来进行研究。虚拟机技术有两种,一种是模拟完整的硬件系统,另一种是仿真CPU指令集。
第一种虚拟机技术已经得到普遍应用,此技术通过软件模拟具有完整硬件系统的功能,并运行在一个完全隔离环境中的计算机系统,如VMware的Workstation。利用VMware创建系统备份镜像的功能可以十分方便的恢复到恶意代码破坏前的系统环境。

PE文件格式查看工具:

PEiD介绍

PEiD是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档的加壳类型和签名。

PEVIEW

可以用来打开PE文件,分析PE文件的各个字段,查看每个节的数据,也可以提供一些线索帮助我们理解并在感染的主机上搜索。

PE Explorer介绍

PE Explorer是一个强大的程序资源编译工具,可以直接查看、修改软件的资源,包括菜单、对话框、字符串表等;另外,还具有W32DASM软件的反编译能力和PEditor软件的PE文件头编辑功能;该软件支持插件,你可以不断的增加插件加强该软件的功能,还有很多实用的功能。

Dependency Walker介绍

Dependency Walker 是 Microsoft Visual C++ 中提供的非常有用的 PE 模块依赖性分析工具。主要功能如下:
查看 PE 模块的导入模块。
查看 PE 模块的导入和导出函数。
动态剖析 PE 模块的模块依赖性。
解析 C++ 函数名称。

WSUnpacker

WSUnpacker是一个万能通用脱壳工具,万能脱壳又称脱壳机,脱壳不需要手动,全自动脱壳。。。
WSUnpacker 脱壳工具运用了很不错的脱壳引擎,可以支持最新的vmprotect、SafeEngine、VProtect、ZProtect等加壳软件,支持Delphi、BCB、Visual C++、Masm、MingW32等常用的编译器,万能通用脱壳机帮你对多种加壳的软件进行成功脱壳,是一个很不错的程序万能通用脱壳机工具。

这篇博客主要是简单静态分析方面的学习和实践。通过使用virscan 以及PEID、PE Explorer、PEview、WSUnpacker软件对恶意代码进行分析,查看其病毒报告、了解其是否加壳(如果是如何脱壳)、查看文件的编译时间、查看并分析恶意代码的导入函数、查找有关线索猜测恶意代码的行为。

恶意代码示例在这里哦~~~
为了Git示例我又重温了一下当初git java的过程 真的是难忘的回忆涌上心头啊

lab01-01.exe和lab01-01.dll的静态分析

使用virscan

在virscan上检测lab01-01.exe和lab01-01.dll文件,可以看到两个文件的大小、文件类型、MD5值、SHA1值以及不同引擎的查毒情况。

这里可以看到lab01-01.exe和lab01-01.dll文件都被检测出来病毒。

点开行为分析,可以看到lab01-01.exe和lab01-01.dll都没有被加壳。Dll文件存在网络行为,会发送一个已连接的套接字数据。同时还会获取系统权限。

使用PEID

从老师那里要来的工具好处就是不用自己再去下载了,很省事哈哈

有两个版本,分别是中文和英文版,随便选一个。

这个工具最大的用处应该就是用来查看是否有加壳。用PEID查看一下两个文件,同样发现并没有被加壳。

另外一个比较常用的功能是查看输入输出表。

可以看到具体的导入的DLL名称和导入函数。

使用PE Explorer

前面我们介绍过啦PE Explorer是一个反编译工具,和之后会用的OB都有反编译的功能。通过该软件我们能查看该程序的处理器、节数、时间日期戳、符号表指针、符号数、代码大小、入口点地址、代码基址、数据基址、映像基址等信息。

我们用PE Explorer查看两个文件的编译时间。发现lab01-01.dll文件的编译时间是2010.12.9 16:16:38。lab01-01.exe文件的编译时间是2010.12.19 16:16:19。

两个文件几乎是同时编译的,说明它们可能有一定的联系,很可能共同完成某项工作。

使用Depends Walker

接下来,我使用Depends Walker查看exe文件的导入函数。

可以看到导入的十个函数分别是CloseHandle、CopyFileA、CreateFileA、FindClose、FindFirstFileA、FindNextFileA、IsBadReadPtr等。功能依次是:文件关闭、复制、创建、关闭由FindFirstFile函数创建的一个搜索句柄、查找、判断当前目录下是否有下一个目录或文件、检查进程是否有权限访问指定的内存块等。

从这里我们可以猜测这个恶意代码会对文件系统进行搜索、打开、修改、创建等操作。具体的来说可能是把系统中某个关键位置的dll文件删除,并且替换换成这个程序中某段dll代码。

PEview

PEview可以用来打开PE文件,分析PE文件的各个字段,查看每个节的数据。

用PEview分析病毒程序,可以看到kernel32.dll被修改成了kerne132.dll。把l换成了1。结合上面的分析,可以判断是在C:\windows\system32中查找到kernel32.dll,然后把它复制到新的文件kerne132.dll中。这个变换可以作为线索在被感染的计算机中搜索。

此外,我们还能在dll文件中看到一个127.26.152.13的IP地址,有可能是该恶意代码让主机与127.26.152.13这个IP建立一个连接。

同样的,在行为分析报告中,也能看到感染的主机给127.26.152.13发送了一个已连接的套接字数据。也可以作为我们猜测的论据之一。

综上,我们猜测这个恶意代码会获取系统权限,对文件系统进行搜索、打开、修改、创建等操作,且感染的主机给127.26.152.13发送了一个已连接的套接字数据。

lab01-02.exe的静态分析:

使用virscan

将恶意代码上传到在线病毒查杀中心,可以看到这个恶意代码的MD5值和SHA1的值,有18个杀软对该恶意代码报了查杀。

文件行为分析,观察到它有被加壳。同时,看到它有设置特殊文件夹属性、创建系统服务、创建互斥体的行为

使用PEID和WSUnpacker

用PEID好像因为不在其数据列表中看不出来有加壳,但是我们在上面的行为分析中,看到了是用UPX加壳了。

使用脱壳工具将其脱壳

查看该程序导入的dll文件

advapi32.dll与注册表的操作以及事件日志有关。
kernel32.dll属于内核级文件,控制着内存的管理、数据输入输出和中断处理。
msvcrt.dll是提供C语言运行库执行文件,提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编译的程序提供了初始化(如获取命令行参数)以及退出等功能。
wininet.dll是Windows应用程序网络相关模块,与网络的连接有关。

通过这些导入函数我们可以猜测恶意代码进行了修改注册表、修改内存信息、建立网络连接等行为。

接着查看一下它的导入函数。

分析这几个函数,我们可以知道它通过LoadLibraryA来调取动态链接库,由GetprocAddress获取动态链接库内的输出库函数地址。这两个函数是用来调用某个动态链接库中的某个函数的。Virtualprotect用来变更对程序的内存保护,Virtualalloc用来申请内存空间,Virtualfree用来释放内存空间,exitprocess用来结束某个进程。

所以,这几个函数暗示了程序调用了某个动态链接库中的函数,然后对内存进行了申请、修改、释放操作。

Lab01-03.exe的静态分析:

使用virscan

virscan网站上,对恶意代码进行扫描,我们能看到39款杀毒软件里有27款检测到了病毒。也能看到文件的大小,文件类型,MD5和SHA1值。

打开行为分析,发现这个文件已经被加了壳。

使用PEID和WSUnpacker

用PEID分析一下,确实是加了壳,下面我们尝试脱壳

脱壳成功。

使用depens walker 对其进行分析。
可以看到编译的时间:

看到它的导入函数有LoadLibraryA和GetProcAddress。这两个函数的功能是加载DLL程序,并且用能显示的方法调用。所以,恶意代码的功能可能是加载并显示DLL。

使用PEVIEW分析恶意代码,可以看到有一段网址,证明有可能跟网络连接有关。这个网址很有可能是个挂马网页。

Lab01-04.exe的静态分析:

使用virscan

我们使用同样的方法分析01-04。先在网页上测试一下。同样的,也能看得到文件的一些属性信息。

我们点开行为分析,做具体的分析

这个恶意程序做的事情比01-03多了不少。可以看出来,这个恶意程序创建了一个新的进程,还对这个进程进行了隐藏,不让系统发现。此外,还有重命名文件、下载文件、创建互斥体、获取系统权限等行为。

使用PEID

用PEID看,发现它没有加壳。

使用Dependency Walker

用Dependency Walker分析恶意代码:

上图的应该是它的导入函数。通过查阅相关资料,我们从ADVAPI32.DLL导入函数可以判断这个程序应该是进行了提权的操作。结合KERNEL32.DLL的导入函数,通过FindResource找到一个资源、然后用LoadResource将指定资源装载到全局存储器,然后将其写在其它位置(GetWindowsDirectory获取了Windows目录的完整路径名,所以很可能是放在系统目录中了),并用WinExec执行这个文件。

与01-03.exe一样,这个程序也有两个字符串:\system32\wupdmgrd.exe和http://www.practicalmalwareanlysis.com/updater.exe。wupdmgrd.exe是windows update manger的缩写,是Windows自动升级程序。判断代码很有可能从该网站地址中下载了一个恶意代码,其运行后很有可能在\system32\目录下创建或覆盖一个wupdmgrd.exe文件。

总结

其实在之前的网络对抗实验中就已经使用过virscan 来检测自己生成的后门了,这次仔细分析了一下行为分析报告,可以看出他有没有加壳,如果加壳的话,我们就可以使用脱壳工具WSUnpacker,然后查看该程序的导入函数,从而分析它的行为。当然,如果virscan的报告显示不出来是否加壳的话,使用PEID可以轻松地知道他是否被加壳,同样的,PE文件格式查看工具PE Explorer、PEview、Dependency Walker软件也帮助了我们不少。