g0mx 发表于 2023-3-2 09:45

恶意文档shellcode自动提取器

本帖最后由 g0mx 于 2023-3-2 16:09 编辑

注:相关的实现细节可阅读源码和本人首发于[看雪的文章](https://bbs.kanxue.com/thread-275559.htm);具体使用方式请访问项目地址。
# 概述
该shellcode提取器的应用对象是Maldoc,通过将市面上存在的相关分析工具进行组合,形成工具链,达到自动化定位及提取shellcode的目的。
# 语言及环境
* 语言:python + javascript
* 环境:REMnux docker + win7 (注:不使用RTF中的动态方法,可以摒弃win7,但面对一下经混淆的RTF文件可能无法正确提取shellcode)
* The (https://hub.docker.com/repository/registry-1.docker.io/g0mx/remnux-shellcode_extractor) created by myself for extracting shellcode from maldoc based on REMnux
* 项目地址:(https://github.com/g0mxxm/shellcode_extractor_for_maldoc)

# 实现细节
实现并不复杂,本人认为该工具的实现思路是它的闪光点。实现思路,即将分析人员手动定位并提取shellcode的步骤自动化。
整体流程主要由解包、定位、提取这三个环节组成,后续的优化并不会改变整体流程。
* 解包:针对RTF文件中OLE对象的定位和提取,本工具采用了动态和静态两种方式来解决此问题,二者也各有利弊。静态方式主要轮子取自Didier Stevens工具集,动态方式是本人基于frida hook框架编写了几个脚本来实现的,后文会进行详细阐述;针对OOXML文件的解包,主要轮子取自Didier Stevens工具集;针对OLE对象的解包,主要轮子取自Didier Stevens工具集。此外,该阶段会对文档类型及是否加密进行判断,主要轮子取自于oletools工具集,若加密则进行解密,随后进入下一环节;若未加密,则直接进入下一阶段。
* 定位:主要轮子取自Didier Stevens工具集,其主要思想为遍历及暴力破解,首先对OLE对象进行解包,随后对其每个子stream进行暴力破解,特征匹配,以达到定位shellcode的目的。
* 提取:主要轮子取自于Didier Stevens工具集,很简单的一步,定位后尝试对目标位置进行解码,随后dump即可得到最终的shellcode。

# 演示
## 动态获取RTF中OLE文件
提供word路径,样本文件路径,以及hook脚本文件即可。

## shellcode提取器
提供maldoc文件或OLE文件即可,以刚刚动态获取到的OLE文件为例。

对得到的shellcode(final_shellcode_file)进行一下简单的验证。
静态:可以看到其中有LoadLibraryW和GetProcAddress,看到这俩函数可以确定,其在获取目标函数的地址,方便后续使用;又看到ExpandEnvironmentStringsW,可以确定其是将其中的“%APPDATA%”进行扩展;随后再调用URLDownloadToFileW来下载后续文件,写入指定路径中。

动态:选择scdbg进行模拟执行来获取更加准确的信息,通过shellcodedbg执行后的结果,可以更加清晰地看到,其调用了哪些函数,参数是什么,整体流程与上文通过静态分析得到的结果基本一致,但模拟执行向我们展示了准确的URL,以及从远端下载了什么。

可以看到通过两者结合我们快速且精确的得到了maldoc中的shellcode,并通过静态或模拟执行来获取到其主要行为,快速结束maldoc的前戏,将主要精力放在分析后续的主体行为上,提高效率,愉悦心情,哈哈。


shaokui123 发表于 2023-3-2 11:48

恶意excel文档能提取吗

g0mx 发表于 2023-3-2 16:04

shaokui123 发表于 2023-3-2 11:48
恶意excel文档能提取吗

可以,office2007之前是OLE文件,2007之后是zip,但其中若包含shellcode基本都会存在OLE对象,可以去看雪看一下实现细节,文章地址在github上有

M4killer 发表于 2023-5-10 14:43

6666666666

yingwangzi 发表于 2023-5-23 19:28

感谢,看看,飞天啊
页: [1]
查看完整版本: 恶意文档shellcode自动提取器