唐宇迪
摘要:在互聯網日益強大的今天,網絡安全問題已經尤為重要,如何能夠精準找到網絡中的攻擊行為具有重要的價值?;谠撃繕?,該文提出了基于HTTP流量數據的異常檢測模型,以隨機森林為核心算法,圍繞該算法提出了一種HTTP流量數據生成策略以及檢測方法。
關鍵詞:隨機森林;HTTP異常檢測;數據生成
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)05-0031-03
1 HTTP異常數據生成策略
對于HTTP流量數據的異常行為檢測,一個難點就在于如何定義正負樣本也就是正常的HTTP行為和異常的HTTP行為。現階段,普遍的做法是通過網絡異常檢測軟件來對每個有風險的IP點進行檢測,這種做法一方面并不能得出準確的結果另一方面也很難發現新的異常IP點?;谶@點,本文提出了一種是用數據生成策略并基于聚類結果的隨機森林檢測模型[1]。
1.1 問題提出
對于HTTP流量數據可以通過聚類算法得出一些離群點,對于這些離群點使用集成的方式可以得出不同類型的IP點,例如將離群點當做具有潛在異常行為的IP點,將非離群點當做正常的IP點,將部分聚類算法認為是離群點的當做疑似點。通過聚類算法雖然可以出來部分具有異常行為的IP點,但是從整體的量上來說,離群點只占了整個HTTP流量數據中很少的一部分。原始數據中可能還存在著大量具有異常行為的IP點[2]。
對于原始的HTTP日志數據來說,進行異常行為檢測的難點在于問題的本身是一個無監督的問題,沒有給定的標簽來指定什么樣的IP點是正常的,什么是異常的。這使得很難對提取的特征數據進行分類的算法,基于這點不得不選擇無監督的聚類算法。通過聚類算法得出了一些離群點,然后通過集成的方法將離群點分成3類,即異常點,疑似點,正常點。有了這些的基礎,對與異常行為檢測這個正負樣本分類問題,將原本無監督的樣本集分成了3個類別,即有較大可能是負樣本的異常點集合,有可能是負樣本的疑似點集合,正樣本則對應著正常點集合?;谶@種劃分規則,便可將原本的無監督的問題轉換成一個半監督問題[3]。
對于分類算法來說,一個重點就在于正負樣本的選擇,通過分析得知正樣本的數量很豐富,但是相對來說負樣本的數量卻遠遠不夠,由于聚類算法得出的異常點和疑似點數量都比較少,所以要進行分類算法首先需要對數據樣本就行增強。如何選擇一種合適的數據增強策略改善這種不均衡的數據分布成為分類準確性的關鍵所在。
分類算法第二個重點在于如何選擇合適的分類器,目前已經有很多種經典分類算法,由于數據本身的無監督性,以及由聚類分析的不同特征的重要程度具有明顯差別,這里需要綜合考慮這些因素選擇最合適的分類器[2]。
1.2 數據均衡問題解決
數據樣本是否均衡對最終的分類結果可能會產生很大的影響,對于服務器端IP點來說得到的異常點一共有20個,疑似點有724個,正常點有279025個。這是一個極不均衡的樣本分布。假設把異常點和疑似點都算作負樣本,那也僅僅只有760個樣本點,這遠遠不夠的。為了解決數據均衡問題,基于異常點和疑似點我對負樣本進行了隨機的生成,策略如下:
對于異常點,通過聚類集成方法的分析已經證明了它們的異常行為的可靠性,所以要充分利用這些異常IP點的特征數據進行更多負樣本的生成。由于每一個異常IP點的特征數據都具有7個特征,它們具有的異常行為,可能是這7個特征中一個或者某幾個發生了明顯的數值上的變換,基于這點,在生成新的異常特征數據時,對每一個異常點的7個特征都需要進行不同的變換,由異常點的特征數據發現,不同的異常IP點之間在7個特征上數據變化幅度較大,尤其表現在和連接數量相關的特征上,而與URI和COOKIE相關的特征的變化雖然趨于平緩,但整體仍具有浮動現象?;谶@點以及異常行為潛在的多變性。我選擇對特征數據進行隨機的變換,將每一個異常IP點的每一個特征的取值隨機映射到原始值的0.8-1.2倍之間,選擇這個區間是因為,為了保證生成的數據盡可能地具有異常行為所以只選擇了較小的變換范圍,目的是保留住這些異常行為的數據特征,對于不同的映射區間下節會有詳細的分析。并且保證7個特征都是隨機進行特征數據的生成在這個區間上。例如異常點106.39.178.1的原始數據如下:
由于這些異常點有著極大的可能伴隨著異常行為,而可利用的異常點的數量又非常少,所以這里我選擇對每一個異常點都按照這樣的規則隨機生成了100個負樣本。
對于疑似點,雖然這些點伴隨著的異常行為的可能性沒有異常點那么高,但是它們都是由聚類算法得出的離群點組成的。由離群點的特性可以得知,這些疑似點相比于正常點仍在某些特征上具有潛在的異常行為,并且疑似點的數量相比于異常點要多得多,這一方面可以很大程度豐富負樣本的多樣性不至于像異常點生成的負樣本的數據特征行為都很相似另一方面可以生成更多的負樣本。但是由于通過在聚類的分析得出的結果可知,這些疑似點存在異常行為的可能性要低于異常點。所以綜合考慮這些因素,在這里我對724個疑似點中的每一個樣本點按照同異常點生成的相同策略都隨機生成10個負樣本。
對于正常點,由于正樣本數量已經足夠,不需要對正樣本進行生成,通過上述生成策略已經生成了10840個負樣本,為了使正負樣本更均衡,對正樣本進行了隨機選取,取10840個正樣本作為分類算法的輸入。
通過這樣的生成策略,使得正負樣本的個數更均衡,而且保證了數據的量,變換后正負樣本分別有10840個特征數據。
2 基于HTTP異常檢測的隨機森林模型
對于分類算法來說有很多的分類器可供選擇,在這里我選擇隨機森林模型的原因在于隨機森林是一個用隨機方式建立的,包含多個決策樹的分類器。由于HTTP數據本身的無監督性以及在進行特征選擇時無法對特征進行準確的評估只能從聚類分析其對異常行為影響的重要性。這也存在著潛在的問題就是有的特征可能對其異常行為產生負面的影響即不利于分類算法,但是由于網絡異常行為的多樣性和數據本身的無監督性,很難去準確分辨哪些特征的價值更高哪些可能具有負面影響。由于使用了數據增強策略,很多特征數據可能表現出較大的相似性,尤其是由異常點生成的數據樣本?;谝陨洗嬖诘膯栴}選擇隨機森林模型的原因如下[4]:
1)隨機森林模型在構造時在每個節點上,隨機選取所有特征的一個子集,用來計算最佳分割方式。基于這點可以更全面的利用特征數據,使得即便某個特征可能存在負面的影響也不至于對分類結果產生較大的負面影響。
2)訓練每棵樹時,從全部訓練樣本(樣本數為N)中選取一個可能有重復的大小同樣為N的數據集進行訓練(即bootstrap取樣)。通過這樣選擇樣本的方式可以有效避免生成數據具有較大相似性的問題。
首先對生成的特征數據同樣進行歸一化處理,為了驗證隨機森林模型的可靠性,我對幾種經典的分類器如支持向量機,K近鄰,決策樹,Adaboosting,隨機森林5種分類算法在生成的數據集上選擇了同樣的訓練集和測試集,分別進行了默認參數的測試,即默認的參數都是基于樣本數量的大小給予的沒有進行任何的優化調節。從圖中可以看出來隨機森林的模型的效果要優于其他分類器的結果。這里的準確率的定義為:在生成的數據上進行的5倍交叉驗證的準確率。
對于隨機森林模型來說,對最終結果影響最大的就是建立樹的個數,當把樹的個數逐漸增多的時候自驗證的準確率也會發生小范圍提升,如上圖所示當樹的個數為10個時準確率為0.94,當樹的個數為100個的時候自驗證的準確率能平均得到0.98,再增加樹的個數,準確率基本保持不變。
另一個重要的影響因素就是輸入的特征數據,由于在進行負樣本生成的時候選擇了隨機生成的區間值,下面綜合分析一下該方案的優缺點。進行數據生成的原因在于對于本是無監督的HTTP日志數據很難使用分類算法進行快速的異常行為檢測,但是根據聚類算法論證可以找到極小一部分的負樣本,對于這部分負樣本在生成更多的數據的時候可能有不同的策略,選擇不同的變化幅度區間。對于特征數據來說,不同的特征變換的范圍有著很大的差別,比如連接數量可能出現上千倍的變換即便在同是異常的IP點之間,而對于URI和COOKIE參數來說變換范圍相對就小得多,這也符合實際的現象,考慮到這點,在下面的分析中,始終保持和URI,COOKIE相關的特征的變換范圍區間在0.8到1.2之間不變,而只改變和連接數量相關的特征。這樣做的意義在于如果選擇的生成區間在比較小的范圍內就會使得大量數據具有相似性,這樣做雖然在訓練集中可以得到較高的準確率,但是很有可能出現過擬合的現象使得在實際應用的效果欠佳。如果對生成的樣本區間進行放大,一方面可以使得數據之間的相似性大量降低也可以找出更多的潛在的異常行為,但是這樣就需要以犧牲一些準確率為代價。下圖為對負樣本生成區間進行放大后的準確率結果圖:
從上圖可以看出不同數據生成區間對最終隨機森林模型的自驗證準確率有著很大的影響,當數據生成區間在一個比較小的區間的時候,比如0.8到1.2時自驗證的準確率偏高,因為在這個區間上生成的樣本都和異常點具有很強的相似性,由于異常點和正常點之間的數值差異本身就比較大,所以此時分類的準確率偏高。但是這樣帶來的問題是,只有異常情況很明顯下才能被分類成具有異常行為的IP點。為了能找到更多的異常行為的IP點,可以稍微放大一下數據生成的區間,比如從0.8到0.5再到0.1,可以看出對特征數據的上限只增大到了1.5倍就不再繼續增大了,這是因為,對于負樣本來說,它們的特征數值的上限已經足夠大了相比正常的IP點來說,但是它們的下限卻要比正常點的上限還要高很多,所以在保證上限不變的情況下,適當增大下限的取值,可以讓隨機森林模型找到更多的潛在的具有異常行為的IP點。
3 特征重要性衡量
基于已經生成的隨機森林模型,一方面可以對新的特征數據進行是否具有異常行為的分類任務,另一方面也可以通過該模型度量每一個特征的重要程度。計算某一特征X流程如下:
1)對每一顆決策樹,選擇相應的袋外數據,因為我們在建立每一顆決策樹時都是隨機的進行有放回的選取也就是重復抽樣,所以最終大概仍有三分之一的樣本點沒有被抽取到對于每一顆決策樹來說。用這部分數據計算模型的錯誤率,記作為errOOB1.
2)隨機對袋外數據所有樣本的X特征加入噪聲干擾,一般來說簡單的做法就是隨機改變樣本數據在X特征處的值,經過這樣的變換后,再次計算模型的錯誤率,記作為errOOB2.
3)假設隨機森林中有N顆數,則特征X的重要性的計算公式為:
之所以用這樣的式子來表示特征的重要性,原因在于如果對樣本數據的X特征進行隨機改變后,袋外數據的準確率大幅下降,也就是意味著errOOB2會出現大幅上升的現象,那么就說明這個特征對最終的分類結果產生了比較大的影響,所以該特征的重要性也就比較大。對生成的數據進行特征重要性的衡量,結果如下圖所示:
從圖中可以看出,不同的特征具有的重要程度具有很大幅度的變化在隨機森林模型中,其中單位小時最大請求個數這個特征具有最大的重要程度,而和uri,cookie相關的特征重要程度相對較小。這些特征重要程度上也可以得知,一般的網絡異常行為主要集中體現在請求的量上,與該指標相關的量會對最終一個IP點是否具有異常行為有著更大的權重。
參考文獻:
[1] Shi, Lin.Abnormal organization of white matter network inpatients with no dementia after ischemic stroke[C]. PloS one, 2013: 8, 12.
[2] Soltani, Somayehl. A survey on real world botnets and detection mechanisms[J]. International Journal of Information & Network Security, 2014, 3(2).
[3] Narudin, Fairuz Amalina. Evaluation of machine learning classifiers for mobile malware detection[J]. Soft Computing,2016: 1, 20.
[4] Qian Quan, TianhongWang, Rui Zhang.Relative Network Entropy based Clustering Algorithm for Intrusion Detection[J]. Network Security, 2013, 15(1):16-22.