难以捉摸的马尔瓦里历险记,第三部分:复杂的VBA脚本,为笑声和利润



本文是无文件恶意软件系列的一部分。 该系列的所有其他部分:


在最后两篇文章( 此处此处 )中,我们讨论了无文件但无害的攻击方法。 现在,我们终于可以对付一种真正的无文件恶意软件了。 混合分析站点(以下称为HA)是我用来查找这些恶意“生物”的资源。 通常,HA为每个样本提供的信息:系统调用,Internet流量等。 -足以满足典型的IT安全需求。 我无情地陷入这些非常令人困惑的代码示例之一,以了解那里到底发生了什么。

如果要在我之后重复,则建议您在沙箱中(例如,在Amazon Web Services中)进行此操作。 并且,如果您在计算机上进行检查,请确保注释掉启动PowerShell的系统调用。

在令人困惑的VBA代码中


我最终在混合分析站点上发现的恶意软件是嵌入到Word文档中的VBA脚本。 正如我上次提到的,您将需要Frank Baldwin的OfficeMalScanner来查看实际的代码。
提取脚本后,我将代码加载到MS Word宏库中,然后使用内置调试器启动其逐步调试。 我的目标是更好地理解混淆背后隐藏的内容:玩IB分析并体验与这项工作相关的成功和失望。

如果像我一样,如果您首先决定在调试器中执行此操作,那么很可能您将喝多杯茶(或咖啡),通过令人惊讶的复杂代码,或者在变量L_JEK上闪烁观察,该变量已分配给行“ 77767E6C797A6F6” 。
通过使用这个令人困惑的VBA脚本,我意识到其中只有一部分会做有用的工作。 大多数代码只是为了使您误入歧途。
最后,我截取了一小部分代码的屏幕快照,该代码完成了启动PowerShell命令行的所有邪恶工作,该命令行最终作为VBA宏运行。


棘手的:只需取十六进制值,然后减去7即可得到真实的ASCII。


这很简单。 VBA代码在多个变量中包含以十六进制表示的最终命令行记录,然后将其简单地转换为字符串。 这里唯一的“技巧”是十六进制值偏移了0x07。 因此,例如,十六进制字符串的第一部分是从L_JEK获得的,L_JEK被分配了值“ 77767E6C797A6F6”。 如果取0x77减去0x07,则得到的十六进制为0x70。 对0x76进行相同的操作,将得到十六进制的0x6F。 在任何ASCII码表中查看它们,您将看到它与“ powershell”的前两个字母匹配。

实际上,这不是最困难的纠缠,但这不是必需的! 您需要做的就是跳过过去的防病毒扫描程序,以ASCII字符串的形式查找特定的关键字或它们的表示形式。 该样本足够好并且可以。 最后,脚本重新创建命令行后,它将通过CreateProcess函数运行它(请参见下文):


注释掉系统调用或在它们前面设置一个断点。


想一想。 Word文档已通过网络钓鱼电子邮件发送给员工。 打开文档后,此VBA脚本会自动启动PowerShell会话以开始攻击的下一阶段。 没有可执行文件,而且经过混淆的脚本会悄悄地避开防病毒和其他扫描程序。

这是邪恶!

出于好奇,我从HA网站(如下)下载了另一个宏,以了解还会发生什么。 第二个代码与上面的代码大致相同。


VBA中嵌入的密码。


但是,此代码在恢复命令行的方式上更具创新性。 有一个称为“ d”的解码功能,可从基本字符串中过滤出字符,并将其与第二个控制字符串进行比较。 这已经是一个高中水平的想法了,它也做得很好:它可以轻松躲避扫描程序和欺骗管理员,而管理员只需短暂查看日志即可发现异常行为。

下一站


在我的第一本有关混淆的出版物中我展示了Windows事件日志记录了PowerShell会话中的许多详细信息,也就是说,如果启用适当的设置以便能够在黑客入侵后进行深入分析。

当然,这也具有一定程度的无文件攻击的复杂性,因为几乎不可能通过在查看安全日志事件时仅检查其中的命令来确定PowerShell脚本是否做得不好。

为什么,你问?

由于PowerShell会话始终启动,因此可以与来自PowerShell良好IT管理员的合法代码同时启动来自单个黑客的PowerShell会话中的恶意代码。 如果每次PS脚本从Internet下载某些内容时都收到通知,则将生成过多的假阳性。

可以得出以下结论 :我们看到传统的外围防御工具无法阻止此类攻击,网络钓鱼电子邮件和FUD恶意软件,并且行为分析的前景广阔。

简而言之,这是一场故意失败的战斗,试图阻止黑客进入外围。 最好的策略是识别对文件的异常和可疑访问,然后启动应用程序,然后通过停用帐户或采取其他措施来应对违规行为来对此做出响应。

在下一部分中,我们将研究更高级的无文件攻击类型。

Source: https://habr.com/ru/post/zh-CN459506/


All Articles