恶意word文档shellcode提取

逆向工程 恶意软件 调试
2021-07-08 10:34:16

我正在使用一些恶意的 MS Word 文档,这些文档利用 Word 2k3/2k7 中的漏洞来启动 shellcode。我能够动态运行它并获得drop-bys。但是,我对静态提取 shellcode 感兴趣。我曾尝试使用 Malscanner 和一些自定义的 OLE 脚本来识别 shellcode 的开始,但到目前为止没有运气。最终我想做一个古老的 EB FE 补丁,以便在 Word 中轻松调试。

有没有人玩过恶意文档?或者有更好的调试 Word 的方法?

3个回答

在 Windows 复合二进制文件格式中静态生成 shellcode 可能有点棘手。要存储的第一个问题是 shellcode 是如何存储的?它是二进制还是十六进制 ascii?要问的第二个问题是它存储在哪里?Microsoft 文档支持许多不同的格式。shellcode 可以存储在 OLE 结构中,也可以使用十六进制编辑器找到。我首先推荐十六进制编辑器路线。您可能会走运并找到大量 NOP。您可以使用dism-this.py快速查看某些字节是否是有效的 shellcode。请注意,从 repo 下载源代码。免责声明我写了脚本。

我发现找到 shellcode 存储位置的最好方法是通过调试器进行回溯。首先找出shellcode在内存中的哪里执行,然后找出shellcode从哪里调用,然后找出shellcode如何加载到内存中,然后找出它在文件中的存储位置。这并不总是最简单的任务,但它很有趣。

这可能不是执行此操作的最佳方法。但是由于恶意文件不使用缩进的格式(就像它们利用一个字段一样),我从不使用解释程序进行此类工作。

我建议,查找格式并将其加载到010 编辑器(或任何其他十六进制编辑器)中。这个支持模板,您可以使用这些模板来确定它们溢出/利用的内容。

鉴于您可以让漏洞利用代码动态运行,我建议在 Word 进程上使用 API 记录器(如http://www.rohitab.com/apimonitor)来查看 shellcode 进行了哪些 API 调用。然后,您可以在附加调试器的情况下重新启动 Word,在您看到由 shellcode 进行的那些 API 调用上设置断点,并等待这些断点通过 shellcode 命中。您现在将在 shellcode 执行过程中暂停该进程,并且可以“向后查看”以找到 shellcode 的开头。

请注意,即使恶意文档使用 ROP 而不是实际的 shellcode,这种方法也很有用,在这种情况下,您的调试器将在 ROP 链的中间而不是在 shellcode 本身的中间中断。无论哪种方式,它都会帮助您找到目标文件中的恶意内容。