Vidar 窃密木马分析报告

概述

Vidar是一个典型的窃密木马,具备窃密木马的所有典型功能。在黑市/论坛中,这款窃密木马以250-700美元的价格进行出售。本文将对其34.7版本进行深入分析。

样本信息

样本家族 Vidar
样本类型 窃密木马
样本大小 470 KB (481,792 字节)
MD5 3701296fa0d87df07eb1346956c82251

详细分析

外层混淆

该样本共进行了3层混淆,分别为:

  • 第一层:开辟内存空间,将data段中的数据解密并拷贝到该内存空间中,然后跳转执行,代码如图:

image-20201217223805867

  • 第二层:第一段Shellcode依旧是开辟内存空间,然后将数据进行解密并拷贝,最终跳转执行,如图:

image-20201217224603726

  • 第三层:第二段Shellcode,先从内存空间中解密出PE,如图:

image-20201217230153179

然后将解密出来的PE(窃密母体)在当前进程的内存空间中展开,最终跳转到该PE的入口点继续执行,代码如图:

image-20201217225759057

窃密母体

去除混淆后,对窃密母体文件进行详细分析。

检测Defender仿真引擎

窃密母体首先通过函数GetComputerNameA和函数GetUserNameA获取受害主机名和用户名,并分别与HAL9THJohnDoe(Windows Defender仿真引擎中的主机名和用户名)进行比较,当比较结果一致时,便不执行窃密逻辑,从而可以绕过Defender仿真引擎的检测,如图:

image-20210103235511263

Defender仿真引擎相关文章介绍:

https://xz.aliyun.com/t/2888

https://i.blackhat.com/us-18/Thu-August-9/us-18-Bulazel-Windows-Offender-Reverse-Engineering-Windows-Defenders-Antivirus-Emulator.pdf

解密字符串

在进入主函数后,首先会对大量的字符串进行解密(这些字符串后续步骤中会用到),如图:

image-20201214221823863

经过解密后的字符串内容,其中包含一些SQL语句和一些路径信息,如图:

image-20201214221702134

文件夹生成

生成11位随机字符串,然后创建C:\ProgramData\Randstr\files目录,并将当前进程的工作目录切换为C:\ProgramData\Randstr,如图:

image-20210104214002860

后续窃取到的文件将保存在C:\ProgramData\Randstr\files目录下。完成窃取后的目录下文件,如图:

image-20210106000000793

与C&C通信并下载所需的库文件

从rdata段取出硬编码的C&C地址reliabledc.com,然后再向C&Creliabledc.com/744发送内容为1BEF0A57BE110FD467A(推测为该版本的某种标记)的POST请求,如图:

image-20210104222225661

通讯内容,如图:

image-20210110223926956

其中C&C 返回的结果是经过压缩的配置参数,经解析后如图:

image-20210104222711243

根据返回的配置参数,可设置不同的执行逻辑。比如当前面10个1的值中第8位为1时,便会执行屏幕截图逻辑。通过这种方式攻击者就可以通过修改配置参数来选择执行哪些逻辑,窃取哪些数据。如图:

image-20210106212919561

然后再向C&C发起Get方法请求,下载所需库文件到C:\Program\目录下,如图:

image-20210104223026832

其中下载下来的库文件都为白文件,包含部分浏览器的库文件和CV++运行时库,如下表:

freebl3.dll Mozilla浏览器相关组件
mozglue.dll Mozilla浏览器相关组件
softokn3.dll Mozilla浏览器相关组件
nss3.dll Mozilla浏览器相关组件
vcruntime140.dll VC++ 运行时库文件
msvcp140.dll VC++ 运行时库文件

窃取浏览器信息

通过读取浏览器SQLite数据库、注册表信息以及.Cookie文件等信息,来窃取浏览器(Edge、Firefox、Google、IE)的历史访问记录、历史下载记录、用户名密码以及Cookie等信息。如图:

image-20210106002426196

被窃取的浏览器的历史访问记录,Cookie以及用户名密码信息,如图:

image-20210106234417420

窃取主机信息

通过访问ip-api.com获取主机IP地址信息,再通过各WindowsAPI获取获取如MAC地址,处理器信息等主机相关信息,并将窃取到的信息保存在information.txt文件中。其中值得注意的是,在写入的内容中还包含Vidar的版本信息,该样本的版本号为34.7`,如图:

image-20210106205802977

infomation.txt中保存的被窃取的信息,如图:

image-20210106204452565

窃取特定文件

遍历全盘,窃取指定目录下的特定文件,并将其保存再Randstr\files\Files目录下,如图:

image-20210106230453301

其中窃取Document(文档)目录下的文件,如图:

image-20210107222916981

被窃取的文件有如Adobe,Steam以及Google等常见应用的文件,如图:

image-20210106230719369

窃取数字货币钱包

窃取数字货币钱包信息,并将窃取到的信息存储在files\Wallets目录下,如图:

image-20210106231602123

其中窃取Bitcoin币的代码,如图:

image-20210107223256041

被窃取的数字货币钱包种类都有:

Bitcoin Ethereum Electrum ElectrumLTC
Exodus JAXX Atomic

窃取屏幕截图

获取屏幕截图,并以Screenshot.jpg命名保存在Randstr\file目录下,如图:

image-20210106204359032

调试时截取到的屏幕截图,如图:

image-20210107000329207

窃取主机信息并发送

再次获取主机相关信息,并将获取到的数据通过函数subJoin_408378拼接成数据包,如图:

image-20210106232841146

最后拼接好的主机信息数据包,如图:

image-20210106233126458

压缩窃取到的文件并上传

将窃取到的文件进行压缩,并以随机生成的文件名命名保存在Ranstr\files目录下,如图:

image-20210107231054858

然后再读取压缩包数据,并将数据发送到C&C,然后C&C服务器返回Downloader下载地址,如图:

image-20210109182703456

下载地址为:
http[:]//gelrstyysayt.net/DOD.exe
http[:]//gelrstyysayt.net/fox.exe

发送的压缩包数据(压缩包中为窃取到的数据),如图:

image-20210109194653930

返回的数据包数据(Downloader URL),如图:

image-20210109182942072

DownloadLoader下载执行

然后删除发送出去的压缩包文件,并下载执行Downloader URL中的文件。如图:

image-20210109192313373

其中函数subDownload_EXEC_404525下载并执行恶意程序,其中还清除了隐藏文件流(防止UAC弹窗),代码如图:

image-20210109192143932

清除自身

通过函数ShellExecute调用CMD,执行如下命令

1
C:\Windows\System32\cmd.exe /c taskkill /im 3701296fa0d87df07eb1346956c82251.exe /f & erase C:\Users\admin\AppData\Local\Temp\3701296fa0d87df07eb1346956c82251.exe & exit

来结束当前进程并删除当前文件,如图:

image-20210109192655177

IOCs

MD5
3701296fa0d87df07eb1346956c82251
A074C023BFD4FEEDD7DCCE2884AF7FF7
0EFCF786A4CBEE566405D86751E70905
C&C
reliabledc.com
http[:]//gelrstyysayt.net/DOD.exe
http[:]//gelrstyysayt.net/fox.exe

总结

Vidar具备窃密木马所有典型功能,但也正因为此,分析量有些大导致其中很多细节,笔者这里并没有花费过多精力去分析,如该样本具体采用什么手法窃取钱包地址的等细致点。后续笔者会继续研究,可以尝试写一个窃密demo测试下。

其实分析完这个样本后最大的感受还是,自己当面对代码两庞大并且功能复杂的样本(特别像该样本采用静态编译的)分析起来就会有些头疼。自己还需要多花时间去进一步研究成长。2021 加油,奥里给~