0x00 前言

样本来源于日常app.any.run的样本
样本MD5:71bdecdea1d86dd3e892ca52c534fa13
样本上传名:exe.PDF.bat
样本上传时间,就是今天(2020年9月10日)下午四点十分

可以看到any.run已经将其标记为恶意并且可以从 any.run的沙箱中看到恶意行为是执行了一段powershell指令。
image.png

在VT上查了一下样本,惊奇的发现,现在居然只有一家厂商给出了明确的报毒:Downloader.WannaMine
image.png

0x01 原始样本

原始样本的确是bat的文件,编辑工具加载后内容如下:
image.png

这是一段很简单的bat内嵌powershell代码,通过bat脚本隐藏窗口执行powershell代码,执行的代码为红色部分。

大概阅读一下这段powershell代码就可以知道这里是将前面的@符号替换并进行转换然后通过最后的IEX加载执行。

所以直接把最后面的IEX 更改为echo 然后把这一整段powershell代码抽出来保存到一个ps1文件中:
image.png

然后powershell窗口执行这个ps1脚本,通过管道输出到新文件中,解码出来的内容如下:
image.png

这段代码首先是通过$Tbone=’EX’.replace(‘‘,’I’)声明了一个名为$Tbone的变量,这个变量实际就是IEX

接着通过sal M $Tbone给变量定义了别名M,可以看到M在程序最后有使用,这是一种免杀操作。

格式化一下代码如下:
image.png

代码首先会尝试connection连接google.com保证网络畅通。
当确保网络畅通之后,代码在后面拼接一个对象,用于通过IEX执行一个下载指令,将下载回来的内容存储到变量$mv中,这里的下载链接为: http://topometria.com.cy/A12.jpg

关于topometria,暂时没有相关的威胁情报。

最后,程序将下载回来的数据$mv 以 - 分割,然后作为byte数组加载执行
image.png

还好,现在样本能够正常下载回来。

0x02 下载回来的样本分析

下载回来的文件名为A12.jpg,用编辑器打开可以看到是一段以-分割的数据
image.png

根据之前的代码操作,可以知道这里会首先将-分割成一个数组,然后转成byte,我们知道最后的数据类型是byte,所以这里直接将- 替换为空格
image.png

然后以byte的形式赋值到010中:
image.png

这里可以看到,byte解码出来其实是一段脚本代码

通过010转换为文本即可看到源码:
image.png

所以这是一个3M多的script文件。

看到这种代码不要怕,观察一下就可以找到关键地方
image.png

我们首先看看脚本最开始的地方,首先是执行了$t0=-Join ((111, 105, 130)
这里的111 105 130 解出来就是IEX

所以最开始是同样的操作,给IEX声明了一个别名g用于后面调用。

然后程序声明了一个超级长的String,根据开头的[String]$nebj=’4D5A9>^>^3>^可以知道这里其实是一个PE文件,后面肯定会有操作把这里的 特殊符号替换为00

所以跳转到最下面的代码看看:
image.png

这里首先可以看到, 在刚才声明的长字符串最后,果然通过replace将特殊符号替换为了00

然后可以看到程序执行了一个 [Byte[]]$JJAr=PuKkpsGJ $CDbvWcpeO

这里可以看出来是将$CDbvWcpeO(暂时不知道是什么) 作为参数传递给了PuKkpsGJ 函数,PuKkpsGJ 函数运算之后会得到一个数组赋值给$JJAr

搜索找一下PuKkpsGJ 函数:
image.png

顺便找到了CDbvWcpeO的定义,这里可以看到,CDbvWcpeO是第二个PE文件。

PuKkpsGJ的功能也很简单,就是对传入进来的内容进行分割和转码。

关于这里处理后的数据之后再看,先看看后面的代码做了什么。

$y=’[System.Ap!%%%%#######@@@@@@@**ain]’.replace(‘!%%%%#######@@@@@@@**‘,’pDom’)|g;$g55=$y.GetMethod(“get_CurrentDomain”)

这类替换之后代码就是:
$y=’[System.AppDomain]’|g;
$g55=$y.GetMethod(“get_CurrentDomain”)

同样的,把下面几行的代码也替换了得到
$uy=’$g55.Invoke($null,$null)’| g
$vmc2=$uy.Load($JJAr)
$vmc2| g

这里很明显,就是最后Invoke load执行$JJAr,而这个$JJAr就是上面通过PuKkpsGJ 处理后的数组。

所以直接写一个ps脚本,把这段数据处理完之后写入到桌面的222.txt文件中即可
image.png

最后,程序还会通过
[g8fg0000.gfjhfdgpoerkj]::gihjpdfg(‘InstallUtil.exe’,$nebj2)
解码出第二个PE文件,这里看样子是通过InstallUtil安装,虽然不太看得出来这里是怎么加载起来的,但还是先dump出来后面看看。

计算一下文件hash,分别为:
8A738F0E16C427C9DE68F370B2363230
498EC58566B52AA5875497CADF513547
image.png

对应的检出情况如下:
image.png

0x03 Mass KeyLogger

498EC58566B52AA5875497CADF513547目前无检出,样本上传之后发现这应该是一个名为Mass KeyLogger的新版本键盘监听器

image.png

而且国外的厂家形容这是非常危险的新型木马
image.png

样本使用dnspy去混淆之后还是有比较好的可读性的,这里就大概看一下。
image.png

此外,dump_file2,也就是这个keylogger的资源中有个四个资源文件,后面可能会解密加载这些资源
image.png

首先在dnspy中定位到样本的入口点如下:
image.png

样本入口点是内部类xW的实例化函数xW()
在xW函数中,主要是调用了aP类的bx方法。

这里过来可以知道bx方法中调用的是pC4类的Fvq方法:
image.png

过来给Fvq方法设置一个断点:
image.png

在Fvq方法中,程序首先是加载了上面名为LR4Cc2YdSbtlPu3Gpn.gkaT3RqoEIxDLaxtck的资源数据
image.png

然后把资源赋值给了array数组,并在下面循环取解密这个资源数据
image.png

最后,程序将数据以键值对的方式存放到Dictionary中然后赋值给Jbgkf0diFn,再下面通过放射加载调用。
image.png

由于断点已经设置在了Fvq函数这里,直接程序F5过来
成功读取到元数据
image.png

成功解密,重新给array赋值:
image.png

成功生成字典:
image.png

得到要调用的对应的函数,用委托的方式反射加载
image.png

如下:
image.png

这里会遍历加载所有用到的函数
image.png

直接往后走,读取名为b7XmD97o14L13xFEcR.B1Pe7UrZbjaNUkiGSk的资源
image.png

解密一个数据放到array4
image.png

这里有一个超长的switch case,干扰分析用的
image.png

这个类的代码超级长,肯定不能直接走,但是这里我想,既然它读取了资源放到了array4变量中,后面肯定要操作这个变量的,所以直接对所有操作了aray4这个变量的地方设置断点
这里发现程序将array4的长度new了一个新的byte为array6,所以同样的,对array6所以操作点设置断点:
image.png

程序这里在动态解密array6
image.png

所以最后只保留一个array6的赋值断点即可
image.png

成功命中断点:
image.png

此时把array6给dump出来,这里应该是程序用到的所有的字符串信息
image.png

往下走,这里result返回回来会有一些用到的关键信息,包括要检测的杀软等:
image.png

后面的解密配置信息,包括ftp服务器的地址,账号密码等都是通过这里解密出来
image.png

在YWc类的sCo方法中获取一些机密信息并格式化,包括用户名,出口IP、国家信息、操作系统版本、位数、SerialKey、CPU、GPU、AV、Screen Resolution、Current Time、Started、Interval、Process、Melt、Exit after delivery、是否是Administrator、所有运行中的进程名和窗口名(应该是用于反调试检测)
image.png

获取到的完整信息如下:
{User Name: xxxxx
IP: 127.0.0.1
Country: CN
Windows OS: Microsoft Windows 7 家庭普通版 64bit
Windows Serial Key: YGFVB-xxxxx-xxxxxx-PTWTJ-YRYRV
CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
GPU: VMware SVGA 3D
AV: NA
Screen Resolution: 1920x1080
Current Time: 2020/9/16 12:25:50
Started: 2020/9/16 12:17:21
Interval: 96 hour
Process: C:\Users\Shyt\Desktop\xxxxxxx-cleaned.exe
Melt: false
Exit after delivery: false
As Administrator: False
Processes:
Name:dnSpy-x86, Title:dnSpy v6.0.5 (32-bit, 调试中)
Name:吾爱本地破解工具包, Title:Rolan
}

@”C:\Users\Shyt\AppData\Roaming\FileZilla\recentservers.xml”

包括后续还会尝试获取各类邮件服务器的隐私信息
image.png

在JA类的KWk方法中尝试获取主流浏览器的隐私信息
image.png
image.png

将获取到的所有的信息添加到list中并返回
image.png

获取计算计算机的HWID
image.png

将获取到的信息都通过<|| 和||>拼接
image.png

由于这个样本的代码和功能类实在是太多,这里就不一一详细分析了
image.png

沙箱分析

直接把样本丢在any.run的沙箱跑一下行为:
image.png

看起来并没有反调试之类的东西,而且any.run已经识别出来这是一个massLogger了。

这个样本的C2为:192.185.155.49 : 21

这里的端口是21 应该是FTP服务登录的

解析出来的域名是nankasa.com.ar

其中api.ipify.org用于获取用户的出口IP

image.png

USER service@nankasa.com.ar

PASS Aloraboy21!@#

第二个数据包中就是上传的一些基本信息:
image.png

将数据包下载回来看一下,发现的确是FTP的方式进行通信的:
image.png

然后使用这个用户密码成功登录了攻击者的FTP服务器,这里的命名方式应该是
用户名地区_HWID版本
image.png

这个文件内容就是从用户主机收集上传的信息,包括之前看到的基本信息以及后面收集的浏览器相关的内容。
image.png

成功获取一组facebook的账号密码:
image.png

这里应该是攻击者用于测试的账号密码

睡觉前又看到有新信息上传了 哈哈,但是新文件还是没有数据,应该还是测试或是其他分析人员传的。
image.png

但是第二天登录的时候,发现密码已经修改了,应该攻击者知道有人异地登录了服务器,于是舍弃了该木马。