病毒样本链接:https://pan.baidu.com/s/1lh1klQ8Faa6s1kD5aS_kSg 密码:2lqn
1.样本概况
1.1 样本信息
病毒名称:Office2003宏病毒
病毒MD5: 52E3DDB2349A26BB2F6AE66880A6130C
病毒哈希:A86DC1842355E6999DE100B85B85A7C1589E4BBC
病毒crc32:7D21F812
1.2 测试环境及工具
测试环境:Windows7
测试工具:火绒剑,Ollydbg,IDA,Windbg,PEiD
1.3 分析目标
整体思路:先用火绒剑等工具分析一个这个病毒的大致行为,为后面具体分析设置大概的方向。这个病毒利用漏洞,释放出来一个hkcmd.exe的程序,然后运行这个hkcmd.exe文件,并且释放出一个正常的rtf文件,并且打开这个正常的rtf文件,伪装成正常的文件。通过运行hkcmd.exe释放出一个datac1en.dll的文件,然后修改注册系统的网络服务,并把该网络服务的路径修改为释放出的datac1en.dll的路径,这样每次启动系统就会去加载这个dll,以此来掩盖自己。这个datac1en.dll其实是一个后门文件。这个后门程序通过连接指定服务器来获取指令,然后执行。
2.具体行为分析
1,首先,我们先把这个病毒拖入,https://www.virustotal.com/这个网站,看看他利用的是什么漏洞,发现其利用的是CVE编号为:CVE-2012-0158,根据这一线索,我们先找到溢出点,分析利用这个溢出漏洞都做了什么风骚的操作
2,接下来把这个病毒拖入到火绒剑里面看看,发现word在加载这个doc文件的时候,释放了一个hkcmd.exe文件
注册了一个动态服务库
3,之后,我们先用OD附加WinWord.exe,之后在word中打开病毒样本,因为之前我们分析的是这个病毒会释放出一个PE文件,那我们可以在一些有关于文件的敏感API上下断点,比如WriteFile等,在WriteFile这个函数断下来之后
我们看一下Buffer(0xDE1000A)里面的内容是不是和之前分析的释放出的hkcmd.exe文件一样
经过对比无误,说明这段代码是进行释放恶意PE文件的操作,继续往下跟,发现函数的调用都是以EDI为基址进行的
4,我们看看EDI里面的值,发现了各种API
5,根据以往编写shellcode的经验,我们先把此处的所有数据进行反汇编,果然发现一些猫腻
6,在异或的地方下硬件执行断点,断下来之后观察周围的数据,有一段滑板指令,滑板指令上方的指令这时候我们就不能单单的认为他是opcode了,还可以将其分析为一个地址,0x27583c30,这是一个jump esp指令的地址,那么,0x121614就是shellcode开始的地方,也就是溢出点。
7,因为OD无法记录程序运行的时候eip的值,我们用Windbg调试一波,根据之前的网上搜集到的信息我们得到,出问题的是模块MSCOMCTL.OCX,我们在此模块上下一个载入的断点
8,当加载这个模块之后,再下一个WriteFile的API断点,因为之前我们分析的栈溢出的点在0x121614,因此在下API断点之后,我们记录一下对0x121614这个地址上进行数据写入的时候eip的值,如下:
9,得到了溢出点的指令的地址,在地址0x275c87cb上,我们用OD调一下看看,此处ecx的值过大
10,进行完此次字符串拷贝之后,堆栈中的返回地址被换成0x27583c30,即jump esp的地址,此处就是溢出的地方
11,我们在jump esp上下断点,就可以进入到shellcode中分析溢出代码:先是对shellcode进行解密:
12,创建了一个文件,名字和路径如下,是FileName ="C:\Users\15PB-W~1\AppData\Local\Temp\hkcmd.exe"
13,之后向这个文件中写入数据,貌似写入的是PE文件
14,之后运行这个PE文件
15,之后申请了一段内存空间,申请到的内存空间的地址是:0x3160000
16,往申请的空间中写入数据
17,修改申请的空间中的数据
18,之后又申请了一段内存空间,申请的内存地址为31c0000
19,之后创建了一个文件,文件名字为,和我们的病毒样本的名字一样
FileName ="C:\Users\15PB-W~1\AppData\Local\Temp\doc_sample.doc"
20,之后向创建的文件里面写入数据,写入的数据为RTF格式的。
21,之后运行创建的这个word文档
22,然后结束本进程
总结:在这段shellcode中,释放出来一个PE文件,名字为hkcmd.exe,路径为当前病毒所在的路径,然后以隐藏的方式启动hkcmd.exe,并且释放出一个RTF格式的word文档,word文档的名字和病毒的名字一样,运行起这个word之后,关闭病毒样本,所以主要恶意动作应该都在hkcmd.exe中执行,我们下一步分析hkcmd.exe
3.分析释放出来的PE文件
1,首先,在当前路径下创建一个dll文件
FileName ="C:\Users\15pb-win7\Desktop\datac1en.dll"
2,之后向这个dll中写入数据
3,之后,拷贝刚才在桌面生成的dll到NewFileName= "C:\Windows\system32\datac1en.dll"
4,之后删除桌面生成的dll
5,之后修改dll的生成时间
6,创建注册表,伪装成netcvsc服务启动(这个要保证病毒第一次在宿主机上运行,不然会进行判断,跳过这些敏感动作,可以在注册表里面删除键值,并删除dll文件,然后重新运行病毒,可以复现)
7,注册表中的信息成了这样的了
到此,释放出来的exe文件已经分析完毕,我们看他释放出来的dll文件都有什么举动。
4.DLL分析
接下来我们来分析dll文件,这个我们主要用IDA分析
1. 首先用PEid扫描,发现并没有加壳混淆,这对于我们分析来说是非常好的消息,拖入 IDA中,F5一下,可以直接看到源码。
2. 这个关键函数里面又有许多函数,其中大部分都是加载dll,获取函数地址,然后解密 拼接字符串等操作。只有一个函数非常重要,接下来我们再详谈。
3. 获取系统信息,判断系统
4. 接下来,就是一个最重要的函数了,也就是所谓的后门!!!该函数先加载了Wininet.dll,然后获取了相应的函数地址。
5,然后解析url链接,连接服务器,下载服务器的文件信息。并且判断是否执行相应指令, 如果没有相应指令,就睡眠,继续等待服务器信息,如果有,就跳出,读取相应指令。
6,然后根据上面读取到的信息,判断操作的类型
(1).Commond==0x64,修改标志位
(2).Commond==3,创建线程一,线程一应该为把本地文件发送到服务器
(3).Commond==4,创建线程二,并从服务器获取文件然后写入本地
(4).Commond==5,创建线程三,创建批处理文件和msacm16.dll文件,加密 文件,并发送到服务器
(5).Commond==4,结束指定线程
(6).Commond==5,运行服务器指令
(7).Commond==9,遍历文件,获取文件大小、文件属性等等。
(7).加密数据,并发送数据到指定服务器
5.漏洞形成原因
这个漏洞是由于MSCOMCTL.OCX在解析数据的时候将数据拷贝到栈中,但是由于对数据的判断错误,导致漏洞的发生,造成栈溢出漏洞,不法分子可以构建恶意的rtf格式文件,利用该漏洞发起攻击。