一般說來,一個(gè)典型的網(wǎng)絡(luò)攻擊是以大量的端口掃描等手段獲取所攻擊對(duì)象的信息的,這個(gè)過程必然產(chǎn)生大量異常的網(wǎng)絡(luò)流量,它預(yù)示著即將到來的真正攻擊。這就要求網(wǎng)管人員對(duì)網(wǎng)絡(luò)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控,以便隨時(shí)發(fā)現(xiàn)可能的入侵行為,并進(jìn)行具體分析,及時(shí)、主動(dòng)地進(jìn)行干預(yù),從而取得防患于未然的效果。完成這種功能的安全產(chǎn)品之一是網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)(Network Intrusion Detection Systems,NIDS)。
目前,NIDS產(chǎn)品可分為硬件和軟件兩種類型,但無論選擇哪種,都有一個(gè)共同的特點(diǎn): 昂貴。即便在單點(diǎn)安裝的情況下,無論是硬件類型的費(fèi)用,還是軟件類型的許可費(fèi),動(dòng)輒數(shù)萬元乃至十余萬元。相對(duì)于規(guī)模不是很大、費(fèi)用支出有限的企業(yè),承受起來勉為其難。是不是安全防御可以不搞了?答案是否定的。
事實(shí)上,互聯(lián)網(wǎng)在給我們帶來挑戰(zhàn)的同時(shí),也給我們帶來無數(shù)的寶貴資源,只等我們?nèi)ラ_發(fā)、利用。開放源代碼軟件(Open Source Software)便是其中之一。本文試圖從這一角度,講述利用互聯(lián)網(wǎng)上免費(fèi)的開放源代碼軟件實(shí)現(xiàn)構(gòu)建完整NIDS的過程。
一、系統(tǒng)概述
本處描述的NIDS采用三層分布式體系結(jié)構(gòu),它包括網(wǎng)絡(luò)入侵探測(cè)器、入侵事件數(shù)據(jù)庫和基于Web的分析控制臺(tái)。為了避免不必要的網(wǎng)絡(luò)流量,本例將網(wǎng)絡(luò)入侵探測(cè)器和入侵事件數(shù)據(jù)庫整合在一臺(tái)主機(jī)中,利用標(biāo)準(zhǔn)瀏覽器,異地訪問主機(jī)上的Web服務(wù)器,并把它作為分析控制臺(tái),兩者之間的通信采用HTTPS安全加密協(xié)議傳輸。
由于實(shí)現(xiàn)本系統(tǒng)所需的軟件較多,筆者在此做一簡(jiǎn)要說明(見附表)。
上述軟件都是開放軟件,用戶可以直接登錄相應(yīng)軟件的正式網(wǎng)站下載源代碼。
附表
軟件名稱 | 功能簡(jiǎn)述 | 正式網(wǎng)址 | 軟件版本 |
Snort | 網(wǎng)絡(luò)入侵探測(cè)器 | www.snort.org/ | 1.8.6 |
Libpcap | Snort所依賴的網(wǎng)絡(luò)抓包庫 | www.tcpdump.org/ | 0.7.1 |
MySQL | 入侵事件數(shù)據(jù)庫 | www.mysql.org/ | 3.23.49 |
Apache | Web服務(wù)器 | www.apache.org/ | 1.3.24 |
Mod_ssl | 為Apache提供SSL加密功能的模塊 | www.modssl.org/ | 2.8.8 |
OpenSSL | 開放源代碼的SSL加密庫,為mod_ssl所依賴 | www.openssl.org/ | 0.9.6d |
MM | 為Apache的模塊提供共享內(nèi)存服務(wù) | www.engelschall.com | 1.1.3 |
ACID | 基于Web的入侵事件數(shù)據(jù)庫分析控制臺(tái) | www.cert.org/kb// | 0.9.6b21 |
PHP | ACID的實(shí)現(xiàn)語言 | www.php.net/ | 4.0.6 |
GD | 被PHP用來即時(shí)生成PNG和JPG圖像的庫 | www.boutell.com/gd | 1.8.4 |
ADODB | 為ACID提供便捷的數(shù)據(jù)庫接口 | php.weblogs.com/ | 2.00 |
PHPlot | ACID所依賴的制圖庫 | www.phplot.com/ | 4.4.6 |
需要特別說明的是,雖然本例中構(gòu)建NIDS所采用的系統(tǒng)平臺(tái)基于Solaris 8 for Intel Platform,但由于在其他種類的系統(tǒng)平臺(tái)上(如Linux、OpenBSD以及Windows 2000等)構(gòu)建NIDS的步驟大同小異,用戶仍可學(xué)有所用。
二、安裝與配置
在正式進(jìn)行軟件安裝之前,請(qǐng)檢查系統(tǒng),確保擁有符合ANSI標(biāo)準(zhǔn)的C/C++編譯器等軟件開發(fā)工具。
1.安裝入侵事件數(shù)據(jù)庫MySQL
首先,以超級(jí)用戶的身份登錄系統(tǒng),創(chuàng)建MySQL 用戶和MySQL用戶組; 然后,以MySQL身份登錄,按照缺省配置將MySQL安裝在/usr/local目錄下;接下來,將源代碼樹中的缺省配置文件My.cnf拷貝到/etc目錄下;再用超級(jí)用戶身份執(zhí)行源碼樹中Scripts目錄下的可執(zhí)行腳本文件Mysql_install_db創(chuàng)建初始數(shù)據(jù)庫; 隨后,用/etc/init.d/mysql.server命令啟動(dòng)數(shù)據(jù)庫服務(wù)器,使用/usr/local/bin/mysqladmin程序改變數(shù)據(jù)庫管理員的口令。
2.安裝Snort
首先安裝Snort所依賴的網(wǎng)絡(luò)抓包庫Libpcap,將其按照缺省配置安裝在/usr/local目錄下之后,開始正式安裝Snort。
#gzip -d -c snort-1.8.6.tar.gz | tar xvf -
#cd snort-1.8.6
#./configure --prefix=/usr/local --with-mysql=/usr/local
--with-libpcap-includes=/usr/local \
--with-libpcap-libraries=/usr/local
#make
#make install
安裝完畢后,將源碼樹中的Snort.conf文件、Classification.config文件和規(guī)則文件(*.rules)拷貝到系統(tǒng)的/etc目錄下。
按照下列步驟配置Snort,以便將其捕獲的網(wǎng)絡(luò)信息輸出到MySQL數(shù)據(jù)庫。
(1)創(chuàng)建Snort入侵事件數(shù)據(jù)庫和存檔數(shù)據(jù)庫。
#/usr/local/bin/mysqladmin -u root -p create snort
#/usr/local/bin/mysqladmin -u root -p create snort_archive
(2)執(zhí)行Snort源碼樹下Contrib目錄下的Create_mysql SQL腳本文件,創(chuàng)建相關(guān)表。
#/usr/local/bin/mysql -u root -D snort -p < create_mysql
#/usr/local/bin/mysql -u root -D snort_archive -p < create_mysql
(3)編輯/etc/snort.conf文件,在Output Plugin 段中加入如下一行:
output database: alert, mysql, user=root password=abc123 dbname=snort host=localhost
3.安裝Web服務(wù)器Apache
(1)安裝MM庫
按照缺省配置將MM庫安裝在/usr/local目錄下。
(2)安裝OpenSSL
按照缺省設(shè)置將OpenSSL安裝在/usr/local目錄下。
(3)為Apache擴(kuò)展mod_ssl代碼
#gzip -d -c apache-1.3.24.tar.gz | tar xvf -
#gzip -d -c mod_ssl-2.8.8-1.3.24.tar.gz | tar xvf -
#cd mod_ssl-2.8.8-1.3.24
#./configure --with-apache=apache-1.3.24
該命令運(yùn)行成功之后,會(huì)有提示說明已經(jīng)成功擴(kuò)展了Apache的源代碼。
(4)安裝Apache
#cd ../apache-1.3.24
#SSL_BASE=/usr/local EAPI_MM=/usr/local \
./configure --enable-module=so
--enable-module=ssl --prefix=/usr/local
#make
#make certificate
#make install
其中,Make certificate命令是為mod_ssl生成所需的安全證書,按照提示輸入相應(yīng)信息即可。這樣,Apache就被安裝在/usr/local目錄下。
4.安裝實(shí)現(xiàn)語言PHP
按照缺省配置,將為PHP提供即時(shí)生成PNG和JPG圖像功能的GD庫安裝到/usr/local目錄下; 然后采用PHP的Apache DSO安裝模式將其安裝到/usr/local/libexec目錄,成為Apache的動(dòng)態(tài)共享模塊。另外,不要忘記把對(duì)MySQL的支持和GD庫也編譯到模塊里。
5.安裝分析控制臺(tái)ACID
該部分的安裝工作具體包括3個(gè)軟件包:Adodb200.tar.gz、Phplot-4.4.6.tar.gz和Acid-0.9.6b21.tar.gz。安裝過程十分簡(jiǎn)單,只需分別將這3個(gè)軟件包解壓縮并展開在Apache服務(wù)器的文檔根目錄下即可。
然后開始配置工作。轉(zhuǎn)到Acid-0.9.6b21目錄下編輯ACID的配置文件Acid_conf.php,給下列變量賦值:
$Dblib_path="../adodb200"
$DBtype="mysql"
$alert_dbname="snort"
$alert_host="localhost"
$alert_port="3306"
$alert_user="root"
$alert_password="abc123"
$archive_dbname="snort_archive"
$archive_host="localhost"
$archive_port="3306"
$archive_user="root"
$archive_password="abc123"
$ChartLib_path="../phplot-4.4.6"
$Chart_file_format="png"
$portscan_file="/var/log/snort/portscan.log"
至此,網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的軟件安裝工作結(jié)束。
三、系統(tǒng)部署及運(yùn)行
本系統(tǒng)被部署在網(wǎng)絡(luò)服務(wù)器所處的DMZ區(qū),用來監(jiān)控來自互聯(lián)網(wǎng)和內(nèi)網(wǎng)的網(wǎng)絡(luò)流量。負(fù)責(zé)監(jiān)控的網(wǎng)絡(luò)探測(cè)器Snort使用無IP地址的網(wǎng)卡進(jìn)行監(jiān)聽,以保證NIDS自身的安全; 通過另一塊網(wǎng)卡接入內(nèi)網(wǎng),并為其分配內(nèi)網(wǎng)所使用的私有IP地址,以便從內(nèi)網(wǎng)訪問分析控制臺(tái)程序ACID。通過啟用Apache服務(wù)器的用戶身份驗(yàn)證和訪問控制機(jī)制,并結(jié)合SSL,保證系統(tǒng)的訪問安全。
另外,部署NIDS的關(guān)鍵是應(yīng)當(dāng)保證系統(tǒng)的監(jiān)聽網(wǎng)卡所連接的設(shè)備端口能夠“看到”受監(jiān)控網(wǎng)段的全部網(wǎng)絡(luò)流量。在共享式網(wǎng)絡(luò)中,這不是問題,但在交換式網(wǎng)絡(luò)中,由于交換機(jī)的每個(gè)端口擁有自己的沖突域,因此無法捕獲除廣播和組播之外的網(wǎng)絡(luò)流量,這就要求交換機(jī)提供監(jiān)控端口,本網(wǎng)絡(luò)使用的是Cisco Catalyst系列交換機(jī),其監(jiān)控端口是通過端口的SPAN特性來實(shí)現(xiàn)的,用交換機(jī)管理軟件啟用該特性即可。
為了運(yùn)行該系統(tǒng),以超級(jí)用戶身份執(zhí)行下列命令:
#/etc/init.d/mysql.server start
#/usr/local/bin/snort -c /etc/snort.conf -l /var/log/snort -I elx0 -D
#/usr/local/bin/apachectl sslstart
這樣,NIDS已開始運(yùn)行,然后在內(nèi)網(wǎng)的管理PC機(jī)上啟動(dòng)瀏覽器,在地址欄中鍵入:https://192.168.1.8/acid-0.9.6b21/,其中192.168.1.8是為該NIDS內(nèi)網(wǎng)網(wǎng)卡分配的IP地址。首次運(yùn)行時(shí),控制臺(tái)會(huì)提示用戶對(duì)入侵事件數(shù)據(jù)庫進(jìn)行擴(kuò)展,按照提示擴(kuò)展完畢后,控制臺(tái)主界面出現(xiàn)。如圖1所示。
圖1 一天之內(nèi)的報(bào)警頻率
主界面里顯示的信息包括:觸發(fā)安全規(guī)則的網(wǎng)絡(luò)流量中各種協(xié)議所占的比例、警報(bào)的數(shù)量、入侵主機(jī)和目標(biāo)主機(jī)的IP地址及端口號(hào)等。ACID控制臺(tái)還提供強(qiáng)大的搜索功能,用戶可根據(jù)時(shí)間、IP地址、端口號(hào)、協(xié)議類型以及數(shù)據(jù)凈荷(payload)等多種條件的靈活組合,在入侵事件數(shù)據(jù)庫中進(jìn)行查詢,以幫助網(wǎng)管人員進(jìn)行分析。
入侵特征庫是否豐富對(duì)一個(gè)NIDS非常重要,本系統(tǒng)同時(shí)支持多種有影響的入侵特征庫,包括CERT/CC、arachNIDS和CVE等。在警報(bào)中除了列出入侵事件的命名外,還有到相應(yīng)入侵特征庫的Web鏈接,如果某個(gè)警報(bào)存在多個(gè)命名,則同時(shí)予以列出,以便參考。網(wǎng)絡(luò)管理人員可通過這些鏈接去查找在線入侵特征庫,以便獲得關(guān)于特定入侵事件更加詳細(xì)的信息和相應(yīng)的解決辦法。
應(yīng)用ACID提供的制圖功能可以直觀地對(duì)網(wǎng)絡(luò)入侵事件進(jìn)行分析,而生成的圖表又可進(jìn)一步豐富網(wǎng)管人員編制的報(bào)告。例如ACID分析控制臺(tái)可以按用戶指定的時(shí)間段生成入侵事件的頻率圖,如圖2所示。
圖2 一周報(bào)警頻率
結(jié)束語
網(wǎng)絡(luò)安全是一個(gè)復(fù)雜的問題,只依靠1~2種網(wǎng)絡(luò)安全產(chǎn)品是不能解決問題的,必須綜合應(yīng)用多種安全技術(shù),并將其功能有機(jī)地整合到一起,進(jìn)而構(gòu)成統(tǒng)一的網(wǎng)絡(luò)安全基礎(chǔ)設(shè)施。
對(duì)于一些企業(yè)用戶來說,安全產(chǎn)品并不是非買不可,當(dāng)前在互聯(lián)網(wǎng)上以開放源代碼為代表的免費(fèi)資源非常多,這些企業(yè)應(yīng)該努力開發(fā)與利用。也許有人會(huì)懷疑這種資源的可靠性,請(qǐng)不要忘記互聯(lián)網(wǎng)的3大應(yīng)用都在由開放源代碼軟件支撐著:互聯(lián)網(wǎng)上超過半數(shù)的站點(diǎn)是在運(yùn)行Apache; BIND完成著幾乎全部的域名解析;說不定您的電子郵件正通過Sendmail程序在互聯(lián)網(wǎng)上傳遞。