当前位置: 首页 > article >正文

菜鸟之路---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格式文件,利用该漏洞发起攻击。

http://www.lryc.cn/news/2418582.html

相关文章:

  • JAVA计算机毕业设计火车购票系统(附源码+springboot+开题+论文)
  • CLUSTERWARE管理和部署手册总结
  • 从零开始学单片机,该怎么入门?
  • WebService相关技术
  • ASP.NET MVC 介绍
  • 茅台出出面解释塑化剂事件
  • 网络安全快速入门 dos介绍及常用的dos指令(小白轻喷)
  • 【笔记】ARM裸机程序开发_part2
  • jre1.6下载地址
  • android开发实战教程,androidsdk开发TV
  • 使用office2003打开docx文件
  • Android Surface创建
  • 轻松识别文字,这款Python OCR库支持超过80种语言
  • [ldap]ldap server安装以及图形化操作
  • 【面试题】网站或者APP页面显示空白如何排查
  • 边框(Border) 和 轮廓(Outline) 属性
  • 由Codebehind所引发的
  • Oracle 11g R2(11.2.0.4.0)+udev搭建RAC
  • SQL Server数据库被置疑的解决方案
  • HTTP Status 404 的详细解决思路
  • javascript:图片切换特效
  • 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)
  • zblog主题模板:响应式企业模板宽屏企业主题
  • 电子技术——BJT放大器基础
  • 学习笔记之C++ How to Program(part)
  • 21点,简单的纸牌游戏——C++编写
  • Microsoft Visio 2010密钥
  • qq密码自动测试软件,QQ2004测试版密码获取演示
  • linux 溢出漏洞,Linux-glibc溢出漏洞(CVE-2015-0235)
  • 线性移位寄存器序列(m序列)之MATLAB实现