近日,Cybaze-Yoroi ZLab的研究人员分析了一场在去年最后一个月里针对一家意大利油气资源运营管理公司的网络钓鱼活动。攻击者试图将这些钓鱼电子邮件伪装成由该公司的一家供应商发出的发票和运输确认单,并试图通过包含CVE-2017-11882漏洞利用代码的恶意Excel文件来运行从恶意网站(由攻击者事先攻陷)下载的可执行文件。

研究人员表示,用于发送钓鱼电子邮件的域名仅在12月中旬存活了几天的时间,它们很可能是专为这场网络钓鱼活动而创建的。

图1.发件人的域名仅在12月12日至14日期间存活

在Cybaze-Yoroi ZLab的文章中,他们重点分析了在这几天里由这些钓鱼电子邮件附件下载的payload。

技术分析

整个感染链从恶意Office文档在被打开后释放的一个SFX文件开始。这个SFX文件的图标使用了一张Kagamine Rin(镜音铃)的图片,Kagamine Rin是一个属于音源合成器软件VOCALOID的角色。

这个SFX文件实际上是采用WinRAR的自解压功能制作而成的,它被配置为将其内容解压缩到临时文件夹“%TEMP%\04505187”,然后以静默方式运行一个指定的设置程序:

图2. 包含在SFX文件中的配置

从解压缩后的文件的时间戳来看,攻击者是在2018年12月13日22:56分,也就是用于发送钓鱼电子邮件的域名存活期间对这些文件进行了最后的修改。

图3. 由SFX文件解压缩后的文件

所有这些文件都使用了误导性的扩展名,以混淆分析,其中大多数都是仅包含垃圾数据的文本文件。不过,其中有三个文件是值得注意的:

  • exe:一个合法的AutoIt解释器,能够执行指定的AutoIt脚本。
  • hbx=lbl:一个AutoIt脚本,其指令隐藏在大量的注释中。
  • icm:一个包含恶意软件所有配置的文件,例如安装文件夹、解释器名称和将在下一阶段使用的其他参数。另外,它是根据“INI文件格式”构建的。

图4. AutoIt脚本(hbx=lbl)包含的内容

图5. uaf.icm的结构

需要说明的是,类似于hbx=lbl用来隐藏指令的方法实际上早在2016年就已经被Juniper观察到。如图2中的配置所示,出现在这场活动中的SFX文件能够使用以下命令来运行hbx=lbl:

$> xfi.exe hbx = lbl

如此一来,hbx=lbl就能够使用包含在uaf.icm的“[sData]”和“[esData]”之间的数据来创建另一个AutoIt脚本(具有随机命名,如“ZZQLZ”),并使用“ xfi.exe”来运行它。

图6.另一个AutoIt脚本隐藏在uaf.icm文件的“[sData]”和“[esData]”之间

如上图所示,第二个AutoIt脚本是经过混淆处理的。在去混淆之后,我们可以看到它包含了许多有趣的功能。首先,它包含多种规避技术,例如检查当前正在运行的进程:如果存在与某些虚拟化软件(如Virtualbox)相关的进程,脚本则会自动终止运行。

图7.第二个AutoIt脚本包含的规避技术

第二个AutoIt脚本的主要作用是解密并执行隐藏在uaf.icm文件的“[Data]”和“[eData]”中的最终payload。为此,它将使用Microsoft函数“Advapi32.dll!CryptDecrypt”来解密数据,而该函数将通过高级API“DllCall ” 动态调用到AutoIt脚本中。解密密钥包含在配置文件中。

第二个AutoIt脚本的另一个有趣功能是用来运行最终payload的方式。首先,它会在%TEMP%文件夹中创建一个Regsvcs.exe(.NET服务安装工具)的副本,并运行它。然后,它将执行进程注入,并启动被注入最终payload的regsvcs进程。

通过下图,我们可以很清楚地看到隐藏在在uaf.icm文件中的最终payload是如何被提取、解密和注入的。

图8.最终payload的提取、解密和注入

对于进程注入而言,它是通过DllCall AutoIt API来实现的,这其中涉及到对Windows函数CallWindowProcW的使用。

图9.用于解密并将最终payload注入合法进程的函数

具体来讲,该恶意软件的作者使用了存储在$ASM变量中的自定义shellcode 来将二进制payload准确地注入到正在运行的regsvcs进程中。

最后,第二个AutoIt脚本也被攻击者用于在受感染系统上实现持久性——通过创建注册表项HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run。

图10.由第二个AutoIt脚本创建的注册表项

注册表项的名称对应于uaf.icm文件中“key”的值。

Payload:AVE_MARIA信息窃取程序

被注入合法.NET进程的payload展现出了典型的僵尸程序行为:它会与一个托管在anglekeys.warzonedns[.]com上的C2(目前处于关闭状态)进行通信,并以此来获取下一步的操作指令。

静态分析显示,该恶意软件会查找已安装的电子邮件客户端(如Microsoft Exchange Client或Outlook),以窃取受害者的凭证。

图11.查找已安装的电子邮件客户端

此外,该恶意软件还能够解密Firefox浏览器存储的所有凭证。虽然这些敏感数据使用了Mozilla网络安全服务的PK11加密进行保护,当该恶意软件的确具备机密它们的功能。

研究表明,该恶意软件的作者使用了一些公开可用的代码来实现这个功能。如下图所示,左侧是该恶意软件的代码片段,右侧是公开发布在Github上的KeePass插件的代码片段,它们之间非常相似。

图12.该恶意软件的代码片段(左侧),KeePass插件的代码片段(右侧)

此外,该恶意软件还捆绑有一个实用程序,可以绕过用户访问控制(UAC)。这个程序滥用了名为“pkgmgr.exe”的Windows工具的漏洞,而我们在网上也可以找到大量有关此漏洞的信息。

图13. UAC旁路实用程序的工作流程

可能是出于疏忽,该恶意软件的作者在代码中居然留下了一些与开发环境相关的信息

图14.疑似恶意软件作者的开发路径

最后,该恶意软件包含有一个奇怪的字符串“AVE_MARIA”。当该恶意软件成功连接到C2时,这个字符串将被用作HELLO消息。也正是因为这个字符串,InfoSec社区的许多研究人员已将该恶意软件命名为了“AVE_MARIA”。

图15.恶意软件发送的特征字符串

总结

出现在这场网络钓鱼活动中的AutoIt脚本与几年前由其他安全研究员分析的AutoIt脚本非常相似,包括逻辑和代码。但是,最终的payload是不同的。

这里或许存在两种可能:第一种可能是这两种恶意软件来自同一个作者,而第二种可能则是该恶意软件的源代码是“AVE_MARIA”的作者从暗网购买来的,并组合使用一些公开可用的代码构建了一个新的恶意软件,但却忘了擦除与原作者相关的信息。

声明:本文来自黑客视界,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。