赞
踩
PDF(便携式文件格式,Portable Document Format)是由Adobe Systems在1993年用於文件交换所发展出的文件格式。
因为PDF的文件格式性质广泛用于商业办公,引起众多攻击者对其开展技术研究,在一些APT(Advanced Persistent Threat)攻击中。针对特定目标投递含有恶意代码的PDF文档,安全意识薄弱的用户只要打开PDF文档就会中招。
PDF的结构可以从文件结构和逻辑结构两个方面来理解。PDF的文件结构指的是其文件物理组织方式,逻辑结构则指的是其内容的逻辑组织方式。以下为文件结构:
1.PDF文件可以理解理解为 二进制文件,所以可以使用十六进制工具打开,打开之后也可以直白的看出PDF的关键字段以及文件结构。
- %PDF-1.6 #文件头+版本号,16进制读取文件0x25 0x50 0x44 0x46开头即证明是pdf文件
- %çóÏÓ #下面就是很多的Object对象
- 2 0 obj #Object对象,其中2是Obj顺序号,0是Obj的版本号,obj也是对象开始的标志
- << #<<>>之间为Object对象的字典内容,包含关键字
- [/ICCBased 3 0 R]
- >>
- Endobj #Object结束关键字
- 7 0 obj
- <<
- /Filter
- /FlateDecode #流对象的压缩方式为/FlateDecode
- /Length 148 #流对象的长度
- >>
- Stream #流对象
- #文件内容信息,注:此处为直观从而手动填写的
- Endstream #流对象结束标志
- Endobj
- 8 0 obj
- <<
- /Contents 7 0 R #页面内容对象的对象号为7
- /MediaBox [0 0 595.2 841.68] #页面显示大小,以像素为单位
- /PageIndex 1
- /Parent 1 0 R #其父对象号为1以及Pages对象
- /Resources #该页包含的资源
- <</Font <</F4 4 0 R >> #字体的类型
- /Shading <<>>
- /XObject <<>> #外部对象
- /ColorSpace <</CS1 2 0 R>>
- >>
- /Type /Page
- >>
- Endobj
- 1 0 obj
- <<
- /Count 1 #页码数量为1
- /Kids [8 0 R ] #kids对象说明它的子页对象为8
- /Type /Pages
- >>
- Endobj
- 13 0 obj
- <<
- /Author (? Cryin')
- /CreationDate (D:20100926145832+08'00')
- /Title (? PDF文件格式分析)
- >>
- endobj
- Xref #表示交叉引用表开始
- 0 14 #0表明引用表描述的对象编号从0开始,8说明共有8个对象#此行在交叉引用表中可出现多个
- 0000000000 65536 f #一般pdf都是以这行开始交叉引用表的,起始地址0和产生号
- 0000003195 00000 n #表示对象1,就是catalog,3195为偏移地址n表示对象在使用
- 0000000018 00000 n
- 0000000051 00000 n
- 0000003464 00000 n
- 0000000000 00000 f
- 0000004282 00000 n
- 0000002728 00000 n
- 0000002992 00000 n
- 0000003256 00000 n
- 0000003892 00000 n
- 0000003620 00000 n
- 0000008660 00000 n
- 0000008712 00000 n
- Trailer #说明文件尾对象开始
- <</Size 14 #14说明PDF文件对象数目
- /Root 12 0 R #说明跟对象号为12
- /Info 13 0 R>>
- startxref
- 8980 #8980为交叉引用表的偏移地址,此处为十进制表示
- %%EOF #文件结束标志
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
2.PdfStreamDumper : 这是一款可以对恶意的PDF文档进行分析的免费工具。
3.pdfid.py : 这个工具不是PDF解析器,但是它会扫描一个文件来寻找特定的PDF关键字,让我们识别包含JavaScript的PDF文件。
pdfid.py xxx.pdf
每一个PDF文件都包含有前7个字段,也有可能不包含strea和endstream。据说有一些ODF文件没有xref或则trailer,但是这种情况比较少见。如果一个PDF文件没有xref或者trailer关键字段,那么可以确定它不是恶意的PDF文件。
/xref 交叉引用表,描述每个间接对象的编号、版本和绝对的文件位置。
/xref后面的第一个数字是第一个间接对象(即0号对象)的编号,第二个数字是/xref(交叉引用表)的大小。
/Page指明PDF文件的页数,大多数恶意PDF文件仅仅只有一页
/Encrypt指明PDF文件有数字水印或者是被加密过的。
/ObjStm是object streams的数量。object streams是一个可以包含其他Object对象的数据流对象。
/JS与/JavaScript指明PDF文件中是否含嵌有JavaScript代码。通常恶意的PDF文件都嵌套有JavaScript代码,这里一般都是利用JavaScript的解析漏洞或者使用JavaScript来实现堆喷射(heap spray),也有很多正常的PDF文件里会含有JavaScript代码
/AA、/OpenAction和/AcroForm指明当查看PDF文件或者PDF的某页时会有动作随其执行,几乎所有嵌有JavaScript代码的恶意PDF文件都有自动执行JavaScript代码的动作(action)。如果一个PDF文件包含有/AA或/OpenAction自动执行动作的关键字段,而且含有JavaScript代码,那么这个PDF文件就极有可能是恶意的PDF文件
/URI 如果你要在PDF文件中执行打开网页的动作就需要这个关键字段
/Filter 一般为FlateDecode则是使用了Zlib压缩解压缩算法。
/JBIG2Decode指明PDF文件使用了JBIG2压缩。虽然JBIG2压缩本身可能会有漏洞(CVE-2010-1297)。但/JBIG2Decode关键字段并不能说明PDF文件是否可疑
/RichMedia Flash文件
/Launch执行动作(action)数量
4.其他工具
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。