記錄本次實驗思路及流程,備忘用。python
我的學習總結,描述有誤差之處陸續更進。ios
針對傳統網絡入侵檢測系統存在的誤判以及漏檢狀況,採用數據挖掘的指導思想,經過大量的攻擊樣本數據進行知識發現,本次實驗採用的kdd99數據集,其中包含了大量的模擬攻擊行爲。算法
1998年美國國防部高級規劃署(DARPA)在MI T林肯實驗室進行了一項入侵檢測評估項目。林肯實驗
室創建了模擬美國空軍局域網的一個網絡環境,收集了9周時間的 TCPdump() 網絡鏈接和系統審計數
據,仿真各類用戶類型、各類不一樣的網絡流量和攻擊手段,使它就像一個真實的網絡環境。這些
TCPdump採集的原始數據被分爲兩個部分:7周時間的訓練數據 (*) 大概包含5,000,000多個網絡鏈接
記錄,剩下的2周時間的測試數據大概包含2,000,000個網絡鏈接記錄。 ——kdd數據集背景介紹sql
值得注意的是隨着互聯網的飛速發展,各類新的攻擊手段以及工具不斷涌現,而用這份98年生成的測試數據集來做基線檢測缺少必定的實效性,而今市面上也無任何組織或者團體公佈出新的檢測標準,學術上也一直沿用這份數據集合來度量入侵檢測算法的優劣。shell
本文檔採用的數據爲kdd99數據集,進行分析探索。數據集合說明參照kdd99數據集整理-by dcy。bash
具體分析方法能夠參照另一個文檔Weka快速入門-v1.0網絡
數據處理流程圖框架
參考論文《基於數據挖掘的入侵檢測模型研究_王超峯》的分析思路。論文將關聯規則挖掘算法和基於最小相異度的聚類算法應用於入侵檢測,從而設計了一個基於數據挖掘的入侵檢測模型,該模型的主要思想是:經過關聯規則挖掘算法創建誤用信息庫並進行誤用檢測,能快速的檢測出已知的入侵行爲,可是容易產生漏報,須要進行二次檢測;採用最小相異度的聚類算法創建聚類信息庫,並進行二次檢測,檢測出漏報的和未知的入侵行爲。 基於數據挖掘的入侵檢測模型的關鍵在於誤用信息庫和聚類信息庫的創建、更新、誤用檢測和聚類檢測幾個部分。模型框架以下圖所示:dom
因爲獲取到的kdd99數據集已經通過整理成結構話的數據,每條記錄包含41個特徵屬性以及一個分類標籤,一共42個字段使用逗號分隔符進行分割。ssh
示例數據以下所示
0,tcp,http,SF,181,5450,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,9,9,1.00,0.00,0.11,0.00,0.00,0.00,0.00,0.00,normal. 0,tcp,http,SF,239,486,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,19,19,1.00,0.00,0.05,0.00,0.00,0.00,0.00,0.00,normal.
將其轉化爲weka內置arff格式。其中有些屬性有所省略,這裏只作大概理解,詳細格式信息參見Weka學習總結-v1.0。
@relation attr @attribute duration numeric @attribute protocol_type {tcp,udp,icmp} @attribute service {http,smtp,finger,domain_u,auth,telnet,ftp,eco_i,ntp_u,ecr_i,other,private,pop_3,ftp_data,rje,time,mtp,link,remote_job,gopher,ssh,name,whois,domain,login,imap4,daytime,ctf,nntp,shell,IRC,nnsp,http_443,exec,printer,efs,courier,uucp,klogin,kshell,echo,discard,systat,supdup,iso_tsap,hostnames,csnet_ns,pop_2,sunrpc,uucp_path,netbios_ns,netbios_ssn,netbios_dgm,sql_net,vmnet,bgp,Z39_50,ldap,netstat,urh_i,X11,urp_i,pm_dump,tftp_u,tim_i,red_i} @attribute flag {SF,S1,REJ,S2,S0,S3,RSTO,RSTR,RSTOS0,OTH,SH} @attribute src_bytes numeric @attribute dst_bytes numeric ...... ...... @attribute dst_host_rerror_rate numeric @attribute dst_host_srv_rerror_rate numeric @attribute lable {normal.,buffer_overflow.,loadmodule.,perl.,neptune.,smurf.,guess_passwd.,pod.,teardrop.,portsweep.,ipsweep.,land.,ftp_write.,back.,imap.,satan.,phf.,nmap.,multihop.,warezmaster.,warezclient.,spy.,rootkit.} @data 0,tcp,http,SF,181,5450,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,1,0,0,9,9,1,0,0.11,0,0,0,0,0,normal. 0,tcp,http,SF,239,486,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,1,0,0,19,19,1,0,0.05,0,0,0,0,0,normal. 0,tcp,http,SF,235,1337,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0,0,0,0,1,0,0,29,29,1,0,0.03,0,0,0,0,0,normal.
特徵抽取
根據 Kayacik H G等人在Selecting features for intrusion detection這篇文章中所使用的信息增益的方法來選擇特徵,一方面減小冗餘特徵、另外一方面也能夠提升學習速度。
藉助開源軟件Weka,咱們能夠很容易的在數據集合上選擇出相應的和分類標籤最相關的特徵用來學習,因爲咱們直接採用kdd提供的10%小數據集合(近400w條鏈接記錄)做爲訓練集,沒有單獨提出測試集合,故採用10折交叉驗證的方式進行特徵選擇。
關聯分析模塊
生成關聯規則
十則交叉驗證整個數據集合獲得每一個特徵對於分類屬性的一個信息熵,咱們設定閾值爲0.5,選出大於0.5以上的特徵屬性進行降爲學習。
咱們發現剩下17個特徵以及一個類標籤:
下面進行關聯規則的生成。選擇Apriori算法,因爲該算法針對是離散型變量,故咱們須要再對數據進行離散化處理。完了以後調整Apriori算法相關參數導出關聯規則。
圖中的蘊含關係則爲推導出的強關聯規則。
生成關聯規則以後,進行誤用檢測的流程圖
聚類分析模塊
按照分類屬性,使用簡單聚類方式將數據集分紅4個聚類。
圖中勾出了四個中心點。獲得結果僅供演示使用,爲了提升速度只選取了1%的數據(49402條記錄)。不能表明全局,要定義的中心點的個數也能夠另外指定,不斷的實驗對比,從而肯定最優的個數。
使用分類的正確率來度量。
簡單採用分類樹進行模擬發現,在對通過提取特徵的數據進行分類訓練,這裏採用在原來的訓練集合上採用十折交叉驗證方式進行評估,分類正確率99.8% ,存在着過擬合現象,因爲缺少測試集合的類標籤,沒法進行模型的泛化能力(對原數據集合中未曾出現過的類別)檢測。整體說來,這些數據集通過很是精細的整理併除去了一些冗餘的信息,並且自己包含大量的攻擊行爲。這是分類正確率如此之高的緣由,具體應用的場景能達到一個怎麼樣的水平以及如何提升分類模型的準確率,還的通過真實數據的檢驗。
評估結果
混淆矩陣