◆高振鐵 馮亞麗
?
一種基于Hadoop集群的分布式入侵檢測系統(tǒng)模型
◆高振鐵 馮亞麗
(深圳華威世紀科技股份有限公司 廣東 518029)
入侵檢測系統(tǒng)是一項對網(wǎng)絡安全進行檢測、報警、響應的技術(shù),它通過采集網(wǎng)絡中某些關(guān)鍵信息并對其進行分析,從而發(fā)現(xiàn)異?;蛘呷肭止粜袨椤kS著網(wǎng)絡規(guī)模的擴大,傳統(tǒng)的入侵檢測系統(tǒng)已不足以應對海量數(shù)據(jù)處理。本文主要針對傳統(tǒng)入侵檢測系統(tǒng)在數(shù)據(jù)規(guī)模較大時,數(shù)據(jù)處理能力不足、單點失效的問題,設計了一種基于Hadoop集群的入侵檢測系統(tǒng)模型。
入侵檢測;Hadoop;數(shù)據(jù)收集;數(shù)據(jù)存儲
隨著計算機網(wǎng)絡的發(fā)展和互聯(lián)網(wǎng)信息規(guī)模的增長,加之互聯(lián)網(wǎng)開放性等特點,使得網(wǎng)絡被攻擊的可能性大大增加。信息被篡改、病毒入侵、黑客攻擊等惡意性問題,以及信息人員不規(guī)范操作導致的非惡意性安全問題頻發(fā)。因此,如何確保信息的完整性、安全性以及信息系統(tǒng)的安全穩(wěn)定運行已成為一個亟待解決的問題。
傳統(tǒng)的信息安全研究主要集中在數(shù)據(jù)認證加密機制、安全審計機制、防火墻設置等靜態(tài)安全技術(shù)領(lǐng)域。但從信息安全管理的角度來說,僅靠靜態(tài)防御技術(shù)來解決網(wǎng)絡安全問題是遠遠不夠的,還需要建立動態(tài)自學習、自適應的動態(tài)策略以達到保護網(wǎng)絡的“雙重保險”。入侵檢測具有動態(tài)監(jiān)控、預防和主動抵御攻擊等多種功能,它是對靜態(tài)防御技術(shù)的一個有效補充,同時入侵檢測配置也十分簡單、易懂。
入侵檢測技術(shù)作為繼防火墻之后的計算機網(wǎng)絡和系統(tǒng)的第二道安全防線,在網(wǎng)絡安全領(lǐng)域具有重要的地位。以美國為代表的眾多國外研究部門在入侵檢測研究方面一直處于世界領(lǐng)先地位,我國在入侵檢測研究和應用方面起步較晚,但也取得了一些成果,如“天眼”入侵檢測系統(tǒng)以及啟明星辰的黑客入侵檢測與預警系統(tǒng)等[1]。
智能化的入侵檢測已經(jīng)成為發(fā)展趨勢,將數(shù)據(jù)挖掘技術(shù)、云計算技術(shù)等技術(shù)引入入侵檢測領(lǐng)域,能夠創(chuàng)造出更為高效、智能的入侵檢測算法和系統(tǒng)模型。
1.1 Hadoop相關(guān)技術(shù)簡介
Hadoop是一個基于Java的分布式數(shù)據(jù)處理和數(shù)據(jù)分析的框架,不需要使用昂貴的服務器或超級計算機就可以實現(xiàn)高性能計算,同時也不需要考慮單點失效的問題。Hadoop包括兩個核心部分:分布式文件系統(tǒng)(HDFS)和MapReduce計算框架。HDFS使用流式數(shù)據(jù)訪問模式來對大規(guī)模的文件進行存儲,實行一次寫入、多次讀取的文件訪問方式,提高了系統(tǒng)的吞吐量[2]。
MapReduce是一個并行化的編程模型,用戶只需要編寫Map和Reduce函數(shù),不需要了解太多的知識,系統(tǒng)會自動地管理Map和Reduce的任務執(zhí)行,同時也會對任務間的調(diào)度進行管理。Map和Reduce這兩個階段的輸入和輸出的形式都是鍵值對,用戶可以自由地對類型進行定義。
1.2 常見的分布式IDS架構(gòu)
入侵檢測系統(tǒng)指在網(wǎng)絡環(huán)境中能夠?qū)θ肭中袨檫M行檢測的軟硬件。它通過采集數(shù)據(jù)(日志、流量等),再經(jīng)特定的方法處理后判斷是否有入侵行為,最終做出響應,同時不會影響網(wǎng)絡的性能。1997年,DARPA 提出了通用入侵檢測框架CIDF,不僅對組件間的通信機制進行了規(guī)范,而且對描述檢測信息的語言格式進行了定義。但這種單一的檢測防御方式并不能夠保障整個網(wǎng)絡的安全,特別是面對網(wǎng)絡內(nèi)部的入侵,分布式入侵檢測技術(shù)應運而生。很多分布式IDS結(jié)構(gòu)是基于CIDF設計而成的,大致歸納為以下三類:
(1)集中分布式
集中分布式IDS結(jié)構(gòu)的所有數(shù)據(jù)傳感組件全部分布在網(wǎng)絡中,并且數(shù)據(jù)處理的功能依賴于固定數(shù)量的組件來完成。其優(yōu)點是可以充分利用組件提供的檢測數(shù)據(jù),再對數(shù)據(jù)進行融合處理后,快速地做出正確的判斷。當傳感組件數(shù)量較少時,具有很明顯的優(yōu)勢。缺點是可能會出現(xiàn)單點失效問題以及擴展性比較差。其結(jié)構(gòu)如圖1所示。
圖1 集中分布式IDS架構(gòu)
(2)層次分布式
相對于集中分布式,該結(jié)構(gòu)主要是由數(shù)據(jù)傳感層、數(shù)據(jù)分析層以及決策控制層組成。數(shù)據(jù)傳感層負責收集數(shù)據(jù),對其提煉、精簡后,上傳至數(shù)據(jù)分析層。數(shù)據(jù)分析層接收到數(shù)據(jù)后,對其做一個簡單的處理,然后將結(jié)果上傳給決策控制層。控制層負責控制和數(shù)據(jù)處理,對數(shù)據(jù)進行分析,并在入侵發(fā)生后采取一定的措施。其結(jié)構(gòu)如圖2所示。
圖2 層次分布式IDS架構(gòu)
(3)對等協(xié)作分布式
該系統(tǒng)結(jié)構(gòu)的所有組件都是對等的,相互之間進行協(xié)作,不存在任何的上下級關(guān)系或者從屬關(guān)系。這些IDS節(jié)點可以單獨進行數(shù)據(jù)收集,處理數(shù)據(jù)并采取措施。對等協(xié)作分布式可以很好地改善系統(tǒng)的容錯性。但當節(jié)點數(shù)據(jù)規(guī)模比較大時,會產(chǎn)生很大的通信量。其結(jié)構(gòu)如圖3所示。
圖3 對等協(xié)作分布式IDS架構(gòu)
1.3 影響大規(guī)模數(shù)據(jù)入侵檢測的因素
影響IDS性能的主要有以下兩個因素:
(1)硬件
在處理規(guī)模比較大的數(shù)據(jù)時,IDS需要進行數(shù)據(jù)包的捕獲、數(shù)據(jù)預處理、數(shù)據(jù)分析等過程,這些過程統(tǒng)統(tǒng)離不開網(wǎng)卡、內(nèi)存、帶寬、CPU以及I/O等。數(shù)據(jù)包的捕獲需要依靠網(wǎng)卡,當包達到一定值時,會出現(xiàn)被丟棄的情況。捕獲的數(shù)據(jù)包一般都放在內(nèi)存中,內(nèi)存的大小嚴重影響著IDS的性能。CPU主要在IDS進行抓包以及對數(shù)據(jù)包進行分析的過程中工作,CPU的數(shù)量和主頻會影響到IDS的性能。在對數(shù)據(jù)進行傳輸?shù)臅r候,I/O同樣也會影響IDS的性能。
(2)軟件
在IDS的架構(gòu)方面,分布式的架構(gòu)更加能夠適應對大規(guī)模數(shù)據(jù)的處理。同樣地,在檢測算法方面,分布式的檢測算法可以很好地提高檢測性能。通過上面的分析,在提高IDS性能方面,可以通過改善系統(tǒng)配置,對網(wǎng)卡設備進行優(yōu)化,提高內(nèi)存以及CPU的性能,也可以采用分布式的檢測算法。
2.1 HIDS模型描述
對于目前各種入侵行為對計算機網(wǎng)絡和系統(tǒng)的攻擊,入侵檢測系統(tǒng)已經(jīng)能夠在很大程度上對其進行抵御,但是還存在著很多不足之處。
2.1.1 系統(tǒng)設計思想
集中分布式IDS容易出現(xiàn)單點失效問題,可能導致整個系統(tǒng)崩潰。對等協(xié)作分布式IDS的各個節(jié)點具有自主性,但是對系統(tǒng)的智能化程度要求很高,而且在節(jié)點相互通信過程中通信開銷太大,給系統(tǒng)帶來負擔。層次分布式IDS的優(yōu)勢非常適用于構(gòu)建實際的IDS,但是高層組件的特別容易成為制約整個系統(tǒng)性能的阻礙,無法處理海量數(shù)據(jù)以及系統(tǒng)單機的處理能力有限等問題制約入侵檢測系統(tǒng)的性能。本文針對傳統(tǒng)入侵檢測系統(tǒng)在數(shù)據(jù)規(guī)模較大時,表現(xiàn)出數(shù)據(jù)處理能力不足、單點失效的現(xiàn)象,設計了一種基于Hadoop集群的入侵檢測(HIDS)系統(tǒng)模型。該系統(tǒng)主要由分布在網(wǎng)絡節(jié)點上的檢測代理、數(shù)據(jù)收集組件和基于Hadoop集群構(gòu)建的監(jiān)控中心構(gòu)成。其架構(gòu)如圖4所示。
圖4 HIDS架構(gòu)圖
2.1.2 HIDS各組件描述
(1)檢測代理
檢測代理分布于網(wǎng)絡中的各個節(jié)點,工作在HIDS系統(tǒng)的最底層。主要由數(shù)據(jù)采集器、數(shù)據(jù)處理模塊、通信模塊以及控制模塊組成。
數(shù)據(jù)采集器是系統(tǒng)最基礎(chǔ)的部分,負責收集系統(tǒng)需要的數(shù)據(jù)。數(shù)據(jù)采集器可以對系統(tǒng)日志、用戶行為等主機行為信息或者是記錄網(wǎng)絡行為的原始數(shù)據(jù)包等對象進行采集。 數(shù)據(jù)處理模塊對不同格式的數(shù)據(jù)進行處理,然后封裝成統(tǒng)一的格式,上傳給上一層組件。通信模塊主要負責實現(xiàn)檢測代理模塊與上層模塊之間的相互通信??刂颇K接收來自通信模塊的傳感器命令之后,對傳感器做出相應的操作。
(2)數(shù)據(jù)收集組件
數(shù)據(jù)收集組件將底層的檢測代理分成若干個區(qū)域,解決了檢測代理直接與Hadoop集群交互可能導致的單點瓶頸問題,包括數(shù)據(jù)解析引擎、數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊三部分。
數(shù)據(jù)解析引擎:數(shù)據(jù)收集組件工作后,會重新注冊系統(tǒng)的最新格式的元數(shù)據(jù)。這些元數(shù)據(jù)包括了數(shù)據(jù)格式、數(shù)據(jù)解析器等內(nèi)容。引擎在接收到檢測代理傳送的數(shù)據(jù)后,會根據(jù)數(shù)據(jù)格式信息,匹配適合的數(shù)據(jù)解析器,將接收到的數(shù)據(jù)解析成為指定的格式。數(shù)據(jù)接收模塊主要負責對檢測代理的數(shù)據(jù)進行接收,然后把這些數(shù)據(jù)發(fā)送到數(shù)據(jù)解析引擎。數(shù)據(jù)發(fā)送模塊主要負責將解析后的數(shù)據(jù)發(fā)送到監(jiān)控中心。
(3)監(jiān)控中心
監(jiān)控中心是依賴于Hadoop集群構(gòu)建的,底層會將所有收集到的數(shù)據(jù)傳送到監(jiān)控中心。監(jiān)控中心主要由存儲模塊、挖掘模塊、規(guī)則庫以及用戶界面組成。
挖掘模塊對收集的入侵行為數(shù)據(jù)進行挖掘,尋找記錄之間的相關(guān)特性,發(fā)現(xiàn)和記錄新的特征。存儲模塊里面的數(shù)據(jù)包括兩個部分:第一部分是數(shù)據(jù)格式元數(shù)據(jù),主要保存系統(tǒng)可以解析的數(shù)據(jù)格式信息;第二部分是系統(tǒng)各個組件的狀態(tài)信息,不定時地更新各個組件的運行狀態(tài)。規(guī)則庫和挖掘模塊提供的入侵行為記錄進行比對,若是新的行為,則對其記錄。用戶界面確保安全管理人員可以通過接口對入侵的行為記錄進行查詢。
2.1.3 HIDS系統(tǒng)特點
開放性:傳感器模塊是整個系統(tǒng)的檢測能力的核心組件。傳感器可以適用于不同的工作環(huán)境。若需要添加新的功能的傳感器,只需要定義好新的數(shù)據(jù)格式元數(shù)據(jù)以及與之對應的數(shù)據(jù)格式解析器。
分布性:該系統(tǒng)可以在不同的結(jié)構(gòu)上實現(xiàn)了數(shù)據(jù)收集、數(shù)據(jù)分析以及處理。該系統(tǒng)的監(jiān)控中心主要依賴于Hadoop集群構(gòu)建,這樣就降低了傳統(tǒng)分布式系統(tǒng)的高層組件的系統(tǒng)瓶頸和單點失效問題的風險。
擴展性:系統(tǒng)可以根據(jù)不同的需要,進行對應的配置。
魯棒性:系統(tǒng)的組件是相對獨立的,當一個組件不能工作時,系統(tǒng)只會損失部分檢測功能。
2.2 關(guān)鍵模塊實現(xiàn)分析
上一節(jié)主要對提出的分布式IDS系統(tǒng)(HIDS)框架以及各個組件進行了描述,本節(jié)將對檢測代理、數(shù)據(jù)采集器、存儲模塊等模塊或組件的實現(xiàn)進行闡述。
2.2.1 檢測代理的實現(xiàn)
(1)運行流程
檢測代理是HIDS系統(tǒng)分布在網(wǎng)絡中各個節(jié)點的底層組件,通過內(nèi)部運行的各個模塊對信息進行簡單的檢測。數(shù)據(jù)采集器不會直接和數(shù)據(jù)收集組件進行數(shù)據(jù)傳輸,而是經(jīng)由檢測代理將信息發(fā)送到數(shù)據(jù)收集組件。其運行流程如圖5所示。
圖5 檢測代理運行流程
(2)數(shù)據(jù)傳輸格式
檢測代理將接收到的數(shù)據(jù)進行處理,統(tǒng)一數(shù)據(jù)的格式,然后將其發(fā)送給數(shù)據(jù)接收組件。HIDS選取的數(shù)據(jù)格式是JSON數(shù)據(jù)格式全稱是JavaScript Object Notation。擁有這個格式的數(shù)據(jù)一般都相對簡單,并且易于對該格式的數(shù)據(jù)進行解析。檢測代理的數(shù)據(jù)傳輸格式如表1所示。
表1 檢測代理數(shù)據(jù)傳輸格式
TimeS:代表檢測代理進行數(shù)據(jù)發(fā)送的時間戳。
AgentID:發(fā)送的數(shù)據(jù)來自哪個檢測代理。
Data:發(fā)送的數(shù)據(jù)內(nèi)容。
Source:發(fā)送到檢測代理數(shù)據(jù)是來自于哪個傳感器。
2.2.2數(shù)據(jù)收集組件
在檢測代理中,數(shù)據(jù)采集器以插件的方式進行工作。由于采集器和檢測代理之間不是耦合關(guān)系,所以數(shù)據(jù)采集器可以是所有的外部程序。本系統(tǒng)使用抽象的Adaptor類來表示采集器的運行方式,同時定義了基礎(chǔ)屬性以及方法接口。Adaptor類屬性的代碼如下:
public abstract class Adaptor{
protected String type;
protected String id;
protected Manager control;
}
type表示該類的數(shù)據(jù)輸出類型。數(shù)據(jù)收集組件在接收到數(shù)據(jù)后,會根據(jù)該類型選擇與之對應的數(shù)據(jù)解析器。id是Adaptor類的標識符,是唯一的。control表示該類的控制接口。本文實現(xiàn)了一個派生于Adaptor類的NetAdaptor類,該類通過實現(xiàn)兩個讀寫線程來實現(xiàn)對數(shù)據(jù)的傳輸。讀的線程從進程的輸出流中讀取數(shù)據(jù),同時以JSON格式對數(shù)據(jù)進行包裝,接下來,將其寫入一個緩存隊列。寫的線程不停地檢查緩存隊列,當隊列中存在數(shù)據(jù)時,線程則將數(shù)據(jù)寫入到全局發(fā)送隊列Queue類中。在沒有數(shù)據(jù)的情況下,進入休眠狀態(tài),直到緩存隊列的寫線程喚醒。
2.2.3數(shù)據(jù)處理模塊的設計
數(shù)據(jù)處理模塊主要用于對網(wǎng)絡數(shù)據(jù)進行捕獲、分析以及檢測。HIDS的檢測代理利用Snort軟件來實現(xiàn)數(shù)據(jù)處理模塊的重要功能。Snort的工作流程如圖6所示:
圖6 Snort工作流程
捕獲數(shù)據(jù):系統(tǒng)進行檢測時需要先從網(wǎng)絡中對數(shù)據(jù)包進行捕獲。Snort利用libpcap來捕獲數(shù)據(jù)包。Libpcap可以單獨地從網(wǎng)絡中捕獲沒有經(jīng)過任何修改的數(shù)據(jù)包,原始包的所有信息都是完整的。
包解碼程序:網(wǎng)絡數(shù)據(jù)包收集到以后,Snort會建立堆棧,在數(shù)據(jù)包中,由低層協(xié)議到高層協(xié)議的順序,對所有的協(xié)議元素進行解碼。
預處理程序:一是對數(shù)據(jù)包進行檢查或者修改,使得檢測引擎可以正確地處理數(shù)據(jù)包;二是對流量進行標準處理,使得檢測引擎可以進行特征匹配。
檢測引擎:檢測引擎的主要功能是對Snort的規(guī)則進行分析,建立攻擊特征;同時對流量和規(guī)則進行匹配。
輸出插件:Snort輸出插件的目的是用來將入侵記錄的數(shù)據(jù)存儲到另外的文件或者資源當中,比如:數(shù)據(jù)庫、日志等。在本系統(tǒng)中,選取CSV作為插件的輸出結(jié)構(gòu),CSV需要進行兩項配置,一是配置告警字段的輸出順序;二是輸出文件名設置成/des/file,表示會將輸出到標準的輸出流中。經(jīng)過這樣的配置,檢測代理就可以捕獲到輸出的結(jié)果。
2.2.4 存儲模塊實現(xiàn)
存儲模塊主要功能是存儲入侵行為記錄,提供給安全管理人員進行查詢、分析。同時,里面也存放著所有的元數(shù)據(jù)信息。HDFS默認的塊比傳統(tǒng)的塊要大得多,這樣的設定使得有助于提高整個系統(tǒng)對數(shù)據(jù)的吞吐率。
在本文的HIDS系統(tǒng)中,在底層的傳輸?shù)臄?shù)據(jù)大小一般不會超過64M,假如直接將這些數(shù)據(jù)存放到HDFS里面,會造成很大的存儲資源浪費。同時,如果將底層的數(shù)據(jù)先存入到緩沖中,數(shù)據(jù)量達到64M時再傳輸,會影響系統(tǒng)對入侵行為檢測的實時性。因此,如何在存儲效率和檢測實時性之間找到一個平衡點,是HIDS實現(xiàn)存儲模塊的一個關(guān)鍵問題。本HIDS系統(tǒng)采用了HBase數(shù)據(jù)庫,可以實時地對大規(guī)模數(shù)據(jù)集進行隨機讀寫。
HIDS系統(tǒng)的存儲模塊,主要對以下兩種數(shù)據(jù)進行存放:
(1)組件狀態(tài)數(shù)據(jù)庫
組件的狀態(tài)信息,會定時地進行更新。時間戳、組件的標識以及組件的類型構(gòu)成了Row Key,如果該系統(tǒng)沒有在一定時間內(nèi)接收到來自組件的信息,則說明組件已經(jīng)失效,需要向安全管理人員報告。Message代表組件發(fā)送到狀態(tài)信息。如表2所示。
表2 組件狀態(tài)數(shù)據(jù)庫
(2)數(shù)據(jù)格式元數(shù)據(jù)庫
在該數(shù)據(jù)庫上,存放著解析器在HDFS上面的路徑,以及代表HIDS能夠解析的數(shù)據(jù)格式信息。如表3所示。
表3 數(shù)據(jù)格式元數(shù)據(jù)庫
Type:同數(shù)據(jù)格式對應的標識符;
ClassName:解析器的類名;
Path:在HDFS上,用于解析的jar包的存放路徑。
隨著網(wǎng)絡業(yè)務的不斷增多以及網(wǎng)絡流量規(guī)模急劇加大,傳統(tǒng)的入侵檢測系統(tǒng)的單機處理模式已經(jīng)難以對龐大的數(shù)據(jù)集進行處理,檢測入侵行為也變得越來越困難。因此,本文結(jié)合分布式技術(shù)與入侵檢測技術(shù),提出了一種基于Hadoop的入侵檢測系統(tǒng)HIDS,首先介紹了系統(tǒng)的架構(gòu),并且對各個組件的功能進行了闡述,同時介紹了系統(tǒng)的特點;然后介紹了HIDS幾個重點組件的實現(xiàn)機制,闡述了檢測代理的處理流程,數(shù)據(jù)采集器和數(shù)據(jù)處理模塊的實現(xiàn);最后,闡述了數(shù)據(jù)收集組件以及存儲模塊的實現(xiàn)。
[1]李賀玲.數(shù)據(jù)挖掘在網(wǎng)絡入侵檢測中的應用研究[D].吉林大學,2013.
[2]Wbite T.Hadoop權(quán)威指南[M].北京:清華大學出版社,2011.
[3]周永福,曾志.Linux下采用Libpcap實現(xiàn)IDS的網(wǎng)絡數(shù)據(jù)包監(jiān)控[J].現(xiàn)代計算機,2015.
[4]盧榮.基于Snort的分布式入侵檢測系統(tǒng)[J].信息系統(tǒng)工程,2015.
深圳市技術(shù)創(chuàng)新計劃技術(shù)攻關(guān)項目(項目編號:深科技創(chuàng)新[2015]293號)。