如何在Linux下實現(xiàn)入侵檢測IDS
入侵檢測IDS是通過對入侵行為的過程與特征的研究,使安全系統(tǒng)對入侵事件和入侵過程能做出實時響應(yīng)來保證網(wǎng)絡(luò)安全的方式。那么,我們能不能夠基于Linux系統(tǒng)來實現(xiàn)入侵檢測IDS的保護(hù)功能呢?
Linux下的實現(xiàn)
在對入侵檢測IDS技術(shù)研究的基礎(chǔ)上,我們在Linux系統(tǒng)下設(shè)計并實現(xiàn)了一個基于網(wǎng)絡(luò)的入侵檢測IDS系統(tǒng)。
1 系統(tǒng)的組成結(jié)構(gòu)
該系統(tǒng)的組成結(jié)構(gòu)如圖1所示。數(shù)據(jù)采集模塊負(fù)責(zé)從網(wǎng)絡(luò)上收集原始的網(wǎng)絡(luò)數(shù)據(jù)流,在經(jīng)過一定的預(yù)處理后,這些數(shù)據(jù)被送到數(shù)據(jù)分析模塊,由數(shù)據(jù)分析模塊進(jìn)行分析,以便判斷是否有違反安全策略的入侵行為發(fā)生。并及時將分析結(jié)果送到告警模塊,由告警模塊向控制臺產(chǎn)生告警信息。用戶可以通過用戶界面與控制臺交互,通過控制臺,一方面可以對各個模塊進(jìn)行配置,另一方面也可以接收告警信息。
圖1 系統(tǒng)的組成結(jié)構(gòu)
2 系統(tǒng)的功能描述
該系統(tǒng)實現(xiàn)了入侵檢測IDS的主要功能,包括數(shù)據(jù)采集、數(shù)據(jù)預(yù)處理、入侵分析以及告警。具體來說,可以完成以下功能:
● 捕獲符合指定條件的網(wǎng)絡(luò)數(shù)據(jù)包。
● 進(jìn)行IP重組,提供IP包數(shù)據(jù)。
● 重組TCP流,提供TCP流數(shù)據(jù)。
● 重組應(yīng)用層數(shù)據(jù)流,提供HTTP數(shù)據(jù)流。
● 實現(xiàn)基于規(guī)則的入侵檢測IDS方法。
● 向控制臺提交分析結(jié)果。
● 接受控制臺的配置和管理。
由于該系統(tǒng)功能的實現(xiàn)主要體現(xiàn)在數(shù)據(jù)采集模塊和數(shù)據(jù)分析模塊中,所以下面將對這兩個模塊加以詳細(xì)說明。
3 數(shù)據(jù)采集模塊
數(shù)據(jù)采集是入侵檢測IDS的基礎(chǔ),入侵檢測IDS的效率在很大程度上依賴于所采集信息的可靠性和正確性。在基于網(wǎng)絡(luò)的入侵檢測IDS系統(tǒng)中,數(shù)據(jù)采集模塊需要監(jiān)聽所保護(hù)網(wǎng)絡(luò)的某個網(wǎng)段或某幾臺主機的網(wǎng)絡(luò)流量,經(jīng)過預(yù)處理后得到網(wǎng)絡(luò)、系統(tǒng)、用戶以及應(yīng)用活動的狀態(tài)和行為信息。數(shù)據(jù)采集需要在網(wǎng)絡(luò)中的若干關(guān)鍵點進(jìn)行。
具體來說,數(shù)據(jù)采集模塊需要監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)包,進(jìn)行IP重組,進(jìn)行TCP/UDP協(xié)議分析,同時也要進(jìn)行應(yīng)用層協(xié)議數(shù)據(jù)流分析。采集到的數(shù)據(jù)要經(jīng)過預(yù)處理才能提交給數(shù)據(jù)分析模塊。由于不同的分析方法所需要的數(shù)據(jù)源是不同的,所以預(yù)處理也會有很大的不同。但是,一般來說,分析模塊所分析的數(shù)據(jù)都是基于某個網(wǎng)絡(luò)協(xié)議層的數(shù)據(jù)信息,或是直接采用這些數(shù)據(jù)的某些部分。因此在該系統(tǒng)的設(shè)計中,數(shù)據(jù)采集模塊除了采集數(shù)據(jù)外,還要對這些信息進(jìn)行協(xié)議分析。協(xié)議分析是指將網(wǎng)絡(luò)上采集到的基于IP的數(shù)據(jù)進(jìn)行處理,以便得到基于某種協(xié)議的數(shù)據(jù)。在本系統(tǒng)中主要是針對TCP/IP協(xié)議族的分析。
網(wǎng)絡(luò)數(shù)據(jù)采集是利用以太網(wǎng)絡(luò)的廣播特性實現(xiàn)的,以太網(wǎng)數(shù)據(jù)傳輸通過廣播實現(xiàn),但是在系統(tǒng)正常工作時,應(yīng)用程序只能接收到以本主機為目標(biāo)主機的數(shù)據(jù)包,其他數(shù)據(jù)包將被丟棄。為了采集到流經(jīng)本網(wǎng)段的所有數(shù)據(jù),我們需要首先將網(wǎng)卡設(shè)置為混雜模式,使之可以接收目標(biāo)MAC地址不是自己MAC地址的數(shù)據(jù)包,然后直接訪問數(shù)據(jù)鏈路層,截獲相關(guān)數(shù)據(jù),由應(yīng)用程序?qū)?shù)據(jù)進(jìn)行過濾處理,這樣就可以監(jiān)聽到流經(jīng)網(wǎng)卡的所有數(shù)據(jù)。
在進(jìn)行數(shù)據(jù)捕獲時,我們采用的是libpcap,libpcap是一個與實現(xiàn)無關(guān)的訪問操作系統(tǒng)所提供的分組捕獲機制的分組捕獲函數(shù)庫,用于訪問數(shù)據(jù)鏈路層。該庫提供的C函數(shù)接口可用于需要捕獲經(jīng)過網(wǎng)絡(luò)接口數(shù)據(jù)包的系統(tǒng)開發(fā)上。這個庫為不同的平臺提供了一致的編程接口,在安裝了libpcap的平臺上,以libpcap為接口寫的程序,可以自由地跨平臺使用。
Libpcap在網(wǎng)上捕獲到的是數(shù)據(jù)幀,我們還需要對數(shù)據(jù)幀進(jìn)行協(xié)議分析,協(xié)議分析的處理過程為:首先根據(jù)預(yù)先定義的過濾規(guī)則從網(wǎng)絡(luò)上獲取所監(jiān)聽子網(wǎng)上的數(shù)據(jù)包,然后進(jìn)行TCP/IP棧由下至上的處理過程,主要是IP重組和TCP/UDP層協(xié)議處理,最后進(jìn)行應(yīng)用層協(xié)議分析。
協(xié)議分析的工作在每個操作系統(tǒng)里都有,在這里,我們選擇了libnids函數(shù)庫。libnids是在libnet和libpcap的基礎(chǔ)上開發(fā)的,它封裝了開發(fā)網(wǎng)絡(luò)入侵檢測IDS系統(tǒng)的許多通用型函數(shù)。libnids提供的接口函數(shù)除了可以監(jiān)視流經(jīng)本地的所有網(wǎng)絡(luò)通信、檢查數(shù)據(jù)包外,還具有重組TCP數(shù)據(jù)段、處理IP分片包的功能。而且它同樣具有很好的移植性。
【編輯推薦】