snort 2的新特性
在snort 2出現之前,由于snort本身存在的缺陷及網絡入侵檢測系統的先天不足,使snort在對抗使用了IDS躲避技術的網絡攻擊時完全處于下風。在這種背景下,以Martin Roesch為首的snort開發團隊開始了snort 2的開發。snort 2采用了很多新的技術,大量代碼被重寫,體系結構也發生了根本性的變化。與snort-1.x(不包括snort-1.9,因為snort-1.9屬于snort 2)相比,snort 2具有以下優點:
◆采用更高效的檢測和模式匹配算法,使性能比舊版本提高了5倍以上。
◆具有更好的擴展性,采用插入式檢測引擎,可以作為標準的網絡入侵檢測系統、主機入侵檢測系統使用;與netfilter結合使用,可以作為網關IDS(Gateway IDS,GIDS);與nmap等系統指紋識別工具結合使用,可以作為基于目標的IDS(Target-based IDS)。
◆開發人員重寫了協議分析代碼,使snort 2具備出色的協議分析能力。
◆支持多種格式的特征碼規則輸入方式,如數據庫、XML等。
◆把輸出部分從主體代碼中分離出來,由單獨的程序barnyard處理snort的輸出。
除了上面所敘述的特點之外,snort 2還有一個商業入侵檢測系統所不具備的優點:費用低廉。這對于預算比較緊張的企業,無疑非常具有吸引力。而且,自由軟件開發人員陸續開發了眾多輔助性的軟件。這些軟件包括圖形化的管理系統、日志分析工具、檢測插件、圖形化的規則編寫軟件,以及規則自動升級軟件等。對這些軟件進行合理地選擇、集成,可以形成一套比較完善的分布式入侵檢測系統。
分布式snort入侵檢測系統
分布式snort入侵監測系統的主要組成部分包括中央分析服務器、IDS探針和協同代理。一般情況下,一個企業的網絡可以分為外部網絡、企業內部網絡和DMZ區等。入侵監測系統既可以部署在防火墻之外,也可以部署于防火墻之內。部署于防火墻之外,可以獲得更多攻擊數據,但是誤報警率也高。因此一般情況下,入侵檢測系統部署于防火墻之后是比較明智的。
中央分析服務器
中央分析服務器是整個系統的心臟和靈魂。它一般由一個數據庫系統和一個Web服務器組成,為系統管理員提供交互式Web管理界面。在中央分析服務器上,管理人員可以進行遠程IDS探針管理、攻擊數據查詢、實時監視網絡攻擊及深入分析,如攻擊方向的遷移、識別攻擊模式等。MySQL數據庫、Apache服務器、SnortCenter和ACID(Analysis Console for Incident Databases)是一個不錯的snort平臺系統組合。
SnortCenter是一個基于Web的snort探針和規則管理系統,用于遠程修改snort探針的配置,起動、停止探針,編輯、分發snort特征碼規則。如果與cron和curl結合使用,SnortCenter還可以定時為每個探針進行規則升級,自動從snort官方站點獲得最新特征碼規則 ()。SnortCenter的下載地址為。ACID(Analysis Console for Incident Databases)是一個基于PHP的分析引擎,用于查詢、管理snort探針產生的數據庫。ACID的下載地址為。
IDS探針和協同代理
代理是向中央分析服務器報告攻擊信息的軟件,是分布式入侵檢測系統的一個重要部件。SnortCenter Agent和普通意義上的協同代理軟件有些不同,它只是一個SnortCenter進行探針管理的代理工具。通過SnortCenter Agent,SnortCenter能夠起動、關閉受保護主機上的snort探針;修改探針的配置和使用的特征碼規則。SnortCenter Agent是用Perl語言編寫的,可以在不同的平臺上使用。為了防止登錄過程中賬戶和密碼的泄漏,它使用SSL和SnortCenter之間進行通信。snort探針是真正進行入侵檢測的組件,其源代碼可以從獲得。
系統安裝及部署
數據庫的安裝和設置
在分析服務器上,首先要建立記錄snort報警和日志數據庫及SnortCenter、ACID需要的數據庫。在臨時目錄中解壓縮snort的源代碼,進入contrib目錄,建立數據庫,并進行相關的配置。代碼如下:
# mysql -u root -p
create database snort;
connect snort
source create_mysql
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort;
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
grant CREATE, INSERT, SELECT, UPDATE on snort.* to acidviewer;
grant CREATE, INSERT, SELECT, UPDATE on snort.* to acidviewer@localhost;
connect mysql
set password for 'snort'@'localhost' = password('yourpassword');
set password for 'snort'@'%' = password('yourpassword');
flush privileges;
安裝SnortCenter
把最新版的SnortCenter源代碼解壓縮,將目錄里面的文件復制到Apache的DocumentRoot目錄(如/usr/local/apache/htdocs)。下載SnortCenter需要的adodb(),安裝到SnortCenter所在的目錄,然后建立SnortCenter數據庫。代碼如下:
$ tar zxvf snortcenter-v0.9.6.tar.gz
$ cp snortcenter-v0.9.6/* /usr/local/apache/htdocs/
$ tar zxvf adodb250.tgz
$ cp -R ./adodb /usr/local/apache/htdocs/
$ echo "CREATE DATABASE snortcenter;" | mysql -u root -p
完成了基本的安裝之后,需要根據系統的情況手工編輯/usr/local/apache/htdocs/config.php文件,從而結束SnortCenter的配置。一般情況下需要修改的參數見表1。
表1 /usr/local/apache/htdocs/config.php文件需要修改的參數

完成上面的配置后,啟動Apache服務器,在瀏覽器的地址欄輸入分析中心服務器的地址,將會得到圖1所示的登錄畫面。
圖1 SnortCenter登陸界面

系統缺省賬戶是admin,密碼為change。登錄進入系統以后,點擊admin→Create DB Tables選單,完成SnortCenter的安裝,如圖2所示。
圖2 創建SnortCenter數據庫

安裝ACID
ACID需要PHP支持gd,并對PHPLot()、ADODB進行支持。新版本的ACID(0.9.6b22以后版本)還需要JpGraph()的支持。ACID及相關軟件安裝到指定位置之后,編輯配置文件acid_conf.php完成其配置,參數設置如表2所示。

另外,ACID本身缺乏必要的訪問控制機制,需要設置Apache對訪問ACID的用戶提供驗證。
安裝snort探針和SnortCenter Agent
分別進入需要保護主機,安裝snort和SnortCenter Agent。SnortCenter Agent需要SSL的支持,所需模塊可以從得到。安裝代碼如下:
$ ./configure -with-mysql
$ make
$ make install
$ tar -zxvf Net_SSLeay.pm.1.21.tar.gz
$ cd Net_ SSLeay.pm.1.21
$ perl Makefile.PL
$ make install
$ mkdir /opt/snortagent/
$ cp snortcenter-agent-v0.1.6.tar.gz /opt/snortagent
$ cd /opt/snortagent
$ tar -zxvf snortcenter-agent-v0.1.6.tar.gz
$ cd sensor
$ ./setup.sh
需要注意的問題
系統涉及到網絡中的很多主機,各個snort探針需要通過網絡時間協議(Network Time Protocol)實現時間的精確同步。有關NTP服務器的配置請參考相關的文檔,這里就不贅述了。