機器學習與惡意代碼檢測 |
來源:聚銘網(wǎng)絡 發(fā)布時間:2020-01-12 瀏覽次數(shù): |
信息來源:FreeBuf 一、人工智能簡史 業(yè)界公認人工智能的起源是1956年的達特茅斯會議。出席這次會議的有麥卡錫、明斯基、香農(nóng)、所羅門諾夫、紐厄爾、司馬賀、西蒙、撒繆爾、塞弗里奇、羅切斯特、和摩爾,可謂人才濟濟。正是在這次會議上首次出現(xiàn)了“人工智能”這個詞匯。 達特茅斯會議之后,人工智能就展開了跌宕起伏的發(fā)展歷程。人工智能的發(fā)展大致可以歸納為三次高潮和兩次低潮。第一次高潮大致是從1956年到1974年,這一時期取得突破的領域包括機器定理證明。普通人覺得數(shù)學定理證明很難,在馬路上騎自行車很容易。在人工智能領域恰恰相反。因為前者屬于封閉系統(tǒng),條件確定,后者是開放系統(tǒng),存在大量的不確定因素。 1959年,華人學者王浩在IBM 704上的程序花費8.4分鐘機器時間,自動證明了《數(shù)學原理》中的133條一階邏輯定理。1976年,阿佩爾(Kenneth Appel)與哈肯(Wolfgang Haken)完成四色定理的計算機輔助證明。在成就面前,一些科學家過于樂觀,H. A. Simon在1958年曾經(jīng)斷言不出10年計算機將在國際象棋比賽中擊敗人類。隨著一些斷言(吹牛)的破滅,批評之聲涌現(xiàn),國家(美國)層面縮減了研究經(jīng)費。人工智能的第一次低潮來臨了,這個階段大約從1974年到1980年。野火燒不盡,春風吹又生。人工智能的研究并沒有沉寂太久,第二次高潮很快又來了,這次高潮的代表事件是日本的第五代計算機計劃和專家系統(tǒng)的流行。上世紀70年代末,日本雄心勃勃地想從制造大國向經(jīng)濟強國轉型,日本的精英們想到的突破口也是人工智能。在日本的帶動下,美國、英國、法國、德國紛紛行動,制定出對應的計劃。于是,在各國政府的大力投入下,人工智能迎來了新的高潮。轉眼間到了上世紀80年代末,日本的第五代計算機進展緩慢,巨額的投入沒有換來與之相當?shù)氖找妗:蠊匀痪褪侨斯ぶ悄茉俅芜M入低潮,本世紀初隨著互聯(lián)網(wǎng)時代的到來,海量數(shù)據(jù)和高性能運算期間推動人工智能進入第三次高潮。 人工智能研究的領域很大,涉及甚廣,派別眾多。兩個最有影響力的派別是符號主義和連結主義。符號主義(Symbolism)的主要思想就是應用邏輯推理法則,從公理出發(fā)推演整個理論體系。前面提到的機器定理證明就屬于符號主義。連結主義(Connectionism)是一種基于生物神經(jīng)網(wǎng)絡機制與學習算法的智能模擬方法,其原理主要為模擬神經(jīng)網(wǎng)絡和神經(jīng)網(wǎng)絡間的連接機制,在此基礎上配置算法。這兩個派別自人工智能誕生之日起就存在,符號主義認為實現(xiàn)人工智能必須使用邏輯和符號系統(tǒng),這一派看問題的角度是自頂向下的;連結主義認為通過仿造大腦可以達到人工智能,這一派是自底向上的。連接主義認為如果能制造一臺機器,模擬大腦中的神經(jīng)網(wǎng)絡,這臺機器就有智能了。套用一個庸俗的哲學名詞,前者唯心,后者唯物。 人工智能的第三次高潮的核心是連結主義的深度學習網(wǎng)絡。深度學習需要兩個條件:大數(shù)據(jù)和大算力?;ヂ?lián)網(wǎng)的普及滿足了大數(shù)據(jù)的需求。集成電路的發(fā)展帶來了算力的巨大提升。 圖 2 人工智能簡史 二、機器學習簡介 機器學習,就是在不專門編程的基礎上讓計算機擁有學習的能力。機器學習是人工智能的一個重要的子領域。機器學習和深度學習主導了人工智能的第三次高潮。那么,機器學習是符號主義還是連接主義?都不是也都是。機器學習包含很多模型,其中有的偏符號,有的偏連接,還有的兩者都不是。下面每類介紹一種: 2.1決策樹 決策樹是一類常見的機器學習方法。機器學習中,決策樹是一個樹形結構,葉節(jié)點代表分類,非葉節(jié)點為決定分類的特征。下面看一個簡單的例子: 圖 3 決策樹示例 決策樹包含一個根節(jié)點、若干個內(nèi)部節(jié)點和若干個葉節(jié)點。葉節(jié)點對應決策結果,根節(jié)點和內(nèi)部節(jié)點對應特征測試。決策樹學習的目的是產(chǎn)生一棵泛化能力強,也就是處理未見數(shù)據(jù)能力強的決策樹。構造決策樹的過程就是從根向下逐級選擇屬性的過程,選擇的標準之一是信息論中的信息熵和信息增益。簡而言之,信息增益越大的屬性在決策樹中的層次越高。 決策樹的概念表達十分清晰,決策結果的可解釋性也非常好。決策樹可以被歸為符號主義。 2.2支持向量機 上世紀90年代中期,“統(tǒng)計學派”(Statistical Learning)閃亮登場并迅速占領主流,其代表性技術是支持向量機(Support Vector Machine, SVM)。下面以線性2類別分類問題簡要說明SVM的工作原理。 f(x) = wx + r 上式中的w是將正樣本和負樣本隔離開的超平面的法線,r為截距。 對于樣本xi對應的分類為yi,規(guī)定若分類為正樣本,則yi=1,反之yi=-1。選擇w和r的依據(jù)是令: (wxi+r)yi≥1 當存在滿足這樣的條件的w和r時,這樣的訓練樣本集就是線性可分的訓練樣本集。對于線性可分的訓練樣本集,可以把所有樣本都正確分類的解有無數(shù)多個。這就需要確定最優(yōu)解。下面該支持向量登場了。滿足wxi+r=1的向量為距離超平面最近的向量,它們被稱為支持向量。支持向量到超平面的距離為:1/|w|。最優(yōu)解就是令1/|w|最大。 圖 4 SVM示例 上面這個例子簡單展示了支持向量機的工作原理。除了線性分割外,支持向量機還支持其它的分割模型。支持向量機既不是符號派,也不是連接派,在深度學習大放異彩之前,支持向量機以其優(yōu)異的性能長期占據(jù)機器學習受關注的中心。 2.3深度學習 人工智能在上世紀80年代的光芒被后來的互聯(lián)網(wǎng)所掩蓋。但是進入新世紀,恰恰是互聯(lián)網(wǎng)產(chǎn)生的海量數(shù)據(jù)給了人工智能巨大的機會。近幾年,人工智能領域使用頻率最高的詞是深度學習。神經(jīng)網(wǎng)絡是由一層層的神經(jīng)元構成,層數(shù)越多,網(wǎng)絡越深。所謂深度學習就是用很多層神經(jīng)元構成的神經(jīng)網(wǎng)絡達到機器學習的功能。理論上說,如果一層網(wǎng)絡是一個函數(shù),多層網(wǎng)絡就是多個函數(shù)的嵌套。網(wǎng)絡越深,表達能力越強,與之而來的是訓練的復雜性也急劇加大。 本世紀初,連接主義卷土重來,掀起了“深度學習”的熱潮。在若干測試和競賽中,尤其是涉及語音和圖像等復雜對象,深度學習取得了卓越的成績。以往機器學習技術要取得優(yōu)越性能,需要使用者對應用領域具有深厚的了解。而深度學習不是這樣,只要使用者下功夫把深度學習模型的參數(shù)調整好,就能取得很好的性能。深度學習雖然缺乏嚴格的理論基礎,但是顯著地降低了使用者的專業(yè)門檻,為機器學習技術走向工程實踐帶來了便利。圖 5是一個深度學習網(wǎng)絡示例。 圖 5 深度學習網(wǎng)絡 三、現(xiàn)狀 目前,機器學習中的深度學習正處于發(fā)展的巔峰。深度學習在計算機視覺、語音識別、和自然語言處理上都有良好的表現(xiàn)。巔峰意味著風光無限備受關注,但也意味著今后要走下坡路了。 圖 6 Gartner技術趨勢 3.1 計算機視覺 計算機視覺的研究內(nèi)容涉及甚廣。目前主流的方法是基于深度學習的方法。自從2012年,AlexNet以巨大領先優(yōu)勢獲得ImageNet比賽中獲得第一名以后,研究人員開始思考是否能夠用深度學習方法來做圖像識別的任務。高性能計算器件 (CPU, GPU)的出現(xiàn)和大規(guī)模圖像數(shù)據(jù)集的出現(xiàn),加上研究人員對圖像識別問題的日益深刻的理解,基于深度學習的圖像識別算法將圖像識別精度提高到了一個新的臺階。 3.2 語音識別 語音識別是人工智能的一只圣杯。十年前,計算機的獨立的語音識別應用領域還很有限,比如機票預訂。2012年,一名來自多倫多大學的實習生在微軟研究院的一個夏季研究項目中,讓微軟的語音是別系統(tǒng)的性能得到了顯著的提升。2016年,微軟的一個團隊宣布,他們開發(fā)的一個擁有120層的深度學習網(wǎng)絡已經(jīng)在多人語音識別基準測試中達到了與人類相當?shù)乃健? 3.3 自然語言處理 深度學習快速改變格局的一個例子時它對語言翻譯的影響。語言翻譯是人工智能的一只圣杯,因為它涉及對句子的理解。傳統(tǒng)上,人工智能在演算和感知上都取得了突破,前者如下圍棋,后者如圖像識別。但是一旦涉及到理解,人工智能就難以突破。谷歌推出的基于深度學習的谷歌翻譯后,自然語言翻譯質量取得了重大飛躍。深度學習可以在整個句子中尋找詞匯之間的依賴關系。 人工智能檢測惡意代碼 人工智能領域所涉甚多,復雜而龐雜。同樣復雜而龐雜的是信息安全領域,它比人工智能還要難以說清楚。本文只談談信息安全中的一個小領域——惡意代碼檢測。 前面掛一漏萬地描述了人工智能的發(fā)展和現(xiàn)狀,這些成果和應用都和信息安全沒有什么聯(lián)系。因為,人工智能就像往池塘中投擲的一個石塊,最初的突破掀起的漣漪要經(jīng)過一段時間才會波及到其它的領域。目前為止,人工智能在信息安全領域沒有原創(chuàng)技術,都是從其它領域——主要是圖像、聲音、和自然語言處理——移植已有的成果。 利用已有的模型來處理現(xiàn)有的問題需要做什么工作呢?答案是需要將問題描述轉化為向量,然后讓已有的模型來處理這些向量。所以,本章的內(nèi)容就是形形**的“2vec”(to vector),即“向量化”。打個比方,現(xiàn)成的鞋子有很多雙,就看你的腳能不能塞進去了。 圖像法 信息安全領域并不是人工智能應用的重點領域。隨著人工智能的第三次高潮,深度學習和機器學習應用在信息安全領域是一個自然的趨勢。但是,怎么用呢?一個自然的想法就是將信息安全的問題轉化為一個現(xiàn)在已經(jīng)有完美解決方案的問題,比如將二進制程序文件轉化為圖像,然后用圖像識別方法對其進行分類和識別。這就是2011年加利福尼亞大學的學者Nataraj和Karthikeyan的論文“Malware Images: Visualization and Automatic Classification”的基本思想。這篇論文的思路非常新穎,在試驗中也展現(xiàn)了一定的效果。在后續(xù)的研究中,很多學者沿著這個思路發(fā)表了一些研究成果。這些論文顯現(xiàn)了惡意代碼的圖像模式并不固定。使用這種方法必須根據(jù)實際情況經(jīng)常進行調整。 源代碼檢測 如果讓人來分辨惡意軟件,閱讀源代碼無疑比閱讀反匯編后的CPU指令要容易。在任何領域運用機器學習和深度學習的第一步都是向量化,將輸入轉化為數(shù)字向量,然后機器學習和深度學習就可以處理數(shù)字向量了。對程序語言的向量化有兩種方式,一種可以被稱為主觀的向量化,由人定義一些條件,比如變量的平均長度,一行代碼的最長長度,函數(shù)的調用次數(shù)等。這種向量化的優(yōu)點是相對簡單,運算代價??;缺點是主觀性較大,不靈活,不能反應程序的實質。另一種可以被稱為客觀的向量化。思想是使用一些數(shù)學模型來計算出向量。相比前一種方法,它顯然更加客觀,缺點是相對計算成本大。 客觀的向量化所使用的數(shù)學模型主要來自自然語言處理的已有成果。自然語言處理領域用的比較多的向量化方法有:word2vec、CBOW、skip-gram。為了運用這些已有的成果,需要做的第一個工作是定義什么是“詞”。這就需要另一項已有的成熟技術了,它就是編譯器。編譯過程實際上分為若干階段。下面這張圖是gcc的各個編譯階段,其它的編譯器與之類似。 圖 7 gcc編譯階段 與真正的編譯的區(qū)別在于,此處只要得到抽象語法樹(Abstract Syntax Tree, AST)就已經(jīng)足夠運用自然語言處理的已有技術了。下面是由一段程序轉化而成的抽象語法樹: 圖 8 抽象語法樹示例 抽象語法樹中的節(jié)點標記某種語句或者表達式,節(jié)點的子節(jié)點表示語句或表達式的參數(shù)。一段程序語句會轉化為若干棵樹。 下面介紹2018年的一篇有趣的論文:code2vec: Learning Distributed Representations of Code。這篇論文的研究成果是在抽象語法樹的基礎上學習出一個函數(shù)的語義,進而“預測”函數(shù)的名字。研究用到了自然語言處理中的注意力模型。 圖 9 code2vec示例 目標代碼檢測 惡意軟件的另一種存在形式是二進制代碼形式,這是比源代碼方式更廣泛的存在形式。大部分這個領域的研究是將CPU指令當作“詞”,將一段關聯(lián)的指令當作“句子”。然后運用自然語言處理的成熟方法。如何定義關聯(lián),如何取詞,那就“八仙過海各顯神通”了。下面列出幾種處理方法: instruction2vec instruction2vec出現(xiàn)在2019年的一篇論文——“Investigating Graph Embedding Neural Networks with Unsupervised Features Extraction for Binary Analysis”——之中。其基本思想是從二進制代碼中提取出控制流圖,再將控制流圖轉化為向量。這項研究主要使用了自然語言處理中的attention模型和深度學習的循環(huán)神經(jīng)網(wǎng)絡(RNN)。 Structure2Vec Structure2Vec出現(xiàn)在2016年的一篇論文——“Discriminative Embeddings of Latent Variable Models for Structured Data”——之中。計算機程序中有大量的有結構的數(shù)據(jù)結構,比如樹、圖、數(shù)組。這篇論文的主要研究工作是向量化這些有結構的數(shù)據(jù)結構。 Asm2Vec Asm2Vec出現(xiàn)在2019年的一篇論文——“Asm2Vec: Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization”之中。其應用場景是對二進制代碼實施反匯編之后,對這些匯編語句向量化。其研究成果顯示,Asm2Vec可以識別代碼克隆、代碼同義改寫、以及代碼微調。在克服代碼優(yōu)化和代碼混淆帶來的識別困難上,Asm2Vec也有不俗表現(xiàn)。 問題與展望 如前所述,人工智能在信息安全領域還沒有孵化出全新的模型。目前取得的成果都是自圖像、聲音、和自然語音處理領域移植現(xiàn)有模型,再做適配性處理。但是信息安全領域有自己的一些特點。以惡意軟件識別為例,在現(xiàn)實中絕大多數(shù)的軟件是非惡意的,這個基本事實給機器學習的訓練和識別都帶來了巨大的挑戰(zhàn)。在圖像領域,互聯(lián)網(wǎng)巨頭可以利用海量數(shù)據(jù)提升了深度學習的準確性。在惡意軟件識別領域,這是無法達到的。相關廠商和研究機構很難拿到與圖像領域匹敵的數(shù)據(jù)。訓練如此,識別也是如此。如果現(xiàn)實世界中只有萬分之一的軟件是惡意軟件,那么如果你訓練的模型只是將1%的軟件識別為惡意軟件,那仍然意味著有100倍的誤差。 另一個棘手的問題是可解釋性。在圖像和聲音領域,這個問題還不算太突出。識別照片里有一匹馬只是結果,人不需要模型解釋什么是馬,馬頭在哪里,馬腿在哪里,馬尾巴在哪里。但是,在惡意軟件識別上,客戶就沒有這么寬容了。客戶想知道軟件的“惡意”到底在哪里。尤其是在把一個客戶開發(fā)的軟件識別成惡意軟件的時候。 在可預見的未來,人工智能在信息安全領域的應用還是移植其它領域的成果,運用信息安全領域的專業(yè)知識將信息安全問題向量化供已有模型使用是工作的重點。隨著機器學習研究和開發(fā)的日益成熟,未來機器學習在信息安全領域一定會有越來越多的成果涌現(xiàn)。 |