實(shí)驗(yàn)環(huán)境rh8.0
一、snort介紹
Snort是被設(shè)計(jì)用來填補(bǔ)昂貴的、探測(cè)繁重的網(wǎng)絡(luò)侵入情況的系統(tǒng)留下的空缺。Snort是一個(gè)免費(fèi)的、跨平臺(tái)的軟件包,用作監(jiān)視小型TCP/IP網(wǎng)的嗅探器、日志記錄、侵入探測(cè)器。它可以運(yùn)行在linux/UNIX和Win32系統(tǒng)上,你只需要幾分鐘就可以安裝好并可以開始使用它。
Snort的一些功能:
- 實(shí)時(shí)通訊分析和信息包記錄
- 包裝有效載荷檢查
- 協(xié)議分析和內(nèi)容查詢匹配
- 探測(cè)緩沖溢出、秘密端口掃描、CGI攻擊、SMB探測(cè)、操作系統(tǒng)侵入嘗試
- 對(duì)系統(tǒng)日志、指定文件、Unix socket或通過Samba的WinPopus 進(jìn)行實(shí)時(shí)報(bào)警
Snort有三種主要模式:信息包嗅探器、信息包記錄器或成熟的侵入探測(cè)系統(tǒng)。遵循開發(fā)/自由軟件最重要的慣例,Snort支持各種形式的插件、擴(kuò)充和定制,包括數(shù)據(jù)庫(kù)或是XML記錄、小幀探測(cè)和統(tǒng)計(jì)的異常探測(cè)等。
信息包有效載荷探測(cè)是Snort最有用的一個(gè)特點(diǎn),這就意味著很多額外種類的敵對(duì)行為可以被探測(cè)到。
二、所需軟件包的安裝以及安裝
下載所需要的軟件包
1.libcap
http://www.mirrors.wiretapped.net/security/packet-capture/libpcap/libpcap-0.8.3.tar.gz
2.snort
http://www.snort.org/dl/snort-2.2.0.tar.gz
3.snort trules
http://www.snort.org/dl/rules/snortrules-snapshot-2_2.tar.gz
4.openssl
http://www.openssl.org/source/openssl-0.9.7d.tar.gz
5.acid基于Web的入侵事件數(shù)據(jù)庫(kù)分析控制臺(tái)
http://acidlab.sourceforge.net
6.gd
http://www.boutell.com/gd/
7.adodb為ACID提供便捷的數(shù)據(jù)庫(kù)接口;
http://php.weblogs.com/ADODB
8.phplot ACID所依賴的制圖庫(kù);
http://www.phplot.com/
9.apache
http://www.apache.org
10.mysql
http://wwww.mysql.com
11.php(v>4.2)
http://www.php.net
開始安裝:
1.安裝MySQL,
#addgroup mysql
#adduser mysql
然后,以mysql身份登錄,執(zhí)行下列命令:
$gzip -d -c mysql-3.23.49.tar.gz tar xvf -
$cd mysql-3.23.49
$./configure
$make
$make install
2.安裝openssl
#tar zxvf openssl*
#cd openssl
#./configure
#make
#make test
#make install
3.安裝libpcap
#tar zxvf libpcap*
#cd libpcap-0.8.3
#./configure
如果出現(xiàn):
configure: warning: cannot determine packet capture interface
configure: warning: (see INSTALL for more info)
說明需要編譯系統(tǒng)內(nèi)核,使其對(duì)CONFIG_PACKET支持
#make
#make install
4.安裝snort
#tar zxvf snort*
#cd snort-2.2.0
#./configure --enable-flexresp --with-mysql=/usr/local/mysql --with-openssl=/usr/local/ssl
支持mysql,持openssl 還有更多的一些選項(xiàng),可以參見tarball文檔
如果出現(xiàn):
ERROR! Libpcre header not found, go get it from
請(qǐng)http://www.pcre.org下載lib庫(kù)安裝即可。
如果出現(xiàn):
ERROR! Libnet header not found
請(qǐng)http://www.packetfactory.net/projects/libnet/下載安裝即可。
如果已經(jīng)安裝,可以用--with-libnet-* 選項(xiàng)
#make
#make install
5.安裝apache
#./configure --prefix=/usr/local/apache --enable-so
#make
#make install
6.安裝gd
首先安裝為PHP提供既時(shí)生成PNG和JPG圖象功能的GD庫(kù):
#gzip -d -c gd-2.0.28.tar.gz tar xvf -
#cd gd-2.0.28
#make
#make install
7.安裝php
#gzip -d -c php-4.3.2.tar.gz tar xvf -
#cd php-4.3.2
#./configure -with-mysql=/usr/local/mysql \
--with-apxs=/usr/local/apache/bin/apxs \
--with-gd=/usr/local
#make
#make install
8.安裝ACID
該部分的安裝工作具體包括三個(gè)軟件包:adodb452.tar.gz、phplot-5.0rc1.tar.gz和acid-0.9.6b23.tar.gz 。安裝過程十分簡(jiǎn)單,只需分別將這三個(gè)軟件包解壓縮并展開在Apache服務(wù)器的文檔根目錄下即可,具體操作
如下所示:(本服務(wù)器的文檔目錄為/www/ids)
#cd /www/ids/
#gzip -d -c adodb452.tar.gz tar xvf -
#gzip -d -c phplot-5.0rc1.tar.gz tar xvf -
#gzip -d -c acid-0.9.6b23.tar.gz tar xvf -
然后開始配置工作,轉(zhuǎn)到acid目錄下編輯ACID的配置文件:acid_conf.php給下列變量賦值:
$Dblib_path="../adodb"
$DBtype="mysql"
$alert_dbname="snort"
$alert_host="localhost"
$alert_port="3306"
$alert_user="root"
$alert_password="123"
$archive_dbname="snort"
$archive_host="localhost"
$archive_port="3306"
$archive_user="root"
$archive_password="123"
$ChartLib_path="../phplot"
$Chart_file_format="png"
$portscan_file="/var/log/snort/portscan.log"
好,到此,所需軟件安裝完成,下面進(jìn)入snort的設(shè)定與啟動(dòng)。
三、snort的設(shè)定與啟動(dòng)
我們可以把Snort運(yùn)做在chroot的環(huán)境中,設(shè)定也是很簡(jiǎn)單,首先,可以選定一個(gè)有足夠位置放置Snort的Log的地方,如果您會(huì)定期檢查及清除Log文檔,您可以把Snort的chroot環(huán)境放在/home/snort中,然后需要的是一個(gè)
snort使用者,執(zhí)行以下的指令新增Snort這個(gè)用者:
# groupadd snort
# useradd -g "snort" -d "/home/snort" -s "/nonexists" -c "Snort User" snort
然后,把snortrules.tar.gz這個(gè)文件解壓在/home/snort中,解壓了snortrules包后,在/home/snort/內(nèi)有rules文件出現(xiàn),這就是Snort使用的Ruleset,這些Ruleset就是供Snort用作偵測(cè)任何網(wǎng)絡(luò)反映的基礎(chǔ)。在rules中有一個(gè)是"snort.conf",它是Snort的配置文件,需要按實(shí)際情況修改snort.conf。
在 snort.conf 中,需要修改幾個(gè)地方便可以執(zhí)行 Snort,以下是可能需要修改的地方:
- var HOME_NET
網(wǎng)絡(luò)或是主機(jī)的 IP,例如只有這一臺(tái)服務(wù)器,就可以只輸入服務(wù)器的 IP 地址,如果機(jī)器有兩個(gè)以上的 IP,
可以使用這個(gè)方法:
var HOME_NET [192.168.1.1,192.168.1.2]
或是
var HOME_NET 192.168.1.0/24
-var SMTP [IP.Address]
SMTP 服服器的位置,如果與 HOME_NET 中的不同,只需把 $HOME_NET 移除,并加其指定 SMTP 機(jī)器的IP便可以。
- var HTTP_SERVERS
HTTP 服服器,與 SMTP 中的設(shè)定相同,如成為 Web Server 的不是 HOME_NET 機(jī)器,可以指定給其他的 IP。
- var DNS_SERVERS
DNS 服務(wù)器的IP地址,同時(shí)需要 Uncomment 以下一行:
preprocessor portscan-ignorehosts: $DNS_SERVERS
這可以防止因?yàn)?DNS 的 Lookup 而記錄無用的 PortScan 。
最后是有關(guān)記錄部份的配置,剛才編譯Snort時(shí)加入了"MySQL"的支持,為了使用 MySQL 記錄,先要在 MySQL中
建立 Snort 使用的 Databases、用者名及密碼,執(zhí)行以下命令:
# echo "CREATE DATABASE snort;" mysql -u root -p
# grant INSERT,SELECT on snort.* to snort@localhost
然后在 Snort 的源始碼內(nèi)找到 "contrib/create_mysql",再執(zhí)行以下命令建立 Tables
# mysql -u root -p < create_mysql
完成后,別忘記在 snort.conf 中也要啟動(dòng) MySQL 的支持,簡(jiǎn)單地 Uncomment 以下:
在454行:
output database: log, mysql, user=snort password=123 dbname=snort host=localhost
在493行:
ruletype redalert
{
type alert
output alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort host=localhost
}
四,執(zhí)行snort
一切準(zhǔn)備工作都做好了,那么現(xiàn)在開始讓snort運(yùn)行起來了哦:)
但在這之前請(qǐng):
#mkdir /var/log/snort
#chown snort.snort /var/log/snort
現(xiàn)在開始 cd 進(jìn)入 /home/snort 內(nèi),然后打入這個(gè)命令:
/home/snort #snort -b -d -i eth0 -u snort -g snort -c /home/snort/rules/snort.conf -l /var/log/snort &
-u 功能是使 snort 由 "snort" 這個(gè)使用者執(zhí)行,進(jìn)入 chroot 的用者環(huán)境
-c 指定使用的指定目錄
& 只是在背景中執(zhí)行
五、SNORT規(guī)則編寫簡(jiǎn)介
一條Snort規(guī)則可以分為前后兩個(gè)部分,規(guī)則頭和后面的選項(xiàng)部分。規(guī)則頭包含有匹配后的動(dòng)作命令、協(xié)議類型、以及選擇流量的四元組(源目的IP及源目的端口)。規(guī)則的選項(xiàng)部分是由一個(gè)或幾個(gè)選項(xiàng)的符合,所有主要選項(xiàng)之間是與的關(guān)系。選項(xiàng)之間可能有一定的依賴關(guān)系,選項(xiàng)主要可以分為四類,第一類是數(shù)據(jù)包相關(guān)各種特征的描述選項(xiàng),比如:content、fla gs、dsize、ttl等;第二類是規(guī)則本身相關(guān)一些說明選項(xiàng),比如:reference、sid、classtype、priority等;
第三類是規(guī)則匹配后的動(dòng)作選項(xiàng),比如:msg、resp、react、session、logto、tag等;第四類是選項(xiàng)是對(duì)某些選項(xiàng)的修飾,比如從屬于content的nocase、offset、depth、regex等。由于snort的規(guī)則語言語法非常簡(jiǎn)單,所以可以對(duì)新發(fā)現(xiàn)的攻擊作出快速的反應(yīng),迅速開發(fā)新的snort規(guī)則。編寫新的規(guī)則,最重要的是知道新攻擊的特征碼。要得到一個(gè)新的攻擊的特征碼,一般的方法就是進(jìn)行實(shí)際的測(cè)試。對(duì)一個(gè)測(cè)試網(wǎng)絡(luò)進(jìn)行攻擊,使用snort記錄在攻擊主機(jī)和測(cè)試網(wǎng)絡(luò)之間的數(shù)據(jù)流。然后,對(duì)記錄的數(shù)據(jù)進(jìn)行分析得到其唯一的特征碼,最后把得到的特征碼加入到規(guī)則中。下面是IMAP緩沖區(qū)溢出攻擊被記錄下的數(shù)據(jù)包:
--------------------------------------------------------------------------
052499-22:27:58.403313 192.168.1.4:1034 -> 192.168.1.3:143
TCP TTL:64 TOS:0x0 DF
***PA* Seq: 0x5295B44E Ack: 0x1B4F8970 Win: 0x7D78
90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 3B ...............;
5E 89 76 08 31 ED 31 C9 31 C0 88 6E 07 89 6E 0C ^.v.1.1.1..n..n.
B0 0B 89 F3 6E 08 89 E9 6E 0C 89 EA CD 80 .....n....n.....
31 DB 89 D8 40 CD 80 90 90 90 90 90 90 90 90 90 1...@...........
90 90 90 90 90 90 90 90 90 90 90 E8 C0 FF FF FF ................
2F 62 69 6E 2F 73 68 90 90 90 90 90 90 90 90 90 /bin/sh.........
---------------------------------------------------------------------------
這個(gè)攻擊的特征碼就是/bin/sh字符串及其前面的機(jī)器代碼。這實(shí)際上是一個(gè)shellcode。四用這些信息可以很快開發(fā)出一條新的規(guī)則:
alert tcp any any -> 192.168.1.0/24 143 (content:" E8C0 FFF FF /bin/sh";
msg:"New IMAP Buffer Overflow detected!"
其中的特征碼含有文本和16進(jìn)制兩種形式,它們以 分割,snort運(yùn)行時(shí)都被轉(zhuǎn)換為二進(jìn)制形式。
至此,LINUX下的Snort 安裝建立成功。結(jié)果可以直接從WEB界面上看到,一套完整的IDS系統(tǒng)就可以正常運(yùn)行了。
六,結(jié)束語
Snort 的設(shè)定與安裝都是很簡(jiǎn)單的,盡管 Snort 所做的不外是記錄及提供偵測(cè),可是這個(gè)工作卻不可以忽視,很多公司都有設(shè)定有防火墻,而防火所做的是幫您防止多數(shù)的攻擊,加上使用 Snort 的強(qiáng)大IDS功能,網(wǎng)絡(luò)管理員可以即隨時(shí)知道一切 Cracker、Lamer 對(duì)公司網(wǎng)絡(luò)的攻擊,而同時(shí)可以改變防火墻的Rules,阻止外來的攻擊,這是單一防火墻不能為的。