通过插入word从rtf文档转储有趣的ole部分

rtfraptor的Python项目详细描述


简介

rtfraptor是一个简单的工具,通过提取olev1对象来帮助分析恶意rtf文件。它的灵感来自 Denis O'Brien的博客文章(链接如下)。

它通过运行word和拦截对olev1函数的调用来工作。这允许转储原始OLE对象 为了进一步的分析。该工具设计为在Windows上运行。

这对:

  • 避免手动分析模糊的rtf文件。
  • 提取恶意对象(打包程序对象、公式编辑器滥用、嵌入文档等)。
  • 识别RTF文档试图滥用的漏洞(或功能)。
  • 验证其他工具(如静态文档分析器)的输出。

该工具由david cannings编写,并在agpl下发布。

示例

示例屏幕抓取

安装

像这样安装rtfraptor:

$ pip install rtfraptor

这将自动获取和安装依赖项。建议安装在 虚拟环境

用法

至少需要传递选项--executable--file,如下所示:

(analysis_venv) > rtfraptor --executable "C:\Program Files\Microsoft Office\Office15\WINWORD.EXE" --file 7296D52E0713F4BF15CD4E80EF0DA37E.rtf

要保存json输出并将原始olev1对象转储到磁盘,请传递以下选项:

--json output.json --save-path ole_parts

注意:此工具运行Word。对可疑文件的分析应该在虚拟机中进行。工具 不会停止执行任何最终负载,您可能希望将虚拟机与任何 联网。

输出

原始对象输出

可以使用--save path选项存储原始OLEV1对象。下面是一个示例packager对象,它包含 可移植的可执行文件。

00000000  01 05 00 00 02 00 00 00 08 00 00 00 50 61 63 6b  |............Pack|
00000010  61 67 65 00 00 00 00 00 00 00 00 00 fe 12 00 00  |age.........þ...|
00000020  02 00 63 72 6f 73 73 61 61 61 2e 64 6c 6c 00 43  |..crossaaa.dll.C|
00000030  3a 5c 63 72 6f 73 73 61 61 61 2e 64 6c 6c 00 00  |:\crossaaa.dll..|
00000040  00 03 00 31 00 00 00 43 3a 5c 55 73 65 72 73 5c  |...1...C:\Users\|
00000050  52 65 76 65 72 73 65 5c 41 70 70 44 61 74 61 5c  |Reverse\AppData\|
00000060  4c 6f 63 61 6c 5c 54 65 6d 70 5c 63 72 6f 73 73  |Local\Temp\cross|
00000070  61 61 61 2e 64 6c 6c 00 00 12 00 00 4d 5a 90 00  |aaa.dll.....MZ..|
00000080  03 00 00 00 04 00 00 00 ff ff 00 00 b8 00 00 00  |........ÿÿ..¸...|
00000090  00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00  |....@...........|
000000a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 00 00 00 00 00 d8 00 00 00 0e 1f ba 0e  |........Ø.....º.|
000000c0  00 b4 09 cd 21 b8 01 4c cd 21 54 68 69 73 20 70  |.´.Í!¸.LÍ!This p|
000000d0  72 6f 67 72 61 6d 20 63 61 6e 6e 6f 74 20 62 65  |rogram cannot be|
000000e0  20 72 75 6e 20 69 6e 20 44 4f 53 20 6d 6f 64 65  | run in DOS mode|
... snip ...

控制台输出

生成控制台输出,列出任何可疑的OLE对象(在 oletools.common.clsid):

(analysis_venv) > rtfraptor --executable "C:\Program Files\Microsoft Office\Office15\WINWORD.EXE" --file 7296D52E0713F4BF15CD4E80EF0DA37E.rtf --json output.json --save-path ole_parts
WARNING Suspicious OLE object loaded, class id 00020821-0000-0000-C000-000000000046 (Microsoft Excel.Chart.8)
WARNING Object size is 390702, SHA256 is 2a7f92bf37cef77c4fa2e97fcf3478b3e4e4296514817bd8c12e58300b485406
WARNING Suspicious OLE object loaded, class id 00020821-0000-0000-C000-000000000046 (Microsoft Excel.Chart.8)
WARNING Object size is 390190, SHA256 is f8ac5b37f52b6316178c293704fcc762d0a29d2700c7eda53724f552413c7b98
WARNING Suspicious OLE object loaded, class id F20DA720-C02F-11CE-927B-0800095AE340 (OLE Package Object (may contain and run any file))
WARNING Object size is 359115, SHA256 is 2ea248d43d4bd53e234530db0de2517a7f44deba5f43367636232019b2e9e822
WARNING Suspicious OLE object loaded, class id F20DA720-C02F-11CE-927B-0800095AE340 (OLE Package Object (may contain and run any file))
WARNING Object size is 4902, SHA256 is 28c9afbe46a35a6d7115ca3da535854efddc9749f1ff13722fa98d2bd3a8122b
WARNING Suspicious OLE object loaded, class id F20DA720-C02F-11CE-927B-0800095AE340 (OLE Package Object (may contain and run any file))
WARNING Object size is 5926, SHA256 is 5b5850f3217e8465d6add2da18a495d87d33552c6c8f400e52e5ab9cf06ba2e9
WARNING Suspicious OLE object loaded, class id 0002CE02-0000-0000-C000-000000000046 (Microsoft Equation 3.0 (Known Related to CVE-2017-11882 or CVE-2018-0802))
WARNING Object size is 7727, SHA256 is 38d9e74ede4ef67e78e028ecd815c54a777e11c6c4e7838ecbe26fd7e7c03d7c
WARNING Suspicious OLE object loaded, class id 0002CE02-0000-0000-C000-000000000046 (Microsoft Equation 3.0 (Known Related to CVE-2017-11882 or CVE-2018-0802))
WARNING Object size is 7727, SHA256 is a612b7b97f021797c5911cfe02bd9a145f96abb880990830eaf021f98a4a7c8a

json输出

如果传递了--json选项,该工具将生成json格式的输出。这可以用于进一步的处理, 其格式如下:

{
  "sha256": "8326bcb300389a2d654e6e921e259e553f33f8949984c2da55ccb6e9ed3f6480",
  "input_file": "7296D52E0713F4BF15CD4E80EF0DA37E.rtf",
  "objects": {
    "0": {
      "class_id": "00020821-0000-0000-C000-000000000046",
      "sha256": "2a7f92bf37cef77c4fa2e97fcf3478b3e4e4296514817bd8c12e58300b485406",
      "description": "Microsoft Excel.Chart.8",
      "size": 390702
    },
    ... snip ...
    "2": {
      "class_id": "F20DA720-C02F-11CE-927B-0800095AE340",
      "sha256": "2ea248d43d4bd53e234530db0de2517a7f44deba5f43367636232019b2e9e822",
      "description": "OLE Package Object (may contain and run any file)",
      "size": 359115
    },
    ... snip ...
    "5": {
      "class_id": "0002CE02-0000-0000-C000-000000000046",
      "sha256": "38d9e74ede4ef67e78e028ecd815c54a777e11c6c4e7838ecbe26fd7e7c03d7c",
      "description": "Microsoft Equation 3.0 (Known Related to CVE-2017-11882 or CVE-2018-0802)",
      "size": 7727
    },
    ... snip ...
}

按加载OLEV1对象的顺序提供对象中的键

< H1> FAQ

我需要什么才能让它工作?

您至少需要:

  • Windows-在7上测试,应在xp到10之间工作
  • Python2-在2.7.15(32位)上测试
  • Word-通过Office 2013(32位)测试

理论上,64位版本的office和python应该可以工作。python解释器需要与office匹配。

为什么要使用这个而不是rtfobj

在许多情况下,静态分析显然更可取。然而,它从来都不是完美的,并且模拟一个复杂的解析器 带来很多挑战。

在rtf模糊处理完成后,使用此工具可以保证从word中获得准确的olev1数据。 处理。它至少被证明对比较其他工具的输出有用。

它是否与任何Microsoft Office程序一起工作?

理论上是的。word、excel和powerpoint都应该使用ole32.dll的相同部分。

然而,目前的方法是针对olev1。这被rtf使用,但被认为是遗留的。其他格式,如 复合文档格式(cdf,由.doc/.xls使用)和ooxml(由.docx/.xslx使用)通常不是 使用OLEV1。

支持哪些版本的Office?

此工具已在Office 2013中测试。它应该适用于任何32位桌面版本的Office。

很可能张ES需要支持64位版本的Office。如果有重大需求 可以进一步调查。

它是如何工作的?

目前,代码挂接三个函数,这三个函数与加载olev1对象有关:

  • 32号油!oleconvertolestreamtostorage-它将旧的olev1对象转换为实现istage的对象
  • 32号油!oleload-加载olev1对象时调用它。
  • 32号油!olegetautoconvert-由oleload调用以转换guid。

此函数链提供原始OLEV1数据,确认已加载,最后是类标识符。

方法有点脆弱,因为ole32!olegetautoconvert可以从其他(良性)源调用。更好 方法是理解内存中istorage的布局,这可能允许在ole32上使用一个钩子!oleload

这种方法可以推广吗?

是的。这一概念证明之所以被发布,主要是因为它可以以其他方式使用。

例如,可以拦截对packager等函数的调用!CopyStreamToFile或方程式的一部分 编辑。使用这种方法,您可以在策略点检查函数参数以查找无效数据,这些数据 帮助确认正在利用的漏洞(或功能)。

您还可以捕获对OLE函数的所有调用(例如,combase!)stringfromclsid)并比较 文档与恶意文档的比较。使用这种方法可以发现合法功能的滥用,使用 Windows脚本语言、新漏洞的潜在利用等。

但是要小心-office应用程序将com用于许多合法目的(包括激活),因此您将 需要过滤掉已知的良好状态:)

我能把这个嵌入到我自己的处理中吗?

是的。该工具是一个python模块,可以在您自己的代码中使用。

有关核心代码,请参见rtfraptor.engine,有关示例实现,请参见rtfraptor.app

为什么只有python 2?

虽然我喜欢Python3,但使用的调试库(winappdbg)目前只支持Python2。

已知问题

word中的安全模式

目标应用程序(通常是word)在超时过期后被强制终止。这会导致安全模式 下次启动应用程序时提示,例如,是否有等待用户输入的弹出窗口。

如果手动使用该工具,请提高超时值并手动关闭word。如果作为自动化工具链的一部分运行, 请考虑在运行之间重置虚拟机或删除相关注册表项。

另请参见

以下资源很有用:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
测试偶数/奇数Java的测试   java如何编写在请求体中接受XML的swagger API   java PrimeTable面临奇怪的错误   java如何检查数组中输入的用户是否为回文?   java如何删除JButton中文本周围的框?   java阻止直接访问JSF2中的xhtml文件   java如何获取定义方法的类的名称?   while loop如何让用户只需输入数字,然后在Java中重试?   从应用程序注册中列出azure存储帐户容器时,java受众验证失败   Java线程之间的多线程数据交换   java检查数组中是否存在重复的索引值?   java正则表达式从字符串中复制第二个URL   java如何从gradle项目依赖项中排除METAINF?   java如何将JLabel[]添加到JTable?   使用kotlin播放java音频(位于internet上的文件)