現在,來介紹一下如何用 Snort來做三件事情∶
Stealth sniffer
stealth NIDS porbe
stealth logger
這一切都是用在一台沒有ip的伺服器上面的。NIDS是Network Intrusion Dectection Server 的簡稱,也就是說入侵檢測伺服器。
為什麼要 stealth 呢?
設定:
首先當然是确定您的網卡安裝無誤,并且可以被 kernel 抓到。然後把網卡所需要的 module 寫到 /etc/modules.conf 檔案中。
現在我們來設定一個沒有 ip 的網卡介面。
編輯檔案 /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
BOOTPROTO=
BROADCAST=
NETWORK=
NETMASK=
IPADDR=
存檔後,用 ifconfig 來 active 我們的 eth0 介面。
初試 stealth
現在我們運作
snort -dvi eth0
這裡 -d 的選項告訴 snort 對資料進行 decode (解碼)
-v 告訴 snort 将結果顯示在螢幕上面
-i 則是指定所需要的 interface
可以用 -C 選項告訴 snort 隻顯示 ASCII 部份。 忽略 hexadecimal 資料。
?$snort -dviC eth0
Log directory= /var/log/snort
Initializing Network Interface eth0
kernel filter, protocol ALL, TURBO mode
(63 frames), raw packet socket
——== Initializing Snort ==——
Decoding Ethernet on interface eth0
——== Initialization Complate ==——
-*> Snort! <*-
Version 1.8.4 (Build 99)
By Martin Roesch ([email protected],www.snort.org)
……
……NIDS入侵檢測本身是一件很複雜的事情。snort 本身也提供了強大的入侵檢測的功能。這裡我隻做一個簡單的介紹,好讓大家有一個概念。如果真正實體去做一個 NIDS 的話。需要些更複雜的動作。例如設定更完善的 rules, 定時更新 snort.conf 中所定義的 rules (當新的攻擊方式出現以後,要及時更新)
首先,我們需要更改一下 /etc/snort/snort.conf 具體需要參照您自己的機器來設定。
#設定 log 存放的地方
config logdir: /var/log/snort
#設定網路
var HOME_NET 192.168.1.0/24
var EXTERNAL_NET any
var SMTP ?$HOME_NET
var HTTP_SERVERS ?$HOME_NET
var SQL_SERVERS ?$HOME_NET
var DNS_SERVERS 192.168.1.250/32 var RULE_PATH ./
#設定 preprocessors
preprocessor frag2
preprocessor stream4: detect_scans
preprocessor stream4_reassemblt
preprocessor portscan:?$HOME_NET 4 3 portscan.log
#設定 output
output database:log,mysql,user=root
dbname-snort host=localhost
#rules
#設定 patch , 這些都是些附加的 rules 的檔案
include ?$RULE_PATH/bad-traffic.rules include ?$RULE_PATH/exploit.rules include ?$RULE_PATH/scan.rules include ?$RULE_PATH/ftp.rules
現在讓我們把 snort 跑起來∶
snort -c /etc/snort/snort.conf -D -i eth0
現在 snort NIDS 的模式跑起來了。 在 default 的情況下∶
alerts 會放在 /var/log/snort/alert 中
port-scanning 會放在 /var/log/snort/portscan.log
當您真正跑 NIDS 的時侯,需要把 snort 以 daemon 的模式來跑。 如果您安裝的是 rpm 的東西,那麼 rpm 檔案中已經包含了一個 snortd 的檔案,并且會幫您安裝在 /etc/rc.d/init.d/ 下面。 當您設定好 snort 的 configure 檔案以後,隻要用 chkconfig 把 snortd 打開就可以了:
加入 snortd
chkconfig ——add snortd
打開 snortd
chkconfig snortd on
或者
chkconfig ——level 3 snortd on
這裡的 level 請自行更改到您所跑的 runlevel
您可以用 cat /etc/inittab | grep id 來看自己在哪個runlevel 上面。
cat /etc/inittab | grep id
id:5:initdefault:
這裡就是說跑在 run level 5 上面。
設定伺服器 我們需要對伺服器做一些設定,讓伺服器把 log 送到我們的 logger 伺服器去。 首先,我們需要設定 /etc/syslog.conf 把 log 送到一個有效的,但是不存在的 ip 下面。例如我們的網路是 192.168.1.0/24 其中并沒有 192.168.1.123 這台機器,也就是說這個 ip 實際上是空的。我們就把 log 指向這裡。您可以指向任意一個空的有效 ip.
vim /etc/syslog.conf
加入
*.info @192.168.1.123
如果您的系統是用 syslog-ng 的話
vim /etc/syslog-ng/syslog-ng.conf
destination d_loghost { udp(ip(192.168.123)
port (514)); };filter f_info { level(info); };log {filter(f_info); destination(d_loghost);};
我們還需要加入 static ARP entry 才可以。 如果您的網路隻是接了記個 Hub 而已, 那麼 ARP 位址一樣可以好象 ip 一樣,設定成虛構的。 如果您有連結 switch, 您需要加入 log 伺服器的真實 MAC 位址。
我們這裡加入我們 logger 伺服器的真實 MAC 位址就可以了。
arp -s 192.168.1.123 00:D0:B7:DB:BF:95
在 Logger 伺服器設定 snort
/etc/snort/snort.conf
var EXTERNAL_NET any
#等于 snort -d
config dump_payload
#等于 snort -C
config dump_chars_only
#設定 log 存放的 path
# frag2 所做的動作就是把 fragmented 給我們 re-assembly
preprocessor frag2
log udp 192.168.1.1/32 any -> 192.168.1.123/32 514(logto: "logged-packets";)
最後一行需要稍微解釋一下∶
我們這裡把 snort 來做 packet logger. 也就是說,并不是把所有的東西都寫入到 /var/log/snort/alert 中。而是 log any packets with match the rule without writing an alert.
udp: 是說,我們這裡用 udp 的 protocol. system log 通常都是使用 udp 的。
192.168.1.1/32: 就是隻我們的伺服器啦,也就是送 log 的機器。 如果您是從整個一個網路段中收 log 也可以用 192.168.1.0/24.
any: any source port 任何 port
->: 這個是 direction operator 大家都知道的
192.168.1.123/35 514 就是我們給出的那個空 ip 啦,port 514
如果沒有指定 logto: 的話,log 會分别儲存在不同的檔案中。 而指定 logto 的話,就會把 log 全部存放到我們指定的檔案中,看起來友善多了。