恶意PDF文档分析工具介绍和简单分析

一、PDF说明

             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    #文件结束标志 

           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.其他工具

https://www.cnblogs.com/DeeLMind/p/7238171.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值