长亭百川云 - 文章详情

MassKeyLogger,一款可能改变钓鱼格局的大杀器

记月

50

2024-07-13

0x00 前言

样本的概要分析是10号的时候就写好的,拖延症一直没有把中间有一部分写清楚,今天抽了个时间完善了一下,在这里分享给大家。

由于微信号图片被压缩的原因,感兴趣的朋友可以到我语雀上查看,地址:

https://www.yuque.com/p1ut0/qtmgyx/hg3gzu

这是一个个人公众号,偶尔想起来会在这上面随便叨叨两句,言论、观点仅代表个人。谢谢大家支持。

样本来源于日常app.any.run的样本

样本MD5:71bdecdea1d86dd3e892ca52c534fa13

样本上传名:exe.PDF.bat

样本上传时间,就是今天(2020年9月10日)下午四点十分

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

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

0x01 原始样本

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

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

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

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

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

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

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

格式化一下代码如下:

代码首先会尝试connection连接google.com保证网络畅通。

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

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

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

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

0x02 后续payload分析

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

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

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

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

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

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

首先看看脚本最开始的地方,首先是执行了$t0=-Join ((111, 105, 130)

这里的111 105 130 解出来就是IEX

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

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

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

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

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

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

搜索找一下PuKkpsGJ 函数:

顺便找到了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文件中即可

最后,程序还会通过

[g8fg0000.gfjhfdgpoerkj]::gihjpdfg('InstallUtil.exe',$nebj2)

解码出第二个PE文件,这里看样子是通过InstallUtil安装,虽然不太看得出来这里是怎么加载起来的,但还是先dump出来后面看看。

计算一下文件hash,分别为:

8A738F0E16C427C9DE68F370B2363230

498EC58566B52AA5875497CADF513547

对应的检出情况如下:

0x03 Mass KeyLogger

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

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

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

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

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

样本入口点是内部类xW的实例化函数xW()

在xW函数中,主要是调用了aP类的bx方法。

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

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

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

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

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

由于断点已经设置在了Fvq函数这里,直接程序F5过来

成功读取到元数据

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

成功生成字典:

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

如下:

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

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

解密一个数据放到array4

这里是一个超长的switch case,干扰分析用的

这个类的代码超级长,肯定不能直接走,但是这里我想,既然它读取了资源放到了array4变量中,后面肯定要操作这个变量的,所以直接对所有操作了aray4这个变量的地方设置断点

这里发现程序将array4的长度new了一个新的byte为array6,所以同样的,对array6所以操作点设置断点:

程序这里在动态解密array6

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

成功命中断点:

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

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

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

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

获取到的完整信息如下:

{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"

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

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

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

获取计算计算机的HWID

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

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

沙箱分析

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

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

这个样本的C2为:192.185.155.49 : 21

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

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

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

USER service@nankasa.com.ar

PASS Aloraboy21!@#

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

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

然后使用这个用户密码成功登录了攻击者的FTP服务器,这里的命名方式应该是

用户名_地区_HWID_版本

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

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

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

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

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

0x04 小结

看来国外的大佬说此样本可能会取代AgentTesla的身份是有道理的,目前来看,该款木马功能比AgentTesla完善,代码结构更复杂,干扰分析的代码也很多,并且最直接的是,AgentTesla主要是通过多吃解密资源的方式加载,而MassKeLogger使用了多次非PE加载的方式,在这方面的技术已经比较成熟,这样做最直接的好处就是应该会有更好的免杀性。

最后,感谢大家看到这里。笔者个人的从业方向是恶意代码分析、APT、威胁情报。感兴趣的小伙伴可添加微信进行交流~ 感谢大家支持~

-yousaysayyou-

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2