分析 CVE 2017-0261 的 .EPS 恶意文件
2021-03-16 11:59:00 Author: paper.seebug.org(查看原文) 阅读量:222 收藏

作者:Yenn_
原文链接: https://0xdf1001f.github.io/2021/01/19/eps-malware/

EPS

EPS(英文全称:Encapsulated PostScript)是PostScript的一种延伸类型,是目前系统中功能最强的一种图像文件格式。

最近发现一个印度白象组织的样本,样本中使用了CVE 2017-0261的漏洞。

打开Office文档时,FLTLDR.EXE将被用于渲染包含该漏洞的嵌入式EPS文件。该文件是由PostScript语言编写而成,可以被攻击者通过”save-restore”操作利用,其本质为一UAF漏洞。 当用户打开包含格式错误的图形图像的文件时,或者当用户将格式错误的图形图像插入到 Office 文件时,该漏洞可能会受到利用。

样本情况

File Name : Chinese_Pakistani_fighter_planes_play_war_games.docx

File Size : 464,356 Byte

File md5 : 6d63dc5cdb504f3365403c1296e696a0

样本打开后如图:

打开样本后,可以看见启动了子进程FLTLDR.EXE,虽然存活时间很短,至少它启动了。

如何调试恶意代码

.EPS恶意代码存放在Word中的\word\media\目录下,7z打开.doc文件拖出来即可

在调试的时候发现,Word文档的.EPS和韩国HWP的.EPS调试好像不太一样,韩国的HWP可以直接用cerbero_suite_advanced将其中的Shellcode解压出来,但是Word文档不行。

后来在Github找到了一个LoadEPS的软件,https://github.com/pdfswf/eps-CVE-2017-0261

具体使用方法,将样本的.eps恶意文件放入\done\文件夹内覆盖poc.eps,利用loadeps.exe加载恶意.eps,然后使用OD加载loadeps.exe,这里可以用镜像劫持加载,也可以先用OD加载loadeps.exe然后在OD内修改参数

加载后如图:

加载后在4011EE地址处下断,F7步入,Alt+M找到EPSIMP32的加载基址

用IDA打开前面文件内的EPSIMP32.idb,修改基址,定位到closefile的地址

到了closefile_proc的地址,往下找到ROP链执行Shellcode的地方下断

F7步入,可以发现有VirtualProtect函数修改内存页属性为PAGE_EXECUTE_READWRITE,这里的内存地址就是Shellcode存在的地址,可以跟过去调试了

Shellcode

申请内存,获取API地址

硬编码kernel32.dll,ntdll.dll加载并从中获取函数地址

展开系统变量,获取路径%windir%\temp,并在目录内创建一个文件然后又马上删除

检查WINWORD.exe进程,随便点开一个word文档,保存WINWORD进程存在

这里需要F7进去手动修改一下,因为这样本在获取函数地址的时候,没有获取到CreateToolhelp32Snapshot这个函数,导致call edi的时候edi寄存器为0,程序会出错,需要手动修改edi的值为CreateToolhelp32Snapshot的函数地址

遍历进程,判断WINWORD.EXE是否存在

创建文件“C:\Users\sam\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\MSBuild.exe”

将一个PE文件写入创建的MSBuild.exe中

这里PE文件来自于.eps文件中的内容,与老版本不同的是,老版本是直接写在.eps中只需要添加MZ即可,这里是通过XOR 0x16082019的计算后得出,每四字节与key 0x16082019 进行异或计算

这里可以写一个JS代码测试一下,在浏览器console直接运行

function xor(str){
        var arr = str.split(" ");
        var s = "";
        for(var i in arr) s += (parseInt("0x" + arr[i]) ^ 0x16082019).toString(16) + " ";
        console.log(s.toUpperCase());
}

再次给样本修复CreateToolhelp32Snapshot的地址,样本会遍历进程查找explorer.exe进程并向其中注入代码

注入的代码也来自于.eps文件中

注入代码的功能是启动前面释放的MSBuild.exe

创建一个隐藏文件

“C:\ProgramData/Microsoft/DeviceSync/Chinese_Pakistani_fighter_planes_play_war_games_to_prove_a_point_to_India.docxt”并将.EPS中的一个Word文档写入

创建进程执行这个释放出的文档然后退出进程

.eps的代码到这里结束,后面的情况就好分析了


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1509/



文章来源: https://paper.seebug.org/1509/
如有侵权请联系:admin#unsafe.sh