徐海東
[摘要]入侵檢測(cè)技術(shù)在網(wǎng)絡(luò)安全防護(hù)中所起的作用是至關(guān)重要的。詳細(xì)研究基于winpcap庫的網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)模型的實(shí)現(xiàn),分析主要功能的實(shí)現(xiàn),涉及到數(shù)據(jù)包捕獲、協(xié)議解析以及檢測(cè)等,為網(wǎng)絡(luò)安全又提供一道屏障。
[關(guān)鍵詞]入侵檢測(cè)協(xié)議解析檢測(cè)分析日志報(bào)警
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0920016-01
一、引言
隨著計(jì)算機(jī)及網(wǎng)絡(luò)的飛速發(fā)展,網(wǎng)絡(luò)技術(shù)的應(yīng)用也日益普及。由于入侵檢測(cè)技術(shù)在網(wǎng)絡(luò)安全防護(hù)中所起的作用至關(guān)重要,因此國(guó)內(nèi)外各科研機(jī)構(gòu)非常重視對(duì)IDS(Intrusion Detection System)技術(shù)的研究。
二、網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)模型的框架設(shè)計(jì)
本文基于網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)模型是在WINDOWS環(huán)境下實(shí)現(xiàn)的,它基于標(biāo)準(zhǔn)Winpcap庫的應(yīng)用,使用其來捕獲數(shù)據(jù)包并觸發(fā)檢測(cè)過程。數(shù)據(jù)收集模塊從網(wǎng)絡(luò)上獲得所有的網(wǎng)絡(luò)數(shù)據(jù)包,進(jìn)行過濾等簡(jiǎn)單的處理后交給報(bào)文解碼模塊,進(jìn)行報(bào)頭值檢查。檢查過后的報(bào)文經(jīng)過預(yù)處理之后,全部交給攻擊檢測(cè)模塊(包含模式匹配和協(xié)議分析)。其中部分報(bào)文將傳一份拷貝給掃描攻擊檢測(cè)模塊,掃描攻擊檢測(cè)模塊對(duì)網(wǎng)絡(luò)段中主機(jī)的連接報(bào)文進(jìn)行分析并作統(tǒng)計(jì)記錄,當(dāng)統(tǒng)計(jì)值超過閾值時(shí)就報(bào)警[1]。
在循環(huán)檢測(cè)過程中,系統(tǒng)模型通過Winpcap接口從網(wǎng)絡(luò)中抓取數(shù)據(jù)包,然后調(diào)用數(shù)據(jù)包解析函數(shù)根據(jù)數(shù)據(jù)包的類型和所處的網(wǎng)絡(luò)層次對(duì)數(shù)據(jù)包進(jìn)行協(xié)議解析。解析后的結(jié)果存放在一個(gè)Packet結(jié)構(gòu)中。根據(jù)特征數(shù)組,對(duì)Packet的有效載荷部分進(jìn)行區(qū)間劃分,同時(shí)合棄長(zhǎng)度小于特征串的區(qū)間。對(duì)于劃分好的區(qū)間,計(jì)算每個(gè)區(qū)間的哈希特征值,在哈??臻g中按照存儲(chǔ)規(guī)則進(jìn)行搜索,查看是否有匹配記錄。如果存在,則進(jìn)一步進(jìn)行精確匹配;否則,進(jìn)行下一個(gè)區(qū)間的哈希值計(jì)算。對(duì)于精確匹配成功的數(shù)據(jù)包,進(jìn)行相應(yīng)的報(bào)警響應(yīng)操作。
三、網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)模型主要功能的實(shí)現(xiàn)
(一)系統(tǒng)模型的數(shù)據(jù)包捕獲。本文入侵檢測(cè)原型系統(tǒng)使用的抓包庫是Winpcap,它是Windows平臺(tái)下應(yīng)用最為廣泛的數(shù)據(jù)包截取庫,它所使用的主要函數(shù)說明如下:
Char * pcap_lookupdev ( char * errbuf )
此函數(shù)用于得到一個(gè)抓獲包的描述信息,以便分析網(wǎng)絡(luò)層中的數(shù)據(jù)包信息,將在其它函數(shù)中用作實(shí)參調(diào)用。主要參數(shù)含義如下:device即為上一函數(shù)返回的網(wǎng)絡(luò)接口設(shè)備指針;snaplen定義了捕獲的最大字節(jié)數(shù);promisc定義了是否將網(wǎng)卡設(shè)為混雜模式,本系統(tǒng)中將其設(shè)為1,以便接收所有流經(jīng)該網(wǎng)卡的數(shù)據(jù)包;to_ms確定讀取包的時(shí)間限制;errbuf返回的錯(cuò)誤信息。
Int pcap_compile ( pcap_t *p, struct bfp_program *fp, char *str, int optimize, bpf_u_int32 netmask )
該函數(shù)用于解析過濾規(guī)則串,填寫bpf_program結(jié)構(gòu),str為字符串形式的過濾表達(dá)式,過濾規(guī)則表達(dá)式可以為空,表示抓取所有通過的數(shù)據(jù)包。在編譯了過濾器后必須調(diào)用pcap_loop函數(shù)設(shè)置內(nèi)核過濾器才能使之生效。
(二)系統(tǒng)模型的協(xié)議解析。協(xié)議解析模塊的主要函數(shù)是DecodeData
Link,它從數(shù)據(jù)捕獲模塊獲得網(wǎng)絡(luò)上的數(shù)據(jù)流,首先判斷是否是數(shù)據(jù)鏈路層的類型,接著根據(jù)不同的鏈路層類型以及協(xié)議樹進(jìn)行第二層的協(xié)議解碼,然后繼續(xù)根據(jù)協(xié)議樹進(jìn)行第三層以及更高層的協(xié)議解碼,最后將解碼的結(jié)果填充到Packet數(shù)據(jù)結(jié)構(gòu)中,該過程中使用到的數(shù)據(jù)結(jié)構(gòu)如下描述:
Typedef struct_Packet
{
Struct pacp_pkthdr *pkth; //BPF形式的結(jié)構(gòu)數(shù)據(jù)指針
EtherARP *ah; //ARP/RARP協(xié)議報(bào)頭
IPHdr *iph, *orig_iph; //IP協(xié)議報(bào)頭
TCPHdr *tcph, *orig_tcph; //TCP協(xié)議報(bào)頭
UDPHdr *udph, *orig_udph; //UDP協(xié)議報(bào)頭
ICMPHdr *icmph, *orig_icmph; //ICMP協(xié)議報(bào)頭
……
Options ip_options[40]; //用于IP協(xié)議選項(xiàng)解碼的結(jié)構(gòu)數(shù)組
u_int32_t ip_option_count; //報(bào)文中包含IP選項(xiàng)的數(shù)目
Options tcp_options[40]; //用于TCP協(xié)議選項(xiàng)解碼的結(jié)構(gòu)數(shù)組
u_int32_t tcp_option_count; //包含TCP選項(xiàng)的數(shù)目
……} Packet;
(三)系統(tǒng)模型的檢測(cè)分析。檢測(cè)分析模塊是檢測(cè)引擎的核心,本模塊所采用的檢測(cè)算法是協(xié)議分析與哈希算法相結(jié)合的方法。當(dāng)數(shù)據(jù)包解碼之后.首先根據(jù)協(xié)議標(biāo)準(zhǔn)進(jìn)行協(xié)議分析,將不同類別的報(bào)文分派給不同的協(xié)議分析模塊,如果檢測(cè)到異常,就進(jìn)行日志報(bào)警。對(duì)于未檢測(cè)到協(xié)議使用異常的,以及那些沒有對(duì)應(yīng)的協(xié)議分析模塊的報(bào)文分派給特征匹配模塊,利用哈希算法的快速查找性能進(jìn)行多模式的匹配,從而達(dá)到快速檢測(cè)入侵的目的[2]。
哈??臻g使用的數(shù)據(jù)結(jié)構(gòu)用于在檢測(cè)進(jìn)行之前將規(guī)則庫中的相關(guān)內(nèi)容存入哈??臻g,并在檢測(cè)過程中用于匹配報(bào)文的哈希值。它包含以下三個(gè)部分:一對(duì)表示哈希空間的數(shù)組S61和S62(為6字節(jié)特征字符串設(shè)置),每個(gè)數(shù)組大小為64K。為每種類型的攻擊各維護(hù)一個(gè)1*256的特征數(shù)組T,數(shù)組元素中的數(shù)據(jù)表示此類攻擊中是否存在該字符。每種攻擊的特征數(shù)組用于在檢測(cè)進(jìn)行前將規(guī)則庫中此類攻擊所含有的字符信息保存,以便于數(shù)據(jù)包的區(qū)間劃分。使用區(qū)間劃分方法優(yōu)化后的哈希檢測(cè)方法為每種類型的攻擊字符串各維護(hù)一個(gè)表示掃描區(qū)間的鏈表partition,數(shù)組數(shù)據(jù)域有兩個(gè)數(shù)據(jù)分別表示區(qū)間的起點(diǎn)和終點(diǎn)。partition的數(shù)據(jù)結(jié)構(gòu):
typedef struct_partition{
u_intl6_t head; //表示區(qū)間的頭位置
u_intl6_t tail; //表示區(qū)間的尾位置
struct_partition *next; //指向下一個(gè)該結(jié)構(gòu)的指針
}partition; //表示所有需掃描的區(qū)間
四、小結(jié)
總之,在網(wǎng)絡(luò)安全問題日益突出的今天,由于傳統(tǒng)的基于防火墻、身份認(rèn)證以及加密技術(shù)的網(wǎng)絡(luò)安全防御體系本身存在的缺陷和不足,使得入侵檢測(cè)技術(shù)成為當(dāng)前網(wǎng)絡(luò)安全方面研究的熱點(diǎn)和重要方向。它改變了以往的被動(dòng)防御的特點(diǎn),能夠主動(dòng)地實(shí)時(shí)跟蹤各種危害系統(tǒng)安全的入侵行為,并做出及時(shí)的響應(yīng),尤其是在抵御網(wǎng)絡(luò)內(nèi)部人員的入侵攻擊時(shí),更有獨(dú)到的特點(diǎn),成為防火墻之后的又一道安全防線。
參考文獻(xiàn):
[1]李健、李成忠,分布式網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)研究與實(shí)現(xiàn)[M].西南交通大學(xué)出版社,2003.5.
[2]張麗、康占成,計(jì)算機(jī)網(wǎng)絡(luò)入侵檢測(cè)實(shí)現(xiàn)療法的教學(xué)研究[J].中國(guó)計(jì)算機(jī)報(bào).2005,6(5):35-38.