[分享]開放原始碼的入侵偵測系統:Snort

夢夢狐

疑難雜症狐
已加入
11/13/03
訊息
3,073
互動分數
0
點數
36
網站
www.machcannon.idv.tw
Snort是一種目前所知最便宜的IDS(入侵偵測系統)解決方案。由於為開放原始碼系統且不斷的持續發展,因此亦受到職業界相當廣泛的使用及關注;
雖然效能不如Cisco、3com的硬體式IDS,但後者動札數十萬元的解決方案亦使大部分中小型網路環境不勝任於此種高貴的安全控管系統,因此在中小型、甚至是傭有多台電腦的個人環境下均為最佳之IDS,若搭配外掛則可以動態控制Linux Iptables防火牆以達到簡易ICS(入侵防禦系統)之目的。


by.gif
sa.gif

本文由夢夢狐(mach_cannon)製作,援用開放創用姓名標示─相同方式分享 2.5 授權。
http://creativecommons.org/licenses/by-sa/2.5/tw/deed.zh_TW
在遵從此授權下任何人均可在不通知原作者情況下自由發布、轉貼、及發展此文章。

Snort:Linux CentOS version

1.安裝前預備動作

Linux版本的Snort安裝本身雖較Windows版簡易些,不過由於需要對Linux本身有些了解
因此難度亦不亞於安裝Windows版本之Snort平台
由於php5的大幅度更改使ACID無法於php5環境中正常運作且Fedora code 4/5更換php版本步驟過於繁瑣
因此直接改採用仍在使用php4之CentOS作為本次的教學文。
(光是確定是php的問題,以及嘗試更換Fedora code的php版本就花了很多時間了.......)

無論是Linux版本還是等一下會說到的Windows版本,請注意盡量以新安裝的系統作為平台
其上不要有任何其他程式以浪費伺服器之效能。
由於IDS系統需要將任何接收到的封包給解開、過濾並重新傳送,因此實用上在高流量環境效能要求相當大
實際利用時多半甚是會將HTTP伺服器和MySQL資料庫分散到另一台伺服器代勞,以避免流量過大時掉封包的情形。

首先在安裝系統時,請先確認以下套件已安裝:

HTTP伺服器:
php
php-mysql

PHP資料庫:
mysql-server
mysqlclient10

00.jpg

01.jpg


然後也請至桌面的應用程式=>系統設定=>伺服器設定=>服務
去檢查httpd和mysqld是否有設為開機時啟動。

03.jpg


在Linux下Apache網頁伺服器的根目錄是在/var/www/html/ 資料夾
在其中建立一個空白檔案,命名為index.php
並寫入以下內容:

<?php phpinfo(); ?>

將文件存檔,開啟網路瀏覽器,在網址列鍵入http://localhost/
Apache和php都正常的話,就會出現一張php自我檢測網頁
同時上面也會顯示php的版本。

04.jpg


可以建立一個捷徑到/var/www/html/ 在使用者目錄,對往後的工作會方便一些

指令是ln -s /var/www/html/

2.phpmyadmin

首先請至http://www.phpmyadmin.net/ 取得phpmyadmin這套MySQL管理程式
因為安裝方便性的緣故,因此請使用2.7pl2版本
或著也可以使用最新的版本,使用內建的安裝程式來設定安裝檔

05.jpg


在下載完成後整個解壓縮,置入Apache的網頁目錄中
輸入http://localhost/[phpmyadmin的資料夾名]/ 即可。
為求安全性,請將該資料夾名稱改成只有自己知道的名稱。

如果Apache、php、MySQL全部正常,那麼phpmyadmin就可以正常啟動

06.jpg


之後,首先可以看到首頁下方的紅色警告,root沒有密碼是會使整個系統相當危險的
因此需要更改root的密碼和一些安全性設定
進入到權限頁面,更改root的密碼;同時這個自訂的MySQL密碼請牢記,過程中會再使用到

07.jpg

08.jpg


然後正常的話就會有錯誤訊息出現

09.jpg


回到phpmyadmin的資料夾下,找到config.inc.php檔案
如果沒有這個檔案,就改為修改config.default.php

找尋$cfg['Servers'][$i]['password'] = ''; 改為$cfg['Servers'][$i]['password'] = '[MySQL密碼]';

更改完成後就會回復正常,且有密碼的保護了
接下來請將所有其他的未使用帳號以及資料庫test給刪除......。

3.進入www.snort.org取得安裝檔
進入下載頁時,可以看到上方的選項
選擇Binaries => Linux => 所要安裝的snort版本rpm套件
並將snort安裝完成。請下載RHEL版本的snort和snort-mysql,下載完成後滑鼠左鍵雙點即可安裝。
如果snort-mysql安裝錯誤那麼就可能下載到了fedora code 4的版本,請移除後重新安裝
(移除指令是 yum remove [rpm套件名稱] )

然後在shell直接鍵入snort指令確認
如果出現snort小豬豬的圖樣和錯誤訊息就代表snort本身(不含設定檔)是安裝成功了......>w<

4.編輯snort.conf
snort.conf位置在 /etc/snort內,等一下下載的規則檔內也有個snort.conf可使用(需自行複製)

找尋# output database: log, mysql, user=root password=test dbname=db host=localhost
改為output database: alert, mysql, user=snort password=[mySQL密碼] dbname=snort_log host=localhost sensor_name=[本機電腦名稱]
(均為同一行)

5.回到snort.org,下載規則檔案

09.jpg

10.jpg

11.jpg


請下載免費且免註冊的Sourcefire VRT Certified Rules版本規則檔,版本雖舊但已足夠
(最新版需付費購買)

下載後解壓縮,將2個資料夾直接複製到/etc/snort資料夾之下覆蓋原資料夾即可

6.編輯MySQL
回到剛剛的phpmyadmin(http://localhost/phpMyAdmin/)
首先使用權限功能增加使用者

12.jpg


選取Add a new user
User name設為snort
Host則是選取旁邊的下拉式選單中的local(只准許本地連結)
密碼和當初設定的MySQL密碼相同
權限請照下圖的方式選取

14.jpg


同樣的方法請再新增帳號名acid,除User name外全部相同
完成後會是這樣:

15.jpg


回到首頁,有個增加新資料庫的方塊
分別打入snort_log和snort_archive,以增加2個新的資料庫

瀏覽器中的phpmyadmin畫面請先不要關掉,之後回到網路上的www.snort.org,下載snort同一版本的原始碼編譯版本

16.jpg


去找解壓縮資料夾下的\schemas中create_mysql檔案,將檔案開啟
把裡面的內容全都一字不漏複製起來

回到瀏覽器,進入到snort_log選單(直接選取剛剛的下拉式方塊中的資料庫名即可)
選取上方選單的sql選項

17.jpg


內容全部貼到那個大方塊裡面,然後選取下方的「go」

18.jpg


然後執行snort
snort -c /etc/snort/snort.conf

如果出現錯誤訊息請回頭再檢查,正常的話會使snort卡在這個地方(開始正常執行)
不過基本上和windows版相較簡單許多,一般都不會有問題
如果要停止執行的話,請直接按ctrl-c強迫停止,snort停止後會列出報表顯示執行的狀況
如果以後想開機即執行的話,也請至桌面的應用程式=>系統設定=>伺服器設定=>服務
去檢查snortd是否有設為開機時啟動。



7.安裝ACID

http://acidlab.sourceforge.net/

19.jpg


此處是使用0.9.6b23(不過ACID已經停止發展了所以版本不會再更新)
解壓縮後將整個目錄置入網頁資料夾/var/www/html下

ACID執行需要ADODB、PHPlot及JPGraph三項函式庫
ADODB:http://adodb.sourceforge.net/
PHPlot:http://sourceforge.net/projects/phplot/
JPGraph:http://www.aditus.nu/jpgraph/
建議全部一起下載並解壓縮後再繼續動作
ADODB及PHPlot和ACID一樣置入Appserv套件的網頁目錄中,JPGraph解壓後複製所有的*.inc檔案及*.php檔案置入PHPlot的資料夾內。

回頭到ACID的設定,找到ACID目錄中的acid_conf.php,並開始修改(一樣需使用notepad2)
找尋$DBlib_path = ""; 改為$DBlib_path = "var/www/html/adodb";

將以下設定
$alert_dbname = "snort_log";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "root";
$alert_password = "mypassword";

全部改為
$alert_dbname = "snort_log";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "acid";
$alert_password = "[mySQL密碼]";

副資料庫亦同,將以下全部設定
$archive_dbname = "snort_archive";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "root";
$archive_password = "mypassword";

全數改為
$archive_dbname = "snort_archive";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "acid";
$archive_password = "[mySQL密碼]";

找尋ChartLib_path = ""; 改為ChartLib_path = "/var/www/html/phplot";

之後開啟http://localhost/acid/查看是否成功,如果成功的話會呈現如此頁面
如果失敗的話檢查一下......完全無法檢查出原因時,則改用root帳號

20.jpg

按下setup page,然後在下一頁按下create ACID AG

21.jpg

22.jpg


......至此一切全部完成!
最後,在Linux版本中補上一張抓到攻擊封包的畫面
23.jpg

24.jpg
 
最後編輯:

夢夢狐

疑難雜症狐
已加入
11/13/03
訊息
3,073
互動分數
0
點數
36
網站
www.machcannon.idv.tw
snort: windows version

1.將Appserv套件安裝完成

http://prdownloads.sourceforge.net/appserv/
此處是使用Version 2.4.6
途中請確認全安裝(包括php、MySQL、phpmyadmin);同時MySQL密碼請牢記,過程中會再使用到
server name使用localhost即可(本地端的意思),信箱為root@localhost

01.jpg

02.jpg


安裝完成後,使用http://localhost/phpMyAdmin/網址開啟phpmyadmin,確認是否安裝完成
途中瀏覽器會詢問帳號密碼,此時的帳號名為root,密碼為安裝時所設定的MySQL密碼

03.jpg

04.jpg


然後開啟純文字模式,直接打指令mysql,如果顯示的是拒絕存取而不是找不到檔案的話即為成功

2.進入www.snort.org取得安裝檔
進入下載頁時,可以看到上方的選項
選擇Binaries => win32 => 所要安裝的snort版本
並將snort安裝完成(於安裝介面持續按下一步即可)

此處使用的snort是version 2.6.0

05.jpg

06.jpg

07.jpg


3.在http://www.winpcap.org/下載winpcap並安裝(於安裝介面持續按下一步即可)
本文撰寫時的版本為3.1

4.在純文字模式鍵入指令
[作業系統槽]\snort\bin\snort
如果出現snort小豬豬的圖樣和錯誤訊息就代表snort本身(不含設定檔)是安裝成功了......>w<

然後使用 [作業系統槽]\snort\bin\snort -W 指令查看電腦中的網路卡以及snort中網路卡的編號
(注意:本指令在Linux版本中無效)
請嚴格注意指令參數的大小寫,因為此程式是由Linux移植的,所以參數的大小寫視為不同字元和功能......

08.jpg


5.安裝notepad2,因為等一下要編輯snort.conf的緣故
而snort.conf是Linux格式的純文字檔案,因此在Windows環境下開啟會變的一團亂
使用notepad2可以解決此問題
http://www.flos-freeware.ch/notepad2.html
下載後直接解壓縮即可使用

6.編輯snort.conf
snort.conf位置在 [作業系統槽]\snort\etc\ 裡面

找尋var RULE_PATH ../ rules 改為var RULE_PATH [作業系統槽]:\snort\rules

找尋# output database: log, mysql, user=root password=test dbname=db host=localhost
改為output database: alert, mysql, user=snort password=[mySQL密碼] dbname=snort_log host=localhost sensor_name=[本機電腦名稱]
(均為同一行)

找尋include classification.config 改為include [作業系統槽]:\snort\etc\classification.config

找尋include reference.config 改為include [作業系統槽]:\snort\etc\reference.config

找尋dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/ 改為
dynamicpreprocessor directory [作業系統槽]:\Snort\lib\snort_dynamicpreprocessor

找尋# output log_tcpdump: tcpdump.log (請全部鍵入搜尋工具尋找,有相當相似的另一選項)
改為output alert_fast: alert.ids

7.回到snort.org,下載規則檔案

09.jpg

10.jpg

11.jpg


請下載免費且免註冊的Sourcefire VRT Certified Rules版本規則檔,版本雖舊但已足夠
(最新版需付費購買)

下載後解壓縮,將2個資料夾直接複製到snort資料夾之下覆蓋原資料夾即可

8.編輯MySQL
回到剛剛的phpmyadmin(http://localhost/phpMyAdmin/)
首先使用privileges(權限)功能增加使用者

12.jpg


選取Add a new user
User name設為snort
Host則是選取旁邊的下拉式選單中的local(只准許本地連結)
密碼和當初設定的MySQL密碼相同
權限請照下圖的方式選取

13.jpg


同樣的方法請再新增帳號名acid,除User name外全部相同
完成後會是這樣:

14.jpg


回到首頁,有個增加新資料庫的方塊
分別打入snort_log和snort_archive,以增加2個新的資料庫
完成後會是這樣:

15.jpg


瀏覽器先別關掉,去找[作業系統槽]:\snort\schemas資料夾下面的create_mysql檔案,用剛剛安裝的notepad2開啟
把裡面的內容全都一字不漏複製起來

回到瀏覽器,進入到snort_log選單(直接選取剛剛的下拉式方塊中的資料庫名即可)
選取上方選單的sql選項

17.jpg


內容全部貼到那個大方塊裡面,然後選取下方的「go」

18.jpg

19.jpg


同樣的方式,也在snort_archive資料庫中建立資料即可。

8.在snort資料夾下的log資料夾中建立一個空白的記事本,改名為alert.ids
然後執行snort
[作業系統槽]:\snort\bin \snort -c [作業系統槽]:\snort\etc\snort\snort.conf -l [作業系統槽]:\snort\log -i [網卡在snort中的編號]
例如在下的是如此:
c:\snort\bin \snort -c c:\snort\etc\snort\snort.conf -l c:\snort\log -i 2
請嚴格注意指令參數的大小寫,因為此程式是由Linux移植的,所以參數的大小寫視為不同字元和功能......

如果出現錯誤訊息請回頭再檢查,正常的話會使snort卡在這個地方(開始正常執行)

20.jpg


為自己歡呼吧!最困難的部分結束了。
其中狐自身曾發生ERROR: openalertfile() => fopen() alert file log/alert.ids: no such file or directory的問題
後來加上-l參數(指定紀錄檔的位置)就解決了。不過通常在Linux平台上此參數是不需要加上的......
如果要停止執行的話,請直接按ctrl-c強迫停止,snort停止後會列出報表顯示執行的狀況

9.開始安裝ACID
http://acidlab.sourceforge.net/
此處是使用0.9.6b23(不過ACID已經停止發展了所以版本不會再更新|||)

21.jpg


解壓縮後將整個目錄置入Appserv套件的網頁目錄中
如果安裝時沒變更位置,即為[作業系統槽]:\AppServ\www ;Appserv版本如果不同則位置也可能會不同......。

ACID執行需要ADODB、PHPlot及JPGraph三項函式庫
ADODB:http://adodb.sourceforge.net/
PHPlot:http://sourceforge.net/projects/phplot/
JPGraph:http://www.aditus.nu/jpgraph/
建議全部一起下載並解壓縮後再繼續動作
ADODB及PHPlot和ACID一樣置入Appserv套件的網頁目錄中,JPGraph解壓後複製所有的*.inc檔案及*.php檔案置入PHPlot的資料夾內。

回頭到ACID的設定,找到ACID目錄中的acid_conf.php,並開始修改(一樣需使用notepad2)
找尋$DBlib_path = ""; 改為$DBlib_path = "C:\AppServ\www\adodb";

將以下設定
$alert_dbname = "snort_log";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "root";
$alert_password = "mypassword";

全部改為
$alert_dbname = "snort_log";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "acid";
$alert_password = "[mySQL密碼]";

副資料庫亦同,將以下全部設定
$archive_dbname = "snort_archive";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "root";
$archive_password = "mypassword";

全數改為
$archive_dbname = "snort_archive";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "acid";
$archive_password = "[mySQL密碼]";

找尋ChartLib_path = ""; 改為ChartLib_path = "C:\AppServ\www\phplot";

之後開啟http://localhost/acid/查看是否成功,如果成功的話會呈現如此頁面
如果失敗的話檢查一下......完全無法檢查出原因時,則改用root帳號

22.jpg

23.jpg

24.jpg


......至此一切全部完成!

25.jpg





---------------------------------------------------------------------------------------
累爆了......花了5小時寫這篇文章XDDD|||
希望各位有需求的人能夠喜歡這篇文章喔!>w<"
有任何疑問、問題、甚至祇是笨笨狐哪裡寫不好而已也可以向狐反應......@ @"
不過很多方面可能連狐自己也不知道就是了,還請見諒.....。

那麼就這樣了喔! 0w0/
 

arm370x

克魯澤
已加入
2/27/05
訊息
742
互動分數
0
點數
16
年齡
34
哇!!!好多!!

正在仔細研究中...期待能拿這套取代家中的劣質防禦系統

感謝大大的分享與辛勞^++++^
 

h42899

初級會員
已加入
12/5/03
訊息
19
互動分數
0
點數
1
很不錯的技術文章
學到了不少東西
感謝大大的分享
 

星雨流痕

進階會員
已加入
7/4/05
訊息
446
互動分數
0
點數
0
年齡
37
網站
造訪網站
做的不錯喔 圖文並茂
真是辛苦啦 感謝您的教學
小弟收下囉
 

carloschen

進階會員
已加入
9/18/03
訊息
166
互動分數
0
點數
0
非常好的文章,拿來轉貼在自己討論區做筆記XD
 

Jee

榮譽會員
已加入
10/25/05
訊息
3,528
互動分數
0
點數
36
年齡
41
太厲害了!!
好一個圖文並茂的教學文章!
應該花超多時間吧
大大辛苦了~
感謝分享^^
 

Keven

進階會員
已加入
9/19/03
訊息
350
互動分數
0
點數
16
網站
造訪網站
我資安的期末作業剛好要用到snort
google搜尋看到這篇文章
解說詳盡又圖文並茂
非常感謝夢夢狐的文章
對我的作業幫助很大

早知道第一時間就來CBB找資料了@@
這裡真好
 
▌延伸閱讀