這篇文章將介紹基於機器學習的惡意代碼檢測技術,主要參考鄭師兄的視頻總結,包括機器學習概述與算法舉例、基於機器學習方法的惡意代碼檢測、機器學習算法在工業界的應用。同時,我再結合自己的經驗進行擴充,詳細分享了基於機器學習的惡意代碼檢測技術,基礎性文章,希望對您有所幫助~
聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背後的原理,更好地進行防護。隨著網際網路的繁榮,現階段的惡意代碼也呈現出快速發展的趨勢,主要表現為變種數量多、傳播速度快、影響範圍廣。在這樣的形勢下,傳統的惡意代碼檢測方法已經無法滿足人們對惡意代碼檢測的要求。比如基於籤名特徵碼的惡意代碼檢測,這種方法收集已知的惡意代碼,以一種固定的方式生成特定的籤名,維護這樣的籤名庫,當有新的檢測任務時,通過在籤名庫中檢索匹配的方法進行檢測。暫且不說更新、維護籤名庫的過程需要耗費大量的人力物力,惡意代碼編寫者僅僅通過混淆、壓縮、加殼等簡單的變種方式便可繞過這樣的檢測機制。
為了應對上面的問題,基於機器學習的惡意代碼檢測方法一直是學界研究的熱點。由於機器學習算法可以挖掘輸入特徵之間更深層次的聯繫,更加充分地利用惡意代碼的信息,因此基於機器學習的惡意代碼檢測往往表現出較高的準確率,並且一定程度上可以對未知的惡意代碼實現自動化的分析。下面讓我們開始進行系統的介紹吧~
首先介紹下機器學習的基本概念,如下圖所示,往分類模型中輸入某個樣本特徵,分類模型輸出一個分類結果。這就是一個標準的機器學習檢測流程。機器學習技術主要研究的就是如何構建中間的分類模型,如何構造一組參數、構建一個分類方法,通過訓練得到模型與參數,讓它在部署後能夠預測一個正確的結果。
訓練是迭代樣本與標籤對的過程,如數學表達式 y=f(x) ,x表示輸入的樣本特徵向量,y表示標籤結果,使用(x,y)對f進行一個擬合的操作,不斷迭代減小 y』 和 y 的誤差,使得在下次遇到待測樣本x時輸出一致的結果。該過程也稱為學習的過程。
構造分類方法
構造分類方法是機器學習中比較重要的知識,如何設計一種分類模型將f(x)表達出來。比如:
超平面(SVM)
靜態特徵: 沒有真實運行的特徵
字節碼:二進位代碼轉換成了字節碼,比較原始的一種特徵,沒有進行任何處理
IAT表:PE結構中比較重要的部分,聲明了一些函數及所在位置,便於程序執行時導入,表和功能比較相關
Android權限表:如果你的APP聲明了一些功能用不到的權限,可能存在惡意目的,如手機信息
可列印字符:將二進位代碼轉換為ASCII碼,進行相關統計
IDA反彙編跳轉塊:IDA工具調試時的跳轉塊,對其進行處理作為序列數據或圖數據
舉一個簡單的控制流圖(Control Flow Graph, CFG)示例。if (x < y){ y = 0; x = x + 1;}else{ x = y;}(2) 常見算法普通機器學習方法和深度學習方法的區別是,普通機器學習方法的參數比較少,相對計算量較小。普通機器學習方法(SVM支持向量機、RF隨機森林、NB樸素貝葉斯)
深度神經網絡(Deep Neural Network)
卷積神經網絡(Convolution Neural Network)
長短時記憶網絡(Long Short-Term Memory Network
針對序列模型進行建模,包含上下文依賴關係,比如「我 是 一名 大學生」中的「我」和「是」前後出現的條件概率更高。廣泛應用於文本分類、語音識別中,同樣適用於惡意代碼檢測。
圖卷積網絡 (Graph Convolution Network)
比較新興的方法,將卷積應用到圖領域,圖這種數據類型比較通用,非圖數據比較容易轉換成圖數據,CCF論文中也已經應用到惡意代碼檢測中。
2.靜態特徵設計舉例首先分享一個靜態特徵的例子,該篇文章發表在2015年,是一篇CCF C類會議文章。特徵抽取
使用了四種特徵
特徵抽取輸入到深度神經網絡
包含兩層隱含層的深度神經網絡
字節-熵對統計特徵:統計滑動窗口的(字節,熵)對個數
在下圖中,假設白框是一個二進位文件,其中紅色框W是滑動窗口,二進位文件如果有100KB大小,每個滑動窗口是1024位元組,那麼滑動100次可以將整個二進位文件掃描完。如果對窗口內的數值進行計算,首先計算它的熵值,熵是資訊理論的概念(下圖中的E),它描述了一個數組的隨機性,熵越大其隨機性越大。在圖中,每一個滑動窗口都有固定的熵值,包含了1024位元組,標記為(Bi,Ewi),最後滑動得到100x1024的字節熵對。
統計最後滑動得到100x1024的字節熵對個數,得到如下圖所示的二維直方圖結果,橫坐標是熵值最小值到最大值的範圍,縱坐標是一個字節轉換成10進位的範圍0-256,最終得到字節熵對分布的範圍,再將16x16維的二維數組轉換成1x256維的特徵向量。PE頭IAT特徵:hashDLL文件名與函數名為[0-255)範圍
第二種特徵是PE頭IAT特徵。它的計算工程是將PE頭的IAT表裡面的文件名和函數名hash到0到255範圍,如果某個文件出現某個函數,就將該位置為1,當然每位對應表示的函數是固定的,最終得到256數組。可列印字符:統計ASCII碼的個數特徵
可列印字符和字節熵對比較相似,這裡推薦大家閱讀原文。
PE元信息:將PE信息抽取出來組成256維數組,例如編譯時間戳
總共有上述四種特徵,然後進行拼接得到4*256=1024維的數組,這個數組就代表一個樣本的特徵向量。假設有10000個樣本,就有對應10000個特徵向量。得到特徵向量之後,就開始進行模型的訓練和測試,一般機器學習任務事先都有一個數據集,並且會分為訓練數據集和測試數據集,按照4比1或9比1的比例進行隨機劃分。訓練會將數據集和標籤對輸入得到惡意和非惡意的結果,再輸入測試集得到最終結果。下面是衡量機器學習模型的性能指標,首先是一幅混淆矩陣的圖表,真實類別中1代表惡意樣本,0代表非惡意樣本,預測類別也包括1和0,然後結果分為:然後是Accuracy(準確率)、Precision(查準率)、Recall(查全率)、F1等評價指標。通常Accuracy是一個評價惡意代碼分類的重要指標,但本文選擇的是AUC指標,為什麼呢?
PE元信息是將PE信息的數值型信息抽取出來,組成256維數組,每一個數組的位置表示了一個固定的信息種類,再信息種類將對應的信息填入到元素的位置,比如編譯時間戳。
假設我們模型的效果非常差,它會將所有本測試樣本標記為惡意樣本,這樣我有兩個數據集,一個樣本包括100個數據(99個惡意樣本、1個非惡意樣本),另一個樣本包括50個數據(50個惡意樣本、50個非惡意樣本),如果我單純的計算ACC,第一個樣本的結構是0.99,顯然不符合客觀的描述,不能用來評價性能高低的,並且這種情況是很容易產生的。所以論文中廣泛採用AUC指標。AUC指標包括TPRate和FPRate,然後得到一個點,並計算曲線以下所包圍的面積即為AUC指標。其中,TPRate表示分類器識別出正樣本數量佔所有正樣本數量的比值,FPRate表示負樣本數量站所有負樣本數量的比值。舉個例子,我們撒網打魚,一網下去,網中好魚的數量佔池子中所有好魚的數量就是TPRate,而FPRate表示一網下去,壞魚的數量佔整個池子中所有壞魚的數量比例,當然FPRate越小越好。最好的結果就是TPRate為1,而FPRate為0,此時全部分類預測正確。該論文測試了六種特徵集合,其計算的TPR和AUC值如下所示。3.經典的圖片特徵舉例下面介紹另一種比較新興經典的方法,就是圖片特徵。但一些安全界的人士會認為這種特徵不太好,但其方法還是比較新穎的。它的基本方法是按照每8位一個像素點將惡意軟體的二進位文件轉換為灰度圖片,圖片通常分為R、G、B通道,每個8位像素點表示2^8,最終每隔8位生成一個像素點從而轉換為如下圖所示的灰度圖片。圖片分別為Obfuscator_ACY家族、Lolipop家族、ramnit家族惡意軟體樣例,這些樣例由微軟kaggle比賽公布的數據生成。這是因為對於某些惡意樣本作者來說,他只是使用方法簡單的修改特徵碼,從而每個家族的圖片比較相似,最終得到了較好的結果。4.動態特徵設計舉例接下來分享一個動態特徵的例子,該篇文章發表在2016年,文章的會議一般,但比較有代表性。下圖展示了該方法的整體流程圖。PE文件進入後,直接進入Cuckoo沙箱中,它是一個開源沙箱,在學術論文中提取動態特徵比較通用;接著進行進行預處理操作,將文本轉換成向量表示的形式,比如提取了200個動態特徵,可以使用200維向量表示,每個數組的位置表示對應API,再將所得到的序列輸入卷積神經網絡LSTM進行分類,最終得到家族分類的結構。下圖展示了實驗的結構,其指標是高於單純的神經網絡和卷積網絡的效果更好,這是一篇比較基礎的文章。5.深度學習靜態檢測舉例這篇文章是火眼公司的兩名員工發布的,所使用的也是靜態檢測特徵,其流程如下所示。
首先,原始的字節碼特徵直接輸入一個Byte Embedding層(詞嵌入),對單個元素進行向量化處理,將字節碼中的每個字節表示成一個固定長度的向量,從而更好地將字節標記在一個空間維度中。詞嵌入技術廣泛應用於自然語言處理領域,比如「女人」和「女王」關係比較緊密,這篇文章的目的也是想要在惡意代碼中達到類似的效果。
然後將矩陣輸入到卷積和池化層中,比如存在一個100K字節的二進位文件,得到100102410矩陣輸入卷積神經網絡中,最後通過全連接層完成惡意和非惡意的分類任務。
Fireeye使用了三個數據集進行訓練和測試,其訓練的模型分類效果結果如下表所示,博客Small、Baseline、Baseline+Dropout模型,其網絡結構是一樣的,其中Small表示使用小的數據集,Baseline表示使用大的數據集,Dropout表示對訓練好的神經網絡中隨機丟棄一些神經元,從而抑制過擬合現象,也是比較常用的深度學習技術。這篇文章的重點是對深度學習的解釋性,就是解釋深度學習是否能學習到惡意軟體的本質特性。下圖展示了不同特徵對於分類結果的影響,橫坐標是Offset偏移,通常用Offset記錄字節,從0到右邊也對應文件大小,前面可能就是PE頭,中間有各種段。它的橫縱坐標分別表示了某些特徵對於惡意性分類比較重要,還是非惡意性比較重要。如果它的校驗和(CheckSum)是0,就對惡意性分類比較重要,這表示深度學習並沒有學習到惡意軟體為什麼是惡意的,只是通過統計學去發現惡意軟體和非惡意軟體差別最大部分,以此進行數據建模。深度學習進行惡意軟體檢測的問題:沒有學習到惡意和非惡意特徵,而是學習到區別的統計差異,而這種差異如果被黑客利用是可以被規避的。6.優缺點優點
特徵提取速度快
特徵種類豐富,可以組合多種特徵向量
缺點
易受加殼、加密、混淆幹擾
無法防範無文件攻擊,難以反映惡意軟體行為的惡意性
優點
提供惡意軟體的動作,調用API
規避一些靜態的混淆對抗方法
缺點
反虛擬化,延時觸發等技術的對抗
測試時間較長,單個樣本2-3分鐘(Cuckoo)
malware data science書籍
https://www.amazon.com/Malware-Data-Science-Detection-Attribution-ebook/dp/B077X1V9SY
7.靜態分析和動態分析對比下面簡單總結靜態分析和動態分析與深度學習結合的知識,該部分內容源自文章:深度學習在惡意代碼檢測 - mbgxbz,在此感謝作者,覺得非常棒,故引用至此!謝謝~惡意代碼的檢測本質上是一個分類問題,即把待檢測樣本區分成惡意或合法的程序。基於機器學習算法的惡意代碼檢測技術步驟大致可歸結為如下範式:深度學習作為機器學習的一個分支,由於其可以實現自動化的特徵提取,近些年來在處理較大數據量的應用場景,如計算機視覺、語音識別、自然語言處理時可以取得優於傳統機器學習算法的效果。隨著深度學習在圖像處理等領域取得巨大的成功,許多人將深度學習的方法應用到惡意軟體檢測上來並取得了很好的成果。實際上就是用深度神經網絡代替上面步驟中的人為的進一步特徵提取和傳統機器學習算法。根據步驟中對訓練樣本進行預處理的方式,可以將檢測分為靜態分析與動態分析:一般來說,在絕大部分情形下我們無法得到惡意程序的原始碼。因此,常用的靜態特徵包括程序的二進位文件、從使用IDA Pro等工具進行反彙編得到的彙編代碼中提取的彙編指令、函數調用等信息,另外基於字符串和基於API調用序列的特徵也是比較常見的。文獻[i]提出一種對PE文件的惡意程序檢測方法,提取PE文件四個類型的特徵:字節頻率、二元字符頻率、PE Import Table以及PE元數據特徵,採用包含兩個隱藏層的DNN作為分類模型,但是為了提取長度固定的輸入數據,他們丟棄了PE文件中的大部分信息。文獻[ii]使用CNN作為分類器,通過API調用序列來檢測惡意軟體,其準確率達到99.4%,遠高於傳統的機器學習算法。然而,當惡意代碼存在混淆或加殼等情形時,對所選取的靜態特徵具有較大的影響,因此靜態分析技術本身具有一定的局限性。利用虛擬機或沙箱執行待測程序,監控並收集程序運行時顯現的行為特徵,並根據這些較為高級的特徵數據實現惡意代碼的分類。一般來講,行為特徵主要包括以下幾個方面:文件的操作行為;註冊表鍵值的操作行為;動態連結庫的加載行為;進程訪問的操作行為;系統服務行為;網絡訪問請求;API調用。文獻[iii]通過API調用序列記錄進程行為,使用RNN提取特徵向量,隨後將其轉化為特徵圖像使用CNN進行進一步的特徵提取,提取其可能包含的局部特徵並進行分類。文獻[iv]提出了一個基於動態分析的2層架構的惡意軟體檢測系統:第1層是RNN,用於學習API事件的特徵表示;第2層是邏輯回歸分類器,對RNN學習的特徵進行分類,然而這種方法的誤報率較高。文獻[v]提出了用LSTM和GRU代替傳統RNN進行特徵的提取,並提出了使用CNN的字符級別的檢測方案。文獻[vi]提出在惡意軟體運行的初期對其進行惡意行為的預測,他們使用RNN進行PE文件檢測,根據惡意代碼前4秒的運行行為,RNN對惡意軟體的預測準確率是91%,隨著觀察的運行時間的增長,RNN的預測準確率也隨之提高。可以看到,相對於靜態分析,動態分析的過程更加複雜耗時,相對而言採用了較高層次的特徵,因此可解釋性也較差。在網絡攻擊趨於精細化、惡意代碼日新月異的今天,基於深度學習算法的惡意代碼檢測中越來越受到學術界和眾多安全廠商的關注。但這種檢測技術在現實應用中還有很多尚未解決的問題。例如上面提到的靜態分析與動態分析存在的不足,現在發展的主流方向是將靜態、動態分析技術進行結合,使用相同樣本的不同層面的特徵相對獨立地訓練多個分類器,然後進行集成,以彌補彼此的不足之處。除此之外,深度學習算法的可解釋性也是制約其發展的一個問題,當前的分類模型一般情況下作為黑盒被加以使用,其結果無法為安全人員進一步分析溯源提供指導。我們常說攻防是息息相關的,螺旋上升的狀態。既然存在基於深度學習的惡意代碼檢測技術,那麼自然也有基於深度學習的或者是針對深度學習的惡意代碼檢測繞過技術,這也是近年來研究的熱點問題,那麼如何提高模型的穩健性,防止這些定製化的幹擾項對我們的深度學習算法產生不利的影響,對抗生成網絡的提出或許可以給出答案。機器學習算法在工業界的應用首先普及一個概念——NGAV。NGAV(Next-Gen AntiVirus)是下一代反病毒軟體簡稱,它是一些廠商提出來的新的病毒檢測概念,旨在用新技術彌補傳統惡意軟體檢測的短板。多家殺毒引擎廠商將機器學習視作NGAV的重要技術,包括McAfee[11], Vmware[9], CrowdStrike[10], Avast[6]
越來越多的廠商開始關注機器學習技術,並發表相關的研究(卡巴斯基[7],火眼[8]),火眼還是用機器學習技術對APT進行分析(組織相似度溯源)
越來越多的安全廠商將機器學習視為反病毒軟體的一個關鍵技術,但需要注意,NGAV並不是一個清晰的定義,你沒法去界定一個反病毒軟體是上一代產品還是下一代產品。衡量反病毒軟體的性能只有對惡意軟體的檢測率、計算消耗、誤報率等,我們只是從現狀分析得到越來越多安全領域結合了機器學習。作為安全從業人員或科研人員,機器學習技術也是我們必須要關注的一個技術。算力問題
機器學習和深度學習算法需要大量的算力,如果我們在本地部署還需要GPU的支持,這樣就帶來了一個硬體配置問題,所以如何減小模型的size及提升模型的檢測能力是一個關鍵性的問題。大規模的特徵數據
特徵對於分類訓練非常關鍵,如何抽取這些數據特徵呢?
訓練的模型是可解釋的
這個問題可以說是機器學習算法和深度學習算法在反病毒軟體應用中最關鍵的一個問題,病毒的對抗是黑客與安全從業人員的對抗的前線,如果我們訓練的模型是不可解釋的,那麼一旦被黑客發現某些規則存在的弱點,他們就可以針對這些弱點設計免殺方法,從而繞過造成重大安全隱患。另一方面,如果機器學習算法是不可解釋黑盒的,用戶他也是不可接受的,難以起到保護重要。
誤報需要維持極度的低水平
誤報是反病毒軟體用戶體驗的一個重要指標,傳統的特徵碼技術、主動防禦技術都具有誤報低的特性,而機器學習是一個預測技術,會存在一些誤報,如何避免這些誤報並且提高檢測的查全率也是重要的問題。
算法需要根據惡意軟體作者的變化快速適應新的檢測特徵
這也是關鍵性問題,在機器學習模型應用中,惡意軟體是不斷變化的,而機器學習算法部署到本地中,它的參數是不變的,所以在長時間的惡意演化中其模型或參數不再適用,其檢測結果會有影響。目前,雲沙箱、在線更新病毒庫特徵是一些解決方法。
優點:能夠建立專家難以發現的規則與特徵
發現的規則和特徵很可能是統計學特徵,而不是惡意和非惡意的特徵,所以這些特徵很容易被黑客進行規避,這既是優點也是缺點,雖然有缺陷,但也能發現惡意樣本的關聯和行為。
總結寫到這裡,這篇文章就介紹完畢,希望對您有所幫助,最後進行簡單的總結:機器學習方法與傳統方法不是取代與被取代的關係,而是相互補充,好的防禦系統往往是多種技術方法的組合。機器學習的檢測方法研究還不充分,安全領域的專有瓶頸與人工智慧研究的共有瓶頸均存在、機器學習算法本身也面對一些攻擊方法的威脅,比如對應抗本。對抗樣本指的是一個經過微小調整就可以讓機器學習算法輸出錯誤結果的輸入樣本。在圖像識別中,可以理解為原來被一個卷積神經網絡(CNN)分類為一個類(比如「熊貓」)的圖片,經過非常細微甚至人眼無法察覺的改動後,突然被誤分成另一個類(比如「長臂猿」)。再比如無人駕駛的模型如果被攻擊,Stop標誌可能被汽車識別為直行、轉彎。
參考文獻:
[1] Saxe J, Berlin K. Deep neural network based malware detection using two dimensional binary program features[C]//2015 10th International Conference on Malicious and Unwanted Software (MALWARE). IEEE, 2015: 11-20.
[2] https://www.kaggle.com/c/malware-classification
[3] https://www.fireeye.com/blog/threat-research/2018/12/what-are-deep-neural-networks-learning-about-malware.html
[4]Kolosnjaji B, Zarras A, Webster G, et al. Deep learning for classification of malware system call sequences[C]//Australasian Joint Conference on Artificial Intelligence. Springer, Cham, 2016: 137-149.
[5] Wüchner T, Cisłak A, Ochoa M, et al. Leveraging compression-based graph mining for behavior-based malware detection[J]. IEEE Transactions on Dependable and Secure Computing, 2017, 16(1): 99-112.
[6]https://www.avast.com/technology/malware-detection-and-blocking
[7] https://media.kaspersky.com/en/enterprise-security/Kaspersky-Lab-Whitepaper-Machine-Learning.pdf
[8] https://www.fireeye.com/blog/threat-research/2019/03/clustering-and-associating-attacker-activity-at-scale.html
[9] https://www.carbonblack.com/resources/definitions/what-is-next-generation-antivirus/
[10] https://www.crowdstrike.com/epp-101/next-generation-antivirus-ngav/
[11] https://www.mcafee.com/enterprise/en-us/security-awareness/endpoint/what-is-next-gen-endpoint-protection.html[i] Saxe, J., & Berlin, K. (2015, October). Deep neural network-based malware detection using two-dimensional binary program features. In 2015 10th International Conference on Malicious and Unwanted Software (MALWARE) (pp. 11-20). IEEE.
[ii] Nix, R., & Zhang, J. (2017, May). Classification of Android apps and malware using deep neural networks. In 2017 International joint conference on neural networks (IJCNN) (pp. 1871-1878). IEEE.
[iii] Tobiyama, S., Yamaguchi, Y., Shimada, H., Ikuse, T., & Yagi, T. (2016, June). Malware detection with deep neural network using process behavior. In 2016 IEEE 40th Annual Computer Software and Applications Conference (COMPSAC) (Vol. 2, pp. 577-582). IEEE.
[iv] Pascanu, R., Stokes, J. W., Sanossian, H., Marinescu, M., & Thomas, A. (2015, April). Malware classification with recurrent networks. In 2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 1916-1920). IEEE.
[v] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.
[vi] Athiwaratkun, B., & Stokes, J. W. (2017, March). Malware classification with LSTM and GRU language models and a character-level CNN. In 2017 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 2482-2486). IEEE.參考推薦:
[1] https://mooc.study.163.com/learn/1000003014?share=2&shareId=1000001005
[2] 《軟體安全之惡意代碼機理與防護》WHU
[3] 師兄的分享及作者學習和實踐經驗原文連結:
https://blog.csdn.net/Eastmount/article/details/107420755
☞那個盜竊比爾·蓋茨、馬斯克、巴菲特推特帳號,發布詐騙廣告的少年被捕了!年僅17歲