去年以來,我們發(fā)現(xiàn)很多的音像公司開始接觸機器學(xué)習(xí)和人工智能,希望能找到一條快速有效的途徑來分析并隔離新型的惡意軟件,同時,擴大惡意軟件庫。然而,事實上這里存在一個很大的問題就是很多人把機器學(xué)習(xí)當(dāng)成了無所不能的魔術(shù)棒——他們開始用機器學(xué)習(xí)的時候,只是把盡量多的樣例交給算法去計算,就算完成了,而事實上這樣做不完全正確。
0×00 簡介
Deepviz是一款強大的惡意軟件自動分析平臺,也是一個強大有效的智能威脅情報平臺,除此之外它還能夠?qū)λ杏蓯阂廛浖治鰞x中提取的數(shù)據(jù)進(jìn)行分析,通過關(guān)聯(lián)算法做出最好的抉擇。
機器學(xué)習(xí)是Deepviz用到的關(guān)鍵技術(shù),它能夠識別新型惡意軟件,還能找到相似的樣品進(jìn)行關(guān)聯(lián),并擴大的惡意軟件庫。但實際上,執(zhí)行一個有效的機器學(xué)習(xí)算法并不像大多數(shù)人想象的那么簡單——并不是“給智能機器盡量多的詳細(xì)的信息,它就會自己找到訣竅”。
接下來我們一步步的探索機器學(xué)習(xí)的原理。
0×01.聚類算法
聚類分析是一種統(tǒng)計分析技術(shù),目的在于從給定的數(shù)據(jù)集合中識別出重要的群組。我們可以通過已有的惡意軟件群組發(fā)現(xiàn)與之相似的新型惡意軟件或者與這個群組具有相同特征的樣例。為了給一個數(shù)據(jù)集合分組,我們需要一個表達(dá)式來描述數(shù)據(jù)集合中每個元素間的相似性。
每一個元素用一個特征集合描述,這個特征集合的屬性在某些方面對這個元素非常重要。設(shè)計特征集合的時候,有兩個要點需要考慮到:
第一,要明白如何選擇屬性。正如上面所說,很多人以為聚類分析就應(yīng)該讓分析程序提取數(shù)百萬屬性進(jìn)行計算,卻忽略了一點:被考慮進(jìn)來的屬性越多,計算的時間也會越多,而且,有些屬性并不能用于準(zhǔn)確區(qū)分出惡意軟件。例如,用PE文件的唯一熵屬性做為特征集合將會導(dǎo)致錯誤的聚類化。不過無論如何,我們需要找到足夠多的屬性可以讓我們將一些具有特殊行為的惡意軟件分成幾個不同的惡意軟件群組。所以我們要提取的屬性是對惡意軟件分析有意義的屬性, 這也是Deepvid惡意軟件分析器最大的組成部分。
第二,找到最合適的量度來驗證并且對比惡意軟件的屬性。每個惡意軟件都可以被描述成數(shù)值性質(zhì)的屬性(例如:信息熵)或者抽象性質(zhì)的屬性。在數(shù)學(xué)上,相似度度量就是用來描述兩個對象的相似程度。歐式距離就是其中一種被廣為人知的用于比較數(shù)值型屬性相似度的方法。那么,抽象型數(shù)據(jù)的相似性該如何度量呢?Deepviz中給出了兩個惡意軟件以及與之相關(guān)的IPs和URLs,我們該如何比較這兩個集合呢?怎樣把他們進(jìn)行聚合?
舉個例子說明,如下圖片展示的是所有訪問過網(wǎng)站complifies.ru的軟件的MD5聚合:
我們的聚類算法把樣本分成4個不同的群組,上圖是整個聚合過程的最后一步截圖。
要想得到相似集合,我們需要知道每個元素和其他元素之間在哪些方面相似,或者說哪些方面不同。這些值可以通過距離矩陣表現(xiàn)出來。
基于此,我們需要得到的東西是:
1.選擇一個特征集合,該集合由一個或者多個屬性組成,通過該集合可以將原始數(shù)據(jù)集合中的元素進(jìn)行分類。
2.選擇一個計算距離的算法,通過該算法可以計算各個元素間的距離。
然后,我們需要做的步驟是:
3.比較一個元素與該元素本身的距離,以及該元素與數(shù)據(jù)集合中其他元素的距離
4.用一個聚類算法來把相似的元素聚合。在我們的例子中,我們聚合的是惡意軟件群組
元素間的相似度
歐式距離被大量的運用在計算數(shù)字型的元素之間的距離。在這里,我將介紹的是另一種計算距離的方法—杰卡德距離(Jaccard distance),作為抽象型數(shù)值的度量。
先給一個例子,以下是兩個樣本以及與他們有關(guān)的URLs列表,計算出集合中每個元素與該樣本的相似度,具體結(jié)果如下
樣本
26414a9d627606c4974d8c3f372b0797 和 27f72541c93e206dcd5b2d4171e66f9a:如下:
具體結(jié)果頁面:
https://intel.deepviz.com/hash/26414a9d627606c4974d8c3f372b0797/
https://intel.deepviz.com/hash/27f72541c93e206dcd5b2d4171e66f9a/
杰卡德相似度用于比較抽象數(shù)據(jù)點之間的相似程度,是最廣泛使用的相似度算法。該算法被定義為兩個結(jié)合交集的元素個數(shù)占并集的比重。如果兩個集合沒有重復(fù)的元素,那么杰卡德相似度就是0。如果兩個集合所有元素都一樣,杰卡德相似度就是1,杰卡德相似度的計算公式如下:
思考一下下面的題目:
1.集合A由19個元素組成
2.集合B由12個元素組成
3.兩個集合相交的元素總共有4個
通過杰卡德公式可以推算出兩個集合的相似度是0.15 因此上面的公式同樣可以變形用距離計算的公式,如下:
distance = 1 – similarity
如果我們計算所有樣本間的杰卡德距離,就能得出以下的距離矩陣:
如圖,集合A與B的距離是0.15,A與C的距離是0.8等等。元素和他本身的距離是0,對稱的,A與B的之間的距離和B與A之間的距離是一樣的,是以對角線對稱的。為了優(yōu)化矩陣的計算時間,我們可以使用這個對稱的性質(zhì)只計算一半的矩陣。
矩陣計算完后,就能把這個距離矩陣輸入到聚類算法中進(jìn)一步計算。從這里我們可以看出,從數(shù)據(jù)中提取的屬性越有效,接下來的聚類算法聚合出的結(jié)果也將越準(zhǔn)確。
聚類算法(DBSCAN)
聚類算法通過元素間的距離對各個元素進(jìn)行分類。更簡單地說就是一個元素與其所在的集合的距離,這也包括特征集合中的元素。那么,我們?nèi)绾螌⑦@個算法運用到惡意軟件分析中呢?
DBSCAN(基于密度的聚類算法)是一個比較有代表性的基于密度的聚類算法,這個算法是在于將簇定義為密度相連的點的最大集合,把具有足夠高密度的區(qū)域劃分為簇,并可以在噪聲的空間數(shù)據(jù)庫中發(fā)現(xiàn)任意形狀的聚類
前面,我們已經(jīng)計算出了集合的距離矩陣,因此我們就可以知道每一個元素與任意一個其他元素的距離。
這個算法需要有兩個輸入:
1.最小密度(min_pts)
2.掃描半徑(eps)
如下圖所示:
1.密度:某個點為中心,半徑為eps的區(qū)域內(nèi)的點的個數(shù)稱為該點的密度。
2.核心點:以該點為中心,半徑eps的區(qū)域內(nèi)的點的個數(shù)大于最小包含點數(shù)(min_pts),則這個點稱為核心點,這些區(qū)域內(nèi)的點形成一個簇
3.邊界點:密度小魚最小包含點數(shù)(min_pts)的點稱為邊界點,有趣的是邊界點其鄰域內(nèi)包含至少一個核心點。
4.噪聲點:不屬于核心點或者邊界點的就是噪聲點
從以上的定義中可以知道,每一個形成的簇都至少包含有min_pts個點。 eps半徑的值設(shè)定的越高,簇的形成的限制就會越小。中等距離的樣例可能就會被劃分進(jìn)同一個簇,原來是噪聲的點可能變成邊界點(甚至是一個核心點)。所以說,Min_pts和eps的值在我們的惡意分析程序里面可能會做出一定的改變。
另一方面需要說明的是,一個噪聲點并非和簇一點關(guān)系都沒有,這依賴于我們是否想要找到新的變種或是替代已有的惡意軟件簇。
現(xiàn)在,我們再多舉幾個例子感受下。
在前面的例子中,我們已經(jīng)通過“URLs”作為特征屬性得到了元素間的距離,接下來我們通過IPs來做聚類。
從我們的網(wǎng)絡(luò)威脅感知記錄的頁面中,我們發(fā)現(xiàn)一個有趣的IP:1.234.83.146
通過我們的威脅感知系統(tǒng)的API,我們發(fā)現(xiàn)1.234.83.146這個IP與我們的353個樣例同時有關(guān)聯(lián)
第一步,我們用杰卡德距離算法計算所有所有樣例與IPs列表得到的距離矩陣,
杰卡德距離的值從0(表示兩個樣本具有相同的IPs列表)到1(表示兩個樣本毫無關(guān)系),然后我們通過DBSCAN算法計算出簇,其中半徑eps為0.5,最小密度min_pts設(shè)置成1,這意味著噪聲點也會變成一個簇。
需要說明的是,上圖并不是DBSCAN算法算出的結(jié)果,上圖只是距離矩陣在空間圖上的表述而已,矩陣圖需要進(jìn)一步計算才能得到簇。有圖明顯可以看出,DBSCAN劃分了兩個簇,其中簇的完整信息下載地址:https://deepvizblog.files.wordpress.com/2016/01/cluster1.docx
然后我們試著把參數(shù)的值改變下,看看結(jié)果:把半徑eps設(shè)置成0.1,最小密度min_pts設(shè)置成1
正如預(yù)料的那樣,DBSCAN算法劃分出了更多的簇
具體的信息下載地址:https://deepvizblog.files.wordpress.com/2016/01/cluster2.docx
以上只是一些很簡單的例子,但你可以通過聚類算法識別出更多新的樣本,無論是不是惡意軟件簇,只要能提取到正確的數(shù)據(jù),他就能幫你識別并孤立惡意軟件。
以下是我們威脅感知平臺得到的一些孤立樣本
Deepviz Threat Intel
290f3104a53cc5776d3ad8b562291680
4fa660009cba0b3401f71439b885e067
6368cc6d88c559bb27da31ef251a52a1
27bd99bf75491447fb3383d1f54f4e40
c7b19f8250b70ae5bd46590749bf9660
8f68c9a4a1769f57651a6a26b0ea2cf9