0x1 PDF是什么
PDF(便攜式文件格式,Portable Document Format)是由Adobe Systems在1993年用於文件交換所發(fā)展出的文件格式。
因?yàn)镻DF的文件格式性質(zhì)廣泛用于商業(yè)辦公,引起眾多攻擊者對(duì)其開展技術(shù)研究,在一些APT(Advanced Persistent Threat)攻擊中。針對(duì)特定目標(biāo)投遞含有惡意代碼的PDF文檔,安全意識(shí)薄弱的用戶只要打開PDF文檔就會(huì)中招。
0x2 PDF解析工具
PdfStreamDumper : 這是一款可以對(duì)惡意的PDF文檔進(jìn)行分析的免費(fèi)工具
以下是利用漏洞【CVE-2010-0188】的惡意PDF文檔樣本,文檔中的Payload為異或加密。
圖1
pdfid.py : 這個(gè)工具不是PDF解析器,但是它會(huì)掃描一個(gè)文件來(lái)尋找特定的PDF關(guān)鍵字,讓我們識(shí)別包含JavaScript的PDF文件。
pdfid.py xxx.pdf
圖2
0x3 PDF格式解析
使用pdfid.py解析之后會(huì)列出PDF當(dāng)前的格式字段。
C:\>python pdfid.py xx.pdf
每一個(gè)PDF文件都包含有前7個(gè)字段,也有可能不包含strea和endstream。據(jù)說(shuō)有一些ODF文件沒(méi)有xref或則trailer,但是這種情況比較少見。如果一個(gè)PDF文件沒(méi)有xref或者trailer關(guān)鍵字段,那么可以確定它不是惡意的PDF文件。
/xref 交叉引用表,描述每個(gè)間接對(duì)象的編號(hào)、版本和絕對(duì)的文件位置。PDF文檔中的第一個(gè)索引必須從版本65535的0號(hào)對(duì)象開始,標(biāo)識(shí)符/xref后面的第一個(gè)數(shù)字是第一個(gè)間接對(duì)象(即0號(hào)對(duì)象)的編號(hào),第二個(gè)數(shù)字是/xref(交叉引用表)的大小。
/Page指明PDF文件的頁(yè)數(shù),大多數(shù)惡意PDF文件僅僅只有一頁(yè)
/Encrypt指明PDF文件有數(shù)字水印或者是被加密過(guò)的。
/ObjStm是object streams的數(shù)量。object streams是一個(gè)可以包含其他Object對(duì)象的數(shù)據(jù)流對(duì)象。
/JS與/JavaScript指明PDF文件中含嵌有JavaScript代碼。通常惡意的PDF文件都嵌套有JavaScript代碼,這里一般都是利用JavaScript的解析漏洞或者使用JavaScript來(lái)實(shí)現(xiàn)堆噴射(heap spray),也有很多正常的PDF文件里會(huì)含有JavaScript代碼
/AA、/OpenAction和/AcroForm指明當(dāng)查看PDF文件或者PDF的某頁(yè)時(shí)會(huì)有動(dòng)作隨其執(zhí)行,幾乎所有嵌有JavaScript代碼的惡意PDF文件都有自動(dòng)執(zhí)行JavaScript代碼的動(dòng)作(action)。如果一個(gè)PDF文件包含有/AA或/OpenAction自動(dòng)執(zhí)行動(dòng)作的關(guān)鍵字段,而且含有JavaScript代碼,那么這個(gè)PDF文件就極有可能是惡意的PDF文件
/URI 如果你要在PDF文件中執(zhí)行打開網(wǎng)頁(yè)的動(dòng)作就需要這個(gè)關(guān)鍵字段
/Filter 一般為FlateDecode則是使用了Zlib壓縮解壓縮算法。
/JBIG2Decode指明PDF文件使用了JBIG2壓縮。雖然JBIG2壓縮本身可能會(huì)有漏洞(CVE-2010-1297)。但/JBIG2Decode關(guān)鍵字段并不能說(shuō)明PDF文件是否可疑
/RichMedia Flash文件
/Launch執(zhí)行動(dòng)作(action)數(shù)量
|