该工具在我们于BlackHat Asia大会(2019年3月28日)上的演讲中发布。该演讲的视频录像可在 https://www.youtube.com/watch?v=9ULzZA70Dzg 获取。
一款跨平台助手,用于创建恶意的MS Office文档。可以隐藏VBA宏、篡改VBA代码(通过P-code)并干扰宏分析工具。支持Linux、OSX和Windows。
如果你是初次接触该工具,建议先阅读我们关于Evil Clippy的博客文章: https://outflank.nl/blog/2019/05/05/evil-clippy-ms-office-maldoc-assistant/
本项目仅限授权测试或教育目的使用。
如果你对这些内容毫无概念,请先查阅以下资源:
在撰写本文时,该工具能够使默认的Cobalt Strike宏绕过大多数主流杀毒软件及各类恶意文档分析工具(通过结合VBA篡改和随机模块名称)。
Evil Clippy使用OpenMCDF库操作MS Office复合文件二进制格式(CFBF)文件,并滥用MS-OVBA规范及其特性。它重用了Kavod.VBA.Compression中的代码,以实现dir和module流中使用的压缩算法(相关规范请参见MS-OVBA)。
Evil Clippy可以完美地在Mono C#编译器下编译,并已在Linux、OSX和Windows上测试通过。
我们不提供EvilClippy的二进制发布版本。请自行编译可执行文件:
OSX 和 Linux
确保已安装Mono。然后在命令行中执行以下命令:
mcs /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs
现在从命令行运行Evil Clippy:
mono EvilClippy.exe -h
Windows
确保已安装Visual Studio。然后在Visual Studio开发者命令提示符中执行以下命令:
csc /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs
现在从命令行运行Evil Clippy:
EvilClippy.exe -h
显示帮助
EvilClippy.exe -h
从GUI隐藏/取消隐藏宏
从VBA GUI编辑器中隐藏所有宏模块(除默认的"ThisDocument"模块外)。这是通过从项目流中移除模块行实现的[MS-OVBA 2.3.1]。
EvilClippy.exe -g macrofile.doc
撤销隐藏选项(-g)所做的更改,以便在VBA IDE中调试宏。
EvilClippy.exe -gg macrofile.doc
篡改VBA(滥用P-code)
将所有模块中的VBA代码替换为文本文件fakecode.vba中的虚假VBA代码,同时保留P-code。这滥用了模块流中的一个未文档化特性[MS-OVBA 2.3.4.3]。请注意,VBA项目版本必须与宿主程序匹配,P-code才能被执行(有关版本匹配,请参见下一个示例)。
EvilClippy.exe -s fakecode.vba macrofile.doc
注意:VBA篡改对Excel 97-2003工作簿(.xls)格式无效。
为VBA篡改设置目标Office版本
与上述相同,但明确针对x86架构的Word 2016。这意味着x86的Word 2016将执行P-code,而其他版本的Word将执行fakecode.vba中的代码。通过设置_VBA_PROJECT流中的相应版本字节实现[MS-OVBA 2.3.4.1]。
EvilClippy.exe -s fakecode.vba -t 2016x86 macrofile.doc
设置/重置随机模块名称(欺骗分析工具)
在dir流中设置随机的ASCII模块名称[MS-OVBA 2.3.4.2]。这滥用了MODULESTREAMNAME记录中的歧义性[MS-OVBA 2.3.4.2.3.2.3]——大多数分析工具使用这里指定的ASCII模块名称,而MS Office则使用Unicode变体。通过设置随机ASCII模块名称,大多数P-code和VBA分析工具会崩溃,而实际的P-code和VBA在Word和Excel中仍然正常运行。
EvilClippy.exe -r macrofile.doc
注意:已知这种方法可以欺骗pcodedmp和VirusTotal。
将dir流中的ASCII模块名称设置为与它们的Unicode对应项匹配。这可以撤销使用EvilClippy的(-r)选项所做的更改。
EvilClippy.exe -rr macrofile.doc
通过HTTP提供经过VBA篡改的模板
在进行VBA篡改后,通过HTTP端口8080提供macrofile.dot。如果检索到该文件,它将自动匹配目标的Office版本(通过使用其HTTP头,然后相应设置_VBA_PROJECT字节)。
EvilClippy.exe -s fakecode.vba -w 8080 macrofile.dot
注意:您提供的文件必须是模板(.dot而非.doc)。您可以通过Word开发工具栏中的URL设置模板(不需要.dot扩展名!)。此外,fakecode.vba必须具有为模板中的宏设置的VB_Base属性(这意味着您的fakecode.vba必须以类似*Attribute VB_Base = "0{00020906-0000-0000-C000-000000000046}"*的行开头)。
设置/移除VBA项目锁定/不可查看保护
要设置锁定/不可查看属性,请使用'-u'选项:
EvilClippy.exe -u macrofile.doc
要移除锁定/不可查看属性,请使用'-uu'选项:
EvilClippy.exe -uu macrofile.doc
注意:您也可以移除未被EvilClippy锁定的文件上的锁定/不可查看属性。
开发用于Microsoft Word和Excel文档操作。
如前所述,VBA篡改对Excel 97-2003工作簿(.xls)格式无效。
Stan Hegt (@StanHacked) / Outflank
特别感谢Carrie Roberts (@OrOneEqualsOne / Walmart) 的重要贡献。
特别感谢Nick Landers (@monoxgas / Silent Break Security) 向我推荐了OpenMCDF。