胡江,周安民
(四川大學(xué)電子信息學(xué)院,成都 610065)
針對(duì)JavaScript攻擊的惡意PDF文檔檢測(cè)技術(shù)研究
胡江,周安民
(四川大學(xué)電子信息學(xué)院,成都 610065)
惡意PDF文檔;JavaScript代碼;靜態(tài)檢測(cè);特征提取
PDF(Portable Document Format)是便攜式文檔格式的簡稱,是由Adobe公司所開發(fā)的一種獨(dú)特的跨平臺(tái)的文件格式,在Windows、Unix或者M(jìn)ac OS中,PDF文件都是通用的。然而,正是由于PDF文檔的可移植性、兼容性、封裝性和免費(fèi)性,它成為了互聯(lián)網(wǎng)上攻擊者傳播惡意代碼的主要載體[1]。最常用的方式就是利用電子郵件,通過社會(huì)工程學(xué),讓用戶主動(dòng)打開惡意PDF附件,從而感染受害者電腦。PDF文檔常被攻擊者利用的另一個(gè)重要原因是它擁有自己的JavaScript引擎,并允許在PDF文檔中嵌入JavaScript代碼,此功能意味著PDF能夠執(zhí)行復(fù)雜的任務(wù)如形式驗(yàn)證和計(jì)算。然而,它也使攻擊者擁有了運(yùn)行任意代碼的途徑,攻擊者可以利用惡意的JavaScript代碼發(fā)起攻擊。塞門鐵克的一份安全報(bào)告表明,通過PDF文檔來執(zhí)行惡意功能時(shí),90%都使用了JavaScript代碼,因此在檢測(cè)惡意PDF文檔中,能否準(zhǔn)確識(shí)別JavaScript代碼尤為重要,大部分嵌入的JavaScript代碼在一定程度上進(jìn)行了混淆編碼,這樣,不但增加了人工分析的復(fù)雜度,而且連防病毒軟件也難以檢測(cè)出來。現(xiàn)階段的檢測(cè)技術(shù)主要有以下幾種方法:
(1)對(duì)PDF文檔的物理結(jié)構(gòu)[2]進(jìn)行解析,并根據(jù)數(shù)據(jù)流對(duì)象進(jìn)行解壓縮操作,通過解壓后的數(shù)據(jù),進(jìn)行全局匹配,例如匹配/JS、/OpenAction等關(guān)鍵字段,然后通過確定規(guī)則判斷是否為惡意文檔。
(2)JScan模型[3],這是一種動(dòng)態(tài)檢測(cè)模型,該模型是將異常JavaScript代碼檢測(cè)和仿真結(jié)合起來,異常檢測(cè)通常是基于對(duì)特定函數(shù)的監(jiān)控,例如eval,從而達(dá)到對(duì)惡意代碼的自動(dòng)識(shí)別的目的。
由于上述方法(1)中,很多惡意樣本是混淆或者加密過的,所以單單進(jìn)行解壓縮后可能還是一些密文,造成檢測(cè)效率很低。而且很多正常PDF文檔也會(huì)有JavaScript代碼,所有這樣檢測(cè)很容易造成較高的誤報(bào)率。方法(2)由于使用了大量的仿真技術(shù),所以該檢測(cè)系統(tǒng)會(huì)造成大量的資源消耗,所以通用性不強(qiáng)。本文通過對(duì)PDF文檔格式進(jìn)行深入解析,對(duì)PDF文檔中流對(duì)象的壓縮算法與加密算法進(jìn)行自動(dòng)判斷,以及對(duì)解密后JavaScript代碼進(jìn)行完整的預(yù)處理,形成有效的特征向量集,并在此基礎(chǔ)上建立規(guī)則特征庫,最后綜合判斷是否為惡意PDF文檔。
1.1PDF文檔格式解析
PDF文檔是一種文本和二進(jìn)制混排的格式,它的文件結(jié)構(gòu)主要是由文件頭(header)、文件體(body)、交叉引用表(cross-reference)和文件尾(tailer)組成。
(1)文件頭
文件頭是用來標(biāo)識(shí)PDF文檔的版本,它出現(xiàn)在PDF文件的第一行。如%PDF-1.6表示該文件格式符合PDF 1.6規(guī)范。
(2)文件體
文件體主要包含了PDF文檔的主題內(nèi)容,各部分之間是由對(duì)象方式(obj)呈現(xiàn),這些對(duì)象構(gòu)成了PDF文檔的具體內(nèi)容如字體、頁面、圖像等?;靖袷饺缦滤荆?/p>
70 obj
〈〈/Kids[5 0 R]/Type/Pages/Count 1〉〉
endobj
其中7 0 obj中的7是對(duì)象序號(hào),是用來唯一標(biāo)記一個(gè)對(duì)象;0是生成號(hào),是和對(duì)象序號(hào)一起標(biāo)記其是原始對(duì)象還是修改后的對(duì)象。其中obj和endobj是對(duì)象的定義范圍。而對(duì)象obj的類型有很多種,例如根對(duì)象(Catalog)、頁集合(Page)、圖片對(duì)象(Xobject)、字體對(duì)象(Font)、流對(duì)象(stream)。
其中流對(duì)象里面保存了所有的二進(jìn)制內(nèi)容,JavaScript很多也是加密混淆后放入流對(duì)象中,因此它是本文重點(diǎn)關(guān)注對(duì)象,圖1說明了數(shù)據(jù)流在obj中的表現(xiàn)形式。
圖1 stream在obj中的形式
其中Dictionary又包含了常用字段Length,該字段表示關(guān)鍵字組合stream和endstream之間字符串的長度,F(xiàn)ilter字段表明stream中使用的編碼算法,常用的算法有 Flate、JPEG、ASCIIHex、LZW、CCITTGroups,DecodeParms[4]表示一個(gè)參數(shù)字典,供Filter使用。例如:
10 obj
〈〈/Filter/FlateDecode/Length 336〉〉
stream
data
endstream
endobj
其中336表示流數(shù)據(jù)(data)的大小,F(xiàn)lateDecode表示數(shù)據(jù)流的解碼算法,即著名的zip壓縮算法。
(3)交叉引用表
交叉引用表是為了能對(duì)對(duì)象進(jìn)行隨機(jī)存取而設(shè)立的對(duì)象地址的索引表 ,主要目的是為了快速定位PDF文檔中的各對(duì)象。
(4)文件尾部
文件尾部包含了交叉引用的摘要和交叉引用表的起始位置。例如startxref 1946%%EOF,其中1946就是交叉引用表的偏移地址,EOF為結(jié)束標(biāo)志。
1.2基于JavaScript的攻擊方式
嵌入PDF中的惡意JavaScript代碼主要是通過PDF閱讀器(例如Adobe Reader)的漏洞來將正常的執(zhí)行控制流指向植入的惡意JavaScript代碼中去的。這個(gè)控制過程一般可以通過Heap Spraying技術(shù)實(shí)現(xiàn)。使用JavaScript代碼進(jìn)行的另一惡意活動(dòng)是從互聯(lián)網(wǎng)下載可執(zhí)行文件到受害者機(jī)器上來初始化一個(gè)攻擊。此外,JavaScript代碼也能打開一個(gè)惡意網(wǎng)站來對(duì)受害者機(jī)器進(jìn)行一系列的惡意操作。然而攻擊者在利用JavaScript進(jìn)行攻擊時(shí),一般使用了代碼混淆技術(shù),以防止被基于特征關(guān)鍵字的檢測(cè)器識(shí)別出來。因此,在檢測(cè)時(shí),需要進(jìn)行代碼還原。
1.3基于JavaScript的攻擊特征向量集提取
在分析大量基于JavaScript攻擊的PDF樣本文件后,發(fā)現(xiàn)了一些共同的特征。
第一條,PDF對(duì)象中經(jīng)常出現(xiàn)/JavaScript,/JS,/S等關(guān)鍵詞或“JavaScript”字符串時(shí),就表明該文件包含了JavaScript代碼,此時(shí),再結(jié)合/AA,/Type/Action,/Open-Action,/URL,/GOTO,/launch,/Acroform等關(guān)鍵詞的行為就可以判定PDF文檔的性質(zhì),當(dāng)然一些正常的文件也可能會(huì)有JavaScript,因此建立規(guī)則應(yīng)該排除一些正常的特征,減少誤差。
第二條,這種攻擊一般是利用了PDF閱讀器的漏洞,并使用堆噴射技術(shù),堆噴射技術(shù)一般會(huì)包含一些典型特征,例如0c0c,0a0a,%u,spray,crypt等字符串、一些通用函數(shù) (fromCharCode,eval,unescape和replace)來混淆代碼,以及一些常用的存在漏洞的典型函數(shù)(getIcon(),Collab()等)。
第三條,從惡意代碼嵌有Shellcode過程中來分析特征,例如惡意代碼中的單詞“for”,“while”出現(xiàn)的次數(shù)一般是確定的;文件流中JavaScript代碼一般通常擁有超過四十個(gè)單詞的代碼,這個(gè)長度值通常要在uneacape()函數(shù)中返回;并且使用堆分配的方式創(chuàng)建相同大小的內(nèi)存塊許多次,數(shù)據(jù)一般用NOP填充字段,shellcode功能主體組成。
通過上述對(duì)基于JavaScript攻擊的PDF樣本文件分析,提取出一個(gè)確定特征向量集的模型,該模型特征提取主要是通過對(duì)惡意PDF進(jìn)行大量分析,其中包括解壓縮與解密各個(gè)PDF文件流對(duì)象,定位并提取JavaScript代碼,形成大量特征向量,最后借鑒惡意軟件匹配利器YARA[5]創(chuàng)建規(guī)則,例如,檢測(cè)字符串、正則表達(dá)式、常用shellcode中的API函數(shù)以及一些混淆函數(shù)等。
具體特征向量集模型如圖2所示:
圖2 特征向量集確定模型
1.4基于JavaScript攻擊的PDF文檔檢測(cè)系統(tǒng)
基于上述研究結(jié)果,提出了基于 JavaScript攻擊技術(shù)的PDF文件檢測(cè)模型,其流程示意如圖3所示。
該檢測(cè)系統(tǒng)在對(duì)未知PDF文件檢測(cè)時(shí),首先對(duì)PDF二進(jìn)制流映射到內(nèi)存,對(duì)文檔格式深入進(jìn)行解析,主要是對(duì)各個(gè)流對(duì)象進(jìn)行掃描,標(biāo)識(shí)一些惡意PDF常用字符串,以及統(tǒng)計(jì)各個(gè)流對(duì)象的大小以及壓縮算法,常用的有Flate、ASCLLHex,并對(duì)各個(gè)流對(duì)象數(shù)據(jù)進(jìn)行自動(dòng)解壓縮與加密,在結(jié)合一些關(guān)鍵字段,如/Javascrip,/JS,/S,定位到 JavaScript,定位 JavaScript后自動(dòng)判斷是否有有編碼,若有進(jìn)行解碼操作,其后判斷是否有混淆,若有混淆,則進(jìn)行去混淆操作,最后提取JavaScript代碼中的特征向量集,與已有的特征識(shí)別器進(jìn)行對(duì)比,判斷出結(jié)果。
圖3 PDF文件檢測(cè)模型
為了驗(yàn)證系統(tǒng)的有效性,對(duì)多個(gè)PDF文件進(jìn)行了測(cè)試驗(yàn)證,在測(cè)試中,共選取了100個(gè)PDF文件,其中惡意樣本40個(gè),來自metasploit、Virustotal[6]、secuelist[7],都是基于JavaScript攻擊的樣本,正常樣本60個(gè)。并分為10組測(cè)試,每組10個(gè)。測(cè)試環(huán)境為Windows 7 64位。圖4是第一組的樣本文件。
通過PDF檢測(cè)系統(tǒng)后,結(jié)果如表1所示。
表1 第一組樣本分析結(jié)果
圖4 其中一組的樣本文件
表1中文件屬性是指文檔本身是否為惡意文檔,M(Malicious)為惡意樣本,N(Normal)為正常樣本。因此如表1所示,第一組樣本中有惡意樣本3個(gè),用檢測(cè)系統(tǒng)測(cè)試后發(fā)現(xiàn),第一組的惡意樣本都能檢測(cè)出來。
用同樣的的方法測(cè)試了其他9組數(shù)據(jù),現(xiàn)將數(shù)據(jù)結(jié)果(漏報(bào)個(gè)數(shù),誤報(bào)個(gè)數(shù))用表2示意。
其根據(jù)表1、2所示,100個(gè)測(cè)試樣本中,2個(gè)樣本屬于漏報(bào),4個(gè)樣本屬于誤報(bào)。因此其誤報(bào)率與漏報(bào)率都在接受范圍內(nèi),特別是對(duì)于惡意樣本,檢測(cè)效率很高。
表2 其他9組測(cè)試數(shù)據(jù)結(jié)果
實(shí)驗(yàn)表明該系統(tǒng)的檢測(cè)結(jié)果與實(shí)際PDF文檔屬性相符合,并且檢測(cè)時(shí)間很迅速,說明基于JavaScript攻擊的樣本檢測(cè)系統(tǒng)的可行性,未來會(huì)在特征提取以及特征規(guī)則上進(jìn)一步優(yōu)化,以提高PDF檢測(cè)效率。
[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文檔的靜態(tài)檢測(cè)模型技術(shù)研究.西安:西安電子科技大學(xué),2014.
[5]武學(xué)峰.惡意PDF文檔的分析.山東:山東大學(xué),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-),男,四川達(dá)州人,碩士研究生,研究方向?yàn)樾畔⑾到y(tǒng)安全理論與技術(shù)
周安民(1963-),男,四川成都人,碩士生導(dǎo)師,研究方向?yàn)樾畔踩P(guān)鍵技術(shù)和核心產(chǎn)品工程2015-11-20
2015-12-20
當(dāng)今社會(huì),便攜式文檔(PDF)已經(jīng)成為惡意代碼傳播的主要載體,而90%的惡意PDF樣本都是基于JavaScript攻擊的。因此針對(duì)JavaScript攻擊的惡意樣本檢測(cè)是非常有必要的。介紹PDF的結(jié)構(gòu),以及常見的嵌入JavaScript的惡意PDF文檔攻擊手段,在此基礎(chǔ)上,提出一種基于JavaScript攻擊的惡意PDF文檔檢測(cè)方法,并實(shí)現(xiàn)基于該方法的檢測(cè)系統(tǒng),主要包括PDF文檔格式深入解析模塊、JavaScript代碼定位與提取模塊、惡意特征提取模塊。實(shí)驗(yàn)表明該系統(tǒng)能有效檢測(cè)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.