涂俊英
TU Jun-ying
(孝感學院 計算機與信息科學學院,孝感 432000)
入侵檢測技術針對的對象可以分為兩大類別,分別是異常檢測和誤用檢測,行為控制是異常檢測的核心。目前的行為控制研究分為四個方面,分別是行為描述、數據源選擇、行為匹配、正常行為學習。數據源的來源一般包括兩個方面:系統調用和審計數據。本文所關注的是出自Wirex的框架結構Linux Security Module(簡稱LSM),該框架結構統一支持Linux內核的訪問控制。本文將從LSM中獲得新的數據源,作為程序行為建模的數據,在此基礎上建立基于隱馬爾科夫的程序行為模型,主要目的在于在異常檢測方面降低誤報率,取得更好的效果。
由于LSM設計的初衷即是為了使Linux系統的安全性得到增強,而且可以提供大量的程序行為的信息,因此本文選擇其作為建立正常行為輪廓的數據源。LSM的優勢在于能夠讓各類安全訪問控制模型在Linux下以可加載內核模塊來實現。根據具體需求的不同,用戶能夠在Linux內核中加載適合的安全模塊,使得Linux安全訪問控制機制的易用性以及靈活性均得到提升。與“系統調用”對比,LSM在系統調用或內核函數內進行截獲點的部署,因而獲得了更加細的粒度。
LSM自身并不提供具體的安全策略。LSM對安全策略的定義是通過安全模塊的形式,并提供一個框架結構,修改了內核。用此框架結構來存放加入了安全策略的內核,以根據策略實現系統訪問關鍵的資源前的安全檢查。
例如,當某個文件被應用程序訪問時,首先在內核的系統調用下對inode進行查詢,以完成傳統的安全檢查,而當此應用程序真正要打開該文件前,就會調用LSM鉤子函數來進行探測。
使用security_operations結構體來完成對LSM數據的提取。該結構體的定義位于security.h中,其實質是一個hook函數的指針列表,因此對所有的hook函數的訪問均可通過這個結構體進行。hook函數在被調用的同時,通過其調用軌跡也就得到了對該程序進行監控所需的行為特征,系統構建一個叫做security operations的結構體,該結構體對鉤子函數的調用序列進行詳細的記錄,將所記錄的數據作為數據源進行異常檢測。
隱馬爾可夫模型認為,在正常情況下,系統中的進程狀態是隨機的。將事件的觀察值序列定義為所獲取的被監控程序的LSM消息序列,表示為:O1、O2……OT。隱馬爾可夫模型認為,還有一個狀態序列隱藏在該觀察值序列后,表示的是程序實際處的狀態,表示為:O1、O2……OT。首先假設進程的狀態構成馬爾可夫鏈,即:P(Qi| Qi-1……Q1)= P(Qi| Qi-1),并且進程的狀態與具體時間無關,即進程具有平穩性:P(Qi+1| Qi)=P(Qj+1| Qj),再假設監控的LSM消息序列是輸出獨立的,由此構建出離散化輸出模型(一階隱馬爾可夫)。
以λ=(N,M,π,A,B)作為離散化輸出模型(隱馬爾可夫模型),對被檢測的程序LSM變化進行表示,此LSM消息的集合即構成了觀察值集合。A與B分別為狀態轉移概率矩陣與輸出概率矩陣N表示狀態的個數,M表示觀察值的個數,π表示初始狀態概率矢量。
隱馬爾可夫模型建立之后,尚需對模型進行離線訓練。離線訓練的內容是在先斷開外部網絡的情況下,對接受檢測的信息系統提取LSM序列,結合Baum-Welch算法,對輸出概率最大的隱馬爾科夫模型參數進行獲取,最終得到λ=(N,M,π,A,B)的隱馬爾科夫模型,對模型進行離線訓練的結果即為λ,其作用在于為下一步的在線檢測提供基礎。
研究對象為被檢測程序的LSM短序列集。設置兩個窗口:內窗口和外窗口。內窗口大小為k,通過其每次向后滑動一個LSM序列,將監控時獲取的LSM序列分別進行處理,劃分為更短的序列,然后對每個短序列的具體出現概率進行計算,計算出來的概率值ε設定為閾值,這樣只要發覺計算出的概率小于閾值ε,則判定系統安全出現異常,提示把異常的短序列數存儲下來。另外,再定義一個參數C來表示外滑動窗口的大小,并定義δ=T/C表示系統的異常程度,即異常的短序列在C個短序列中的比值。對C個短序列的異常度計算完畢之后,外窗口向后滑動一個短序列,實現對下一個異常度的計算,按照這種方法一直計算,假如發生了某一個異常度大于給定的閾值的情況免責判定程序出現異常,觸發報警。
當前,來自加州大學戴維斯分校安全實驗室的公共入侵檢測框架CIDF是較多被使用的結構模型。這種模型用以下幾個組件對入侵檢測系統進行構建,分別是:1)用E盒表示的事件產生器;2)用A盒表示的事件分析器;3)用R盒表示的響應單元;4)用D盒表示的事件數據庫。
框架的具體操作流程為:事件數據被E盒通過探測器進行收集,收集到的事件傳送至A盒進行處理分析;A、E盒分析之后的數據由D盒存儲,此外D盒還提供額外的提供信息;A、E盒中的數據被R盒提取出來,并在D盒處產生響應。由通用入侵檢測對象和通用入侵規范語言對A、E、D及R盒之間的通信提供支持。
入侵檢測系統總體設計的參照來自CIDF框架,并將整個入侵檢測系統劃分為以下幾個主要部分,分別是系統監控部分、用戶與內核通信部分、隱馬爾科夫事件分析部分以及結果響應與記錄部分。下面的框圖闡釋出各個主要模塊及其模塊間的交互關系:

圖1 入侵檢測系統總體設計各個主要模塊及其模塊間的交互關系
從圖1中也可以看出,入侵檢測系統的整體操作過程是提取內核空間的LSM序列,向用戶空間發送,進而被用戶空間的隱馬爾科夫事件分析模塊處理和分析。
LSM監控模塊主要完成以下功能:1)進入內核進行監控,對程序的LSM消息序列進行獲取和存儲;2)對LSM消息序列進行保存。本文采用了內核鏈表中的反包含技術對內核維護的LSM消息隊列進行設計。
雙向數據傳輸具體做法是:調用netlink_kernel_create函數在LSM監控模塊的初始化函數中創建一個netlink socket,應用程序在用戶空間發來的請求和數據均可通過這個socket被內核程序所獲取。使用標準的socketAPI在用戶空間的應用程序創建的netlink socket,可以以一定的時間粒度,基于這個socket通過發送請求消息給內核,被內核netlink socket接收,對netlink_unicast函數進行調用來發送消息。截獲LSM監控模塊,并在隊列中進行保存,向用戶空間發送隊列中的LSM數據,以此實現用戶空間與內核空間的通訊。
圖2顯示了隱馬爾科夫事件分析模塊的程序流程:閾值,則向結果記錄與響應模塊發送警報,提示程序中出現了異常狀況。因此,檢測模式進行異常檢測是通過對從內核得到的LSM序列進行持續的處理而實現的。對于訓練模式而言,被監控程序的LSM序列來自用戶空間通訊模塊,并寫入設計格式的文件,若訓練的條件滿足,則結合Baum-Welch算法來訓練該序列,從而獲取隱馬爾科夫模型輸出概率最大的參數。
為了實現系統調用數據與LSM數據源的直觀的對比,采用syscallMonitor系統調用監控模塊來實現對服務程序的系統調用序列的截獲。具體的實現原理為:首先對自己的系統調用進行定義,然后替換操作系統中原來的系統調用。第一步是對要監控的系統調用函數進行定義,第二步是替換操作系統中原來的系統調用,在module的退出函數中向sys_call_table中賦值原系統調用函數地址,即可實現。

圖2 隱馬爾科夫事件分析模塊的程序流程
該模塊具備兩種不同的工作方式,分別是檢測模式和訓練模式:對于檢測模式而言,被監控程序的LSM序列來自內核空間和用戶空間通訊模塊。此LSM序列存儲在隊列結構中,為下一步的滑動窗口處理做好準備。如果發現異常度超過了
本文基于Linux平臺,闡述了在LSM數據源的支持下構建隱馬爾可夫模型的檢測方法,并最終實現了在Linux平臺下的異常檢測原型系統。從而在異常檢測方面降低誤報率,取得更好的檢測效果。下一步的工作是對異常事件的主動響應進行研究,提取被監控程序的大量LSM信息,同時監控多個程序,提高其檢測效果和性能。
[1] 張響亮,王偉,管曉宏.基于隱馬爾可夫模型的程序行為異常檢測[J].西安交通大學學報,2005,39(10):1056-1059
[2] 王偉.多信息源的實時入侵檢測方法研究[D].西安,西安交通大學,2005