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