#前言
目前大量物聯網設備及雲服務端直接暴露於互聯網,這些設備和雲服務端存在的漏洞(如:心臟滴血、破殼等漏洞)一旦被利用,可導致設備被控、用戶隱私泄露、雲服務端數據被竊取等安全風險,甚至會對基礎通信網絡造成嚴重影響。爲了促進物聯網領域的安全研究,研究人員製作了UNSW-NB15數據集,這是一個基於物聯網的網絡流量數據集,對正常活動和惡意攻擊行爲進行了不同的分類。本文將基於該數據集,應用AI領域的典型技術,包括決策樹、隨機森林、邏輯迴歸、多層感知器等進行檢測,希望師傅們可以從中瞭解AI技術應用於安全領域的典型流程,包括數據預處理、數據轉換、交叉驗證等,同時提升對物聯網安全的新的認識。
#數據集
本次用到的數據集是UNSW-NB15,這是一個基於物聯網的網絡流量數據集,由新南威爾士大學堪培拉網絡靶場實驗室的 IXIA PerfectStorm工具創建,用於生成真實現代正常活動和合成當代攻擊行爲的混合數據集。 它們使用tcpdump 工具捕獲 100 GB 的原始流量(例如 Pcap 文件)。
該數據集有九種類型的攻擊,即 Fuzzers、Analysis、Backdoors、DoS、Exploits、Generic、Reconnaissance、Shellcode 和 Worms,當然爲了方便大家使用,已經做了整理,把特徵、標籤都統計到了csv文件裏。
如果希望詳細瞭解該數據集的信息的話,可以參考[2][3][4]論文
該數據集中的一部分被做爲訓練集和測試集,即 UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv。訓練集中的記錄數爲 175,341 條記錄,測試集中的記錄數爲 82,332 條記錄,分別來自不同攻擊類型、惡意和正常數據。
#數據預處理
導入所需庫文件
數據集中的數據包括9種攻擊類型,分別是Fuzzers, Analysis, Backdoors, DoS, Exploits, Generic, Reconnaissance, Shellcode和Worms。在csv文件最後的一列是標籤,0代表鄭,1代表攻擊
加載訓練數據UNSW_NB15_training.csv,檢查前5行
可以看到前5行的記錄都是正常的
加載數據後我們首先檢測是否存在缺失值
面對存在缺失值的情況,最簡單的方法就是直接啓用包含缺失值的整行和整列
然後看看數據是否平衡,一方面是看9種攻擊類型是否平滑(y1指代這方面的標籤),一方面是看正常和惡意的數據量是否平衡(y2指代這方面的標籤)
結果如下
可以看到數據集並不平滑,不過並不嚴重,我們繼續往下分析
本來是需要手動拆分訓練集和測試集的,不過UNSW_NB15已經拆分好了,比率爲7:3
訓練集和測試集分別在UNSW_NB15_training-set.csv 和 UNSW_NB15_testing-set.csv
如果需要手動拆分的話,使用下面的代碼就可以了
我們加載測試集供後續使用
#數據轉換
接下來需要轉換數據
首先需要確定哪些列是分類數據(categorical),哪些列是數值數據(numerical)(分類數據也叫qualitative data或是Yes/No data,是定性的,而數值數據是定量的)
分別將其打印
對於分類數據應用OneHotEncoder,將其編碼爲獨熱數值數組
對於數值數據應用StandardScaler,通過去除均值和縮放到單位方差來標準化
構造ColumnTransformer對象,在X_train上進行fit即可
每個transformer分別轉換x,將結果拼接起來
對測試集也進行同樣的處理
轉換後的數據不再是dataframe結構,而是類似於數組的結構
我們同樣還需要轉換y1,y1中一共有9類
我們直接用LabelEncoder就可以了,其用於規範化標籤,使處理對象僅包含0和類別數-1 之間的值
截止目前,數據部分已經處理完成了,接下來就是訓練模型了
#交叉驗證
我們訓練模型後,會使用5折交叉驗證(cross validation,CV)進行驗證,評估模型的指標包括準確率、準確率、召回率、F1 分數、ROC 的 AUC 值;然後使用測試集評估模型看看效果如何
我們以邏輯迴歸分類器爲例
查看交叉驗證結果
因爲是5折交叉驗證,所以每個指標都有5組數據,基本上我們會使用平均值來衡量校驗驗證的評估結果
比如打印出平均的準確率
#模型測試
在測試集上進行測試
結果如下
precision是精確率,也稱作查全率,等於tp/(tp+fp);這是針對我們預測結果而言的,它表示的是預測爲正的樣本中有多少是真正的正樣本
recall是查準率,也稱召回率,等於tp/(tp+fn);這是針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了
從計算公式可以看出,其實就是分母不同,一個分母是預測爲正的樣本數,另一個是原來樣本中所有的正樣本數
如果看單個指標都過於片面,可以通過f1分數來評估模型性能,f1是recall和precision的加權平均,在上面可以看到在0.64左右
#其他機器學習方法
在sklearn已經實現了很多機器學習模型,我們只需要一條代碼就可以換模型,除了邏輯迴歸之外,還可以試試決策樹和隨機森林
打印出模型的超參數
然後重複之前的步驟,來看看結果如何
可以看到,隨機森林的效果是相對而言比較好的
#多層感知器
以上三個分類器都屬於傳統的機器學習方法,那麼接着我們試試MLP,這是一種前向結構的神經網絡。
結果如下
把這四種分類器放在一起看看哪種效果更好
可以看到隨機森林的效果還是最好的。這也給我們一個提示,雖然現在深度學習、神經網絡
是AI的最火熱的技術,但是這並不意味着在所有任務上都是萬能的,它們更大的優勢是在處理海量數據、複雜任務上,對於一些基礎的任務,可能傳統的機器學習方法會有更好的效果。
相關實驗:機器學習之RF
#參考
1.https://www.unsw.adfa.edu.au/unsw-canberra-cyber/cybersecurity/ADFA-NB15-Datasets/
2.UNSW-NB15: a comprehensive data set for network intrusion detection systems (UNSW-NB15 network data set).
3.The evaluation of Network Anomaly Detection Systems: Statistical analysis of the UNSW-NB15 dataset and the comparison with the KDD99 dataset
4.Novel geometric area analysis technique for anomaly detection using trapezoidal area estimation on large-scale networks
5.http://www.caict.ac.cn/kxyj/qwfb/bps/201809/P020180919390470911802.pdf
6.《機器學習》