基于用戶行為動態變化的內部威脅檢測方法

jopen 8年前發布 | 23K 次閱讀 支持向量機

*原創作者:木千之

寫在前面

基于用戶行為建模(Profile)的威脅檢測方法早已不是個新事物,早在2008年的一篇綜述中【1】作者就列舉出了大量已有的主動檢測的研究實例。

然而時至今日在現實的安全產業中依然很少見到成熟應用的內部威脅主動檢測系統,其中一個最大的原因就是學界提出的檢測方法誤報率實在太高,雖然看上去貌似只有1%-2%,但是對于動輒上萬的日常日志來說,安全管理員/審計管理員的工作負擔相當巨大,結果造成了現在雖然組織中部署了審計系統,但是管理員對當天的警報基本不看的現狀,不是不想看,是實在不知道看的目標,人力實在看不過來。所以誤報率過高是制約主動檢測實際應用的最大桎梏之一。

所以今天我們給大家介紹一個降低主動檢測誤報率的方法,該方法考慮了用戶行為的變化,從而建立了一個動態的分類器。

Outline

1. 引言

2. 動態分類器

3. 內部威脅檢測:非序列數據

4. 內部威脅檢測:序列數據

5. Hadoop/Mapreduce應用

6. 結語

7. 參考文獻

一、引言

基于主動檢測的內部威脅應對系統誤報主要來自于將用戶正常、合理的行為判斷成了異常行為,這里異常的比較標準是通過訓練集學習到的用戶行為模式。傳統地研究聚焦于提取、選擇更好的行為特征和分類算法來提高檢測準確率,降低誤報率;今天我們將焦點放在判定標準上,即事先通過學習得到的用戶行為模式。

傳統地研究都忽視了一個問題:用戶自身的行為也會隨著時間而改變,而且是合理地改變。當我們將用戶的行為數據看作是一個巨大時間窗口下的數據流時,就會發現這種顯著的變化。更加詳細的內容我們在下一個部分介紹。

我們今天主要從用戶行為改變的角度來構建適應動態變化的分類器,根據使用數據集的不同,分別針對非序列數據和序列數據進行分析,最后將分析任務部署在基于Hadoop/Mapreduce的分布式處理框架中。

二、動態分類器

引言中我們已經提到,將用戶的數據看作隨時間變化的數據流時,就會發現用戶行為自然地改變。這種改變也許來自用戶自身計算機使用習慣的改變(如每天一上班就要先看新聞/查看郵件),也有可能來自于組織工作流程的改變(如審批流程地變化),無論如何,隨著時間的前進,用戶自身的行為不可能一成不變,合理地變化如果不納入檢測系統的考慮,必然導致誤報和漏報。

為了形象地說明用戶行為的改變問題,我們給出圖1進行說明:

基于用戶行為動態變化的內部威脅檢測方法

圖1中詳細表示了模式遷移對系統的影響,黑點表示異常,空白點表示正常,實現表示真實的異常/正常分界線,而虛線則表示傳統地分類器劃分的界限。

我們從中可以看到,數據塊2相對于數據塊1而言,真實的異常只有兩個,而檢測系統卻識別出了4個,那么2個為誤報(False Positive)。數據塊3相對于1而言,異常為6個,但是檢測系統卻認為只有3個,即出現了漏報(False Negtive)。

為了應對上述問題,一種可行的解決方案是引入實時、自動更新的分類器,分類器可以根據用戶的行為變化自動實現更新,為了達到這個目的,可以使用以下的框架,見圖2:

基于用戶行為動態變化的內部威脅檢測方法

圖2中所示的框架本質是一個K投票框架,即最終的判定結果是K個分類器結果的某種組合,每當分析完一個新的數據塊(用戶的某個時間窗口數據),就要啟動一次全局K模型更新算法,利用單類支持向量機(OCSVM)或基于圖分析的異常檢測(GBAD)計算新的分類器,然后比較這K+1個分類器在最近的用戶行為數據塊上判斷的準確率,淘汰最差的分類器,得到新的全局K模型。

具體的全局K模型更新算法偽代碼如圖3:

基于用戶行為動態變化的內部威脅檢測方法

簡要的說明下圖3的意思:

1. Du是最近的一個標記的數據塊(即正常/異常已知);

2. 針對現有全集K模型A中的每一個模型M,檢驗M模型對Du判定的準確性,即test(M, Du);

3. 利用單類SVM算法針對Du生成一個新的模型Mn;

4. 測試Mn對Du的判定是否正確,即test(Mn, Du);

5. 從{Mn U A}中丟棄判定錯誤的模型,得到更新后的全集K模型A’。

如此一來,我們便實現了全局K模型的動態實時自動更新。接下來,需要針對不同的數據采取不同的分類算法。

三、內部威脅檢測:非序列數據

1. 非序列數據

我們這里的非序列數據與著名的1998年林肯實驗室的入侵檢測數據集,即著名的KDD99同源,都來自于MIT’98數據集。該數據集已經多次被作為入侵檢測領域的研究。其中TCPDUMP獲得的KDD99的數據就呈現出非序列形式,表現出一個特征向量。具體如圖4:

基于用戶行為動態變化的內部威脅檢測方法

其中每個維度都有自己的意義,如第一位表示連接持續時間,第二位表示協議類型,第三位表示目標主機的網絡服務類型等。

KDD99數據下載可以 參考鏈接

KDD99更多詳細的分析可以 參考鏈接

MIT’98數據集的分類:

圖17:

基于用戶行為動態變化的內部威脅檢測方法

MIT’98中BSM(Basic Security Model,基本安全模型)的數據為Header+Token的形式。其中Header在Token之前,記錄Token的大小、版本號、涉及的系統調用名稱以及執行時間。實驗所使用的即MIT‘98數據集中的BSM部分。

一個進一步處理后的Header+Token可以參考圖5:

基于用戶行為動態變化的內部威脅檢測方法

其中第二行記錄命令執行的完整路徑,Attribute行記錄用戶屬組以及文件系統節點和設備信息,Subject行記錄審計ID,有效用戶組ID,真實用戶和組ID、進程ID、會話ID以及端口和地址;Return記錄系統調用執行結果/返回值。最終使用的特征在此基礎上分析得到,如圖6:

基于用戶行為動態變化的內部威脅檢測方法

2. 分類器

2.1 SVM

這里我們使用兩類分類器,一類是監督式學習的SVM,另一類則是非監督式的GBAD。我們分別進行簡要介紹。

支持向量機(SVM)是現在廣泛使用的一種線性分類器,SVM通過將非線性數據映射到高維線性可分空間,然后計算最大分隔超平面。本實驗使用的是基于核函數RBF(Radial-Based Function)的SVM,程序上采用LIBSVM實現。

SVM的更多介紹可 參見鏈接

2.2 GBAD

基于圖的異常檢測(Graph-based Anormaly Detection)主要通過分析圖中的頂點與邊的變化進行異常檢測,具體地是頂點與邊的修改、增加與刪除三種變化。

我們首先計算一個圖的規范子圖,即尋找其具有最小描述長度的子圖:

     L(S,G) = DL(G | S) + DL(S)   

其中G表示整個的圖,S是要分析的子圖,DL(G|S)是將G壓縮到S后的描述長度,DL(S)是圖S的描述長度,我們選擇最終L(S,G)最小的子圖。這里的最小描述長度(Minimal Description Length)是一個數學概念,具體可以 參考鏈接

我們繪制的圖類似圖7:

基于用戶行為動態變化的內部威脅檢測方法

其中方框表示正常的子圖,而陰影部分則表示異常,分別展示了頂點修改(異常點E)、頂點插入(異常點C)和邊的修改(異常B-C)三種情況。

3. 實驗

實驗中先使用OCSVM檢驗使用全局K模型更新與傳統的分類效果,如圖8:

基于用戶行為動態變化的內部威脅檢測方法

可以看到應用全局K模型后分類效果有很大改善誤報率降低了近一半。

選擇部分測試集的結果表明,監督式學習分類要好于非監督式學習,這是比較容易理解的,一般來說有老師的學習總是好于沒有老師的自學的。如圖9:

基于用戶行為動態變化的內部威脅檢測方法

四、內部威脅檢測:序列數據

上面介紹了非序列數據的分析方法,其實就是一般性的特征向量形式的數據分析。接下來我們來討論下序列數據。所謂的序列數據,指的是元素的有序排列,可以允許重復。我們這里使用的是1988年Galgary大學的一個關于學生的項目,其中包含168個Unix用戶的命令記錄文件。一個典型的序列示例就像學生每天移動地點,如圖10:

基于用戶行為動態變化的內部威脅檢測方法

其中地點進行了簡寫,如ml = media lab等。

1. 分析方法

這里我們獲得了用戶的一些計算機使用命令行為數據,如圖11:

基于用戶行為動態變化的內部威脅檢測方法

我們通過分析用戶使用命令的序列模式來建立分類器,具體地:

1. 先對用戶的命令進行簡寫,如ls命令簡寫為l,cp命令簡寫為c,find命令簡寫為f,cpp命令簡寫為cp等;

2. 使用LZW算法構建每個用戶的LZW字典,LZW算法全稱為Lempel-ZivWelch Algorithm,用于遍歷出所有的組合模式;

3. 對得到的LZW字典計算各個模式的權值,具體地使用每種模式的頻率表示,如圖12:

基于用戶行為動態變化的內部威脅檢測方法

4. 篩選LZW字典,得到最具有代表性的組合,具體方式為對于每個模式而言,計算自身與其相鄰的模式的“代表值”,該值等于模式長度與權值的乘積,即Vp = Length(Pattern) X Wi,不斷重復,可以得到一個代表性字典;

5. 對于全局所有的時間窗口分別計算各自的代表性字典,對于窗口個數為N時,可以得到E = RD1, RD2, … RDn, RD = Representive Dictionary;

6. 若一個用戶的命令模式偏離E中的RDi的比例達到30%,即判斷為異常;

分析的架構間圖13:

基于用戶行為動態變化的內部威脅檢測方法

2. 實驗結果

實驗中與樸素貝葉斯分類器進行比較(Naive Bayes, NB),采用真實檢測率與真實誤報率作指標(True Positive Rate, False Positive Rate)。實驗顯示兩項指標下LZW方法均優于NB方法。見圖14:

基于用戶行為動態變化的內部威脅檢測方法

五、Hadoop/Mapreduce應用

在序列數據分析時,需要構造LZW字典,但是對于用戶的命令模式來說,工作量十分巨大,一般的服務器效率很低。因此考慮借助Hadoop/Mapreduce的分布式計算平臺實現。具體地將計算分析任務采用Mapreduce模型編程,將任務在Hadoop平臺上分布式運行。具體架構間圖15:

基于用戶行為動態變化的內部威脅檢測方法

六、結語

傳統的內部威脅檢測研究聚焦于數據特征的提取與分類器構建,力圖通過這兩個方面的努力提升檢測率,降低誤報率。然而實際中使用時依舊誤報率過高,以致無法在實際中有效推廣。今天我們介紹的方法努力從整體思路上進行優化補全,將之前沒有考慮到、但是卻作用關鍵的用戶行為自身的變化性納入整體解決方案的設計之中,從而獲得了傳統檢測框架的改進。

本文最關鍵的貢獻自然是提出了 全局K模型 ,“全局”體現在該模型實現了實時自動更新,緊跟用戶的行為而變化;“K模型”體現在其本質是一個 K投票 框架,即機器學習中的組合學習,多個分類器的某種組合。借助于全局K模型,本方法可以自動實時跟蹤用戶行為變化,不斷更新分類器,使得分類器與現實的距離最小。

除了上面的工作,我們還對非序列數據和序列數據分別進行了分析。對于類似于KDD99這樣的非序列數據而言,支持向量機SVM是一個不錯的嘗試,復雜度、準確率都較為滿意,SVM也常常作為衡量其它算法的 標準算法 。借助于圖論的知識進行異常檢測并不是一個新話題,這里采用了最小描述距離作為構建規范子圖的關鍵特征,然后從圖的頂點與邊的變化對用戶行為進行刻畫。

對于序列數據而言,今天我們直接從用戶的命令模式入手,構建LZW字典來遍歷出所有的命令模式,然后計算其中最有代表性的模式。如果考慮時間序列特征,那么也可以嘗試使用Markov模型構建分類器。

最后,給出今天討論的整體框架,如圖16:

基于用戶行為動態變化的內部威脅檢測方法

來自: http://www.freebuf.com/articles/system/97703.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!