word vba 压缩照片_技术分享丨Word宏样本分析

9d4f3b66bca96a5c39d946fc3417afb9.png

一. 起源

350ee9efe267323075e9a3a943083ea4.gif 前段时间看到了一个非常有意思的宏病毒样本分析,决定与各位一起分析一下。 迄今为止,VBA宏仍然是最流行的攻击媒介之一。本文分析多层混淆的VBA宏,其中包括VBA,WMI对象,Powershell,内联C#和BYPASS AMSI。

二. 初步分析

350ee9efe267323075e9a3a943083ea4.gif 我们首先在十六进制编辑器中检查.DOC。我们可以看到标头以PK开头,表示此类型的文件是ZIP。现代Microsoft Word文档实际上是ZIP文件,如果将文档从.DOC重命名为.ZIP,则可以解压缩内容。 87a65575b4ba9f5aef1004ad6f19bf7a.png b0f44efb6365c53b5ffda0a127204fbe.png 我们首先需要提权文档的vba宏,使用olevba即可提取。 e4d3741c1fd592cd139b75df04c54c0e.png 经过提取下面的宏 我们发现可以看到VBA代码的格式不正确(很可能是故意的)。因此,我们需要通过替换多余的换行符(“ \ n”),制表符(“ \ t”)和空格(“ \ s”)来对其进行清理,直到获得正确格式的VBA代码为止。这不是运行代码所必需的,但是,如果要在Microsoft Word的开发人员工具中对其进行调试,则需要多行代码才能放置断点。 经过代码整理,格式化后我们就可以看到以下的内容。 06f23743d33e81fdf43dc4e1d8a22d9c.png 我们可以看到以上代码基本都是经过混淆的代码,让我们在Microsoft Word中打开文档。 f4a6744e91dfb553868c3980925b9b53.png 复制替换为我们之前整理的代码。 553ac46eae799f27582f6ad325913cd6.png 同时我们也可以到自动执行的函数的位置。 b27b48e388197bcdf2c21018523f0afc.png 在VBA代码或文档内容,属性或设置中不容易看到/显示。我们首先在“ Sub Document_Open()”函数中放置一个断点。此功能是在打开Word文档时运行的功能。然后,我们运行将在断点处中断的脚本。 ff73fbc86ff2858d79eca4548994fbe2.png 这两个变量将被读入VBA脚本并进行解码。这是隐藏此脚本功能的地方。第一个变量被解码为WMI对象"winmgmts:\.\root\cimv2:Win32_Process",该对象负责启动第二个变量的内容。 d4d9e138772fedcd6265ea187a5d9db3.png 第二个变量被解码Powershell。 703660f80bae83dc64e36081109bf9c9.png 如果我们继续运行脚本,它将最终启动Powershell终端,并使用变量2中的解码脚本。在Powershell启动时,我们可以在系统日志中查看该脚本的内容。 80fcc8d914a83e5400480ed8e1f1ab76.png

三. powershell混淆

350ee9efe267323075e9a3a943083ea4.gif 依旧是代码混淆,现在我们已经提取了Powershell,我们可以再次清理一下代码,并通过替换“;”将其分成适当的行。用“; \ n”并固定行距。 4b438043f7d4eed2a90950fb29be54d0.png Powershell脚本非常简单。从清理后的代码中,我们可以在顶部看到一个去模糊函数,该函数负责解码中间变量中的文本斑点。我们还在脚本的底部看到一个“ Add-Type”行,该行正在调用“ c193b()”函数。这通常用于以与Powershell不同的编程语言来内联脚本。在这种情况下,我们看到脚本已解码了C#代码。 58501f11d61067625ebab3547641e4a5.png

四. C#混淆

350ee9efe267323075e9a3a943083ea4.gif 到目前为止,我们已经做到了。我们已经运行了启用VBA的Word文档,让它将隐藏的变量解码为通过WMI对象启动的混淆的Powershell,并且对混淆的Powershell进行了查找以找到内联的C#。我们快完成了。我们可以再次清理反混淆的代码,以便可以将其加载到适当的IDE中并进行调试。在这种情况下,我们拥有C#,因此我们可以在Visual Studio中启动一个新的C#项目,并将代码粘贴到“ Hello World”函数之后,如下所示。我们需要将“ using”语句放在顶部,然后将我们混淆处理的“ public class”代码粘贴到main函数下面。 972dc56dec41660e294b24c594058288.png 从我们的Powershell脚本中,我们看到它正在函数“ c193b()”处调用“ yba2983”类。因此,我们需要将其放置在程序“ Main”中,以便模仿Powershell的切换。确保在“ c193b”函数中放置一个断点,以便可以逐步完成它。

五. BYPASS AMSI

350ee9efe267323075e9a3a943083ea4.gif

防恶意软件扫描接口(AMSI)是更高版本的Microsoft Windows附带的系统保护,可帮助防御这些类型的攻击。Microsoft将AMSI描述为:

Windows反恶意软件扫描接口(AMSI)是一种通用接口标准,允许您的应用程序和服务与计算机上存在的任何反恶意软件产品集成。AMSI为您的最终用户及其数据,应用程序和工作负载提供了增强的恶意软件防护。

简单来说,“ amsi.dll”在系统上运行,并通过AmsiScanBuffer API强制所有脚本输出。因此,我们将在AmsiScanBuffer接口中检查我们发现的所有模糊文本,以进行可疑/恶意操作。如果找到任何内容,AMSI将拒绝执行脚本。有保护的地方就有旁路,这正是我们在C#代码开头找到的内容。 428cba82a78dad4614f8fe45d5022975.png e0394473ef315df3b56c3a0af9b5b6d5.png 这个特殊的bypass尝试使用“ amsi.dll”作为目标来调用“ loadlibrary”。如果成功,则表明系统上存在AMSI。接下来,代码将为AmsiScanBuffer接口调用“ GetProcAddress”,通过调用“ VirtualProtect”来取消保护其内存区域,然后通过对“ RtlMoveMemory”的调用有选择地修补“ amsi.dll”。通过修补“ amsi.dll”,他们删除了阻止脚本运行的保护性检查。

六. 终止

350ee9efe267323075e9a3a943083ea4.gif 如果我们继续调试C#代码,我们最终将对最终变量进行模糊处理,并显示预期下载的URL。 0a403b866e85e87a719daca02e36b828.png 由于服务器关闭并没有接下去进行分析,代码将创建一个新的WebClient连接,将可执行文件下载到一个临时空间中,并启动该过程。该恶意软件的第二阶段可能是远程访问特洛伊木马(RAT),银行恶意软件,勒索软件等。但是,本文的目的是演示如何分析第一阶段,而不遵循第二阶段的下载。 5edc208be698979c1f937203cf4ae17c.png 89d710678d3d38522726a0b800467ee4.png 参考链接: 样本下载地址: https://app.any.run/tasks/cca3277b-8f2d-43c4-9006-457af9be1883/ 文章参考: https://www.ringzerolabs.com/2020/10/obfuscated-vba-powershell-c.html

5300740a88d56d246c5bd04fb2a08ace.png

近 期 动 态

d0482c0a1ed232dd12404fedd78c9dd8.png 2197e1963e0452396e8a3736e32f2da7.png 2a12119d49ff4df07fa4ee4967ecb272.png 3dd301355d3121a4fec75ace58fef6fc.png 赛 事 案 例 a686cdaf83befd17b72f46b4b2d86deb.png dd5f32992a5e0ee5c54a9fb4960b0a69.png f5a14f3d3b29a821dd44bb625330072d.png 7ee8284e61f72789861b6feff0cdf6ab.png e0d461cabb7d1096ad1f18dcaec6f3ed.png b48bb5d8ab10ddcd3175af8bd909c266.png 19a070eea31d369868de187e73023a00.png 海 外 赛 事 e6c82c31680c358359e867dbcc92d436.png 18bf6eb5f7c3e82f949051c033f1942e.png b6b3ffafe5e94c3a78dd4f473234d1c9.png b0eeb40de3fca4386134f11023eacb86.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想重新设置一个 Word VBA ,可以按照以下步骤操作: 1. 打开 Visual Basic 编辑器。在 Word 中,你可以按下 `Alt + F11` 快捷键来打开它。 2. 在左侧的“项目资源管理器”窗口中,展开“Microsoft Word 对象”节点,然后双击要修改的所在的模块,以打开它。 3. 修改代码。在模块窗口中,你可以修改代码,添加、删除或编辑代码行。 4. 保存修改。在编辑器窗口中,选择“文件”菜单,然后选择“保存”或“另存为”菜单项,以保存你的修改。 5. 关闭编辑器。完成修改后,你可以按下 `Alt + F4` 快捷键来关闭编辑器窗口。 注意,如果你修改了一个已经存在的,那么它将会被替换为新的代码。如果你想创建一个新的,可以按照以下步骤操作: 1. 打开 Visual Basic 编辑器。 2. 在左侧的“项目资源管理器”窗口中,展开“Microsoft Word 对象”节点,然后右键单击要添加的模块,选择“插入”菜单,然后选择“模块”菜单项,以创建一个新的模块。 3. 在新的模块窗口中,输入代码。 4. 保存修改。在编辑器窗口中,选择“文件”菜单,然后选择“保存”或“另存为”菜单项,以保存你的修改。 5. 关闭编辑器。完成修改后,你可以按下 `Alt + F4` 快捷键来关闭编辑器窗口。 如果你想删除一个,可以在编辑器窗口中选择要删除的所在的模块,然后按下 `Delete` 键来删除它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值