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