菜鸟之路---3,利用CVE-2012-0158的病毒分析

病毒样本链接: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,之后,拷贝刚才在桌面生成的dllNewFileName= "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格式文件,利用该漏洞发起攻击。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值