20145314郑凯杰《网络对抗技术》实验4 恶意代码分析
1.0 恶意代码
- 恶意代码
Unwanted Code
是指没有作用却会带来危险的代码,一个最安全的定义是把所有不必要的代码都看作是恶意的,不必要代码比恶意代码具有更宽泛的含义,包括所有可能与某个组织安全策略相冲突的软件。
- 恶意代码分析
对恶意代码进行分析,若我们有其源代码,那进行分析便比较容易。但是在大部分的情况下,我们只有可执行程序。于是就需要从多个不同的角度,使用不同的方法进行判断。
-
静态分析基础技术
- 计算恶意程序MD5值,然后检索该MD5值来获取信息并作为其特征码使用(可使用md5deep winmd5)
- 通过检索恶意代码字符串获得相应的功能调用解释等,查看是否有被加壳处理(字符串检索:Strings 外壳检测:PEiD)
- PE文件头中包含代码信息,恶意代应用程序类型等重要信息。可通过工具检索其动态链接库(dll),然后再MSDN文档库中查找其功能。(Dependency Walker、 PEview、 PEBrowse Professional、PE Explorer)
- 查看可疑代码的的资源节来获得一部分可见的特征(Resource Hacker)
-
动态分析基础技术
- 配置“沙箱”环境,模拟真实执行结果(各种沙箱)
- Dll类型文件的启动运行(PEview、PE Exporer)
- 用一些系统监视类软件捕获运行中恶意程序的系统调用(process monitor、process explorer)
2.0 恶意代码分析
分析对象是实验二中出现的zkj5314.exe,其功能是创建一个目标为我们kali虚拟机的连接。我们从静态分析,动态分析两方面对该后门进行分析:
2.1 静态分析
从四个方面:
- 特征库对比:Virscan
- 外壳检测:PEiD
- 查看PE文件头中包含代码信息:PE explorer
- 查看其依赖性,导入与导出模块:Dependency Walker
-
①特征库的比对(Virscan)
将zkj5314文件提交至virscan的官网(如前两个实验)。结果毋庸置疑的就是一堆杀软报毒,点击查看详细分析。
病毒文件原形毕露:
恶意代码分析:
1. 加壳
1. 创建连接
1. 修改注册表
1. 检测自身的调试情况(调用函数自复制,蠕虫的话就会)
用特征码分析这个效果还是很显著的。但是网站给出的说法毕竟比较含糊,要真正地去确认它,就还得再加分析考虑。
- ②外壳检测(PEiD)
查壳,就是查这个可执行文件PE的外壳。用到的软件PEiD已经是一款具有强大查壳功能的软件,百度百科上的描述是:几乎可以查出所有类型的壳。
我们运行软件,来查看zkj5314是否加壳过。
结果为:没找到,为什么明明在virscan上出现过的查到了壳,在PEiD中又找不出来呢?
接着,我们可以查看额外信息:
恶意代码分析:
在其中,可以发现,在查看其有无被压缩过的痕迹时,提示是——可能有加壳。而在快速检查中,直接判定我们的程序为已加壳。
PEiD这个软件可能是由于版本问题(操作界面就十分古老),所以没查出壳来。但是仔细查看记录后可以看出其还是有加壳痕迹的,很可疑。
- ③查看PE文件头中包含代码信息(PE explorer)
运行PE explorer软件,查看其基本信息(编译时间,文件头入点啥的)
从上图中可以看到该可执行文件的一些基本信息,都是一些没什么用的。其中的一项"magic",刚开始我以为是加壳的手段,结果百度了"PE32"才发现,只是PE文件的一种开头格式而已。
恶意代码分析:查看其引用的dll库
-
msvcrt.dll:此为微软编译软件的函数库。正常
-
kernel.dll:它控制着系统的内存管理、数据的输入输出操作和中断处理。虽然涉及内核,但是运行程序所必须的,也算正常。
-
advapi32.dll:注册表的操控以及事件日志有关。捕获元凶,对注册表进行操作的就是它
-
WSOCK32.dll和WS2_32.dll:用来创建套接字的dll库。捕获元凶,非法进行后门操作的元凶。
-
④查看其依赖性,导入与导出模块(Dependency Walker)
Dependency Walker
用以查看PE模块的导入模块,查看PE模块的导入和导出函数,动态剖析PE模块的模块依赖性。
打开文件后就可以看到这个软件是用来对dll进行分析的。(比上面全)
按照上面的知识,对其进行分析:
·补充一点,病毒常调用的五大系统函数:
- RegSetvalue(修改注册表键值)
- FindFirstFileFindNextFile(遍历文件夹)
- mciSendString(应该是发送数据段,实现一定攻击)
- TerminateProcess(杀死进程)
- GetModuleFileName/CopyFile(实现自复制)
如果函数有在其正常功能之外地调用这些函数,说明就很可能有问题了。
- advapi32.dll:
进行注册表删除。
- Wsock32.dll:
获取当前进程已进行的完整路径(虽然该功能对这个dll函数来说并不是主要功能,但还是存在可以行为)可以通过调用这个来实现自复制。
通过函数引用可疑的模块(函数功能与其引用这个函数不符),就可以判断这个文件,是否为可疑代码,恶意代码。
2.2 动态分析
- ①对后门软件的运行过程分析(SysTracer v2.6)
模拟仿真,这个实验将在虚拟机XP下进行。
在XP虚拟机下运行SysTracer 版本2.6
由于要进行网络攻击,需要攻击机的配合,所以也打开了Kali虚拟机。
接下来只需要截获XP系统上各种资源和连接的方向,就可以得出该文件进行的动态行为。
在Kali上打开监听,此时第一次记录下状态
用XP回连,记录下第二次状态
使用截屏功能,记录第三次状态
使用提权功能,记录第四次状态
将第一次与第四次的状态直接进行对比(收尾对比包含了中间的所有)
恶意代码分析:
如上图所示,我们可以看到注册表很明显的发生了改变。
这说明了在虚拟环境下,恶意程序已经开始动手了!
接着查看其他方面的不法行为:
在加密(Criptograthy)的注册表项被注入了新的“种子”(应该是密钥啥的)。这一步是提权所造成的,创建了新的密钥。
这就不是啥复杂的了,就是提示本软件未注册,一个警告。
- ②对流量进行抓包(Wireshark)
Kali方打开监控,此时wireshark已经出现了巨大的流量提醒
接着进行回连,对连接进行捕捉,发现存在许多三次握手协议
对其进行一系列操作,包括提权时,
提取时,出现了非法提示:
恶意代码分析:
wireshark也知道了这个非法连接对我们电脑上有危害,也进行了报警。
- ③对程序进行断点动态调试(PEbrowse Pro)
PEbrowse Pro是一款专业的动态调试器,比起其它的断点调试软件或者功能(GDB等),这款软件可以直接对可执行文件进行断点调试(动态)。
如图,PEbrowse开始进行断点调试,运行到第一步,我们点击图中红框中的按钮(运行至下一个断点),一步步对其进行断点调试。
恶意代码分析:
调试的根本是对各项寄存器进行状态分析,本质还是采用反汇编的方式进行分析,需要很深的汇编语言功底。对于功底差的,还是可以通过查看它调用的系统函数来判断其是否为恶意代码:
- ④对程序实施监控(sysmon)
sysmon是一款精巧的软件,可以执行许多牛逼哄哄的功能,例如其中的监控功能,更是可以直接代替wireshark这样的大软件,就是操作上可能有一些不便。
在win7环境下进行安装,接着用test.xml文件直接进行环境的配置,配置完服务出错,最终也不知道是什么原因。
在重新修改配置文件之后,我完成了配置:
接下来让其发挥作用去捕获所有操作,在win7系统中,打开控制面板——系统和安全——事件查看器。
出现许多系统进程,连接等等大量的信息。
一条一条查找,发现了很多问题:
如上图这样的信息算是常态了,用到酷狗,QQ,微信等软件时都会产生这样的信息(包括进程和连接),算比较正常。
如果像破案一般地去排查系统中的安全问题的话,我开始了接下来两种演绎:
一、使用免杀后门,查看sysmon记录
可以看到,由于这个操作已经免杀了,所以sysmon也没有报警告。
我就换了一次,用实验2中的没免杀的后门再试一次,结果sysmon还是没报警告,连提示都没,估计是这个太低级了。
二、对360进行排查,看看这货到底有没有欺骗我
我怀疑360有欺骗我的嫌疑,所以直接关了他
然后360给我说,是否真的要关闭所有防护,
选是,然后在sysmon里蹲它
果然给我抓到了,关了360的情况下,360tray的进程仍然在运行。百度一下,说这个进程是用来帮助维护我电脑安全的。但是我已经都确定关闭所有防护了,360不听我的话,还背着我搞这些干嘛呢,这个进程是不是真的防护进程,我又怎么知道???细思恐极
就像出轨只有0次和100次一样,360能欺骗我做一件事,就能瞒着我做100件事,就可以360果然是一家X爹的公司。
3.0 实验感想
对于这个实验,进行分析其实上是一件挺枯燥的事情,比起前面两个实现攻击(实现后门和实现免杀)来说,这次的实验是挺无聊的。
在Dependency Walker中寻找程序调用了哪些重要的函数,再结合其行为进行判断,这样的分析方法实在太蠢太慢。与其将这种软件(只有调用重要函数时可疑)扼杀在摇篮里,还不如在其进行破坏时再制止。
虽然实验成功了,但是还是觉得这样的分析效果差,效率低,误判率高。