[原創]流行防毒軟體對惡意PDF文件檢測的概括性分析

仙果發表於2011-02-22
題目:流行防毒軟體對惡意PDF文件檢測的概括性分析
作者:仙果

目錄:
一        常見防毒軟體
二        防毒軟體對惡意PDF文件的檢測分析比較
三        惡意PDF文件與防毒軟體的對抗
四        總結

題記:
        很早就想總結下防毒軟體對惡意PDF文件的查殺分析,趁著今天休息的時間來總結一下,
文中肯定有不準確及偏頗之處,還望各位大牛能指點一二,仙果感激不盡。本來這篇文章是投稿來著,編輯說無具體實現程式碼,返回來繼續修改,但一直沒有時間修改,就放下了這個事情,直到現在,想想也沒有必要投稿了,實在是有騙稿費的嫌疑,不投也罷,昨天用這篇文章申請T00LS的賬號,悲催的今天早上論壇關閉了,無語。發上來吧,年前寫的,大家有什麼意見儘管提出來

一        常見防毒軟體
        這裡舉出常見的一些防毒軟體,國內的就略過了,包括傳說中的360安全衛士,好像它不怎麼關注於文件類漏洞的防禦,不提也罷。
        1        Norton Antivirus:諾頓
        2        Kaspersky :卡巴斯基
        3        ESET NOD32:NOD32
        4        Avira AntiVir :小紅傘
        5        Avast:捷克的一款防毒軟體、
        6        BitDefender:位元梵德
        7        TREND.micro:趨勢科技
        8        McAfee :麥咖啡
        基本的就這些,其他還有包括微軟的MSE,熊貓,大蜘蛛等暫不入此列,在國內常見的有諾頓,卡巴斯基,小紅傘,首先要分析的也是這三款防毒軟體。

二        防毒軟體對惡意PDF文件的檢測過程分析
        首先,惡意的PDF文件所使用的漏洞分為兩種情況,第一就是使用0Day漏洞,此時在防毒軟體的漏洞庫中是沒有此漏洞的,防毒軟體的檢測過程就針對惡意PDF文件在觸發漏洞之前和之後的行為,會在接下來詳細分析。第二種就是使用NDay漏洞,POC已經在網路中公開,並且已經被大規模使用,防毒軟體對此的查殺更為精確,殺軟的工程師肯定把漏洞進行了詳細分析,中間會存在一個時間緩衝,意思就是說針對一個漏洞殺軟並不是一次就把漏洞補上的,而是分批次分時間不斷的更新殺軟漏洞庫來更精確的定位漏洞,這與殺軟工程師對漏洞的分析程度所決定。
        其次惡意PDF文件的利用形式又有幾種情況,這裡所指的不是緩衝區溢位的的利用方式,而是惡意PDF文件利用漏洞的表現形式,最常見的當然就是堆噴射,另外還有類似於Office漏洞利用直接在堆或者棧中執行程式碼,現在很少見了,此外還有利用PDF閱讀器自身功能限制不嚴格(不允許執行執行PDF內嵌的二進位制程式和指令碼),結合JavaScript程式碼直接執行木馬的情形,在這種情況下,如Adobe Reader程式不會觸發異常崩潰而直接透過JavaScript執行木馬,漏洞詳細資訊的連結為http://www.nsfocus.net/vulndb/14737。
        以上分析了惡意PDF的利用情況,接下來就結合以上情況進行分析。
        1.        0Day漏洞的檢測
        由於殺軟的漏洞庫中沒有此漏洞的相關資訊,只能對漏洞觸發之前及之後PDF的行為進行檢測。若利用此漏洞需要進行堆噴射,殺軟對堆噴射的程式碼及行為檢測很嚴密,最BT的屬BitDefender,一個空白的PDF文件只加入unescape(%u9090%u9090)這樣的形式就會被認為是惡意文件,當然這種最傻瓜也最有效,其他的殺軟就不會這麼幹,Kaspersky在掃描PDF的過程中會對惡意文件進行分類資料塊(data),分別進行掃描,惡意PDF文件的檔案流進行解析分類,分別掃描每個流(Stream),針對堆噴射程式碼,其也進行解析,對堆噴射的關鍵詞如"unescape","%u","for(x=0;x<****;x++)"進行組合判斷,只出現其中一種是不會檢測,但是一旦組合起來,必然會進行查殺。小紅傘對堆噴射行為的檢測是這幾款殺軟裡最嚴密和最精確的,在測試過程中,其他的殺軟可以繞過,唯獨小紅傘無法繞過,其對堆噴射的程式碼進行了精確的還原,並定位了多個特徵碼,對行為進行比對分析,提示惡意PDF文件,這是在PDF檔案流中有明確的提示存在JavaScript程式碼的情況,若PDF文件的二進位制中沒有明確的提示或者JavaScript程式碼經過加密或者混淆處理也是可以檢測出來的,但是相應的惡意文件提示資訊會有所不同。BitDefender可以檢測出隱藏在其他流裡的JavaScript程式碼,可以看出其對PDF文件的檔案格式進行了解析並還原出明文的流,之後再進行檢測,這種效率不是很高,但是查殺效果卻是很好。諾頓對對噴射的行為檢測主要是檢測程式碼是否符合其針對PDF病毒庫規則,並不會解析JavaScript程式碼的行為,靜態很容易繞過,但得益於諾頓雲查殺的強大,其更新速度非常快,有可能此時沒有檢測出來,但十分鐘之後就已經能夠檢測,總之諾頓對惡意PDF文件在漏洞觸發之前的行為檢測是不如其他幾款軟體的。
        若惡意PDF文件不依賴於堆噴射就可以執行ShellCode,以及假設堆噴射行為繞過以上所有殺軟,那麼就得轉到殺軟對惡意PDF文件漏洞觸發之後的行為檢測上,其中檢測效果
最出眾的的為Kaspersky和Norton,Kaspersky會對惡意PDF文件所嵌入的木馬檔案進行簽名對比病毒庫等檢測,若符合其規則就直接警告,這其實屬於木馬免殺的範疇了,不懂所以略過,若木馬可以繞過Kaspersky的主動防禦,那麼Kaspersky對惡意PDF文件的檢測就如同虛設了。再來說諾頓,在這幾款防毒軟體中,諾頓是對唯一對ShellCode的行為進行檢測了的,而且其對Adobe Reader程式做了特別的保護相對於其他的PDF文件閱讀工具。惡意PDF文件的ShellCode在執行過程中會生成一系列的的檔案如正常文件,木馬程式等等,諾頓會對ShellCode所使用的API進行監控,一旦符合其規則就會禁止執行並彈出警告資訊。基本上諾頓對常見的ShellCode的行為都進行了檢測,沒有一定的奇技淫巧ShellCode是過不了諾頓的,就算過了這一關,其還有更強大的雲查殺,在木馬執行之前諾頓會與雲查殺伺服器進行查詢,判斷是否是正常的應用程式且會返回此程式在網路上的使用情況,並交由
使用者進行判斷,一旦符合檢測規則,則會連同惡意PDF文件一起進行警告,相對應的Kaspersky只會提示某個程式符合其檢測規則。
        2        NDay漏洞的檢測
        針對NDay漏洞的檢測,其實主要是看各個殺軟對漏洞的分析程度,一般來說,對NDay漏洞的分析都是很透徹的,意思就是NDay漏洞的觸發原理和觸發過程殺軟已經能夠檢測,並且給出相應的漏洞編號,Avast對惡意PDF文件檢測就是如此,其他的殺軟也在慢慢的跟進。
        殺軟定位一個NDay漏洞, 若能夠定位出溢位或者利用的關鍵點,是能夠檢測出所有利用此漏洞的惡意PDF文件,如同任你有千變萬化,我有火眼金睛在身,惡意PDF文件無從藏身。但從攻擊與防禦的角度看,惡意PDF文件也是有辦法完全隱藏漏洞溢位點的,這於殺軟的檢測規則有關,當然也與惡意PDF文件的編寫者對抗殺軟檢測的經驗有關,最重要的要屬對PDF文件的檔案結構的熟悉程度。
        NDay漏洞的利用形式與0day漏洞的利用上是沒有區別的,區別在於漏洞是否公開,NDay漏洞有助於殺軟更精確的定位惡意PDF文件,市面上常見的殺軟針對NDay漏洞都有很好的檢測效果,這是針對惡意PDF文件的檔案結構不復雜的情況,惡意PDF文件若足夠複雜,個別殺軟是無法檢測出來的,儘管是NDay漏洞,但卻可以做到0Day漏洞的效果。具體來說諾頓卡巴斯基以及小紅傘對NDay漏洞的檢測查殺比較準確。基本上以上三款軟體可以繞過的話,其他的殺軟都是小Case。
        3        其他情況的檢測
        這裡的其他情況指的是PDF閱讀器自身功能限制不嚴謹產生的繞過檢測執行木馬的漏洞,當然也有0day nday之分,0day的話,殺軟的檢測主要就是看各家殺軟的功力了,一般來說很難有效的檢測出來,需要配合其他的檢測手段,如諾頓和卡巴斯基的主動防禦,至於另外的殺軟,檢測效果不理想。此類漏洞一旦爆出,殺軟更新以後再想繞過就沒有辦法了,因為此類漏洞的形式是固定的,很難找到變形或者變通的辦法,屬於典型的見光死。
       
三        惡意PDF文件與防毒軟體的對抗
        之前已經涉及到部分的對抗內容,通俗一點就是指惡意PDF文件針對殺軟所做的免殺操作。這部分內容只講述方法,具體應用不會涉及到。有些話不能說的太細,O(∩_∩)O~!
惡意PDF文件與防毒軟體的對抗就我的理解可以分為三個階段,個人理解,肯定有不對之處,還請見諒。
        1        2007之前~2008
        這個階段惡意PDF的利用還不算很成熟,殺軟的檢測的主要精力已經開始從Office等惡意文件開始關注PDF,但並不是重心,對抗程度還不夠激烈。具體來說,堆噴射的程式碼只要稍微進行編碼變形等操作以後基本上就可以繞過殺軟。相應的PDF的漏洞還很少,利用方式上還不成熟,堆風水這篇文件奠定了堆噴射技術基礎,是2007年在blackhat上釋出的。
        2        2008~2009
        此時PDF漏洞開始增多,另一個背景就是Office漏洞越來越少,而且利用難度也月越來越大,同時殺軟的惡意Office文件的檢測非常成熟,於是乎PDF代替Office成為熱門的惡意文件利用。
堆噴射技術也在發展,對堆噴射進行編碼已經起不到作用,殺軟能夠很好的還原出編碼後的程式碼,進行檢測查殺,變形和混淆開始佔對抗殺軟的主流技術,另外一個現象就是堆噴射技術試圖和其他替代技術(Flash中的Action Script)相結合已達到對抗的目的,效果暫不論。
        3        2009~2010至今
        由於堆噴射的技術足夠簡單且有效,殺軟對其的檢測也越來越成熟和有效,常見的堆噴射程式碼的新增已經失效,堆噴射的程式碼隱藏的越來越深,檢視惡意PDF文件的二進位制是不會出現類似“JavaScript”關鍵字的,堆噴射程式碼進入到了其他型別的流中,而非一般意義上的檔案流,個別殺軟能夠解析出這些流中的資料,但檔案格式再複雜一些的話殺軟也無能為力了。堆噴射的替代技術(Flash)也是會被殺軟檢測。現在出現這麼一種情況,對抗免殺一款殺軟是可以做到的,但是若做到全部免殺所花費的時間成本和精力成本就會很大,且效果並不好,有時候還要犧牲成功率的代價,這是漏洞利用中所不可以承受的。在漏洞觸發以後還要考慮殺軟主動防禦的情況,這又是一種成本,按照flashsky關於收益與成本的說法,相信惡意PDF文件所能達到的收益在成本越來越高的背景下會慢慢的減少,或者被新的利用方式所取代。
       
        四        總結
        殺軟對惡意PDF文件檢測一般過程就是解析惡意PDF的文件流,對明文流與殺軟自身的漏洞庫或者檢測規則庫進行比較,判斷是否為惡意,在惡意PDF文件觸發漏洞後所做的行為進行檢測,判斷是否為
惡意文件,各個殺軟有其自身的優點和缺陷,並且在與惡意PDF文件(同樣適用於其他型別的文件)不斷進步。
        有些防毒軟體在文中並沒有提及,並不是其不好,而是作者在測試過程中沒有發現其特殊之處。

相關文章