疫情期间竟然还有这种病毒?解密古老而又神秘的宏病毒

2022-04-26 20:08:46 浏览数 (1)

这是 酒仙桥六号部队 的第 18 篇文章。全文共计3670个字,预计阅读时长10分钟。前言如果评选世界上最善良的文件,Word文档应该榜上有名。很少有人会把".doc"文件和黑客手中的杀人利器联系起来。然而,事实正好相反。上世纪90年代,就有"宏病毒"出现,病毒制造者利用word的特性,在文档中内嵌破坏性的程序。不过,

这是 酒仙桥六号部队 的第 18 篇文章。

全文共计3670个字,预计阅读时长10分钟。

前言

如果评选世界上最善良的文件,Word文档应该榜上有名。很少有人会把".doc"文件和黑客手中的杀人利器联系起来。

然而,事实正好相反。上世纪90年代,就有"宏病毒"出现,病毒制造者利用word的特性,在文档中内嵌破坏性的程序。不过,由于技术的限制,当年"宏病毒"并不能造成毁灭性的影响。

【乌克兰某电力公司高管收到的文件,如果点击同意,就会陷入黑客构建的木马陷阱之中】

20多年过去了,古老的封印再一次被打开。随着新型冠状病毒感染的肺炎爆发,这也给居心叵测的攻击者带来了可乘之机。Word文档不再是当年那个手无缚鸡之力的书生,而变成手法毒辣的"文字幽灵"。

【360安全大脑捕获印度APT组织,针对我国医疗机构发起的鱼叉式钓鱼攻击】

基础理论

宏病毒是一种常见的计算机病毒,寄存在文档或模板中,并不会直接感染可执行程序。但是打开携带宏病毒的文档,其中的命令就会被执行,导致文档所在电脑主机被感染。

打开含有宏的文档文件,会遇到"安全警告",单击"启用内容"按钮,宏就会执行。使用快捷键Alt F11可以打开vb编辑器,查看宏代码。

实战研究

如果遇到启用内容后,查看VBA编辑器,弹出了要求输入密码的对话框,使用VBA_Password_Bypasser进行解密。

选择启用宏后,宏代码就会运行,如果存在恶意行为,恶意行为就会执行。这样的分析方式存在一定的风险。

oledump.py

https://github.com/decalage2/oledump-contrib

oledump.py是一个用于分析OLE文件(复合文件二进制格式)的程序,我们可以使用它提取文档中的宏代码。

某段数据上标记了字母'M',表示这段数据中含有VBA宏(Macro):

宏病毒的激发机制有三种:利用自动运行的宏,修改Word命令和利用Document对象的事件。

宏病毒中常用的自动执行方法有两种:一种是用户执行某种操作时自动执行的宏,如Subbotton(),当用户单击文档中的按钮控件时,宏自动执行;另一种则是Auto自动执行,如SubAutoOpen()和Sub AutoClose(),分别在文档打开和关闭时自动执行。

宏病毒采取的隐蔽执行的一些措施:

代码

措施

On Error Resume Next

如果发生错误,不弹出错误对话框

Application.DisplayStatusBar = False

不显示状态栏,避免显示宏的运行状态

Options.SaveNormalPrompt = False

修改公用模板时在后台自动保存,不给任何提示

EnableCancelKey = wdCancelDisabled

使不可以通过ESC键取消正在执行的宏

Application.ScreenUpdating = 0

不让屏幕更新,让病毒执行时不影响计算机速度

Application.DisplayAlerts = wdAlertsNone

不让Excel弹出报警信息

CommandBars("Tools").Controls("Macro").Enabled = 0

屏蔽工具菜单中的"宏"按钮

CommandBars("Macro").Controls("Security").Enabled = 0

屏蔽宏菜单的"安全性"

CommandBars("Macro").Controls("Macros").Enabled = 0

屏蔽宏菜单的"宏"

CommandBars("Tools").Controls("Customize").Enabled = 0

屏蔽工具菜单的"自定义"

CommandBars("View").Controls("Toolbars").Enabled = 0

屏蔽视图宏菜单的"工具栏"

CommandBars("format").Controls("Object").Enabled = 0

屏蔽格式菜单的"对象"

宏病毒调用的外部例程表:

外部例程

介绍

MSXML2.ServerXMLHTTP

Xmlhttp是一种浏览器对象, 可用于模拟http的GET和POST请求

Net.WebClient

提供网络服务

Adodb.Stream

Stream 流对象用于表示数据流。配合XMLHTTP服务使用Stream对象可以从网站上下载各种可执行程序

Wscript.shell

WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量。

Poweshell

PowerShell.exe 是微软提供的一种命令行shell程序和脚本环境

Application.Run

调用该函数,可以运行.exe文件

WMI

用户可以利用 WMI 管理计算机,在宏病毒中主要通过winmgmts:.rootCIMV2隐藏启动进程

Shell.Application

能够执行shell命令

字符串隐写

Chr()函数

Replace()函数

CallByname函数

Alias替换函数

名利用窗体、控件隐藏信息

利用文件属性(与利用窗体属性的方式类似,就是将一切能存储数据的地方利用起来。)

恶意行为字符串

常见宏病毒执行危险操作时代码中含有的字符串:

| 字符串 | 描述 |

| ------ | ----- |

| http |   URL连接

| CallByName |   允许使用一个字符串在运行时指定一个属性或方法,许多宏病毒使用CallByName执行危险函数

| Powershell |  可以执行脚本,运行.exe文件,可以执行base64的命令

| Winmgmts |  WinMgmt.exe是Windows管理服务,可以创建windows管理脚本

| Wscript  |  可以执行脚本命令

|   Shell  |  可以执行脚本命令

| Environment |  宏病毒用于获取系统环境变量

| Adodb.stream |  用于处理二进制数据流或文本流

| Savetofile |  结合Adodb.stream用于文件修改后保存

| MSXML2 |  能够启动网络服务

| XMLHTTP |  能够启动网络服务

| Application.Run |  可以运行.exe文件

| Download |  文件下载

| Write |  文件写入

| Get |  http中get请求

| Post |  http中post请求

| Response |  http中认识response回复

| Net |  网络服务

| WebClient |  网络服务

| Temp |  常被宏病毒用于获取临时文件夹

| Process |  启动进程

| Cmd |  执行控制台命令

| createObject |  宏病毒常用于创建进行危险行为的对象

| Comspec |  %ComSpec%一般指向你cmd.exe的路径

宏病毒的防御手段

安装杀毒软件,打全系统补丁

禁用宏

越过自动宏(如果怀疑文档中存在宏病毒,可以在Office打开文档的时候,始终按住Shift键,将禁止存在的一起自动宏。)

复合文档(OLE文件)二进制解析

Office文档(如:.doc、.ppt、.xls等)很多是复合文档(OLE文件),所有文件数据都是存储在一个或多个流中。

分析工具

Office Visualization

Tool:微软提供的office二进制格式查看工具,用于学习doc,xls,ppt等文档二进制格式。

010Editor:一款流行的二进制编辑器。

还有oledump、olevba、ViperMonkey、OfficeMalScanner、Decalage、StructuredStorage Viewer等工具。

Office VisualizationTool对于OLE文件头、Directory、FAT、DIF等数据解析的比较详细:

Structured Storage Viewer对Stroage、Stream数据解析的比较清晰:

如果文档的VBA工程被加密,(office只提供了对VBA工程的伪加密)。使用VBA_Password_Bypasser打开这个文档文件就可以正常打开VBA编辑器了,而不需要输入密码。

Microsoft Word/Excel 宏文件 -利用

Word/Excel虽然是很老旧,但向受害者发送恶意的 Microsoft Office文件仍然是久经考验的一种社会工程学攻击方法。那为什么Office 文件非常适合作为恶意 payload 的载体呢?

这是因为 Office文件的默认设置是支持 VBA 代码所以允许 VBA代码的代码执行。尽管最近这种方法已经很容易被杀毒软件检测到,但在经过混淆处理之后,在很多情况下仍然可以生效。

在最基础的水平上,我们可以使用 Empire 或 Unicorn 来创建一个 VBA 宏:

(实际情况,使用empire可以成功反弹shell;使用Unicorn显示生成payload的代码版本不兼容office2016)

一旦生成成功,你的 payload 将如下所示:

这是运行一个简单的 PowerShell base64混淆脚本。这可以帮助解决绕过一些杀毒软件,但重要的是要确保在进行实时入侵操作之前对其进行测试。生成宏后,你可以快速创建一个Excel 文档:

  • 打开 Excel
  • 转到视图选项卡(View Tab) - >宏 - >查看宏
  • 添加一个宏名称,为 book1 配置宏,然后单击 "创建"

  • 用生成的代码替换所有当前的宏代码
  • 另存为 .xls(Word 97-2003)或 Excel Macro-Enabled 格式的文件

Office远程代码执行漏洞(CVE-2017-11882 &CVE-2018-0802)复现。

https://myzxcg.github.io/20180921.html

简单示例:使用Excel 4.0宏执行ShellCode

新建一个xls文件。

创建一个新的Excel工作簿。右键单击屏幕底部的"Sheet1",然后单击"插入"。

弹出一个窗口,允许您从要插入的各种对象中进行选择。选择"MS Excel 4.0宏表"并单击"确定"。

已创建一个名为"宏1"的新工作表。这是一种特殊的工作表类型,可以在其中输入XLM宏(所谓的宏表)。单击任何单元格并在此单元格和下面的后续单元格中输入公式=EXEC("calc.exe"),= ALERT("Hello world")和= HALT()。

保存,点击启用内容后(即启用宏功能),代码执行。

示例说明

三个公式的具体含义:

公式内容

功能

=EXEC("calc.exe")

内部调用WinExec函数打开计算器

=ALERT("Hello, World")

内部调用MessageBox函数打开对话框

=HALT()

标识Excel 4.0宏结束,类似C语言return指令

利用宏病毒钓鱼攻击

Cobalt Strike office钓鱼主要方法是生成一段vba代码,然后将代码复制到office套件中,当用户启动office自动运行。

cobalt strike操作

点击cobalt strike主界面中:

攻击 ->生成后门 -> ms office macro

弹出界面选择Add,创建一个监听。

生成vba代码:

word操作

点击上方标签视图标签,在该标签中点击宏按钮,弹出的对话框中输入宏名字,然后单击创建按钮。

首先清空所有代码,然后将复制的代码粘贴到编辑器中,关闭宏编辑窗口,保存退出。

双击再次运行保存的文档,当目标机器运行文档后,Cobaltstrike会接收到目标机器反弹的shell。

目标进程会增加一个rundll32.exe进程。

免杀

免杀操作以cobaltstrike生成的恶意文档为例。关于恶意文档的生成方法参考上文,不再赘述。

工欲善其事,必先利其器

免杀工具:EvilClippy,该工具是outflanknl 大佬在2019年的BlackHat Asia会议上放出的。

使用方法:

1、创建一个虚假的vb文件,该文件会插到恶意文档中,里面需要放正常的代码,用于迷惑杀软。

代码语言:javascript复制
Sub test()  '  ' 该vb代码没有任何功能,用于迷惑杀软。  '  '  End Sub

将上述代码块中的代码,保存为 fakecode.vb  文件。

2、将 EvilClippy.exe、OpenMcdf.dll(该文件在GitHub项目的releases中)、cs生成的恶意文档以及用于迷惑杀软的 fakecode.vb 文件放置在同一目录下。

EvilClippy.exe -s fakecode.vba cs.doc

关于该工具的其他姿势,有兴趣的同学可以阅读这篇文章:

https://outflank.nl/blog/2019/05/05/evil-clippy-ms-office-maldoc-assistant/

实测效果

cobalt strike 生成的文档

免杀后

0 人点赞