摘要:首先分析了在Linux操作系統(tǒng)下入侵防御系統(tǒng)的三種體系結(jié)構(gòu),然后給出了一種建立入侵防御系統(tǒng)的具體實(shí)現(xiàn),最后討論了進(jìn)一步需要研究的問題。
關(guān)鍵詞:防火墻; 入侵防御系統(tǒng); 入侵檢測; Linux; netfilter/iptables; Snort
中圖分類號(hào):TP309
文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2007)09-0102-02
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)安全成了極其重要的問題。為了保障網(wǎng)絡(luò)安全,人們采用了很多保護(hù)措施。其中,防火墻和入侵檢測是最常被采用的網(wǎng)絡(luò)安全技術(shù)。防火墻是一種被動(dòng)的訪問控制技術(shù),一般被安置于Internet與被保護(hù)子網(wǎng)之間。它需要事先設(shè)計(jì)好規(guī)則才能對(duì)傳輸?shù)臄?shù)據(jù)包進(jìn)行檢查從而保護(hù)子網(wǎng)不受攻擊。在網(wǎng)絡(luò)中單獨(dú)使用防火墻存在著不能防范內(nèi)部攻擊等許多潛在的問題;同時(shí),由于入侵技術(shù)不斷發(fā)展使得全面配置防火墻規(guī)則變得更加困難。入侵檢測系統(tǒng)(IDS) 是一種能夠主動(dòng)保護(hù)自己不受攻擊的網(wǎng)絡(luò)安全技術(shù),它從計(jì)算機(jī)網(wǎng)絡(luò)的某些關(guān)鍵點(diǎn)收集并分析數(shù)據(jù)包,從而發(fā)現(xiàn)危害網(wǎng)絡(luò)安全的行為。按照收集的信息源IDS 可分為基于主機(jī)的IDS(hostbased IDS,HIDS) 和基于網(wǎng)絡(luò)的IDS (networkbased IDS)。IDS從系統(tǒng)內(nèi)部和各種網(wǎng)絡(luò)資源中主動(dòng)采集信息,從中分析可能的網(wǎng)絡(luò)入侵或攻擊。入侵檢測系統(tǒng)在發(fā)現(xiàn)入侵后,會(huì)及時(shí)作出一些相對(duì)簡單的響應(yīng),包括記錄事件和報(bào)警等。顯然,這些入侵檢測系統(tǒng)自動(dòng)進(jìn)行的操作,對(duì)于網(wǎng)絡(luò)安全來說遠(yuǎn)遠(yuǎn)不夠。因此,單獨(dú)采用防火墻和入侵檢測系統(tǒng)都不能很好地解決網(wǎng)絡(luò)安全問題。如果把兩者結(jié)合起來,則可以更大限度地實(shí)現(xiàn)網(wǎng)絡(luò)安全:IDS 對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)控,提供內(nèi)部和外部攻擊的實(shí)時(shí)保護(hù),并對(duì)防火墻規(guī)則加以動(dòng)態(tài)修改;防火墻則控制IDS 的數(shù)據(jù)流量,提供對(duì)IDS 的安全保護(hù)。
1入侵防御系統(tǒng)的體系結(jié)構(gòu)分析
Linux 操作系統(tǒng)自問世以來,因其開放源代碼而被廣泛應(yīng)用。Linux2. 4 內(nèi)核以上版本使用iptables構(gòu)建基于netfilter框架的防火墻,可以實(shí)現(xiàn)數(shù)據(jù)包過濾、數(shù)據(jù)包處理以及地址轉(zhuǎn)換等功能。
Snort系統(tǒng)是一個(gè)以開放源代碼形式發(fā)行的輕量級(jí)網(wǎng)絡(luò)入侵檢測系統(tǒng)。它由數(shù)據(jù)包解析器、檢測引擎和報(bào)警三個(gè)子系統(tǒng)組成。所有這些子系統(tǒng)都是建立在數(shù)據(jù)包截獲庫函數(shù)接口libpcap的基礎(chǔ)之上。Libpcap為它們提供了可移植的數(shù)據(jù)包截獲和過濾機(jī)制[1]。由于Snort源代碼開放,可以方便地對(duì)其進(jìn)行修改和定制,使其能與Linux原有的防火墻netfilter/iptables系統(tǒng)聯(lián)動(dòng)。這樣Snort在檢測到網(wǎng)絡(luò)攻擊的情況下,可以對(duì)攻擊包進(jìn)行丟棄或拒絕等操作,而不是簡單地報(bào)警或記錄日志,從而可以對(duì)外界的隨機(jī)進(jìn)攻及時(shí)作出響應(yīng),保護(hù)系統(tǒng)的正常運(yùn)行[2]。正因?yàn)槿绱耍承┥逃肐PS,如Securicore公司的border guard gateway也采用Snort系統(tǒng)[7]。
目前,利用netfilter/iptables和Snort構(gòu)成的入侵防御系統(tǒng)有三種體系結(jié)構(gòu):
a)將Snort和iptables結(jié)合是IPS最直觀的一種實(shí)現(xiàn)方案。利用Linux強(qiáng)大的進(jìn)程間通信( IPC)機(jī)制可以實(shí)現(xiàn)它們之間的結(jié)合。
b)Netfilter/iptables均處于系統(tǒng)內(nèi)核空間。Netfilter提供了一種可靠的異步數(shù)據(jù)包處理機(jī)制,任何時(shí)候在任何netfilter規(guī)則鏈中,數(shù)據(jù)包都可以被排隊(duì)轉(zhuǎn)發(fā)到用戶空間中去。在用戶空間中, Snort對(duì)數(shù)據(jù)流進(jìn)行檢測,分辨出正常流量和可疑流量,并調(diào)用libipq庫函數(shù)ipq_set_verdict ( )進(jìn)行判決,判決后將數(shù)據(jù)流返還給內(nèi)核,Netfilter根據(jù)判決的結(jié)果阻塞攻擊,而放行正常的流量。
c)前兩種工作在網(wǎng)絡(luò)層,這種方式工作在鏈路層,不需要TCP / IP協(xié)議棧的支持,也不需要IP地址,只需將網(wǎng)絡(luò)接口置于混雜模式。Snort利用自己解碼模塊在高層進(jìn)行數(shù)據(jù)檢測,提高了效率。
這三種方式各有優(yōu)缺點(diǎn)。第二種方式Snort的數(shù)據(jù)檢測是網(wǎng)絡(luò)瓶頸,第三種方式可移植性差,所以本文決定采用第一種方式。
2系統(tǒng)設(shè)計(jì)
2.1系統(tǒng)結(jié)構(gòu)
由于采用第一種方式,Snort工作在網(wǎng)絡(luò)層,對(duì)內(nèi)外網(wǎng)是不透明的。為了避免這個(gè)問題,Snort與netfilter/iptables通信采用私網(wǎng)地址。其系統(tǒng)模型如圖1所示,系統(tǒng)結(jié)構(gòu)如圖2所示。這里需要將Snort主機(jī)所連的核心交換機(jī)端口作為端口鏡像,確保所有數(shù)據(jù)包發(fā)到此端口。
2.2優(yōu)化檢測引擎
Snort 的核心部件檢測引擎由規(guī)則組織和規(guī)則匹配[1]兩部分構(gòu)成。
Snort以二級(jí)鏈表的方式組織規(guī)則庫[3]。它首先按照協(xié)議類型、源地址/端口和目的地址/端口將規(guī)則分類并形成規(guī)則頭鏈表;再對(duì)可選規(guī)則分類,把具有相同協(xié)議類型和源/目的地址/端口的可選規(guī)則放在同一個(gè)規(guī)則頭下,組織成二級(jí)鏈表。但是由于實(shí)際規(guī)則中的源/目的地址多以網(wǎng)絡(luò)地址的形式出現(xiàn),索引困難,勢必影響匹配的效率。為了提高IDS的整體效率,將規(guī)則按目的端口號(hào)的不同進(jìn)行分類并建立hash順序索引表以實(shí)現(xiàn)隨機(jī)訪問,將目的端口相同的規(guī)則頭以鏈表形式組織起來,而規(guī)則頭下是具體的規(guī)則鏈。這樣規(guī)則庫就由Snort的一級(jí)索引結(jié)構(gòu)變成了二級(jí)索引結(jié)構(gòu),提高了索引效率[4]。
Snort規(guī)則的匹配采用BM (BoyerMoore)算法[6]。但采用BM算法的Snort在特征串匹配上的效率并不高,因?yàn)槿肭謾z測系統(tǒng)中的特征匹配串遠(yuǎn)不止一個(gè)。該系統(tǒng)采用AC_BM (AhoCorasick_BoyerMoore)算法[3,5]。該算法是一種基于BM的并行串匹配算法,它將所有的特征串組織成一棵前綴或后綴樹,在對(duì)輸入串的一次掃描過程中檢索這些特征串。它的時(shí)間效率是BM的三倍左右, 但所需的內(nèi)存為BM的三倍[ 3 ]。
3系統(tǒng)運(yùn)行原理
整個(gè)系統(tǒng)主要分為以下四個(gè)模塊:
a)防火墻模塊。利用Linux提供的iptables狀態(tài)檢測防火墻,可以阻止絕大部分的攻擊。如果數(shù)據(jù)包通過了iptables檢測會(huì)進(jìn)入下一步Snort的檢測。
b)入侵檢測模塊。數(shù)據(jù)包通過防火墻并進(jìn)入內(nèi)網(wǎng),這時(shí),Snort系統(tǒng)通過libpcap接口將數(shù)據(jù)包截獲并進(jìn)行解碼,預(yù)處理模塊和檢測引擎能夠檢測出隱藏的攻擊。當(dāng)發(fā)現(xiàn)攻擊時(shí),系統(tǒng)會(huì)自動(dòng)地將檢測到的攻擊添加到報(bào)警日志文件。
c)報(bào)警日志分析模塊。此模塊每隔10 s(可根據(jù)實(shí)際情況調(diào)整時(shí)間)讀一次日志記錄,從中選取報(bào)警信息并對(duì)其進(jìn)行分析。一旦發(fā)現(xiàn)是攻擊行為,通過調(diào)用Snort2iptables腳本將報(bào)警信息轉(zhuǎn)換為iptables命令。這時(shí)系統(tǒng)打開套接字,并將iptables命令傳送到防火墻。
d)接收/執(zhí)行指令模塊。此模塊一旦接收到iptables指令,就會(huì)調(diào)用system()函數(shù)執(zhí)行,立刻生成iptables規(guī)則及時(shí)地阻止攻擊。
在入侵防御系統(tǒng)所構(gòu)筑的安全體系中,當(dāng)IDS 檢測到需要阻斷(規(guī)則定義)入侵行為時(shí),通知防火墻立刻作出相關(guān)策略的動(dòng)態(tài)修改(如增加訪問控制規(guī)則等),對(duì)攻擊源進(jìn)行封堵,從而達(dá)到整體安全控制的目的。防火墻能夠接收來自IDS 的檢測信息,實(shí)現(xiàn)互動(dòng),同時(shí)對(duì)IDS 進(jìn)行配置和監(jiān)控,實(shí)現(xiàn)網(wǎng)絡(luò)安全訪問控制。入侵檢測系統(tǒng)實(shí)時(shí)監(jiān)視并分析通過網(wǎng)絡(luò)的所有通信業(yè)務(wù)。當(dāng)檢測到攻擊行為時(shí),入侵檢測系統(tǒng)根據(jù)配置做出相應(yīng)的反應(yīng)。防火墻能夠處理IDS 檢測到的各種攻擊或探測類型,并采取相應(yīng)的操作,包括pass (通過)、deny(拒絕)等。
由于IDS 能動(dòng)態(tài)修改防火墻規(guī)則,發(fā)生意外(如受到攻擊) 時(shí),不用手工更改規(guī)則,而由系統(tǒng)自動(dòng)重新配置防火墻以拒絕來自攻擊者的進(jìn)一步流量,彌補(bǔ)了防火墻難以正確配置的缺點(diǎn)。同時(shí),防火墻可以彌補(bǔ)IDS 自我防護(hù)機(jī)制薄弱的缺點(diǎn)。IDS 自身并不能有效地防止對(duì)網(wǎng)絡(luò)以及對(duì)自己的攻擊,但與防火墻結(jié)合后,可以請(qǐng)求防火墻來完成訪問控制。同時(shí),由于IDS置于防火墻之后,使之不分析已被防火墻屏蔽在內(nèi)部網(wǎng)外的流量類型,負(fù)載減小,進(jìn)而減少了受DoS 攻擊的可能性,提高了IDS 自身的安全性。
4結(jié)束語
防火墻和IDS 的功能特點(diǎn)與局限性決定了它們彼此非常需要對(duì)方,且不可能相互取代。原因在于防火墻側(cè)重于控制,IDS 側(cè)重于主動(dòng)發(fā)現(xiàn)入侵信號(hào),兩者相互彌補(bǔ)不足,相互提供保護(hù)。從信息安全整體防御的角度出發(fā),這種結(jié)合是十分必要的,極大地提高了網(wǎng)絡(luò)安全體系的防護(hù)能力。這種基于防火墻與入侵檢測構(gòu)成的入侵防御系統(tǒng)不僅體現(xiàn)了分布式技術(shù)發(fā)展的潮流,也體現(xiàn)了網(wǎng)絡(luò)安全深度防御的思想。它使防護(hù)體系由靜態(tài)到動(dòng)態(tài),提升了防火墻的機(jī)動(dòng)性和實(shí)時(shí)反應(yīng)能力,也增強(qiáng)了IDS 的阻斷功能。不過這種入侵防御系統(tǒng)雖然解決了單獨(dú)使用防火墻或入侵檢測系統(tǒng)出現(xiàn)的一些安全問題,提高了網(wǎng)絡(luò)系統(tǒng)的安全性,但是,針對(duì)拒絕服務(wù)攻擊仍然難以防范。同時(shí),由于該系統(tǒng)的過濾規(guī)則是臨時(shí)性的,必須采取措施定時(shí)刪除過濾規(guī)則避免防火墻性能的下降。
參考文獻(xiàn):
[1]唐謙, 張大方. 基于Snort 的入侵檢測引擎比較分析[J].計(jì)算機(jī)工程與設(shè)計(jì),2005, 26(11):2884-2886.
[2]潘玲,黃云森,張凡.一種基于Snort 的入侵防御系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2005(6):29-31.
[3]COIT C J, STANIFORD S, McALERNEY J. Towards faster string matching for intrusion detection or exceeding the speed of snort [EB /OL]. [2005-02-01].http:/ /philby. ucsd. edu /~cse291_ IDVA /papers/ coit, staniford, mcalerney. towards_faster_st2ring_matching_for_intrusion_detection. pdf.
[4]王麗輝, 李濤, 張曉平,等.一種聯(lián)動(dòng)防火墻的網(wǎng)絡(luò)入侵檢測系統(tǒng)[J]. 計(jì)算機(jī)應(yīng)用研究,2006, 23(3):95-97.
[5]張邈,徐輝,潘愛民. 高效串匹配型入侵檢測系統(tǒng)[J]. 計(jì)算機(jī)工程, 2003,29(19):104-105.
[6]KIM S. A new string pattern matching algorithm using partitioning and hashing effectively[J]. Journal of Experimental Algorithmics, 1999, 4(2):1-18.
[7]彭雷,楊庚.基于Linux環(huán)境下的IPS實(shí)現(xiàn)算法研究及性能測試[J]. 南京郵電大學(xué)學(xué)報(bào), 2005,25(6):49-53.