機(jī)器學(xué)習(xí)算法在IDS中的應(yīng)用
譯文【51CTO.com快譯】得益于近年來機(jī)器學(xué)習(xí)技術(shù)的飛速發(fā)展,人們正在將各種自動(dòng)化且具有擴(kuò)容預(yù)測(cè)能力的技術(shù),運(yùn)用到網(wǎng)絡(luò)安全系統(tǒng)的加固上。
眾所周知,網(wǎng)絡(luò)安全的最常見風(fēng)險(xiǎn)來自入侵,其中包括:蠻力破解、拒絕服務(wù)、網(wǎng)絡(luò)滲透等方面。而現(xiàn)如今,隨著網(wǎng)絡(luò)行為模式的改變,業(yè)界普遍認(rèn)為單憑靜態(tài)數(shù)據(jù)集的策略,是無法捕獲流量的具體組成、并予以攔截的。因此我們有必要采用一種動(dòng)態(tài)的方式,來檢測(cè)和防御各種入侵。
也就是說:我們需要可修改的、可重復(fù)且可擴(kuò)展的數(shù)據(jù)集,來學(xué)習(xí)和處理那些能夠輕松繞過傳統(tǒng)入侵檢測(cè)系統(tǒng)(IDS)的復(fù)雜攻擊源。下面,讓我們一起討論機(jī)器學(xué)習(xí)如何能夠在入侵檢測(cè)中發(fā)揮作用,以構(gòu)建出更為強(qiáng)大與健壯的IDS。
與IDS相關(guān)的機(jī)器學(xué)習(xí)相關(guān)概念
在機(jī)器學(xué)習(xí)的各種算法中,無監(jiān)督(Unsupervised)式學(xué)習(xí)算法可以從網(wǎng)絡(luò)中“學(xué)到”各種典型的模式,并且能夠在沒有任何已標(biāo)記數(shù)據(jù)集的情況下,報(bào)告異常情況。雖然它可以檢測(cè)出各種新型的入侵,但是很容易出現(xiàn)誤報(bào)(false positive alarms)的情況。因此,我們?cè)诖酥挥懻摕o監(jiān)督式的K-均值聚類算法。另外,為了減少誤報(bào),我們可以引入已標(biāo)記的數(shù)據(jù)集,并建立監(jiān)督式機(jī)器學(xué)習(xí)模型,進(jìn)而訓(xùn)練出網(wǎng)絡(luò)中正常數(shù)據(jù)包與攻擊流量之間的特征差異。此類監(jiān)督式的模型能夠熟練地處置各種已知攻擊,并且能夠識(shí)別出此類攻擊的變種。因此,我們下面會(huì)討論到的標(biāo)準(zhǔn)監(jiān)督式算法包括:貝葉斯網(wǎng)絡(luò)、隨機(jī)森林、隨機(jī)樹、MLP、以及決策表。
數(shù)據(jù)集
在機(jī)器學(xué)習(xí)模型的開始階段,最重要也是最繁瑣的過程便是獲得各種可靠的數(shù)據(jù)。在此,我們使用KDD Cup 1999的數(shù)據(jù),來建立預(yù)測(cè)模型,從而區(qū)分入侵類攻擊與真正有價(jià)值的流量連接。KDD Cup 1999是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)集,它包括了在軍事網(wǎng)絡(luò)環(huán)境中所模擬出的各種干預(yù)模型,由4898431個(gè)實(shí)例和41種屬性所組成。
它會(huì)跟蹤如下四種攻擊類型,每一個(gè)連接都會(huì)被標(biāo)記為正常、或是具有攻擊性。而且每一條連接記錄大約都是由100個(gè)字節(jié)所組成。
- 拒絕服務(wù):denial-of-service
- R2L:來自遠(yuǎn)程機(jī)器的未經(jīng)授權(quán)的訪問
- U2R:來自本地root特權(quán)的未經(jīng)授權(quán)的訪問
- 探測(cè):監(jiān)視并需要另一種檢查
如下表所示,每一種類型都包含了具體的攻擊形式,一共有21種。
KDD集合
如下表所示,我們總結(jié)出了任意一種基于TCP/IP協(xié)議的連接集的基礎(chǔ)分類特征:
數(shù)據(jù)在能夠被機(jī)器學(xué)習(xí)算法所使用之前,必須經(jīng)過被特征選擇等處理。有些元素特征很容易被發(fā)現(xiàn),而其他的特征則需要通過實(shí)驗(yàn)和測(cè)試才能被找到。當(dāng)然,由于某些特征是冗余的,而且將不同的類別予以區(qū)分可能意義不大,因此在IDS中使用數(shù)據(jù)集的所有特征并不一定能獲得最佳的性能,有時(shí)甚至?xí)黾酉到y(tǒng)的計(jì)算成本與錯(cuò)誤率。
此處,數(shù)據(jù)集的主要貢獻(xiàn)是通過引入專家建議的屬性,有助于系統(tǒng)理解不同類型的攻擊行為,包括上述提及的:檢測(cè)DoS、探測(cè)、R2L和U2R等基本特性。下表便是來自不同領(lǐng)域的知識(shí)庫(kù)所給出的內(nèi)容特征列表。
機(jī)器學(xué)習(xí)算法的簡(jiǎn)述
K-均值聚類(K-means clustering)
如前所述,K-均值聚類是一種無監(jiān)督式的學(xué)習(xí)技術(shù)。這是最簡(jiǎn)單、也是最流行的機(jī)器學(xué)習(xí)算法之一。它在數(shù)據(jù)中尋找不同的組,其中組的數(shù)量由變量K所表示。該算法基于數(shù)據(jù)集的特征,將不同的數(shù)據(jù)點(diǎn)分配給K中的一個(gè)組。基于不同的特征相似性,各個(gè)數(shù)據(jù)點(diǎn)會(huì)被采取聚類。
貝葉斯網(wǎng)絡(luò)(Bayes Network)
貝葉斯網(wǎng)絡(luò)是一種概率圖形模型。它的原理是通過繪制出有向圖形邊上的依賴關(guān)系,進(jìn)而充分利用到條件的依賴性。它假定所有沒有被邊緣所連接的節(jié)點(diǎn),都是具有條件獨(dú)立。而且它在創(chuàng)建有向無環(huán)圖時(shí),就利用到了該事實(shí)基礎(chǔ)。
隨機(jī)森林分類器(Random Forest Classifier)
隨機(jī)森林是一種集成式的分類器,它通過合并多種算法來實(shí)現(xiàn)分類。這些算法在數(shù)據(jù)的隨機(jī)子集上創(chuàng)建多個(gè)決策樹,然后通過聚合每棵樹的總票數(shù),來決定測(cè)試的類別。同時(shí),它也會(huì)給個(gè)別樹的貢獻(xiàn)程度分配權(quán)重值。
多層感知(MLP)
MLP是一種前饋式神經(jīng)網(wǎng)絡(luò)。它至少由三個(gè)層次所組成:輸入層、隱藏層和輸出層。在訓(xùn)練期間,我們可以通過調(diào)整各種權(quán)重或參數(shù),來最小化分類中的錯(cuò)誤。該算法在每個(gè)隱藏節(jié)點(diǎn)中引入了非線性(Non-linearity)。而反向傳播則是用來通過參照錯(cuò)誤,進(jìn)而調(diào)整權(quán)重與偏差。
實(shí)現(xiàn)
下面,我們將使用Python及其廣泛的庫(kù)來實(shí)現(xiàn)IDS。當(dāng)然,我們需要事先安裝好Pandas(基于Python的大型數(shù)據(jù)集分析庫(kù))、NumPy(Python的一種開源類數(shù)值計(jì)算擴(kuò)展)和Scipy(可用于數(shù)學(xué)、科學(xué)、工程領(lǐng)域的常用軟件包,常用于計(jì)算Numpy矩陣,能與Numpy協(xié)同工作)。如果您使用的是Ubuntu系統(tǒng),那么其對(duì)應(yīng)的shell命令應(yīng)該是:
- sudo pip install numpy scipy pandas
首先,我們需要對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理,也就是說:數(shù)據(jù)集需要被下載并提取到程序?qū)?yīng)的文件夾中。同時(shí),該數(shù)據(jù)集應(yīng)該是.csv格式,以方便Python的讀取。因此具體命令如下:
- # Import pandas
- import pandas as pd
- # reading csv
- file dataset = pd.read_csv("filename.csv")
前面提到的各種機(jī)器學(xué)習(xí)算法都應(yīng)當(dāng)被存放在“神奇”的Scipy庫(kù)中。通過以下步驟,您可以使用不同的模型,來快速運(yùn)行目標(biāo)數(shù)據(jù)集:
K-均值
- import numpy as np
- from sklearn.cluster
- import KMeans
- print(dataset.describe())
- # to view the summary of the dataset loaded
- kmeans = KMeans(n_clusters=2)
- # You want cluster the threats into 5: Normal, DOS,PROBE, R2L and U2R
- kmeans.fit(X)
- prediction = kmeans.predict(dataset[0])
- # predicts the type for the first entry
- 隨機(jī)森林
- #Import Random Forest Model
- from sklearn.ensemble
- import RandomForestClassifier
- #Create a Gaussian
- Classifier clf=RandomForestClassifier(n_estimators=50)
- #Train the model using the training
- dataset clf.fit(dataset,dataset[:,LAST_COLUMN])
- #LAST_COLUMN is the index of the column with the labelled type of threat or normal
- pred=clf.predict(dataset)
樸素貝葉斯網(wǎng)絡(luò)
- from sklearn.naive_bayes
- import GaussianNB
- #Create a Gaussian Naive Bayes Classifier
- gnb = GaussianNB()
- gnb.fit(dataset,dataset[:,LAST_COLMN])
- pred=predict(gnb,dataset[0])
多層感知
- From sklearn.neural_network
- import MLPClassifier
- #Create a Multi-Layer Perceptron
- clf = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1)
- clf.fit(dataset,dataset[:,LAST_COLMN])
- pred=clf.predict(dataset[0]);
結(jié)果
為了衡量機(jī)器學(xué)習(xí)模型的準(zhǔn)確性,我們會(huì)引入諸如:平均準(zhǔn)確度(Average Accuracy)、誤報(bào)率(False Positive Rates)和漏報(bào)率(False Negative Rates)等不同衡量維度的參考指標(biāo)。由于K-均值是一種無監(jiān)督式算法,因此它被排除在了該指標(biāo)之外。
如下面公式所示,平均準(zhǔn)確度定義為:被正確分類的數(shù)據(jù)點(diǎn)與數(shù)據(jù)點(diǎn)總數(shù)的比。
顯而易見,此處的“誤報(bào)”是指那些被判定為威脅,而實(shí)際上并非為如此的數(shù)據(jù)流量。同理,“漏報(bào)”是指那些確實(shí)為威脅,但未被IDS所查出并報(bào)告的流量。
另一些可以參考與度量的指標(biāo)還包括:精度和真陽性。其中:
- 精度是指發(fā)現(xiàn)的威脅與威脅總量的比率。
- 真陽性是指那些能夠被成功地識(shí)別為威脅包,與全部能被識(shí)別和判定的數(shù)據(jù)包的比率。
應(yīng)用的意義
從某種程度上說,當(dāng)前所有的IDS都應(yīng)該引入機(jī)器學(xué)習(xí)技術(shù),以應(yīng)對(duì)日益增加的網(wǎng)絡(luò)安全威脅。具備機(jī)器學(xué)習(xí)的IDS,能夠?qū)崿F(xiàn)細(xì)粒度、高精度的自動(dòng)化檢測(cè)。籍此,企業(yè)可以使用各種檢測(cè)結(jié)果來跟蹤攻擊源,阻止它們的進(jìn)一步滲透,并優(yōu)化自身的網(wǎng)絡(luò)。另外,用戶公司也不必再通過訂購(gòu)?fù){特征簽名,來被迫與新產(chǎn)生的攻擊進(jìn)行“時(shí)間賽跑”。當(dāng)然,在不同的應(yīng)用與檢測(cè)場(chǎng)景中,不同的機(jī)器學(xué)習(xí)算法會(huì)各有所長(zhǎng)。我們應(yīng)該根據(jù)網(wǎng)絡(luò)及用戶流量的特性,選用最適合自身環(huán)境的基于機(jī)器學(xué)習(xí)的IDS方案。
原文標(biāo)題:Evaluation of ML Algorithms for Intrusion Detection Systems,作者:Aman Juneja
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】