网络安全 频道

一文浅析Office恶意宏代码如何隐藏和破解

  含有恶意宏的Office附件在APT攻击、勒索病毒等攻击事件中被广泛使用,黑客在制作恶意宏时通常会使用一些技巧来隐藏宏代码,防止安全人员对宏代码直接进行分析。虽然可以通过云沙箱或者是逆向动态调试的方法得到恶意宏的行为数据,但是一方面云沙箱的数据可能不够全面,并且也无法对失效的样本进行调试,所以直接对宏代码进行分析是最直接有效的方法。

  此前在分析APT组织TA505的攻击活动时,追查到一个鱼叉攻击中含有恶意宏的Word附件样本,尝试了很多方法才查看到完整的VBA代码。在此过程中发现网络上关于宏代码的隐藏和破解的内容大多都是对VBA工程密码的破解,所以在此介绍一些Office宏代码的隐藏及破解技巧。

  背景知识

Office宏

  Office宏是微软为了让人们在使用Office软件时,避免一再地重复相同的动作而设计出来的一种功能。人们可以利用简单的语法,把常用的动作写成宏,实现一些重复工作的自动化。

  微软最早是在1992年发布的Excel 4.0版本中开始支持宏功能,并在1996年发布的Office 97之后通过VBA(Visual Basic for Applications)将其取代(后续版本还都兼容Excel 4.0宏)。VBA是微软基于Visual Basic语言设计的一种标准宏语言,可以在微软所有可编程应用软件(Word、Excel、PowerPoint、Access、Outlook、Project等)中通用。其支持Windows API、DLL、DDE、OLE、ODBC等技术,可以实现丰富的功能。

  复合二进制文档(CFB)

  复合二进制文档(以下简称CFB)是微软开发的一种实现COM结构化存储的文件格式,用于把文本、图像、视频等多个对象内容存放在一个文件中,Office97–2003文档(.doc、.xls等)使用的即是此格式。

  CFB类似于FAT文件系统结构,将存储空间划分为若干个大小(通常为512字节)相同的扇区,扇区还可以划分短扇区,并形成一个树形目录结构,将数据分成若干个流和短流,无序的存储在扇区和短扇区中,通过扇区(短扇区)配置表记录存储顺序(扇区链),并通过主扇区配置表记录扇区配置表的存储位置,每个流的入口信息存储在目录中。在头扇区中存储主扇区配置表、短扇区配置表、根目录入口等基础信息。

  OVBA文件结构中的相关内容

  在Office VBA文件结构中定义了一些与VBA工程加密相关的内容,程序在加载VBA工程文件时会校验相关参数的合法性,有问题就会报错。

  ●ID(CLSID,全球优异标识符),是一组32位16进制数表示的标识符,用于标识VBA工程的类型库信息。由ole32.dll库中的CoCreateGuid()函数生成,通过在生成过程中使用网卡MAC地址、纳秒级时间、芯片ID码、随机数等信息确保CLSID的唯一性。

  ●CMG(ProjectProtectionState),定义VBA工程的访问是否被限制,4字节,前三位分别代表被用户、VBA宿主程序、VBE限制,其余为0(在VBA 5.0中为全0)。由加密模块加密(Length=4),得到22-28位16进制数。

  ●GC(ProjectVisibilityState),定义VBA工程是否可见,默认值为0xFF,代表工程可见,工程不可见时值为0x00(CMG的第三位必须为1)。由加密模块加密(Length=1),得到16-22位16进制数。

  ●DPB(ProjectPassword),定义VBA工程密码的Hash(基于SHA-1的自定义哈希算法),未设置密码时值为0x00;设置了密码时值为密码的Hash(在VBA 5.0中此值为明文密码的多字节字符集编码)。由加密模块加密(未设置密码Length=1,设置了密码Length=29,VBA 5.0中Length=密码长度)。同时设置密码以后CLSID的值变为全0。

  ●加密模块:使用原始值、Length、CLSID、Seed(随机数,存储在返回数据的第一个字节)作为参数的一种可逆加密算法。

宏代码隐藏技巧

Excel 4.0宏

  Excel 4.0的宏代码写在工作表中,将宏代码所在的行、列、工作表隐藏即可。此方法非常简单,但是由于Excel 4.0宏存储在Excel 97–2003格式(.xls,复合二进制文档格式)的Workbook OLE流中,对杀毒软件的解析检测能力要求比较高,所以被广泛使用。

  设置VBA工程密码

  为VBA工程属性设置密码及查看时锁定,这是最常见的一种方式。

  修改相关参数值

通过修改相关参数的值,使其校验失败,导致工程报错无法查看。

  修改ID的值,打开VBA工程时会显示“工程不可查看”

  修改CMG或DPB的值,可以看到VBA工程的结构,但是查看工程时仍然会显示“工程不可查看”。

  修改GC的值,导致内存溢出,并且看不到VBA工程。

  修改相关参数值及CFB存储结构

  在修改ID、CMG、DPB、GC值的基础上,对CFB的存储结构进行了修改,严格限制了CFB中扇区链及目录入口的位置,使之后再替换ID、CMG、DPB、GC值时由于字节数的不一致导致CFB存储结构错误,文档损坏报错。

  利用控件属性标签隐藏参数

  在分析TA505的样本时,使用oledump提取到的VBA代码中,我们发现多处对TadaSHC的调用,但是TadaSHC模块代码中只包含一些基本的属性设置,没有具体的数据。

  这是由于oledump等工具只能提取到VBA流的元数据,无法提取到VBA流的属性标签数据,于是黑客利用VBA窗体控件中的一些属性标签为字符串类型的特点,将关键参数隐藏于此,同时在VBA代码中通过调用控件的属性标签完成shellcode拼接。

  恶意宏代码破解方法

  Excel 4.0宏

  对隐藏的Excel 4.0宏代码,只需对隐藏的行、列、工作表取消隐藏即可。

  设置VBA工程密码

  破解方法1:

  将加密后文件的“DPB”键名修改为任意值,再打开文档时会提示工程文件包含无效的键,继续加载工程后可以查看VBA代码。

  破解方法2:

  用自己加密的VBA工程文件的ID、CMG、DPB、CG参数值替换待破解文件的参数值,待破解文档的密码就会变成自己设置的密码。

  修改相关参数值

  将ID、CMG、DPB、GC替换为一组合法值,即可恢复。

  对于修改了相关参数以及CFB存储结构的文件,可以使用oledump、OfficeMalScanner、oletools等工具,从CFB中提取到VBA流。

  如果黑客将关键参数隐藏到了VBA窗体控件中的一些属性标签中,导致使用工具提取不到完整的VBA代码时,可以打开一个正常的包含VBA工程文档的VBA编译环境,再打开经过特殊处理的样本,即可查看VBA工程。

  可以看到窗体控件Tag属性标签中存储的恶意字符串。

  除TA505外,包括摩诃草,蔓灵花,海莲花,Kimsuky在内的绝大部分APT组织都会在其攻击活动中使用包含有恶意宏文档的钓鱼邮件作为其攻击的入口,及时有效的分析恶意宏的代码行为,能够更好的掌握攻击者的动向。

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
3
相关文章