行政院國家科學委員會專題研究計畫 成果報告
有殼與無殼惡意程式偵測系統 研究成果報告(精簡版)
計 畫 類 別 : 個別型
計 畫 編 號 : NSC 100-2218-E-011-020-
執 行 期 間 : 100 年 08 月 01 日至 101 年 07 月 31 日 執 行 單 位 : 國立臺灣科技大學資訊工程系
計 畫 主 持 人 : 洪西進
計畫參與人員: 碩士班研究生-兼任助理人員:蘇柏翰 碩士班研究生-兼任助理人員:賴昭嘉 碩士班研究生-兼任助理人員:曾若涵 碩士班研究生-兼任助理人員:張慧宇 碩士班研究生-兼任助理人員:胡凱文 碩士班研究生-兼任助理人員:江振宇 博士班研究生-兼任助理人員:林之棟 博士班研究生-兼任助理人員:謝汶廷
公 開 資 訊 : 本計畫可公開查詢
中 華 民 國 101 年 11 月 01 日
中 文 摘 要 : 目前網路世代越來越發達,資訊安全議題也越來越被重視,
惡意程式的使用卻更頻繁且日益更新。未來將會使更多的駭 客及有心人士使用惡意程式攻擊目標,並從中獲取利益,而 導致偵測與防範的難度增加。所以如何即時防範新型惡意程 式也是所要去探討的。
至目前為止,大多數的防毒系統皆是使用更新病毒碼的方法 來防止惡意程式的侵害,但當新的惡意程式出現至新的病毒 碼釋出期間,惡意程式早已對電腦造成傷害,且目前防毒軟 體針對新惡意程式的偵測能力尚有加強的空間。有鑑於此,
惡意程式偵測系統不但要具有有效偵測現有惡意程式的能 力,更需具有預測未知惡意程式的能力。現今很多會對其程 式進行加殼動作,市面上開發了一些解殼軟體,助於研究者 針先使用解殼軟體對加殼程式解殼,再判別是否為惡意程 式,但這只能針對部分的加殼程式解殼,無法對新型加殼程 式惡意程式作解殼,有鑑於此,本計畫擬利用靜態分析的技 術來萃取出 PE Table 裡的特徵,再利用資料探勘裡的資訊 增益方法找出有用的資訊,並結合啟發式分析法,來改善預 測新惡意程式的能力,同時利用統計學的主成份分析來減少 龐大的資料量與去除雜訊,預期主成份分析將大幅度減少訓 練時間和增加系統的偵測能力。在本計畫所提的系統架構下 它將有自動蒐集惡意程式來重新訓練偵測模組的能力,即使 惡意程式不斷推陳出新,仍可保有最新的偵測能力。
中文關鍵詞: 惡意程式、PE Table、資料庫 英 文 摘 要 :
英文關鍵詞:
國科 國 科會 會專 專題 題研 研究 究計 計畫 畫成 成果 果報 報告 告撰 撰寫 寫格 格式 式
101 年 1 月 4 日本會第 348 次學術會報修正通過
一、說明
國科會基於學術公開之立場,鼓勵一般專題研究計畫主持人發表其研究成 果,但主持人對於研究成果之內容應負完全責任。計畫內容及研究成果如涉及專 利或其他智慧財產權、違異現行醫藥衛生規範、影響公序良俗或政治社會安定等 顧慮者,應事先通知國科會不宜將所繳交之成果報告蒐錄於學門成果報告彙編或 公開查詢,以免造成無謂之困擾。另外,各學門在製作成果報告彙編時,將直接 使用主持人提供的成果報告,因此主持人在繳交報告之前,應對內容詳細校對,
以確定其正確性。
成果報告繳交之期限及種類(期中進度報告及期末報告),應依本會補助專題研究 計畫作業要點及專題研究計畫經費核定清單之規定辦理。至報告內容之篇幅,期中進度 報告以 4 至 10 頁為原則,期末報告不得少於 10 頁。
二、報告格式:依序為封面、目錄、中英文摘要及關鍵詞、報告內容、參考文獻、計 畫成果自評、可供推廣之研發成果資料表、附錄。
(一)報告封面:請至本會網站(http://www.nsc.gov.tw)線上製作(格式如附件一)。
(二)中、英文摘要及關鍵詞 (keywords)。
(三)報告內容:包括前言、研究目的、文獻探討、研究方法、結果與討論(含結 論與建議)…等。
(四)計畫成果自評部分:請就研究內容與原計畫相符程度、達成預期目標情況、
研究成果之學術或應用價值(簡要敘述成果所代表之意義、價值、影響或進一 步發展之可能性)、是否適合在學術期刊發表或申請專利、主要發現或其他有 關價值等,作一綜合評估,並請至本會網站線上製作(格式如附件二)。
(五)頁碼編寫:請對摘要及目錄部分用羅馬字 I 、II、 III……標在每頁下方中央;
報告內容至附錄部分請以阿拉伯數字 1.2.3.……順序標在每頁下方中央。
(六)附表及附圖可列在文中或參考文獻之後,各表、圖請說明內容。
(七)可供推廣之研發成果資料表:
1.研究計畫所產生之研發成果,應至國科會科技研發成果資訊系統(STRIKE 系統,https://nscnt66.nsc.gov.tw/strike/)填列研發成果資料表(如附件三),
循執行機構行政程序,由研發成果推廣單位(如技轉中心)線上繳交送出。
2.每項研發成果填寫一份。
(八)若該計畫已有論文發表者(須於論文致謝部分註明補助計畫編號),得作為成果 報告內容或附錄,並請註明發表刊物名稱、卷期及出版日期。若有與執行本 計畫相關之著作、專利、技術報告、或學生畢業論文等,請在參考文獻內註 明之。
三、計畫中獲補助赴國外或大陸地區移地研究差旅費、出席國際學術會議差旅費或國 際合作研究計畫出國差旅費者,須依規定分別撰寫出國心得報告(其中,獲補助 出席國際學術會議差旅費者須另附發表之論文),並至本會網站線上繳交電子檔,
出國心得報告格式\]如附件四、五、六。
四、報告編排注意事項
(一)版面設定:A4 紙,即長 29.7 公分,寬 21 公分。
(二)格式:中文打字規格為每行繕打(行間不另留間距),英文打字規格為
Single Space
。(三)字體:以中英文撰寫均可。英文使用
Times New Roman Font
,中文使用標楷 體,字體大小以 12 號為主。行政院國家科學委員會補助專題研究計畫 □期中進度報告
■期末報告
有殼與無殼惡意程式偵測系統
計畫類別:■個別型計畫 □整合型計畫 計畫編號:NSC 100-2218-E-011-020-
執行期間:2011 年 08 月 01 日至 2012 年 07 月 31 日 執行機構及系所:國立臺灣科技大學資訊 工程系
計畫主持人:洪西進 共同主持人:
計畫參與人員:鄒澄 陳彥博 許祖碩 謝旻斈
本計畫除繳交成果報告外,另須繳交以下出國報告:
□赴國外移地研究心得報告
□赴大陸地區移地研究心得報告
□出席國際學術會議心得報告及發表之論文
□國際合作研究計畫國外研究報告
處理方式:除列管計畫及下列情形者外,得立即公開查詢
□涉及專利或其他智慧財產權,□一年□二年後可公開查詢
中 華 民 國 2012 年 10 月 20 日
目錄
摘要 ... ii
前言 ... iii
研究目的 ... iv
文獻探討 ... v
研究方法 ... 1
結果與討論 ... 9
摘要
目前網路世代越來越發達,資訊安全議題也越來越被重視,惡意程式的使用卻更頻繁且日 益更新。未來將會使更多的駭客及有心人士使用惡意程式攻擊目標,並從中獲取利益,而導 致偵測與防範的難度增加。所以如何即時防範新型惡意程式也是所要去探討的。
至目前為止,大多數的防毒系統皆是使用更新病毒碼的方法來防止惡意程式的侵害,但 當新的惡意程式出現至新的病毒碼釋出期間,惡意程式早已對電腦造成傷害,且目前防毒軟 體針對新惡意程式的偵測能力尚有加強的空間。有鑑於此,惡意程式偵測系統不但要具有有 效偵測現有惡意程式的能力,更需具有預測未知惡意程式的能力。現今很多會對其程式進行 加殼動作,市面上開發了一些解殼軟體,助於研究者針先使用解殼軟體對加殼程式解殼,再 判別是否為惡意程式,但這只能針對部分的加殼程式解殼,無法對新型加殼程式惡意程式作 解殼,有鑑於此,本計畫擬利用靜態分析的技術來萃取出 PE Table 裡的特徵,再利用資料探 勘裡的資訊增益方法找出有用的資訊,並結合啟發式分析法,來改善預測新惡意程式的能力,
同時利用統計學的主成份分析來減少龐大的資料量與去除雜訊,預期主成份分析將大幅度減 少訓練時間和增加系統的偵測能力。在本計畫所提的系統架構下它將有自動蒐集惡意程式來 重新訓練偵測模組的能力,即使惡意程式不斷推陳出新,仍可保有最新的偵測能力。
關鍵詞:惡意程式、PE Table、資料庫、
前言
現今的病毒程式以加殼的方式呈現之比例越來越高,一些重要資料或文件可能會因為病毒 的入侵使之流失或竊取,有時太相信一些掃毒軟體認為說任何病毒都能偵測且處理掉,這會 導致比較新的病毒或經過加殼過的病毒容易侵入,即使比較老舊的病毒只要經過新的客製化 加殼軟體稍作保護就可避過擁有最新病毒碼的防毒軟體偵測,故偵測檔案是否被加殼對於防 止惡意軟體的入侵上非常重要的課題。
然而在日常生活中我們卻很少去注意到加殼後之病毒所帶來之後遺症及破壞性,使我們 都認為我們現在的電腦是處於很安全的狀態因為我們相信所以的病毒都能被偵測出來,並且 肆無忌憚的大量下載資料及檔案,並沒有去做一些保護檔案資料之措施。但有一天資料正被 竊取時,才開始懷疑軟體的防毒效果,了解加殼病毒的威力及破壞。
如果能針對惡意程式的加殼技術來找出防毒的,且不需經過解殼來判斷是否為惡意程 式,是目前所希望去達成的目標,能夠利用程式加殼前後的特性,找出足以區分是否加殼的 特徵,在做惡意程式特徵時將加殼及未加殼的程式分別分析,才不會造成特徵被混淆,而影 響惡意程式偵測結果。
有此可猜想,是不是能對一些先今的加殼工具去做種類上的分析,能立刻經由其特徵去 做辨識的效果,同時如何能加速在偵測加殼病毒的機制上變成所需要放大探討的過程。並且 能在第一時間內將相同加殼軟體所保護的惡意軟體分類出來,對未知客製化加殼軟體作一次 的手動脫殼分析,再將相同的脫殼方式套用在該類惡意軟體,加速分析未知惡意軟體的速度。
現有惡意程式皆用加殼技術來隱藏惡意程式和逃避防毒軟體的偵測,找出有效的加殼特 徵用來區別程式是否加殼,然後針對加殼程式和未加殼程式給予不同的偵測惡意程式的方法 也是本計畫合作的重點,篩選加殼檔案作為病毒偵測的依據之一,並且分類病毒所使用的加 殼軟體種類來降低分析病毒人員的時間成本,加快漏洞管理程序的速度強化資訊安全的防線。
研究目的
惡意程式在近幾年已經成為大家熱切探討的一個主題,同時也成為在資訊安全上大家所 討論的議題之一,攻擊手法不斷的翻新使得網路防禦的漏洞上總是層出不窮。像是windows 都 會執行的定期重大更新,或是Version 2 Limited的NOD32 ,McAfee 的Anti-spyware , Kaspersky 的AntiVirus等廠商提供的惡意式防禦軟體有鑑於此,為了有效躲避防毒軟體之偵 測,現今的程式都會利用一些加殼軟體以及相關技術,造成惡意程式特徵碼混淆,將其程式 進行加殼的動作。為了避免被進行入侵探測時取得資料庫系統所回應的訊息,軟體不論是正 常程式或是惡意程式,都會利用一些加殼軟體以及相關技術,將可執行檔案進行加殼與加密 的動作,並可有效躲避防毒軟體之偵測。因此,若能有效偵測檔案是否加殼,並知道使用何 種工具進行脫殼,將能大大提升防毒軟體之偵測率,確保大眾使用電腦之安全。
本計畫希望能針對現今病毒的加殼技術來找出防毒的因應之道,亦不需經過解殼來判斷 是否為病毒。如果能在第一時間內將相同加殼軟體所保護的惡意軟體分類出來,即可對這些 未知客製化加殼軟體作一次的手動脫殼分析,再將相同的脫殼方式套用在該類惡意軟體,減 少枯燥又耗時的脫殼分析時間,加速分析未知惡意軟體的速度。而本計畫之所以選擇靜態分 析作為偵測手段是為了在不執行病毒的情況下,不費一兵一卒地分析可執行檔案的標頭檔來 判斷該檔案是否為加殼檔案。利用程式加殼前後的特性,找出足以區分是否加殼的特徵,在 做病毒特徵訓練時將加殼及未加殼的程式分別分析,才不會照成特徵被混淆,而影響惡意程 式偵測結果,且若能有效偵測檔案是否加殼,將能大大提升防毒軟體之偵測率,確保大眾使 用電腦之安全。
文獻探討
在電腦程式中也有些有段專門負責保護程式不被非法修改或反編譯的程序,這程序和自 然界的殼在功能上有很多相同的地方,無非是為了保護、隱蔽殼內的東西,大家就把這樣的 程序稱為“殼”了。加殼和一般常見的 WinRAR、WinZip 等壓縮程式主要差別是,不必另外 手動先解壓縮的程序,加殼過的 EXE 文件是可執行文件,它可以同正常的 EXE 文件一樣直 接執行。由於目前商業所用的惡意程式偵測方法都是利用病毒碼比對為基礎,每當執行掃毒 程式時,便能立刻掃描程式檔案,並作病毒碼比對,即能偵測到是否有惡意程式,所以必須 不斷更新病毒碼,才能防禦推陳出新的惡意程式。因此本計畫希望能研究「零時差防禦」的 監測方式,來對抗病毒的「零時差攻擊」。
近年來惡意程式因為演變與傳播速度太快而被重視,造成電腦的安全體系上常會遭受到 後門程式的威脅,許多個人或公司資料被竊取,因而造成極大的損失。有鑑於此,各大防毒 軟體廠商無不開始正視惡意程式所帶來的危害。例如知名防毒軟體廠商 symantec Internet Security[1] [1],McAfee 的 Anti-spyware[2],Kaspersky 的 AntiVirus[3]。連微軟也不得不防範惡 意程式來勢洶洶的攻勢,近幾個月來,相關系統、作業軟體更新頻繁,以確保電腦使用上之 安全。雖然各家廠商的偵測技巧上略有不同,但是大部分還是依賴特徵碼比對(Pattern Match) 的技術,不過特徵碼比對無法在沒有特徵碼的情況下比對出新型或經過加殼程序的惡意程 式,僅能針對已知惡意程式作到快速且有效的防範。
目前針對惡意程式的偵測與防護上, 可以找到許多相關的研究如[4][5][6][7][8][9],大部 份的作法,是將特徵萃取出來,而這些特徵常見的如:程式使用了哪些 DLL,以及 API;亦 或是利用 n-gram 的方式將特徵萃取出來,所謂 n-gram,其中 n 可以為任意值,大部份 n 值為 3 到 5,而利用 n-gram 方式粹取出的特徵,可以為程式的 binary code、hexadecimal code、assembly code、DLL call…等。但利用 n-gram 的方式粹取特徵,最大的缺點在於,若檔案的 size 太大,
特徵的數量會非常的多,導致訓練時運算量過大。特徵萃取出來後,再利用一些資料探勘的 方法,作特徵的選取以及篩選,例如:Information Gain、Gain Ratio、Fisher Score、Document Frequency measure…等,都是常用作為特徵選取的方法,最後將篩選過後的特徵,利用分類 器去作訓練以及測的工作,而常見的分類器如:Artificial Neural Network、Decision Trees、Naïve Bayes、Support Vector machine…等。利用這種靜態的分析方式,最大的優點就是不必將程式 執行,以避免系統中毒,且偵測上會有不錯的效果;但缺點就是若篩選過後的特徵數量太多,
花費於訓練的時間與成本會相對的增加,且會有誤報與漏報的情形發生。
傳統的防毒軟體技術,是藉由特定的特徵碼來判定是否為惡意程式。通過加殼處理的檔 案,其內容已經改變,所以透過特徵碼的比對,便無法辨識。因此,目前的惡意程式常會利 用加殼工具對其進行加殼的動作,除了檔案的 size 減少許多外,還可以有效躲過防毒軟體的 偵測。而加殼其實就是利用一些特殊的演算法,對 EXE、DLL 檔案裡的資源進行壓縮。類似 WINZIP 的效果,但壓縮之後的檔案,可以獨立執行,且脫殼過程完全隱蔽,都會在記憶體 中完成。而脫殼的原理,就是加殼工具會在檔案的頭加一段程式碼,當執行到這段程式碼時,
電腦將會知道如何進行脫殼的工作。由於現今電腦的 CPU 執行速度都很快,所以脫殼的過 程,使用者並不會察覺程式正在進行脫殼的動作。
由於現在網路發達,因此很輕易的於網路上能找到許多加殼的工具,當然也很輕易的可 以在網路上找到相對應的脫殼工具,如[10]。雖然網路上有許多加殼工具與相對應的脫殼工 具可以使用,但前提必須知道程式使用了何種加殼技術進行加殼,因此網路上也有許多偵測 殼的工具,比較知名的如 PEID[11]、Protection ID[12],它們皆是使用 signature-based 的方式 進行特徵比對,因此可以利用這兩種工具來分辨程式使用了何種加殼技術,其中 PEID 更是 最常被拿來使用的工具。但根據[13],現今如 PEID、Protection ID 這些偵測殼的軟體,其 falsenegative rate 相當的高,且現今惡意程式的加殼比例,超過了 92%[14],更突顯出偵測殼 的重要性。
國內外也有相當多針對加殼程式作的研究,Roberto Perdisci、Yang-seo Choi[15]、M.Zubair Shafiq[16],利用靜態的方式粹取出 PE Table 裡的特徵,再經由分類器去作訓練以及偵測,Lyda and Hamrock[17],則是經由計算每個檔案 Raw Data 的 byte Entropy,發現有加殼的程式,其 Entropy 較未加殼的程式來的高出許多;亦或是利用動態方式檢測 hidden code,而 hidden code 指的就是被加殼軟體壓縮或加密的那段程式碼。Lorenzo Martignoni,提出了一個名為
OmniUpack[18]的工具,能監控每個在記憶體裡執行的程式,並動態的檢測 hidden code,將 找到的 hidden code 經由防毒軟體去作比對,直到找到的 hidden code 為 malicious code 或整個 檔案檢測完畢,程式才會停止。諸如 McBoost[19]、Renovo[20]、PolyUnapck[21],也都是使 用動態的方式來檢測 hidden code。
參考文獻
[1] Symantec Corporation, http://www.symantec.com/index.htm.
[2] McAfee, Inc, http://www.mcafee.com/us/.
[3] The Kaspersky Lab, http://www.kaspersky.com.
[4] Nick Hnatiw, Tom Robinson, Casey Sheehan, Nick Suan, “PIMP MY PE”: PARSING MALICIOUS AND MALFORMED EXECUTABLES.
[5] Jeremy Z. Kolter, Marcus A. Maloof, Learning to Detect Malicious Executables in theWild, 2004.
[6] J. Zico Kolter, Marcus A. Maloof, Learning to Detect and Classify Malicious Executables in the Wild, 2006.
[7] Mohammad M. Masud, Latifur Khan, Bhavani Thuraisingham, A Hybrid Model to Detect Malicious Executables, 2007.
[8] Robert Moskovitch, Yuval Elovici, Unknown Malicious Code Detection – Practical Issues, 2008.
[9] D. Michael Cai, James Theiler, and Maya Gokhale, Detecting a Malicious Executable without Prior Knowledge of Its Patterns.
[10] http://anti-hacker.blogspot.com/2007/03/blog-post_13.html.
[11] http://www.peid.info/
[12] http://pid.gamecopyworld.com
[13] Roberto Perdisci, Andrea Lanzi b,c, Wenke Lee, Classification of packed executables for accurate computer virus detection, Elsevier B.V, 2008.
[14] T. Brosch and M. Morgenstern, "Runtime Packers: The Hidden Problem," Proc. Black Hat USA, Black Hat, 2006; www.blackhat.com/presentations/bh-usa-06
BH-US-06-Morgenstern.pdf.
[15] Yang-seo Choi, Ik-kyun Kim, Jin-tae Oh, Jae-cheol Ryou, “PE File Header Analysis-based Packed PE File Detection Technique”, 2008 IEEE International Symposium on Computer Science and its Applications.
[16] M. Zubair Shafiq, S. Momina Tabish, Muddassar Farooq, PE-Probe: Leveraging Packer Detection and Structural Information to Detect Malicious Portable Executables, National University of Computer & Emerging Sciences (NUCES-FAST) Islamabad, 44000, Pakistan., 2009
[17] Lyda, Robert et al, “Using Entropy Analysis to Find Encrypted and Packed Malware”, IEEE Security and Privacy,Apr, 2007
[18] Martignoni, L., Christodorescu, M., Jha, S., 2007. Omniunpack: fast, generic, and safe unpacking of malware. In: ACSAC’07: Proceedings of the 23rd Annual Computer Security Applications Conference on Annual Computer Security Applications Conference.
[19] Roberto Perdisci, Andrea Lanzi, Wenke Lee, “McBoost: Boosting Scalability in Malware Collection and Analysis Using Statistical Classification of Executables”.
[20] M. G. Kang, P. Poosankam, and H. Yin. Renovo: A hidden code extractor for packed executables. In WORM ’07: Proceeding of the 5th ACM Workshop on Recurring Malcode, 2007.
[21] P. Royal, M. Halpin, D. Dagon, R. Edmonds, and W. Lee, Polyunpack: Automating the hidden-code extraction of unpack-executing malware. In Annual Computer Security Applications Conference (ACSAC), 2006.
研究方法
本計畫採用之研究方法與原因
(
有殼與無殼惡意程式偵測系統)由於時下惡意軟體的猖獗多變,且有心人士企圖透過惡意軟體竊取使用者個人資訊及破壞 電腦,不斷的利用加密加殼軟體偽裝惡意程式來躲避防毒軟體的偵測,使得病毒被加密加殼 的比率居高不下。通常程式被加殼時會壓縮原來的程式碼並且增加一段還原子程式,當加殼 的程式被執行時,程式會先從還原子程式開始執行,還原加殼前的原始程式碼(code and data…),再執行原程式內容。
加殼前後程式的檔案原貌(圖一),程式加殼會先將程式中區段(text、data、rsrc)加密或 壓縮,然後將其存放至一新的區段,然後增加一段還原子程式,另外新增的預留區段是用來 存放解殼後的資料,此區段的大小起始值為0,而在執行還原時,虛擬大小(實際上是存在記 憶體中)則可用來存放解殼後資料,同時,加殼者通常移除大部份原來的Import data 而保留 或僅增加一些必要的Imports,如kernel32.dll 內的LoadLibraryA 及GetProcAddress 等 API, 介紹執行加殼程式時的記憶體動作,一開始程式會先執行還原子程式,用以將被加殼 者壓縮或加密的程式碼還原至預留的空區段,接著,恢復加殼前原始程式所需的Imports,也 就是呼叫LoadLibraryA API 去使用Windows 的dll 庫,然後呼叫GetProcAddressAPI 去獲得 原始程式所需API 位址,接著寫入原始程式的Import address table,最後,程式控制權轉 移至執行原始程式碼。
圖一 加殼前後程式的檔案原貌 執行加殼程式的記憶體動作
當程式加殼時,有些 PE 格式中有許多特徵屬性間的關聯性即會破壞,而這些特徵即可用 來分辨程式是否加殼。但是不是所有特徵都是有益於分類的,所以必須使用一些統計的方法 找出有用的資訊,所以用 Kullback-Leibler divergence 或 Information Gain 技術來粹取 有用的特徵,最後再使用 SVM 針對加殼程式及惡意程式作偵測。
如圖二的流程圖所示,以下針對這些步驟去描述:
(1) 確定資料來源
(2) 尋找萃取資料的方式,利用Information Gain和Kullback-Leibler divergence (3) 加殼特徵之判別(SVM之概述)以及分別處理加殼和未加殼程式的惡意程式偵測
(1) 確定資料來源,針對PE table(如圖三)去分析找出資料來源
圖二 研究方法之流程圖
PE Table記載程式的相關資訊,主要可分為檔頭及區段。檔頭中包含許多檔案本身的相關 資訊,包含許多PE 加載器用到的重要欄位,供系統載入器初始化程式時使用。區段則是程式 的本體,包含了程式碼及所需的各式資料。程式內的各個區塊則包含了程式真正的資料(如程 式碼、變數、輸入函數、輸出函數、資源等) 。
圖三 PE Table 架構
藉由三個特點去說明加殼與未加殼之特徵改變,以下分別就加殼目的、加殼行為和加殼演 算法來加以說明:
(A) 加殼目的造成特徵改變 1.程式區塊屬性:
一般正常程式在程式碼的區塊一定是賦予可執行的屬性,而加殼者為了保護其程式,
會故意將程式碼區塊不賦予可執行屬性,或將其它非程式碼區塊賦予可執行的屬性,
增加程式被逆向工程分析的難度。
2.程式入口點(Entrypoint)的屬性:
有些特殊加殼者會將還原子程式(stub)放置於PE header未使用的空間中,讓程式一 開始讀入PE header 時即還原加殼前程式碼並執行,因而可將Entrypoint的區塊改為
不可執行或非程式碼區塊、使程式被分析更加困難。
3.程式區塊的亂度:
因為加殼者出於保護程式碼和資料的目的,一般會加密(壓縮)原程式檔案的各個區 塊,使資料更混亂(程式碼出現機率很平均),其亂度會較一般程式高。
(B) 加殼行為造成特徵改變
1.程式區段同時擁有可寫及可執行的屬性:
一般來說程式碼區段會被賦予可讀/不可寫/可執行的屬性,所以寫入的動作是被禁止 的。另一方面,資料區段會被賦予可讀/可寫/不可執行的屬性,所以程式計數器從不指 向屬於資料區段的記憶體位置。當執行加殼過的程式時,會執行還原子程式,還原加殼 前程式的程式碼於預留的空區段,然後執行原始程式碼,所以加過殼的程式至少會一個 區段的屬性同時為可讀/可寫/可執行。這種的區段屬性是加殼程式才會出現。
2.程式呼叫函式庫中的函式數量:
大部份未加殼的程式需要使用許多的外部函式,舉例來說,他們通常呼叫許多Windows API,如讀取、寫入、寫出,開新Windows 視窗,網路連線等。另一方面,加殼者通常移 除大部份原來的Import data 而保留或僅增加一些必要的Imports,主要的原因為在執行 加殼程式時,不需要使用許多外部函式,而只需執行還原子程式,用以將被加殼者壓縮 或加密的程式碼還原至記憶體,程式碼還原之後才會恢復加殼前原始程式所需的
Imports。
(C) 加殼演算法造成特徵改變 1. 程式區段名稱:
程式加殼後,區段名稱通常將不會依循上述的標準名稱,舉例來說,經UPX 加殼軟體加殼 過的程式,就會產生UPX0 及UPX1 的區段名稱。
2.區段大小改變:
有些加殼演算法會將程式區段分割成更多段塊,有些加殼演算法會將多個區段壓縮成一個 區段,會造成加殼後程式的所有區塊的大小與原來的檔案大小不同。
(2) 尋找萃取資料的方式,利用Information Gain和Kullback-Leibler divergence
(A). Information Gain
針對一個特徵或屬性 A 的 Information Gain 而言,即是計算其與 Entropy(N)的差值。在 此之前須計算出 A 在不同類別劃分下產生的亂度,一般而言,亂度值越低代表特徵 A 在類 別中區分程度越明顯,所具代表性越高。
假設分類的問題中包含了資料N={1, 2, 3, …, n}、特徵維度D={1, 2, 3, …, d}以及類別 K={1, 2,3, …, k},若欲求得單一特徵之資訊增益值,必須先得到兩個相關聯的數值,這 兩個相關性的數值稱為Entropy,如下方程式(1)與(2),由這兩個Entropy 的差值即為資訊 增益,如方程式(3) :
(最後計算IG(Dj) = Entropy(N) -Entropy(Dj),依照Information Gain 定義,資料在類別 分離程度越大,代表性越高。)
(B). Kullback-Leibler divergence
藉由事件P 與事件Q 機率分布的變化,找出P 與Q 的差異性,示意圖如圖四。即KL 值 越大,表示P 與Q 之間的差異性越大。
圖四 Kullback-Leibler divergence 示意圖
(3) 加殼特徵之判別(SVM之概述)以及分別處理加殼和未加殼程式的惡意程式偵測
(一) SVM 的處理程序以及變數意義
首先先介紹 SVM 的用途,SVM 常用於處理回歸問題(時間序列分析、生物序列分析)和模式 識別(樣本分類、圖像分類、手寫字元識別、判別分析)等諸多問題,其性能勝過其它大多數 的學習系統。由於 SVM 分類器在樣本分類、手寫識別、圖像分類、生物資訊學等領域中獲得 了相當不錯的應用,以及具有較佳的預測未知檔案能力,與在兩類樣本分類上具有非常好的 效能。
接下來介紹處理程序,以下為會使用到的變數與函數名稱:
x :為一向量(Vector),記錄每筆資料的屬性(attribute), i yiRN,i1,....l
y :為一布林(Boolean)變數,表示i x 是屬於那一類, i yi
1,i1,....l f :決策函數(decision function) f(xi)sign(wxi b), f:RN
1 決定x 是屬於那一類(+1 或 -1) iSVM 分類器的作法即利用訓練集中資料的特徵向量,訓練出一個超平面(Hyperplane),藉由 訓練出來的超平面來區分資料分別屬於何種類別(+1 或-1)(圖五)。首先我們找出超平面 ( f :wxb0)所對應的向量 w 與系數 b,再利用決策函數 f(xi)sign(wxi b)對測試集中
的 xj進行分類,若 f(xj)0,則 xj 屬於+1 類別,若 f(xj)0,則 xj 屬於-1 類別。
圖五 SVM 超平面分類器
S 而 SVM 分類器會藉由調整 w 與 b 的值,來滿足函數 | (w x i) b| 1 i1,...,l,對於最佳超平 面,邊緣的最大距離我們可以使用 2 / w
2表示(圖六)。
圖六 具最佳超平面與邊緣之分類情形
(二) .惡意程式偵測系統的實作 系統流程:
圖七 系統流程圖
目的在於如何分辨加殼的程式與未加殼的程式,並判別加殼程式是使用何種方法、技術 進行加殼,程式會先經由 Packed Executables Classification System 判別是否為加殼程式,
若為加殼程式,則由 Packed Tools Classification System 分辨程式是屬於何種加殼技術,
並於網路上找尋對應的脫殼工具進行脫殼的工作,最後再將程式由防毒軟體進行偵測;若 Packed Executables Classification System 判定是未加殼程式,則程式直接由防毒軟體進 行偵測。
圖八 系統架構圖
系統架構分為左邊的偵測模組與右邊的更新模組,偵測模組負責偵測加殼程式,更新模組負 責特徵的萃取與訓練。首先由更新模組從程式資料庫中把未加殼程式與加殼程式裡的特徵萃 取出來,再轉送給SVM訓練模組作訓練,將這些程式取出特徵後,依序將取出的特徵值,排列 成特徵向量的形式(圖九),SVM則會將每個特徵的值,轉換成-1至1的對應值(圖十),然後進 行訓練,再由訓練出來的偵測模組,做程式的判別。若程式判別為加殼,則進行加殼種類的 分辨,並於網路上找到對應的工具,進行脫殼,最後直接由防毒軟體進行偵測,再將加殼程 式放入資料庫中。
圖九 SVM 特徵向量表示法
圖十 特徵向量對應值
結果與討論
現今加殼之病毒越來越多,如何可以加速分析病毒是否有加殼的議題已經越來越深入。另 外在加殼病毒特徵上的分析,來辨識是否為加殼病毒以及分類,用來辨識分析這些分類也變 得越來越重要,去了解各式特徵選取演算法,並且透過不停反覆實驗,找出最佳的選取方式 本計畫取出第一種類別特徵中的39類特徵(圖十一),這些特徵則是利用加殼程式與未加殼程 式的一些特性作為選取的依據,例如:一般加殼程式的熵(Entropy),其值會介於7~8之間,
而未加殼程式,則會介於4~7之間;加殼程式的Standard Sections個數,會較未加殼程式來 的少;某些程式若有加殼,會出現沒有名字或一些怪異名字的sections,這些sections一般 都是加殼工具所創造出來的,而未加殼的程式,則會依照Standard Section中所定義的 sections去使用與命名。這些特徵則是利用加殼程式與未加殼程式的一些特性作為選取的依 據
8 0 . 0 0 % 8 2 . 0 0 % 8 4 . 0 0 % 8 6 . 0 0 % 8 8 . 0 0 % 9 0 . 0 0 % 9 2 . 0 0 % 9 4 . 0 0 % 9 6 . 0 0 % 9 8 . 0 0 % 1 0 0 . 0 0 %
D a t a s e t d e t e c t e d b y
P E i D
D a t a s e t m i s s e d b y
P E i D
N o n-P a c k e d e x e c u t a b l e
3 9 f e a t u r e s A c c u r a c y
圖十一 39 類特徵之偵測率
接下來本計畫再從 File Header 與 Optional Header 中,取出一些特徵來做實驗,而 File Header 與 Optional Header 尚有許多特徵,如 entry point、base of code、base of data、
RVA of Export Directory、RVA of Architecture Directory、...等,皆為基底或是虛擬記 憶體的位址所以本計畫又從第二種類別的特徵中,選取出 30 類特徵,並加上前面的 39 類,
總共 69 類特徵做第二次的實驗(圖十二)
80.00%
82.00%
84.00%
86.00%
88.00%
90.00%
92.00%
94.00%
96.00%
98.00%
100.00%
Dataset detected by
PEiD
Dataset missed by
PEiD
Non-Packed executable
69 features Accuracy
圖十二 69 類特徵之偵測率
最後,本計畫從第三種類別的特徵中,取出96類特徵,加上先前的69類特徵,總共165類作第 三次的實驗(圖十三)。由於第三種類別的特徵太細,加入第一類別與第二類別一起實驗,反
而會造成Overfitting的情況發生,因而降低整體的偵測率。
80.00%
82.00%
84.00%
86.00%
88.00%
90.00%
92.00%
94.00%
96.00%
98.00%
100.00%
Dataset detected by
PEiD
Dataset missed by
PEiD
Non-Packed executable
165 features Accuracy
圖十三 165 類特徵之偵測率
進行加殼種類分析後再依39,69,165之特徵去做辨識加殼之正確率分析(如圖十四、圖十五)
圖十四 各類工具偵測結果
圖十五 使用 39、69、165 類特徵之正確率
可以發現使用69類特徵具有最佳的效果。現今加殼程式種類繁多,目前並無工具或方法能有 效偵測及解殼,所以其重點是能有效分辨出經加殼之惡意程式,所以上述這些數據了解到辨 別加殼之惡意程式的正確率在數字上已經能達到相當好的效能及偵測效果。
現在可以有實際的演算法及方式來辨識出加殼病毒,使我們在日常生活中傳輸的資料及檔 案能多一分保障,不僅是提供了更便利的偵測效能同時也能加速其辨識加殼病毒的時間,雖 然未必辨識度能到100%,但經過這幾年的研究及討論改進,已經讓其辨識效能達到一個相當 高的地步了。
國科會補助計畫衍生研發成果推廣資料表
日期:2012/11/01
國科會補助計畫
計畫名稱: 有殼與無殼惡意程式偵測系統 計畫主持人: 洪西進
計畫編號: 100-2218-E-011-020- 學門領域: 推動計畫-資安
無研發成果推廣資料
100 年度專題研究計畫研究成果彙整表
計畫主持人:洪西進 計畫編號:100-2218-E-011-020- 計畫名稱:有殼與無殼惡意程式偵測系統
量化
成果項目 實際已達成
數(被接受 或已發表)
預期總達成 數(含實際已
達成數)
本計畫實 際貢獻百
分比
單位
備 註 ( 質 化 說 明:如 數 個 計 畫 共 同 成 果、成 果 列 為 該 期 刊 之 封 面 故 事 ...
等)
期刊論文 0 0 100%
研究報告/技術報告 1 1 100%
研討會論文 1 1 100%
論文著作 篇
專書 0 0 100%
申請中件數 1 1 100%
專利 已獲得件數 0 0 100% 件
件數 0 0 100% 件
技術移轉
權利金 0 0 100% 千元
碩士生 6 6 100%
博士生 2 2 100%
博士後研究員 0 0 100%
國內
參與計畫人力
(本國籍)
專任助理 0 0 100%
人次
期刊論文 0 0 100%
研究報告/技術報告 0 0 100%
研討會論文 0 0 100%
論文著作 篇
專書 0 0 100% 章/本
申請中件數 0 0 100%
專利 已獲得件數 0 0 100% 件
件數 0 0 100% 件
技術移轉
權利金 0 0 100% 千元
碩士生 0 0 100%
博士生 0 0 100%
博士後研究員 0 0 100%
國外
參與計畫人力
(外國籍)
專任助理 0 0 100%
人次
其他成果
(
無法以量化表達之成 果如辦理學術活動、獲 得獎項、重要國際合 作、研究成果國際影響 力及其他協助產業技 術發展之具體效益事 項等,請以文字敘述填 列。)無
成果項目 量化 名稱或內容性質簡述
測驗工具(含質性與量性) 0
課程/模組 0
電腦及網路系統或工具 0
教材 0
舉辦之活動/競賽 0
研討會/工作坊 0
電子報、網站 0
科 教 處 計 畫 加 填 項
目 計畫成果推廣之參與(閱聽)人數 0
國科會補助專題研究計畫成果報告自評表
請就研究內容與原計畫相符程度、達成預期目標情況、研究成果之學術或應用價 值(簡要敘述成果所代表之意義、價值、影響或進一步發展之可能性) 、是否適 合在學術期刊發表或申請專利、主要發現或其他有關價值等,作一綜合評估。
1. 請就研究內容與原計畫相符程度、達成預期目標情況作一綜合評估
■達成目標
□未達成目標(請說明,以 100 字為限)
□實驗失敗
□因故實驗中斷
□其他原因 說明:
2. 研究成果在學術期刊發表或申請專利等情形:
論文:□已發表 □未發表之文稿 ■撰寫中 □無 專利:□已獲得 ■申請中 □無
技轉:□已技轉 □洽談中 ■無 其他:(以 100 字為限)
1. 找出合適識別加殼特徵.
2. 找出最佳的支援向量機用在加殼分類的 Kernel 函數.
3. 建立加殼方法資料庫.
4. 建立惡意加殼程式資料庫.
3. 請依學術成就、技術創新、社會影響等方面,評估研究成果之學術或應用價 值(簡要敘述成果所代表之意義、價值、影響或進一步發展之可能性)(以 500 字為限)
1. 現今加殼之病毒越來越多,如何可以加速分析病毒是否有加殼的議題已經越來越深 入。另外在加殼病毒特徵上的分析,來辨識是否為加殼病毒以及分類,用來辨識分析這些 分類也變得越來越重要,去了解各式特徵選取演算法,並且透過不停反覆實驗,找出最佳 的選取方式
本計畫取出 39 類特徵,這些特徵則是利用加殼程式與未加殼程式的一些特性作為選取的依 據,例如:一般加殼程式的熵(Entropy),其值會介於 7~8 之間,而未加殼程式,則會介 於 4~7 之間;加殼程式的 Standard Sections 個數,會較未加殼程式來的少;某些程式若 有加殼,會出現沒有名字或一些怪異名字的 sections,這些 sections 一般都是加殼工具 所創造出來的,而未加殼的程式,則會依照 Standard Section 中所定義的 sections 去使 用與命名。這些特徵則是利用加殼程式與未加殼程式的一些特性作為選取的依據.
2. 現在可以有實際的演算法及方式來辨識出加殼病毒,使我們在日常生活中傳輸的資料 及檔案能多一分保障,不僅是提供了更便利的偵測效能同時也能加速其辨識加殼病毒的時 間,雖然未必辨識度能到 100%,但經過這幾年的研究及討論改進,已經讓其辨識效能達到 一個相當高的地步了。