[摘要] 本文設計的基于Linux2.6內核橋模式的入侵檢測系統,有別于傳統網絡入侵檢測系統旁路監聽的方式,它使用了橋模式的入侵檢測方式,對數據包的檢測在數據鏈路層進行,以此達到數據包檢測快速、高效的目的。對該系統在真實網絡環境下進行的正常訪問及入侵測試試驗表明:本文設計的基于Linux橋模式的入侵檢測系統達到了無漏報、快速、高效的效果,可以有效的檢測入侵,同時保障了對正常訪問的響應。
[關鍵詞] 入侵檢測系統 Linux 網絡安全 橋模式
一、引言
入侵檢測作為一種積極主動地安全防護技術,提供了對內部攻擊、外部攻擊和誤操作的實時保護,在網絡系統受到危害之前攔截和響應入侵。常見的有基于網絡的入侵檢測和基于主機的入侵檢測系統:基于主機的入侵檢測系統HIDS(HOST Intrusion Detection System)實時監視可疑的連接、非法訪問的闖入等;基于網絡的入侵檢測系統NIDS(Net Intrusion Detection System)在關鍵的網段或交換部位偵聽。在實際的部署中,傳統NIDS是并接在網絡中,通過旁路監聽的方式實時地監視網絡中的流量,判斷其中是否含有攻擊的企圖。
傳統NIDS工作在應用層和網絡層。所抓的數據包由底層向上傳,經過分析判斷后再向下送,有較長的網絡延遲。而且特征代碼庫中特征代碼的匹配的計算量大,計算速度慢,容易形成網絡瓶頸。當攻擊者向被保護網絡發送大量的數據,超過NIDS的處理能力,從而使被監聽的端口流量總和超過監聽端口的上限,會發生丟包的情況,而可能導致入侵行為漏報“1 negative”。還有,當Web 服務器已超載,不能夠再處理更多的連接請求時, NIDS會以為該服務器正在受到拒絕服務的攻擊,容易出現假警報“1 positive”(誤警),將良性流量誤認為惡性的。
據統計,目前NIDS的告警信息中,僅有10%是有用的,因此需要提高NIDS的檢測速度,無遺漏的檢測數據包,進行快速處理以適應高速網絡通信的要求。
二、基于Linux內核橋模式的網絡入侵檢測系統的改進思想
1.傳統NIDS是旁路接入一個網絡(或與集線器連接,或接入交換機的SPAN端口),通過旁路監聽的方式實時地監視網絡流量。基于Linux環境下橋模式的NIDS改進了旁路連接,使其成為網絡的一部分,將它部署到網絡的必經之處,使數據包必須經過該NIDS,以此來強制完成對網絡中所有流經的數據包的檢測,從而避免了入侵的漏報(1 negative),達到數據包的無遺漏檢測,這是網橋模式NIDS優于傳統NIDS的一個重要特點。
2.由于一個網橋更像一段網線,將一個網絡的兩個部分連接在一起。一個透明NIDS像網橋一樣工作,檢測通過它的數據包而不被兩端設備發現。一個橋模式的NIDS的網卡不分配任何IP地址,對于現有網絡拓撲結構透明,絲毫不影響網絡管理人員的路由分析,減輕了網絡管理人員的負擔。由于系統結構的透明性,可以在網絡中添加一個IDS而不需要修改網絡中任何設備的參數。橋模式有效的把NIDS本身隱藏起來,使其成為用戶攻擊的一個盲點,解決了NIDS自身的安全性問題。
3.傳統NIDS是在應用層和網絡層完成客戶端的顯示,數據包的分析與檢測,特征碼的存儲等任務,在做數據包截取和分析時,所抓的數據包由底層向上傳送到應用層,然后解開包頭,讀取相關信息進行分析匹配,經過分析判斷后重新包裝包頭,再向下送,把它從應用層送到數據鏈路層通過網卡傳送出去,大大增加了網絡延遲。而且特征代碼庫中特征代碼匹配的計算量大,計算速度慢,容易形成網絡瓶頸。
這種基于底層的NIDS對數據包的獲取、分析與處理都不在網絡層和應用層,而在鏈路層,通過網橋模式來完成,由內核直接處理數據包,根據橋檢測模塊的判斷,讓數據包通過或是丟棄。對于不能在數據鏈路層明確判斷的數據包,傳送到上層,在網絡層進一步通過特征代碼庫進行高級匹配,這樣的工作方式可以加快數據包的處理速度,節省數據包的處理的時間,減小網絡延遲。同時采用了內核包檢測分析原理,使NIDS在遭到攻擊時檢測并以不同的方式向系統報警,以保證合法數據包的正常通過。
4.Linux的穩定性、可靠性和安全性,給NIDS提供了穩定的運行環境。Linux的開放性及模塊設計技術,使Linux內核功能更容易擴展,能夠靈活的把IDS橋檢測程序模塊加載到內核。
三、基于Linux內核橋模式的網絡入侵檢測系統的設計和實現
1.橋模式的建立
在本課題的研究中,將多塊網卡變成一個橋接設備,從而搭建起網橋,每一個網卡就是橋的一個端口,在橋的端口之間完全透明的轉發數據包。采用Linux2.6內核下的bridge橋接模塊來實現,在linux系統將網卡設置成網橋的工作模式,網卡接收到數據包后,經過的網絡協議層次如圖:
2.內核IDS檢測模塊的實現
為提高內核處理效率,將實現在驅動程序之后,在調用網橋模塊的時候進行數據包檢測,選擇的位置在調用netif_receive_skb函數前調用入侵檢測處理函數。自定義包檢測鉤子函數,在網橋模塊中加入鉤子函數,調用點放到process_backlog函數的調用netif_receive_skb語句之前。通過模塊機制,將橋入侵檢測模塊的處理函數和數據結構注冊到內核中。這樣用bridge和netfilter/iptables構建對于用戶和外界均透明的NIDS,實現了把橋入侵檢測模塊加載到內核網絡接口層向網絡層銜接處。
整個橋入侵檢測的處理模塊通過init_module將該機制定義的函數和數據結構注冊到內核中去,它進行初始化,為包檢測處理模塊的實現分配內存、初始化指針等模塊與內核之間的連接操作,而檢測處理模塊所提供的函數通過系統調用packet-_detect_register_hook將這些函數和數據結構注冊到內核中去。將檢測模塊處理函數注冊到內核的數據結構是packet_detect_hook_
ops,在模塊中生成該結構體的實例,將檢測處理函數作為回調函數,賦值給內核中自定義的鉤子函數指針。
在同一目錄下編寫Makefile文件,編譯生成 .ko(kernel object,內核目標文件)模塊,用insmod命令將模塊插入,內核就會在數據包從數據鏈路層送往網絡層之前調用橋IDS模塊的處理函數,從而對流經的所有數據包進行檢測。把IDS橋檢測程序模塊加載到內核后數據包流程如圖所示。
3.IDS檢測模塊程序設計偽代碼
首先,生成packet_detect_hook_ops結構體的實例。
static struct packet_detect_hook_ops _filter=
{
IDS_module, //packet_detect_hookfn類型的指針鉤子hook指向ids模塊處理函數IDS_module
};
其次,通過系統調用module_ init將定義的函數和數據結構注冊到內核中去的,module_ init調用一個初始化函數init,為狀態機制的實現分配內存、初始化指針等操作,并將定義的結構體實例注冊到內核。
int init(void)
{
初始化各種鏈表表頭
packet_detect_register_hook(IDS_Module);// 登記鉤子函數
return 0;
}
最核心部分是IDS檢測模塊部分。
int IDS_module(struct sk_buff *skb)
{
If(查詢特征跟蹤鏈表,有匹配項)
return PACKET_DROP; //通知內核數據包是入侵包,丟掉
else if(網絡狀態異常)
{
記錄數據包信息;
送入高級匹配模塊;
return PACKET_DETECT; //通知內核數據包需進一步檢測
}
else {
return PACKET_NOMAL;//通知內核數據包是正常包
}
}
最后,通過系統調用module_exit,在模塊卸載時,釋放內存,注銷過濾鉤子函數。
void cleanup(void)
{
釋放鏈表空間
packet_detect_unregister_hook(IDS_Module);//注銷鉤子函數
return;
}
module_init(init);//加載ids檢測模塊入口
module_exit(cleanup);//卸載ids檢測模塊出口
四、實驗
1.實驗環境
實驗環境一:11號交換機和10號主機相連模擬內網,1至9號主機與13號交換機相連模擬外網。10號主機使用IIS做Web發布,成為一個Web Server服務器,外網客戶端(1~9號主機)可以向其發送Web請求,Web 服務端(10號主機)提供Web網頁。基于Linux網橋模式NIDS系統系統安裝在12號主機,它工作在網橋模式下,所以可以通過12號NIDS系統的兩塊網卡分別與11號交換機與13號交換機相連,這樣內網外網中間有了一道檢測防御系統,保護Web Server服務器,防止其受到外網的攻擊。實驗環境一的網絡拓撲結構如圖3。
實驗環境二:14號機為傳統NIDS系統,以旁路模式安置在網絡中,其它均同環境一。
2.實驗結果
環境一實驗結果:當網絡存在正常訪問和入侵掃描時,在不同強度的攻擊下,橋模式NIDS系統的性能,包括:監測系統主機CPU(即12號主機)及內存消耗程度。實驗結果如下圖所示:
圖中1號蘭色線表示當網絡存在正常訪問、入侵掃描時,用1號機進行SYN攻擊時橋模式NIDS系統消耗的CPU/內存情況,2號紅色線表示相同條件下,同時用1、2號機進行SYN攻擊時橋模式NIDS系統消耗的CPU/內存消耗情況,3號綠線表示相同條件下,同時用1、2、3號機進行SYN攻擊時橋模式NIDS消耗的CPU/內存消耗情況。
環境二實驗結果:
圖中1號蘭色線表示用1號機進行SYN攻擊時某公司A系列LND-100NIDS系統消耗的網絡帶寬/CPU,2號紅色線表示1、2號機同時進行SYN攻擊時該系統消耗的網絡帶寬/CPU,3號綠線表示1、2、3號機同時進行SYN攻擊時該系統消耗的網絡帶寬/CPU。
從實驗的結果表明,入侵掃描、Syn攻擊器等工具的掃描和攻擊在傳統的NIDS系統下,因流量過大數據包過多,檢測系統無法檢測攔截攻擊包,并在其系統資源消耗過多情況下無法攔截檢查有害信息,造成黑客嗅探入侵成功。而改進后的基于Linux下橋模式的NIDS系統,采用數據鏈路層檢測分析,以較少的CPU消耗為代價,攔截到了攻擊包并檢測出了黑客的入侵掃描行為,同時保證了網絡的正常訪問請求。但兩者網絡帶寬的消耗幾乎相同。
五、結論
基于Linux2.6內核開發改進的橋模式NIDS系統工作在Linux系統內核網絡協議棧的底層,隨內核啟動而工作,真正的做到了內核底層檢測攔截黑客掃描攻擊的效果。用多種攻擊工具進行黑客攻擊和入侵掃描,該系統都能無遺漏的將數據包抓取并檢測,較好地解決了對入侵掃描以及黑客攻擊行為的檢測和抵御。目前該系統的不足之處是內存資源消耗較多,存在著部分內存泄露的問題。這是是造成系統不穩定的潛在因素,也是以后的開發過程中要對該系統逐漸加以完善的地方。
參考文獻:
[1]Robert Graham. NIDS-Pattern Search vs. Protocol Decode[J],Computers Security, 2001. 20:37~41
[2]StevenMcCanne,Van Jacobson.The BSD Packet Filter;A New Architecture for User-level Packet Capture[J].Lawrence Berkeley Laboratory One Cyclotron RoadBerkeley, 1992
[3]Stephen Northcutt. 網絡入侵檢測分析員手冊[M].人民郵電出版社,2000
[4]Love,R著.Linux內核設計與實現[M].北京:機械工業出版社,2006.1
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。