行業(yè)動(dòng)態(tài)

機(jī)器學(xué)習(xí)與惡意代碼檢測

來源:聚銘網(wǎng)絡(luò)    發(fā)布時(shí)間:2020-01-12    瀏覽次數(shù):
 

信息來源:FreeBuf

、人工智能簡史

業(yè)界公認(rèn)人工智能的起源是1956年的達(dá)特茅斯會(huì)議。出席這次會(huì)議的有麥卡錫、明斯基、香農(nóng)、所羅門諾夫、紐厄爾、司馬賀、西蒙、撒繆爾、塞弗里奇、羅切斯特、和摩爾,可謂人才濟(jì)濟(jì)。正是在這次會(huì)議上首次出現(xiàn)了“人工智能”這個(gè)詞匯。

達(dá)特茅斯會(huì)議之后,人工智能就展開了跌宕起伏的發(fā)展歷程。人工智能的發(fā)展大致可以歸納為三次高潮和兩次低潮。第一次高潮大致是從1956年到1974年,這一時(shí)期取得突破的領(lǐng)域包括機(jī)器定理證明。普通人覺得數(shù)學(xué)定理證明很難,在馬路上騎自行車很容易。在人工智能領(lǐng)域恰恰相反。因?yàn)榍罢邔儆诜忾]系統(tǒng),條件確定,后者是開放系統(tǒng),存在大量的不確定因素。

1959年,華人學(xué)者王浩在IBM 704上的程序花費(fèi)8.4分鐘機(jī)器時(shí)間,自動(dòng)證明了《數(shù)學(xué)原理》中的133條一階邏輯定理。1976年,阿佩爾(Kenneth Appel)與哈肯(Wolfgang Haken)完成四色定理的計(jì)算機(jī)輔助證明。在成就面前,一些科學(xué)家過于樂觀,H. A. Simon在1958年曾經(jīng)斷言不出10年計(jì)算機(jī)將在國際象棋比賽中擊敗人類。隨著一些斷言(吹牛)的破滅,批評之聲涌現(xiàn),國家(美國)層面縮減了研究經(jīng)費(fèi)。人工智能的第一次低潮來臨了,這個(gè)階段大約從1974年到1980年。野火燒不盡,春風(fēng)吹又生。人工智能的研究并沒有沉寂太久,第二次高潮很快又來了,這次高潮的代表事件是日本的第五代計(jì)算機(jī)計(jì)劃和專家系統(tǒng)的流行。上世紀(jì)70年代末,日本雄心勃勃地想從制造大國向經(jīng)濟(jì)強(qiáng)國轉(zhuǎn)型,日本的精英們想到的突破口也是人工智能。在日本的帶動(dòng)下,美國、英國、法國、德國紛紛行動(dòng),制定出對應(yīng)的計(jì)劃。于是,在各國政府的大力投入下,人工智能迎來了新的高潮。轉(zhuǎn)眼間到了上世紀(jì)80年代末,日本的第五代計(jì)算機(jī)進(jìn)展緩慢,巨額的投入沒有換來與之相當(dāng)?shù)氖找妗:蠊匀痪褪侨斯ぶ悄茉俅芜M(jìn)入低潮,本世紀(jì)初隨著互聯(lián)網(wǎng)時(shí)代的到來,海量數(shù)據(jù)和高性能運(yùn)算期間推動(dòng)人工智能進(jìn)入第三次高潮。

人工智能研究的領(lǐng)域很大,涉及甚廣,派別眾多。兩個(gè)最有影響力的派別是符號主義和連結(jié)主義。符號主義(Symbolism)的主要思想就是應(yīng)用邏輯推理法則,從公理出發(fā)推演整個(gè)理論體系。前面提到的機(jī)器定理證明就屬于符號主義。連結(jié)主義(Connectionism)是一種基于生物神經(jīng)網(wǎng)絡(luò)機(jī)制與學(xué)習(xí)算法的智能模擬方法,其原理主要為模擬神經(jīng)網(wǎng)絡(luò)和神經(jīng)網(wǎng)絡(luò)間的連接機(jī)制,在此基礎(chǔ)上配置算法。這兩個(gè)派別自人工智能誕生之日起就存在,符號主義認(rèn)為實(shí)現(xiàn)人工智能必須使用邏輯和符號系統(tǒng),這一派看問題的角度是自頂向下的;連結(jié)主義認(rèn)為通過仿造大腦可以達(dá)到人工智能,這一派是自底向上的。連接主義認(rèn)為如果能制造一臺機(jī)器,模擬大腦中的神經(jīng)網(wǎng)絡(luò),這臺機(jī)器就有智能了。套用一個(gè)庸俗的哲學(xué)名詞,前者唯心,后者唯物。

人工智能的第三次高潮的核心是連結(jié)主義的深度學(xué)習(xí)網(wǎng)絡(luò)。深度學(xué)習(xí)需要兩個(gè)條件:大數(shù)據(jù)和大算力?;ヂ?lián)網(wǎng)的普及滿足了大數(shù)據(jù)的需求。集成電路的發(fā)展帶來了算力的巨大提升。

圖 2 人工智能簡史

二、機(jī)器學(xué)習(xí)簡介

機(jī)器學(xué)習(xí),就是在不專門編程的基礎(chǔ)上讓計(jì)算機(jī)擁有學(xué)習(xí)的能力。機(jī)器學(xué)習(xí)是人工智能的一個(gè)重要的子領(lǐng)域。機(jī)器學(xué)習(xí)和深度學(xué)習(xí)主導(dǎo)了人工智能的第三次高潮。那么,機(jī)器學(xué)習(xí)是符號主義還是連接主義?都不是也都是。機(jī)器學(xué)習(xí)包含很多模型,其中有的偏符號,有的偏連接,還有的兩者都不是。下面每類介紹一種:

2.1決策樹

決策樹是一類常見的機(jī)器學(xué)習(xí)方法。機(jī)器學(xué)習(xí)中,決策樹是一個(gè)樹形結(jié)構(gòu),葉節(jié)點(diǎn)代表分類,非葉節(jié)點(diǎn)為決定分類的特征。下面看一個(gè)簡單的例子:

圖 3 決策樹示例

決策樹包含一個(gè)根節(jié)點(diǎn)、若干個(gè)內(nèi)部節(jié)點(diǎn)和若干個(gè)葉節(jié)點(diǎn)。葉節(jié)點(diǎn)對應(yīng)決策結(jié)果,根節(jié)點(diǎn)和內(nèi)部節(jié)點(diǎn)對應(yīng)特征測試。決策樹學(xué)習(xí)的目的是產(chǎn)生一棵泛化能力強(qiáng),也就是處理未見數(shù)據(jù)能力強(qiáng)的決策樹。構(gòu)造決策樹的過程就是從根向下逐級選擇屬性的過程,選擇的標(biāo)準(zhǔn)之一是信息論中的信息熵和信息增益。簡而言之,信息增益越大的屬性在決策樹中的層次越高。

決策樹的概念表達(dá)十分清晰,決策結(jié)果的可解釋性也非常好。決策樹可以被歸為符號主義。

2.2支持向量機(jī)

上世紀(jì)90年代中期,“統(tǒng)計(jì)學(xué)派”(Statistical Learning)閃亮登場并迅速占領(lǐng)主流,其代表性技術(shù)是支持向量機(jī)(Support Vector Machine, SVM)。下面以線性2類別分類問題簡要說明SVM的工作原理。

f(x) = wx + r

上式中的w是將正樣本和負(fù)樣本隔離開的超平面的法線,r為截距。

對于樣本xi對應(yīng)的分類為yi,規(guī)定若分類為正樣本,則yi=1,反之yi=-1。選擇w和r的依據(jù)是令:

(wxi+r)yi≥1

當(dāng)存在滿足這樣的條件的w和r時(shí),這樣的訓(xùn)練樣本集就是線性可分的訓(xùn)練樣本集。對于線性可分的訓(xùn)練樣本集,可以把所有樣本都正確分類的解有無數(shù)多個(gè)。這就需要確定最優(yōu)解。下面該支持向量登場了。滿足wxi+r=1的向量為距離超平面最近的向量,它們被稱為支持向量。支持向量到超平面的距離為:1/|w|。最優(yōu)解就是令1/|w|最大。

圖 4 SVM示例

上面這個(gè)例子簡單展示了支持向量機(jī)的工作原理。除了線性分割外,支持向量機(jī)還支持其它的分割模型。支持向量機(jī)既不是符號派,也不是連接派,在深度學(xué)習(xí)大放異彩之前,支持向量機(jī)以其優(yōu)異的性能長期占據(jù)機(jī)器學(xué)習(xí)受關(guān)注的中心。

2.3深度學(xué)習(xí)

人工智能在上世紀(jì)80年代的光芒被后來的互聯(lián)網(wǎng)所掩蓋。但是進(jìn)入新世紀(jì),恰恰是互聯(lián)網(wǎng)產(chǎn)生的海量數(shù)據(jù)給了人工智能巨大的機(jī)會(huì)。近幾年,人工智能領(lǐng)域使用頻率最高的詞是深度學(xué)習(xí)。神經(jīng)網(wǎng)絡(luò)是由一層層的神經(jīng)元構(gòu)成,層數(shù)越多,網(wǎng)絡(luò)越深。所謂深度學(xué)習(xí)就是用很多層神經(jīng)元構(gòu)成的神經(jīng)網(wǎng)絡(luò)達(dá)到機(jī)器學(xué)習(xí)的功能。理論上說,如果一層網(wǎng)絡(luò)是一個(gè)函數(shù),多層網(wǎng)絡(luò)就是多個(gè)函數(shù)的嵌套。網(wǎng)絡(luò)越深,表達(dá)能力越強(qiáng),與之而來的是訓(xùn)練的復(fù)雜性也急劇加大。

本世紀(jì)初,連接主義卷土重來,掀起了“深度學(xué)習(xí)”的熱潮。在若干測試和競賽中,尤其是涉及語音和圖像等復(fù)雜對象,深度學(xué)習(xí)取得了卓越的成績。以往機(jī)器學(xué)習(xí)技術(shù)要取得優(yōu)越性能,需要使用者對應(yīng)用領(lǐng)域具有深厚的了解。而深度學(xué)習(xí)不是這樣,只要使用者下功夫把深度學(xué)習(xí)模型的參數(shù)調(diào)整好,就能取得很好的性能。深度學(xué)習(xí)雖然缺乏嚴(yán)格的理論基礎(chǔ),但是顯著地降低了使用者的專業(yè)門檻,為機(jī)器學(xué)習(xí)技術(shù)走向工程實(shí)踐帶來了便利。圖 5是一個(gè)深度學(xué)習(xí)網(wǎng)絡(luò)示例。

圖 5 深度學(xué)習(xí)網(wǎng)絡(luò)

三、現(xiàn)狀

目前,機(jī)器學(xué)習(xí)中的深度學(xué)習(xí)正處于發(fā)展的巔峰。深度學(xué)習(xí)在計(jì)算機(jī)視覺、語音識別、和自然語言處理上都有良好的表現(xiàn)。巔峰意味著風(fēng)光無限備受關(guān)注,但也意味著今后要走下坡路了。

圖 6 Gartner技術(shù)趨勢

3.1 計(jì)算機(jī)視覺

計(jì)算機(jī)視覺的研究內(nèi)容涉及甚廣。目前主流的方法是基于深度學(xué)習(xí)的方法。自從2012年,AlexNet以巨大領(lǐng)先優(yōu)勢獲得ImageNet比賽中獲得第一名以后,研究人員開始思考是否能夠用深度學(xué)習(xí)方法來做圖像識別的任務(wù)。高性能計(jì)算器件 (CPU, GPU)的出現(xiàn)和大規(guī)模圖像數(shù)據(jù)集的出現(xiàn),加上研究人員對圖像識別問題的日益深刻的理解,基于深度學(xué)習(xí)的圖像識別算法將圖像識別精度提高到了一個(gè)新的臺階。

3.2 語音識別

語音識別是人工智能的一只圣杯。十年前,計(jì)算機(jī)的獨(dú)立的語音識別應(yīng)用領(lǐng)域還很有限,比如機(jī)票預(yù)訂。2012年,一名來自多倫多大學(xué)的實(shí)習(xí)生在微軟研究院的一個(gè)夏季研究項(xiàng)目中,讓微軟的語音是別系統(tǒng)的性能得到了顯著的提升。2016年,微軟的一個(gè)團(tuán)隊(duì)宣布,他們開發(fā)的一個(gè)擁有120層的深度學(xué)習(xí)網(wǎng)絡(luò)已經(jīng)在多人語音識別基準(zhǔn)測試中達(dá)到了與人類相當(dāng)?shù)乃健?

3.3 自然語言處理

深度學(xué)習(xí)快速改變格局的一個(gè)例子時(shí)它對語言翻譯的影響。語言翻譯是人工智能的一只圣杯,因?yàn)樗婕皩渥拥睦斫?。傳統(tǒng)上,人工智能在演算和感知上都取得了突破,前者如下圍棋,后者如圖像識別。但是一旦涉及到理解,人工智能就難以突破。谷歌推出的基于深度學(xué)習(xí)的谷歌翻譯后,自然語言翻譯質(zhì)量取得了重大飛躍。深度學(xué)習(xí)可以在整個(gè)句子中尋找詞匯之間的依賴關(guān)系。

人工智能檢測惡意代碼

人工智能領(lǐng)域所涉甚多,復(fù)雜而龐雜。同樣復(fù)雜而龐雜的是信息安全領(lǐng)域,它比人工智能還要難以說清楚。本文只談?wù)勑畔踩械囊粋€(gè)小領(lǐng)域——惡意代碼檢測。

前面掛一漏萬地描述了人工智能的發(fā)展和現(xiàn)狀,這些成果和應(yīng)用都和信息安全沒有什么聯(lián)系。因?yàn)?,人工智能就像往池塘中投擲的一個(gè)石塊,最初的突破掀起的漣漪要經(jīng)過一段時(shí)間才會(huì)波及到其它的領(lǐng)域。目前為止,人工智能在信息安全領(lǐng)域沒有原創(chuàng)技術(shù),都是從其它領(lǐng)域——主要是圖像、聲音、和自然語言處理——移植已有的成果。

利用已有的模型來處理現(xiàn)有的問題需要做什么工作呢?答案是需要將問題描述轉(zhuǎn)化為向量,然后讓已有的模型來處理這些向量。所以,本章的內(nèi)容就是形形**的“2vec”(to vector),即“向量化”。打個(gè)比方,現(xiàn)成的鞋子有很多雙,就看你的腳能不能塞進(jìn)去了。

圖像法

信息安全領(lǐng)域并不是人工智能應(yīng)用的重點(diǎn)領(lǐng)域。隨著人工智能的第三次高潮,深度學(xué)習(xí)和機(jī)器學(xué)習(xí)應(yīng)用在信息安全領(lǐng)域是一個(gè)自然的趨勢。但是,怎么用呢?一個(gè)自然的想法就是將信息安全的問題轉(zhuǎn)化為一個(gè)現(xiàn)在已經(jīng)有完美解決方案的問題,比如將二進(jìn)制程序文件轉(zhuǎn)化為圖像,然后用圖像識別方法對其進(jìn)行分類和識別。這就是2011年加利福尼亞大學(xué)的學(xué)者Nataraj和Karthikeyan的論文“Malware Images: Visualization and Automatic Classification”的基本思想。這篇論文的思路非常新穎,在試驗(yàn)中也展現(xiàn)了一定的效果。在后續(xù)的研究中,很多學(xué)者沿著這個(gè)思路發(fā)表了一些研究成果。這些論文顯現(xiàn)了惡意代碼的圖像模式并不固定。使用這種方法必須根據(jù)實(shí)際情況經(jīng)常進(jìn)行調(diào)整。

源代碼檢測

如果讓人來分辨惡意軟件,閱讀源代碼無疑比閱讀反匯編后的CPU指令要容易。在任何領(lǐng)域運(yùn)用機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的第一步都是向量化,將輸入轉(zhuǎn)化為數(shù)字向量,然后機(jī)器學(xué)習(xí)和深度學(xué)習(xí)就可以處理數(shù)字向量了。對程序語言的向量化有兩種方式,一種可以被稱為主觀的向量化,由人定義一些條件,比如變量的平均長度,一行代碼的最長長度,函數(shù)的調(diào)用次數(shù)等。這種向量化的優(yōu)點(diǎn)是相對簡單,運(yùn)算代價(jià)??;缺點(diǎn)是主觀性較大,不靈活,不能反應(yīng)程序的實(shí)質(zhì)。另一種可以被稱為客觀的向量化。思想是使用一些數(shù)學(xué)模型來計(jì)算出向量。相比前一種方法,它顯然更加客觀,缺點(diǎn)是相對計(jì)算成本大。

客觀的向量化所使用的數(shù)學(xué)模型主要來自自然語言處理的已有成果。自然語言處理領(lǐng)域用的比較多的向量化方法有:word2vec、CBOW、skip-gram。為了運(yùn)用這些已有的成果,需要做的第一個(gè)工作是定義什么是“詞”。這就需要另一項(xiàng)已有的成熟技術(shù)了,它就是編譯器。編譯過程實(shí)際上分為若干階段。下面這張圖是gcc的各個(gè)編譯階段,其它的編譯器與之類似。

圖 7 gcc編譯階段

與真正的編譯的區(qū)別在于,此處只要得到抽象語法樹(Abstract Syntax Tree, AST)就已經(jīng)足夠運(yùn)用自然語言處理的已有技術(shù)了。下面是由一段程序轉(zhuǎn)化而成的抽象語法樹:

圖 8 抽象語法樹示例

抽象語法樹中的節(jié)點(diǎn)標(biāo)記某種語句或者表達(dá)式,節(jié)點(diǎn)的子節(jié)點(diǎn)表示語句或表達(dá)式的參數(shù)。一段程序語句會(huì)轉(zhuǎn)化為若干棵樹。

下面介紹2018年的一篇有趣的論文:code2vec: Learning Distributed Representations of Code。這篇論文的研究成果是在抽象語法樹的基礎(chǔ)上學(xué)習(xí)出一個(gè)函數(shù)的語義,進(jìn)而“預(yù)測”函數(shù)的名字。研究用到了自然語言處理中的注意力模型。

圖 9 code2vec示例

標(biāo)代碼檢測

惡意軟件的另一種存在形式是二進(jìn)制代碼形式,這是比源代碼方式更廣泛的存在形式。大部分這個(gè)領(lǐng)域的研究是將CPU指令當(dāng)作“詞”,將一段關(guān)聯(lián)的指令當(dāng)作“句子”。然后運(yùn)用自然語言處理的成熟方法。如何定義關(guān)聯(lián),如何取詞,那就“八仙過海各顯神通”了。下面列出幾種處理方法:

instruction2vec

instruction2vec出現(xiàn)在2019年的一篇論文——“Investigating Graph Embedding Neural Networks with Unsupervised Features Extraction for Binary Analysis”——之中。其基本思想是從二進(jìn)制代碼中提取出控制流圖,再將控制流圖轉(zhuǎn)化為向量。這項(xiàng)研究主要使用了自然語言處理中的attention模型和深度學(xué)習(xí)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)。

Structure2Vec

Structure2Vec出現(xiàn)在2016年的一篇論文——“Discriminative Embeddings of Latent Variable Models for Structured Data”——之中。計(jì)算機(jī)程序中有大量的有結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),比如樹、圖、數(shù)組。這篇論文的主要研究工作是向量化這些有結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。

Asm2Vec

Asm2Vec出現(xiàn)在2019年的一篇論文——“Asm2Vec: Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization”之中。其應(yīng)用場景是對二進(jìn)制代碼實(shí)施反匯編之后,對這些匯編語句向量化。其研究成果顯示,Asm2Vec可以識別代碼克隆、代碼同義改寫、以及代碼微調(diào)。在克服代碼優(yōu)化和代碼混淆帶來的識別困難上,Asm2Vec也有不俗表現(xiàn)。

問題與展望

如前所述,人工智能在信息安全領(lǐng)域還沒有孵化出全新的模型。目前取得的成果都是自圖像、聲音、和自然語音處理領(lǐng)域移植現(xiàn)有模型,再做適配性處理。但是信息安全領(lǐng)域有自己的一些特點(diǎn)。以惡意軟件識別為例,在現(xiàn)實(shí)中絕大多數(shù)的軟件是非惡意的,這個(gè)基本事實(shí)給機(jī)器學(xué)習(xí)的訓(xùn)練和識別都帶來了巨大的挑戰(zhàn)。在圖像領(lǐng)域,互聯(lián)網(wǎng)巨頭可以利用海量數(shù)據(jù)提升了深度學(xué)習(xí)的準(zhǔn)確性。在惡意軟件識別領(lǐng)域,這是無法達(dá)到的。相關(guān)廠商和研究機(jī)構(gòu)很難拿到與圖像領(lǐng)域匹敵的數(shù)據(jù)。訓(xùn)練如此,識別也是如此。如果現(xiàn)實(shí)世界中只有萬分之一的軟件是惡意軟件,那么如果你訓(xùn)練的模型只是將1%的軟件識別為惡意軟件,那仍然意味著有100倍的誤差。

另一個(gè)棘手的問題是可解釋性。在圖像和聲音領(lǐng)域,這個(gè)問題還不算太突出。識別照片里有一匹馬只是結(jié)果,人不需要模型解釋什么是馬,馬頭在哪里,馬腿在哪里,馬尾巴在哪里。但是,在惡意軟件識別上,客戶就沒有這么寬容了??蛻粝胫儡浖摹皭阂狻钡降自谀睦铩S绕涫窃诎岩粋€(gè)客戶開發(fā)的軟件識別成惡意軟件的時(shí)候。

在可預(yù)見的未來,人工智能在信息安全領(lǐng)域的應(yīng)用還是移植其它領(lǐng)域的成果,運(yùn)用信息安全領(lǐng)域的專業(yè)知識將信息安全問題向量化供已有模型使用是工作的重點(diǎn)。隨著機(jī)器學(xué)習(xí)研究和開發(fā)的日益成熟,未來機(jī)器學(xué)習(xí)在信息安全領(lǐng)域一定會(huì)有越來越多的成果涌現(xiàn)。

 
 

上一篇:20年前偷懶修復(fù)的千年蟲bug歸來 程序員:該來的總會(huì)來

下一篇:2020年01月12日 聚銘安全速遞