• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python的機(jī)器學(xué)習(xí)入侵檢測的研究

      2019-08-07 06:01:14龍華秋
      關(guān)鍵詞:百分比分類器錯(cuò)誤

      ◆孟 平 龍華秋

      (五邑大學(xué)智能制造學(xué)部 廣東 529020)

      如今互聯(lián)網(wǎng)的發(fā)展速度和規(guī)模的擴(kuò)張十分迅猛,IT技術(shù)、硬件產(chǎn)品和軟件產(chǎn)品的迭代更新非常迅速?;ヂ?lián)網(wǎng)+的時(shí)代,如此迅速的發(fā)展給我們的生活帶來了巨大的便利,同時(shí)也帶來了眾多的安全隱患。在大多數(shù)人眼中,互聯(lián)網(wǎng)上的安全問題,大多都是數(shù)據(jù)泄露,以及其他相關(guān)問題,這些問題影響的大多都是企業(yè),造成的損失也基本是經(jīng)濟(jì)上的損失。然而近年來發(fā)生的多起工業(yè)控制系統(tǒng)相關(guān)的安全問題,充分證明了攻擊者完全可以通過互聯(lián)網(wǎng)威脅到人們的現(xiàn)實(shí)生活,比如近期國外發(fā)生的工控系統(tǒng)入侵事件導(dǎo)致的他國全國范圍大部分地區(qū)停電的事件。當(dāng)下互聯(lián)網(wǎng)的安全問題,已經(jīng)被國家高中重視,網(wǎng)絡(luò)安全事關(guān)國家安全。

      利用機(jī)器學(xué)習(xí)中的監(jiān)督學(xué)習(xí)相關(guān)算法訓(xùn)練好的模型,在實(shí)際中應(yīng)用時(shí),可以快速對(duì)一個(gè)新提取的樣本做判斷,判斷其是否惡意。比以往通過特征碼等其他判斷方式,少了查詢“特征碼集合”和比對(duì)的操作,其判斷速度上要遠(yuǎn)快于傳統(tǒng)方式。良好的訓(xùn)練集和合適的算法及相應(yīng)的參數(shù),可使訓(xùn)練出來的模型具有很好的泛化性能。

      1 系統(tǒng)設(shè)計(jì)

      計(jì)算機(jī)網(wǎng)絡(luò)具有多層協(xié)議,在其七層模型(物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層)中,物理層和數(shù)據(jù)鏈路層太過底層,會(huì)話層、表示層和應(yīng)用層涉及的協(xié)議眾多不適合作為用于進(jìn)行判斷其是否惡意的基礎(chǔ)。在網(wǎng)絡(luò)層上可以開始不考慮具體的數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn),而傳輸層TCP和UDP協(xié)議是上層協(xié)議的基礎(chǔ)且僅為實(shí)現(xiàn)連續(xù)和離散的傳輸方式。因此在本次研究中,判斷流量是否惡意便是基于網(wǎng)絡(luò)層和傳輸層的數(shù)據(jù)報(bào)文。

      在整個(gè)機(jī)器學(xué)習(xí)入侵檢測中,我們需要有“流量探針”為我們捕獲流量,而捕獲的數(shù)據(jù)報(bào)文要經(jīng)過“特征提取”,提取的特征會(huì)組成一個(gè)“樣本”,樣本將會(huì)是我們直接用于訓(xùn)練模型和模型判斷的目標(biāo)。在本次研究中,由于服務(wù)器性能等問題,為了方便,我們直接使用KDD 99 比賽中提供的五百萬現(xiàn)成的樣本,作為訓(xùn)練模型和模型評(píng)估的數(shù)據(jù)集合。在整個(gè)系統(tǒng)中將分為三個(gè)部分:模型訓(xùn)練、樣本采集和模型判斷。

      圖1為系統(tǒng)流程圖。

      2 具體實(shí)現(xiàn)

      如流程圖中所示,整個(gè)系統(tǒng)中有三個(gè)部分相對(duì)獨(dú)立:模型訓(xùn)練、檢測判斷、樣本采集。本系統(tǒng)涉及機(jī)器學(xué)習(xí)的內(nèi)容,要保證模型訓(xùn)練、樣本采集和檢測判斷的部分的最終樣本的維度特征的一致性,才能保證模型的使用。因本課題中,對(duì)樣本的判斷可以看作是分類,即是否具有攻擊性和可能的攻擊類別,因此在機(jī)器學(xué)習(xí)模型算法的選擇上,我們將選擇分類器相關(guān)的算法。

      圖1 系統(tǒng)流程圖

      以下將對(duì)模型訓(xùn)練階段的內(nèi)容進(jìn)行講解:

      2.1 機(jī)器學(xué)習(xí)算法—邏輯斯諦回歸

      在本次研究課題中,我們采用的是機(jī)器學(xué)習(xí)中監(jiān)督學(xué)習(xí)的邏輯斯諦回歸算法(Logistic Regression)。需要注意的是,邏輯斯諦回歸算法并不是回歸模型相關(guān)的算法,而是用于分類的分類器算法。

      2.1.1 算法原理

      邏輯斯蒂回歸(Logistic Regression),是一種分類算法,其算法原理如下:

      不同類的x對(duì)應(yīng)z的值為0或者1,單位階躍函數(shù)由于函數(shù)性質(zhì)不可導(dǎo)不連續(xù),所以引入sigmoid函數(shù):

      圖2函數(shù)圖

      所以令:

      得到:

      化成對(duì)數(shù)形式:

      y/(1-y) 代表了樣本作為正例的可能性,1-y是反例。

      所以y=概率p(y=1|x)

      1-y=概率p(y=0|x)

      所以上式又可化為:

      解得:

      將這2個(gè)等式化成一個(gè)等式:

      對(duì)上式連乘,然后取對(duì)數(shù),進(jìn)行極大似然估計(jì):

      最大化上式相等于最小化:

      這是一個(gè)凸函數(shù),可以使用梯度下降或者牛頓迭代(割線法)來求最優(yōu)解。

      梯度下降的迭代式為:

      因?yàn)橐龈叩姆较?,所以?號(hào),代表梯度的正方向。

      2.1.2 邏輯斯蒂回歸——多分類擴(kuò)展

      邏輯斯蒂回歸是二分類器,本系統(tǒng)是多分類器,所以采用OVR的方式將二分類器的方式擴(kuò)展到多分類器,OVR訓(xùn)練多個(gè)分類器,每一個(gè)分類器將某一類別的視為正樣本,其他視為負(fù)樣本,訓(xùn)練出n個(gè)后,然后輸出每個(gè)樣本對(duì)應(yīng)每個(gè)類別的概率,取最大的概率作為最終的輸出結(jié)果。

      2.2 特征工程

      為了方便,我們?cè)谀P陀?xùn)練階段直接使用了KDD 99比賽的數(shù)據(jù)集,以縮減前期數(shù)據(jù)采集的時(shí)間。該數(shù)據(jù)集采集自美國軍方網(wǎng)絡(luò),其樣本的特征基于計(jì)算機(jī)網(wǎng)絡(luò)的網(wǎng)絡(luò)層和傳輸層的,但在其提供的特征上做了適當(dāng)?shù)倪x擇和特征的向量化,使其更加適用于本課題的研究。

      具體特征內(nèi)容如下:

      (1)duration:TCP以3次握手建立到FIN/ACK連接結(jié)束為止的時(shí)間;

      (2)protocol type:協(xié)議類型;

      (3)Service:網(wǎng)絡(luò)服務(wù)類型;

      (4)flag:連接正常或錯(cuò)誤;

      (5)src_bytes:源主機(jī)到目標(biāo)主機(jī)數(shù)據(jù)字節(jié)數(shù);

      (6)dst_bytes:目標(biāo)主機(jī)到源主機(jī)數(shù)據(jù)字節(jié)數(shù);

      (7)land:若連接來自或送達(dá)同一個(gè)主機(jī)則為1,否則為0;

      (8)wrong_fragment:錯(cuò)誤分段數(shù)量;

      (9)urgent:加急包個(gè)數(shù);

      (10)count:與當(dāng)前連接具有相同的目標(biāo)主機(jī)的連接數(shù);

      (11)srv_count:與當(dāng)前連接具有相同服務(wù)的連接數(shù);

      (12)serror_rate:在與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接中,出現(xiàn)“SYN”錯(cuò)誤的連接的百分比;

      (13)srv_serror_rate:在與當(dāng)前連接具有相同服務(wù)的連接中,出現(xiàn)“SYN”錯(cuò)誤的連接的百分比;

      (14)rerror_rate:在與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接中,出現(xiàn)“REJ”錯(cuò)誤的連接的百分比;

      (15)srv_rerror_rate:在與當(dāng)前連接具有相同服務(wù)的連接中,出現(xiàn)“REJ”錯(cuò)誤的連接的百分比;

      (16)same_srv_rate:在與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接中,與當(dāng)前連接具有相同服務(wù)的連接的百分比;

      (17)diff_srv_rate:在與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接中,與當(dāng)前連接具有不同服務(wù)的連接的百分比;

      (18)srv_diff_host_rate:在與當(dāng)前連接具有相同服務(wù)的連接中,與當(dāng)前連接具有不同目標(biāo)主機(jī)的連接的百分比;

      (19)dst_host_count:與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接數(shù);

      (20)dst_host_srv_count:與當(dāng)前連接具有相同目標(biāo)主機(jī)相同服務(wù)的連接數(shù);

      (21)dst_host_same_srv_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)相同服務(wù)的連接所占的百分比;

      (22)dst_host_diff_srv_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)不同服務(wù)的連接所占的百分比;

      (23)dst_host_same_src_port_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)相同源端口的連接所占的百分比;

      (24)dst_host_srv_diff_host_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)相同服務(wù)的連接中,與當(dāng)前連接具有不同源主機(jī)的連接所占的百分比;

      (25)dst_host_serror_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接中,出現(xiàn)SYN錯(cuò)誤的連接所占的百分比;

      (26)dst_host_srv_serror_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)相同服務(wù)的連接中,出現(xiàn)SYN錯(cuò)誤的連接所占的百分比;

      (27)dst_host_rerror_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)的連接中,出現(xiàn)REJ錯(cuò)誤的連接所占的百分比;

      (28)dst_host_srv_rerror_rate:與當(dāng)前連接具有相同目標(biāo)主機(jī)相同服務(wù)的連接中,出現(xiàn)REJ錯(cuò)誤的連接所占的百分比。

      2.3 模型訓(xùn)練代碼

      def ReadData(path):

      data=open(path).readlines()

      data=np.array([i.split(',') for i in data])

      data[:, -1]= [i.replace(' ', '').replace('.', '') for i in data[:, -1]]

      data_r=np.zeros(shape=data.shape)

      data_r[:,0]=[float(i) for i in data[:,0]]

      for i in range(4,40):

      data_r[:, i]= [float(j) for j in data[:, i]]

      protocol_type={k:i for i,k in enumerate(set(data[:,1]))}

      service={k:i for i,k in enumerate(set(data[:,2]))}

      flag={k:i for i,k in enumerate(set(data[:,3]))}

      label={k:i for i,k in enumerate(set(data[:,-1]))}

      print(protocol_type)

      print(service)

      print(flag)

      print(label)

      data_r[:, 1]= [protocol_type[j]for j in data[:, 1]]

      data_r[:, 2]= [service[j]for j in data[:, 2]]

      data_r[:, 3]= [flag[j]for j in data[:, 3]]

      data_r[:, -1]= [label[j]for j in data[:, -1]]

      data_r=np.c_[data_r[:,0:9],data_r[:,22:42]]

      weight={}

      for j in range(len(label)):

      weight[j]=len(data)-len([i for i in data_r if i[-1]==j])

      return data_r,weight

      def Classify(feature,weight):

      lr=LogisticRegression()

      X_train, X_test, y_train, y_test = train_test_split(feature[:,:-1],feature[:,-1], test_size = 0.3, random_state = 42)

      w=[weight[i]for i in y_train]

      d = [weight[i]for i in y_test]

      lr.fit(X_train,y_train,sample_weight=w)

      print(str(lr.score(X_test,y_test,sample_weight=d)))

      joblib.dump(lr, 'kdd99lr')

      def train():

      feature,weight=ReadData(r'kddcup.data.corrected')

      Classify(feature,weight)

      train()

      3 功能測試

      3.1 數(shù)據(jù)采集功能(見圖3)

      圖3 數(shù)據(jù)采集功能

      其中DONE表明該表明該樣本已經(jīng)過模型檢測判斷等處理。

      3.2 模型檢測

      圖4內(nèi)容為已訓(xùn)練好的模型對(duì)樣本采集器中樣本的檢測結(jié)果。

      圖4 檢測結(jié)果

      3.3 模型性能評(píng)估(見表1)

      表1 模型性能評(píng)估表

      phf 0.00 0.00 0.00 1 ipsweep 0.98 0.20 0.33 3709 smurf 1.00 1.00 1.00 842033 pod 0.00 0.00 0.00 72 rootkit 0.00 0.00 0.00 3 neptune 0.99 1.00 0.99 321807 warezmaster 0.00 0.00 0.00 5 multihop 0.00 0.00 0.00 1 nmap 0.88 0.09 0.17 733 teardrop 1.00 0.99 0.99 279 back 0.00 0.00 0.00 664 spy 0.00 0.00 0.00 1 ftp_write 0.00 0.00 0.00 4 loadmodule 0.00 0.00 0.00 3 land 0.50 0.20 0.29 10 buffer_overflow 0.00 0.00 0.00 10 warezclient 0.00 0.00 0.00 303 guess_passwd 0.00 0.00 0.00 13 portsweep 0.25 0.00 0.00 3079 Imap 0.00 0.00 0.00 1 perl 0.00 0.00 0.00 1 multihop 0.98 1.00 0.99 291976 Micro-avg 0.99 0.99 0.99 1469530 Macro-avg 0.33 0.23 0.25 1469530 Weighted-avg 0.99 0.99 0.99 1469530

      4 結(jié)束語

      本文詳細(xì)介紹了基于Python的機(jī)器學(xué)習(xí)入侵檢測系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。項(xiàng)目總共有三大功能需要實(shí)現(xiàn):模型訓(xùn)練、檢測判斷、樣本采集。在本項(xiàng)目中,我們直接使用KDD 99 比賽中提供的五百萬現(xiàn)成的樣本,作為訓(xùn)練模型和模型評(píng)估的數(shù)據(jù)集,使用邏輯斯蒂回歸算法對(duì)流量樣本進(jìn)行訓(xùn)練,從大量的流量數(shù)據(jù)集合中找到惡意樣本。通過在實(shí)際環(huán)境進(jìn)行的大量網(wǎng)絡(luò)流量測試,與流量樣本的測試,驗(yàn)證了該入侵檢測系統(tǒng)的實(shí)用性。

      猜你喜歡
      百分比分類器錯(cuò)誤
      在錯(cuò)誤中成長
      BP-GA光照分類器在車道線識(shí)別中的應(yīng)用
      電子測試(2018年1期)2018-04-18 11:52:35
      普通照明用自鎮(zhèn)流LED燈閃爍百分比測量不確定度分析
      電子制作(2017年20期)2017-04-26 06:57:46
      加權(quán)空-譜與最近鄰分類器相結(jié)合的高光譜圖像分類
      結(jié)合模糊(C+P)均值聚類和SP-V-支持向量機(jī)的TSK分類器
      肝癌患者外周血Treg、Th17百分比及IL-17水平觀察
      不犯同樣錯(cuò)誤
      基于LLE降維和BP_Adaboost分類器的GIS局部放電模式識(shí)別
      《錯(cuò)誤》:怎一個(gè)“美”字了得
      短篇小說(2014年11期)2014-02-27 08:32:41
      商貿(mào)投資最適宜國家和地區(qū)
      海外星云 (2012年24期)2012-04-29 00:30:09
      同仁县| 涟水县| 许昌县| 永清县| 萝北县| 阳春市| 搜索| 乌审旗| 衡阳市| 巴中市| 萍乡市| 永州市| 阿图什市| 蕲春县| 吉林省| 广丰县| 抚顺县| 盐山县| 揭西县| 芜湖市| 图木舒克市| 东乌珠穆沁旗| 武山县| 慈溪市| 望城县| 峨眉山市| 吴忠市| 化德县| 鹿泉市| 金山区| 蚌埠市| 密云县| 五台县| 楚雄市| 屏东县| 西畴县| 贡觉县| 泾阳县| 陈巴尔虎旗| 息烽县| 四子王旗|