胡江,周安民
(四川大學電子信息學院,成都 610065)
針對JavaScript攻擊的惡意PDF文檔檢測技術研究
胡江,周安民
(四川大學電子信息學院,成都 610065)
惡意PDF文檔;JavaScript代碼;靜態檢測;特征提取
PDF(Portable Document Format)是便攜式文檔格式的簡稱,是由Adobe公司所開發的一種獨特的跨平臺的文件格式,在Windows、Unix或者Mac OS中,PDF文件都是通用的。然而,正是由于PDF文檔的可移植性、兼容性、封裝性和免費性,它成為了互聯網上攻擊者傳播惡意代碼的主要載體[1]。最常用的方式就是利用電子郵件,通過社會工程學,讓用戶主動打開惡意PDF附件,從而感染受害者電腦。PDF文檔常被攻擊者利用的另一個重要原因是它擁有自己的JavaScript引擎,并允許在PDF文檔中嵌入JavaScript代碼,此功能意味著PDF能夠執行復雜的任務如形式驗證和計算。然而,它也使攻擊者擁有了運行任意代碼的途徑,攻擊者可以利用惡意的JavaScript代碼發起攻擊。塞門鐵克的一份安全報告表明,通過PDF文檔來執行惡意功能時,90%都使用了JavaScript代碼,因此在檢測惡意PDF文檔中,能否準確識別JavaScript代碼尤為重要,大部分嵌入的JavaScript代碼在一定程度上進行了混淆編碼,這樣,不但增加了人工分析的復雜度,而且連防病毒軟件也難以檢測出來。現階段的檢測技術主要有以下幾種方法:
(1)對PDF文檔的物理結構[2]進行解析,并根據數據流對象進行解壓縮操作,通過解壓后的數據,進行全局匹配,例如匹配/JS、/OpenAction等關鍵字段,然后通過確定規則判斷是否為惡意文檔。
(2)JScan模型[3],這是一種動態檢測模型,該模型是將異常JavaScript代碼檢測和仿真結合起來,異常檢測通常是基于對特定函數的監控,例如eval,從而達到對惡意代碼的自動識別的目的。
由于上述方法(1)中,很多惡意樣本是混淆或者加密過的,所以單單進行解壓縮后可能還是一些密文,造成檢測效率很低。而且很多正常PDF文檔也會有JavaScript代碼,所有這樣檢測很容易造成較高的誤報率。方法(2)由于使用了大量的仿真技術,所以該檢測系統會造成大量的資源消耗,所以通用性不強。本文通過對PDF文檔格式進行深入解析,對PDF文檔中流對象的壓縮算法與加密算法進行自動判斷,以及對解密后JavaScript代碼進行完整的預處理,形成有效的特征向量集,并在此基礎上建立規則特征庫,最后綜合判斷是否為惡意PDF文檔。
1.1PDF文檔格式解析
PDF文檔是一種文本和二進制混排的格式,它的文件結構主要是由文件頭(header)、文件體(body)、交叉引用表(cross-reference)和文件尾(tailer)組成。
(1)文件頭
文件頭是用來標識PDF文檔的版本,它出現在PDF文件的第一行。如%PDF-1.6表示該文件格式符合PDF 1.6規范。
(2)文件體
文件體主要包含了PDF文檔的主題內容,各部分之間是由對象方式(obj)呈現,這些對象構成了PDF文檔的具體內容如字體、頁面、圖像等。基本格式如下所示:
70 obj
〈〈/Kids[5 0 R]/Type/Pages/Count 1〉〉
endobj
其中7 0 obj中的7是對象序號,是用來唯一標記一個對象;0是生成號,是和對象序號一起標記其是原始對象還是修改后的對象。其中obj和endobj是對象的定義范圍。而對象obj的類型有很多種,例如根對象(Catalog)、頁集合(Page)、圖片對象(Xobject)、字體對象(Font)、流對象(stream)。
其中流對象里面保存了所有的二進制內容,JavaScript很多也是加密混淆后放入流對象中,因此它是本文重點關注對象,圖1說明了數據流在obj中的表現形式。

圖1 stream在obj中的形式
其中Dictionary又包含了常用字段Length,該字段表示關鍵字組合stream和endstream之間字符串的長度,Filter字段表明stream中使用的編碼算法,常用的算法有 Flate、JPEG、ASCIIHex、LZW、CCITTGroups,DecodeParms[4]表示一個參數字典,供Filter使用。例如:
10 obj
〈〈/Filter/FlateDecode/Length 336〉〉
stream
data
endstream
endobj
其中336表示流數據(data)的大小,FlateDecode表示數據流的解碼算法,即著名的zip壓縮算法。
(3)交叉引用表
交叉引用表是為了能對對象進行隨機存取而設立的對象地址的索引表 ,主要目的是為了快速定位PDF文檔中的各對象。
(4)文件尾部
文件尾部包含了交叉引用的摘要和交叉引用表的起始位置。例如startxref 1946%%EOF,其中1946就是交叉引用表的偏移地址,EOF為結束標志。
1.2基于JavaScript的攻擊方式
嵌入PDF中的惡意JavaScript代碼主要是通過PDF閱讀器(例如Adobe Reader)的漏洞來將正常的執行控制流指向植入的惡意JavaScript代碼中去的。這個控制過程一般可以通過Heap Spraying技術實現。使用JavaScript代碼進行的另一惡意活動是從互聯網下載可執行文件到受害者機器上來初始化一個攻擊。此外,JavaScript代碼也能打開一個惡意網站來對受害者機器進行一系列的惡意操作。然而攻擊者在利用JavaScript進行攻擊時,一般使用了代碼混淆技術,以防止被基于特征關鍵字的檢測器識別出來。因此,在檢測時,需要進行代碼還原。
1.3基于JavaScript的攻擊特征向量集提取
在分析大量基于JavaScript攻擊的PDF樣本文件后,發現了一些共同的特征。
第一條,PDF對象中經常出現/JavaScript,/JS,/S等關鍵詞或“JavaScript”字符串時,就表明該文件包含了JavaScript代碼,此時,再結合/AA,/Type/Action,/Open-Action,/URL,/GOTO,/launch,/Acroform等關鍵詞的行為就可以判定PDF文檔的性質,當然一些正常的文件也可能會有JavaScript,因此建立規則應該排除一些正常的特征,減少誤差。
第二條,這種攻擊一般是利用了PDF閱讀器的漏洞,并使用堆噴射技術,堆噴射技術一般會包含一些典型特征,例如0c0c,0a0a,%u,spray,crypt等字符串、一些通用函數 (fromCharCode,eval,unescape和replace)來混淆代碼,以及一些常用的存在漏洞的典型函數(getIcon(),Collab()等)。
第三條,從惡意代碼嵌有Shellcode過程中來分析特征,例如惡意代碼中的單詞“for”,“while”出現的次數一般是確定的;文件流中JavaScript代碼一般通常擁有超過四十個單詞的代碼,這個長度值通常要在uneacape()函數中返回;并且使用堆分配的方式創建相同大小的內存塊許多次,數據一般用NOP填充字段,shellcode功能主體組成。
通過上述對基于JavaScript攻擊的PDF樣本文件分析,提取出一個確定特征向量集的模型,該模型特征提取主要是通過對惡意PDF進行大量分析,其中包括解壓縮與解密各個PDF文件流對象,定位并提取JavaScript代碼,形成大量特征向量,最后借鑒惡意軟件匹配利器YARA[5]創建規則,例如,檢測字符串、正則表達式、常用shellcode中的API函數以及一些混淆函數等。
具體特征向量集模型如圖2所示:

圖2 特征向量集確定模型
1.4基于JavaScript攻擊的PDF文檔檢測系統
基于上述研究結果,提出了基于 JavaScript攻擊技術的PDF文件檢測模型,其流程示意如圖3所示。
該檢測系統在對未知PDF文件檢測時,首先對PDF二進制流映射到內存,對文檔格式深入進行解析,主要是對各個流對象進行掃描,標識一些惡意PDF常用字符串,以及統計各個流對象的大小以及壓縮算法,常用的有Flate、ASCLLHex,并對各個流對象數據進行自動解壓縮與加密,在結合一些關鍵字段,如/Javascrip,/JS,/S,定位到 JavaScript,定位 JavaScript后自動判斷是否有有編碼,若有進行解碼操作,其后判斷是否有混淆,若有混淆,則進行去混淆操作,最后提取JavaScript代碼中的特征向量集,與已有的特征識別器進行對比,判斷出結果。

圖3 PDF文件檢測模型
為了驗證系統的有效性,對多個PDF文件進行了測試驗證,在測試中,共選取了100個PDF文件,其中惡意樣本40個,來自metasploit、Virustotal[6]、secuelist[7],都是基于JavaScript攻擊的樣本,正常樣本60個。并分為10組測試,每組10個。測試環境為Windows 7 64位。圖4是第一組的樣本文件。
通過PDF檢測系統后,結果如表1所示。

表1 第一組樣本分析結果

圖4 其中一組的樣本文件
表1中文件屬性是指文檔本身是否為惡意文檔,M(Malicious)為惡意樣本,N(Normal)為正常樣本。因此如表1所示,第一組樣本中有惡意樣本3個,用檢測系統測試后發現,第一組的惡意樣本都能檢測出來。
用同樣的的方法測試了其他9組數據,現將數據結果(漏報個數,誤報個數)用表2示意。
其根據表1、2所示,100個測試樣本中,2個樣本屬于漏報,4個樣本屬于誤報。因此其誤報率與漏報率都在接受范圍內,特別是對于惡意樣本,檢測效率很高。

表2 其他9組測試數據結果
實驗表明該系統的檢測結果與實際PDF文檔屬性相符合,并且檢測時間很迅速,說明基于JavaScript攻擊的樣本檢測系統的可行性,未來會在特征提取以及特征規則上進一步優化,以提高PDF檢測效率。
[1]Lu Xun,Zhuge Jianwei,Wang Ruoyu,Cao Yinzhi,Yan Chen.De-Obfuscation and Detection of Malicious PDF Files with High Accuracy [J].System Science(HICSS),2013(1):1530-1605.
[2]Tzermias Z,Sykiotakis G,Polychronakis M,et al.Combining Static and Dynamic Analysis for the Detection of Malicious Documents Proceedings of the Fourth European Workshop on System Security.ACM,2011:4.
[3]Laskov P,rndi N.Static Detection of Malicious JavaScript-bearing PDF Documents Proceedings of the 27th Annual Computer Security Applications Conference.ACM,2011:373-382.
[4]丁曉煌.惡意PDF文檔的靜態檢測模型技術研究.西安:西安電子科技大學,2014.
[5]武學峰.惡意PDF文檔的分析.山東:山東大學,2012.
[6]Securelist,http://www.securelist.com/en/
[7]Virustotal,https://www.virustotal.com
Malicious PDF Documets;JavaScript Code;Static Detection;Feature Extraction
Research on Malicious PDF Documents Detection Technology Based on JavaScript Attack
HU Jiang1,ZHOU An-min2
(Department of Electronic Information,Sichuan University,Chendu 610065)
胡江(1991-),男,四川達州人,碩士研究生,研究方向為信息系統安全理論與技術
周安民(1963-),男,四川成都人,碩士生導師,研究方向為信息安全關鍵技術和核心產品工程2015-11-20
2015-12-20
當今社會,便攜式文檔(PDF)已經成為惡意代碼傳播的主要載體,而90%的惡意PDF樣本都是基于JavaScript攻擊的。因此針對JavaScript攻擊的惡意樣本檢測是非常有必要的。介紹PDF的結構,以及常見的嵌入JavaScript的惡意PDF文檔攻擊手段,在此基礎上,提出一種基于JavaScript攻擊的惡意PDF文檔檢測方法,并實現基于該方法的檢測系統,主要包括PDF文檔格式深入解析模塊、JavaScript代碼定位與提取模塊、惡意特征提取模塊。實驗表明該系統能有效檢測PDF惡意文檔。
In today's society,portable document(PDF)has become the main carrier of the spread of malicious code,while 90%of the malicious PDF sample are based on JavaScript attacks.So it is necessary to detect the malicious sample based on JavaScript attack.Introduces the structure of PDF files and attack method based on JavaScript code.Based on this research,proposes a malicious PDF document detection method based on JavaScript attack and realizes the detection system,which mainly includes the parsing module of PDF file format, JavaScript code location and extraction module,malicious feature extraction module.Experiments show that this system can effectively detect malicious PDF document.