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