在過去十年中,機器學習技術取得了快速進步,實現了以前從未想像過的自動化和預測能力。隨著這一技術的發展促使研究人員和工程師為這些美妙的技術構思新的應用。不久,機器學習技術被用於加強網絡安全系統。
網絡安全性最常見的風險就是入侵,例如暴力破解、拒絕服務,甚至是網絡內部的滲透。隨著網絡行為模式的變化,有必要切換到動態方法來檢測和防止此類入侵。許多研究都致力於這一領域。
我們需要可修改、可重複、可擴展的數據集來學習和處理,以便能夠輕鬆繞過基本入侵檢測系統(IDS)的複雜攻擊。這是機器學習能夠發揮作用的地方,我們將在本文學習可用於構建健壯的IDS的各種機器學習技術。
「巨大的」網絡攻擊擊敗了雅虎。這是CNN的一段摘錄,描述了有史以來的首次DoS(拒絕服務)攻擊。
像這樣的事件可能導致現代數字經濟中數百萬美元的損失。
確實存在入侵檢測系統(IDS)以防止上述情況的組織。他們監控網絡流量是否存在可疑活動,並在出現問題的時候發出警報。
入侵檢測系統可以使用不同類型的方法來檢測可疑活動。它可以大致分為:
IDS測不同地方的入侵。根據他們發現的地方,可以分為:
IDS也可以根據它的行為進行分類:
在列出IDS的一般限制之後,我們將討論使用機器學習的混合入侵系統。
幾次真正的攻擊遠遠少於虛假警報的數量,這導致真正的威脅經常被忽視。
噪聲會通過產生高誤報率嚴重降低IDS的能力。
基於籤名的IDS需要不斷的軟體更新才能跟上新威脅。
IDS監控整個網絡,因此容易受到網絡主機的相同攻擊。基於協議的攻擊可能導致IDS失敗。
網絡IDS只能檢測網絡異常,這些異常限制了它可以發現的各種攻擊。
所有入站和出站流量都通過它時,網絡IDS可能會產生瓶頸。
主機IDS依賴於審計日誌,任何攻擊修改審計日誌都會威脅到HIDS的完整性
在我們解決問題之前,有必要了解以下幾點:
機器學習是一個研究領域,它使計算機能夠從經驗中學習和改進。機器學習側重於開發可以使用數據發現特徵的程序。
學習過程從觀察或數據開始,以查找數據中的模式,並根據提供的示例做出更好的預測。主要目的是讓計算機在沒有人工協助的情況下學習,並相應的進行調整。
機器學習算法可大致分為:
監督機器學習算法:可以應用過去學到的東西來使用標記示例預測未來事件。算法分析稱為訓練數據集,用於生成推斷函數以對輸出值進行預測。經過充分的訓練,系統可以為新的輸入提供目標。該機器配備了一組新的示例,因此監督學習算法分析訓練數據並從標記數據產生正確的結果。
無監督機器學習算法:當用於訓練的信息既未標記也未分類時使用。無人值守學習研究系統如何推斷函數來描述未標記數據的隱藏結構。這裡的機器任務是根據模式,相似性和差異對未分類信息進行分組,而無需任何先前的訓練數據。設備受到限制,結構不反映。
半監督機器學習算法:利用未標記的數據進行訓練 - 混合使用標記較少的數據和大量未標記的數據。
半監督學習介於無監督學習和監督學習之間:當你沒有足夠的標籤數據來產生準確的模型,或者你缺乏獲得更多的半監督技術的能力/資源時,可以使用這些學習訓練數據的大小。
無監督學習算法可以「學習」網絡的典型模式,並且可以在沒有任何標記數據集的情況下報告異常。它可以檢測新類型的入侵,但很容易出現誤報警。因此,前面只討論了一種無監督算法K均值聚類。為了減少誤報,可以引入標記數據集,並教網絡中正常數據包和攻擊數據包之間的差異來構建受監督的機器學習模型。受監督的模型可以靈活的處理已知的攻擊,並且還可以識別這些攻擊的變化。將討論標準監督算法(貝葉斯網絡、隨機森林、隨機樹、MLP、決策表)。
數據集
開始使用機器學習模型的最重要和繁瑣的過程是獲得可靠的數據。我們使用KDD Cup 1999數據來構建能夠區分入侵或攻擊以及有價值的連接的預測模型。該資料庫包含一組標準數據,其中包括在軍事網絡環境中模擬的各種幹預措施。它由4,898,431個實例和41個屬性組成。
每個連接都標記為正常或攻擊,只有一種特定的攻擊類型。每個連接記錄包含大約100個字節。
攻擊分為四大類:
DOS:拒絕服務
R2L:遠程計算機的未授權訪問
U2R:未經授權訪問本地root權限
探測:監視和另一次探測
每個組都有各種攻擊,共有21種類型的攻擊。
KDD集摘要
使用基於TCP/IP實現的任何連接收集的分類為必要信息的屬性也如下所示:
必須先處理數據,然後才能在機器學習算法中使用。這意味著必須選擇功能,有些元素很容易找到;其他人必須通過試驗和運行測試找到。使用數據集的所有功能並不一定能保證IDS的最佳性能。它可能會增加計算成本以及系統的錯誤率。這是因為某些功能是冗餘的,或者對於區分不同的類沒有用。
該數據集的主要貢獻是引入專家建議屬性,有助於理解不同類型攻擊的行為,包括檢測DOS、PROBE、R2L和U2R的基本特徵。以下是域知識建議的一些內容功能列表。
專家特色
其他幾個數據集也在這裡提及:
K-Means聚類
如上所述,K-Means聚類是一種無監督學習技術。它是最簡單和最流行的機器學習算法之一。它在數據中查找組,其中組的數量有變量K表示。算法根據數據集的特徵將數據點分配給K組之一。數據點基於特徵的相似性進行聚類。
貝葉斯網絡
貝葉斯網絡是一種概率圖形模型。它旨在通過在有向圖的邊緣上繪製依賴關係來利用條件依賴性。它假設所有未通過邊連接的節點都是有條件獨立的,並在創建有向非循環圖時利用這一事實。
隨機森林分類器
隨機森林是一個集合分類器,這意味著它結合了許多算法用於分類目的。它們在隨機數據子集上創建多個決策樹。然後匯總每棵樹的總票數以決定測試的類別,或者它為各個樹的貢獻分配權重。
多層感知器(MLP)
MLP是前饋神經網絡。它至少包含三層:輸入層、隱藏層和輸出層。在訓練期間,調整權重或參數以最小化分類中的誤差。在每個隱藏節點中引入非線性。反向傳播用於相對於誤差進行那些權重和偏差調整。
將使用Python及其廣泛的庫來使用IDS。在我們開始申請之前,需要安裝Pandas、numpy、scipy。如果你使用的是Ubuntu shell,請使用
1sudo pip install numpy scipy pandas
首先需要對數據集進行預處理。需要下載數據集,並將其解壓縮到你將編寫程序的文件夾中。
數據集應採用.csv格式,python可以輕鬆讀取。
1# Import pandas
2import pandas as pd
3# reading csv file
4dataset = pd.read_csv("filename.csv")
前面提到的機器學習算法都存在於奇妙的scipy庫中。你可以按照以下步驟通過不同的模型快速運行數據集:
K-MEANS
1import numpy as np
2from sklearn.cluster import KMeans
3print(dataset.describe())
4kmeans = KMeans(n_clusters=2)
5kmeans.fit(X)
6prediction = kmeans.predict(dataset[0])
隨機森林
1
2from sklearn.ensemble import RandomForestClassifier
3
4clf=RandomForestClassifier(n_estimators=50)
5
6clf.fit(dataset,dataset[:,LAST_COLUMN])
7pred=clf.predict(dataset)
NAIVE BAYES NETWORK
1from sklearn.naive_bayes import GaussianNB
2
3gnb = GaussianNB()
4gnb.fit(dataset,dataset[:,LAST_COLMN])
5pred=predict(gnb,dataset[0])
MULTI_LAYER PERCEPTRON
1From sklearn.neural_network import MLPClassifier
2
3clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
4hidden_layer_sizes=(5, 2), random_state=1)
5clf.fit(dataset,dataset[:,LAST_COLMN])
6pred=clf.predict(dataset[0]);
為了衡量機器學習模型的準確性,我們使用各種參數。此處使用的指標包括平均準確度、誤報率和誤差率。K-Means被排除在該度量之外,因為它是無監督算法。
平均準確度定義為正確分類的數據點與數據點總數的比率。
誤報是那些應該作為威脅返回的情況,但實際並不是。
下面給出了一些其他指標比較:
精確和真實的積極
精確度是感知威脅與總威脅的比率。
真正的積極因素是威脅並正確識別為威脅的數據包。
所有當前的IDS都在轉向機器學習技術,以應對不斷增加的網絡安全威脅。這不僅使入侵檢測過程自動化,而且還具有驚人的準確性。企業可以使用這些結果來定位攻擊源,阻止進一步的嘗試並優化其網絡。另一個重要的優勢是公司不必為特定的專有籤名付費以保護自己免受新攻擊。
IDS正在使用本文中討論的許多機器學習技術:
●K-means
●貝葉斯網絡
●隨機森林分類器
●多層感知器
不同的技術在各種指標中表現更好。IDS應根據要求提供最有效的解決方案。有一件事是肯定的,任何公司現在或在不久的將來都不會採用這些技術,這會危及數據或伺服器。建議保證安全,採用機器學習。
長按二維碼 ▲
訂閱「架構師小秘圈」公眾號
如有啟發,幫我點個在看,謝謝↓