EMOTET银行木马仍然在行动:Shellcode释放方式、基础设施更新和流量加密 – 作者:亚信安全

Emotet银行木马自2014年被发现之后,一直活跃到至今,目前已经成为最具有影响力的恶意软件家族之一。该木马经常通过垃圾邮件进行传播,传播至今,已经迭代很多版本。在早期通过恶意的JavaScript脚本进行投递,后来转为通过含有恶意宏代码的文档下载后进行传播。我们在去年9月份对其进行过披露,截止目前,该木马的基础设施仍然在不断更新。

image.pngimage.png本文将会在EMOTET银行木马的shellcode、基础设施和通讯加密等方面进行分析。

事件分析

主机分析

程序入口分析

此恶意样本属于MFC类程序,程序主函数入口如下:

image.png

通过静态和动态调试分析,从整个的主函数执行流程中无法定位到核心的功能函数。

image.png通过查看字符串、程序使用的导入函数以及动态调试,如下函数为主要的功能模块入口函数。

image.pngimage.png它会使用windows资源操作相关的函数查找资源节,然后导入资源,解密相关数据。

image.pngimage.png程序中资源节相关数据如下:

image.png

程序转入到shellcode处执行,然后多次进行解密等操作,使用VirtualProtectEx函数对下一步的执行代码所在的内存页进行属性修改,改为可读可执行。

image.pngimage.png然后转入到相应入口执行主要的恶意功能。

image.png病毒“自删除”

通过使用SHFileOperationW函数将病毒文件移动到系统目录(同时会删除原来的文件)。

image.pngimage.png

然后删除Zone.Identifier结尾的相关文件。Zone.Identifier类型文件属于目标文件的其他附属信息流文件,里面内容会包括目标文件来自哪里等信息,例如本地、共享和网络。

image.png然后通过创建新进程运行。

image.png病毒持久化

通过创建windows服务的方式进行持久化。

image.png

通过创建自启动注册表的方式进行持久化。

image.png

image.png

基础设施分析

C2基本信息分析

请求IP 请求端口 请求方式
200.119.11.118 443 HTTP POST
103.83.81.141 8080 HTTP POST

 请求的ip和端口具体信息如下:

image.pngimage.png

通讯过程分析

获取要远程访问的IP地址。

image.png

创建HTTP请求报文所需要的参数。通过使用RtlRandom函数随意生成字符串。

image.pngimage.png

由于要使用post表单上传文件方式进行数据上传,所以需要boundary相关的字段。

image.png

image.png

通过调用InternetOpen函数初始化网络请求。

image.png通过调用InternetConnectW函数连接远程服务器,我们可以从参数看到具体的请求端口号。

image.png然后通过POST的方式进行请求。

image.png

最后通过HttpSendRequestW函数发送相关的请求体。请求体是通过表单上传文件的方式。内容类型为multipart/form-data。

image.pngimage.png提交内容分析

恶意样本上传到远端服务器的内容包括加密秘钥,计算机名称和当前运行的进程等信息。这些数据在传输的时候是加密的。

获取计算机名称,系统目录和驱动器信息等后,然后拼接。

image.pngimage.png

最后的组装字符串如下:

image.png

获取计算机当前运行的进程列表信息。

image.png如下是需要加密的内容和加密后的内容。

image.pngimage.png然后将加密的数据上传。通过网络请求实体参数也可以知道上传的数据包括秘钥和加密的收集的信息。

image.pngimage.png

加密算法分析

该恶意软件在上传信息时,会将上传的数据进行加密,通讯过程的加密算法是RSA_AES模式。

首先通过CryptAcquireContextW函数创建密钥容器。我们通过参数可以知道是创建的RSA_AES密钥容器,PROV_RSA_AES = 24。

image.png

然后通过调用CryptImportKey函数导入RSA的公钥。通过该函数的参数也可以获取具体RSA公钥的相关信息,例如公钥模长、公钥指数和公钥的模等。

image.png

然后调用CryptGenKey函数生成秘钥,我们从参数可以看到,秘钥算法是AES_128。

image.png使用的哈希是SHA1。

image.png

然后调用CryptEncrypt函数对收集的信息数据进行加密。

image.png

使用CryptExportKey函数导出之前生成的AES秘钥信息,导出时使用RSA公钥加密作为上传数据的一部分,服务器接收到之后可通过RSA私钥解密出AES的秘钥,然后进一步解密主要数据。CALG_AES_128=0x0000660e。

image.png

image.png

shellcode分析

此样本在进入核心功能模块之前做了2次重要的修正操作,第一次是将资源数据加载到内存,然后进行解密出第一段shellcode,后跳转到此处执行。如下图所示:

image.png

第二次操作是跳转到此shellcode处执行后进行整理,然后再次分配内容,复制相关内容,对此段内存修改为可读可执行,然后跳转至此次的核心功能。首先他通过windows api hash的方式调用系统函数,而不是直接使用。

image.png

然后调用VirtualAlloc函数分配空间。

image.png

然后准备开始复制数据,值得注意的是,他先对0027053F开始的数据进行了操作。我们可以从之前的内存地址可以看到此处正好是MZ头的开始。所以之前解密出来的shellcode中是完整包含有此程序核心模块的PE数据。

image.pngimage.png然后复制后的数据如下,是缺失了MZ头的PE数据,作者这样做,可能是为了防止我们较为容易的看到核心模块其实是一个完整的PE格式文件,以防止dump进行静态辅助分析。

image.png

然后修改内存属性,跳转到核心功能入口执行。

image.pngimage.png

我们将此模块dump出来,同时可以看到完整的核心模块入口。

image.pngimage.png核心模块的大致流程如下:

image.png

也同时可以通过代码的形式辅助查看,由于此程序用到的函数等都是在运行后内部动态获取的,所以仍然需要动态的方式进行分析。不过有了静态的反汇编后,可以更加方便辅助查看。

image.png我们也可以看到数据段有很多加密的字符串,基本都是通过如下函数sub_402B80进行解密的。

image.pngimage.png我们在动态调试中也可以看到相关信息,当然,除了动态调试,有了静态反编译后,也可以通过IDAPython的方式进行解密。

image.pngimage.png

我们可以看到此函数一共调用了31次。

image.png解决方案

不要点击来源不明的邮件以及附件;

不要点击来源不明的邮件中包含的链接;

请到正规网站下载程序;

采用高强度的密码,避免使用弱口令密码,并定期更换密码;

打开系统自动更新,并检测更新进行安装;

IOC

文件MD5 文件名称 亚信安全检测名
cc4f5e25d48bbb315b6076273eb55a37 WebGrabber.exe TROJ_GEN.R002C0PF320

来源:freebuf.com 2020-07-02 21:49:58 by: 亚信安全

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论