■SqueezeのSnortをスニッファとして使う。
起動中のオプションは以下の通り。
$ ps ax | grep snort | sed s/".*\:[0-9][0-9] "//g | sed s/"snort "/"&\\\\\n"/g
/usr/sbin/snort \
-m 027 -D -d -l /var/log/snort \
-u snort \
-g snort \
-c /etc/snort/snort.conf -S HOME_NET=[192.168.0.0/16] -i eth0
grep snort
sed s/snort \
/&\\\n/g
■手動起動用のディレクトリ作成。
$ sudo mkdir /var/log/snort/manual
$ sudo chown -R snort:snort /var/log/snort/manual
■よく使うオプション
$ sudo snort --help 2>&1 | grep " \-[bcedDgnruv]"
-b Log packets in tcpdump format (much faster!)
-c <rules> Use Rules File <rules>
-d Dump the Application Layer
-D Run Snort in background (daemon) mode
-e Display the second layer header info
-g <gname> Run snort gid as <gname> group (or gid) after initialization
-n <cnt> Exit after receiving <cnt> packets
-r <tf> Read and process tcpdump file <tf>
-u <uname> Run snort uid as <uname> user (or uid) after initialization
-v Be verbose
■tcpdump形式のスニッファとして起動
「ポート22以外」と、「2000」パケットという条件を除けば、一般的なキャプチャです。
$ sudo snort -n 2000 -dev -i eth0 -u snort -g snort -m 027 -l /var/log/snort/manual not port 22
■統計情報を得る。
$ sudo ls -l /var/log/snort/manual
-rw-r----- 1 snort snort 160081 2012-08-07 16:58 snort.log.1344326217
$ sudo snort -dev -u snort -g snort -r /var/log/snort/manual/snort.log.1344326217 2>&1 | grep "%)" | grep -v "0.000%)"
IP4: 1978 (98.900%)
TCP: 1641 (82.050%)
UDP: 233 (11.650%)
ICMP: 104 (5.200%)
ARP: 22 (1.100%)
■上記の統計からARPを見る。
IPやMACアドレスの情報はご自身の環境で。
$ sudo snort -dev -u snort -g snort -r /var/log/snort/manual/snort.log.1344326217 arp 2>&1 | \
grep ^[0-9] | awk '{print $1,$2,$3}'
08/07-16:57:03.812346 ARP who-has
08/07-16:57:03.812408 ARP reply
08/07-16:57:04.951092 ARP who-has
08/07-16:57:05.951055 ARP who-has
08/07-16:57:07.689831 ARP who-has
08/07-16:57:07.689875 ARP reply
08/07-16:57:32.865433 ARP who-has
08/07-16:57:32.865449 ARP reply
08/07-16:57:38.875047 ARP who-has
08/07-16:57:38.875262 ARP reply
08/07-16:57:58.093421 ARP who-has
08/07-16:57:58.093439 ARP reply
08/07-16:58:14.111062 ARP who-has
08/07-16:58:14.111295 ARP reply
08/07-16:58:23.721424 ARP who-has
08/07-16:58:23.721440 ARP reply
08/07-16:58:48.745422 ARP who-has
08/07-16:58:48.745440 ARP reply
08/07-16:58:54.351053 ARP who-has
08/07-16:58:54.351279 ARP reply
08/07-16:58:57.606715 ARP who-has
08/07-16:58:57.606736 ARP reply
■きちんと統計情報の22と一致します。
$ sudo snort -dev -u snort -g snort -r /var/log/snort/manual/snort.log.1344326217 arp 2>&1 | \
grep ^[0-9] | awk '{print $1,$2,$3}' | wc -l
22
■「namp -sT」で満遍なくTCPポートと通信したので、以下のようになります。
※IPはsedで置き換えてます。「head -10」をはずすと、
ディスティネーションが1から1024ポート宛ての通信の概要がわかります。
以下のTCP/21のように、大抵は、複数回の通信があるポートは開いてます。
$ sudo snort -v -u snort -g snort -r /var/log/snort/manual/snort.log.1344326217 tcp 2>&1 | \
grep ^[0-9] | awk -F\: '($5<1025) {print}' | sort -n -t\: -k 5 -n | head -10
08/07-16:57:03.907940 xxx.xxx.xxx.xxx:46653 -> yyy.yyy.yyy.yyy:1
08/07-16:57:03.877137 xxx.xxx.xxx.xxx:46468 -> yyy.yyy.yyy.yyy:3
08/07-16:57:03.859250 xxx.xxx.xxx.xxx:52496 -> yyy.yyy.yyy.yyy:4
08/07-16:58:57.624587 xxx.xxx.xxx.xxx:46639 -> yyy.yyy.yyy.yyy:6
08/07-16:57:03.895421 xxx.xxx.xxx.xxx:35031 -> yyy.yyy.yyy.yyy:7
08/07-16:57:03.906928 xxx.xxx.xxx.xxx:48176 -> yyy.yyy.yyy.yyy:13
08/07-16:57:03.859676 xxx.xxx.xxx.xxx:39230 -> yyy.yyy.yyy.yyy:17
08/07-16:57:03.865100 xxx.xxx.xxx.xxx:43920 -> yyy.yyy.yyy.yyy:20
08/07-16:57:03.828263 xxx.xxx.xxx.xxx:53725 -> yyy.yyy.yyy.yyy:21
08/07-16:57:03.829064 xxx.xxx.xxx.xxx:53725 -> yyy.yyy.yyy.yyy:21
■tcpdump形式で保存したので、tcpdumpで開けます。
※但し、遅い。
$ sudo tcpdump -r /var/log/snort/manual/snort.log.1344326217 port 53 | sed s/" Flags"/"\n&"/g
reading from file /var/log/snort/manual/snort.log.1344326217, link-type EN10MB (Ethernet)
16:57:03.814614 IP yhosty.ydomainy.60337 > xhostx.xdomainx.domain:
Flags [S], seq 1291669141, win 5840, options [mss 1460,sackOK,TS val 579049652 ecr 0,nop,wscale 7], length 0
16:57:03.814643 IP xhostx.xdomainx.domain > yhosty.ydomainy.60337:
Flags [S.], seq 3754292319, ack 1291669142, win 5792, options [mss 1460,sackOK,TS val 82686922 ecr 579049652,nop,wscale 5], length 0
16:57:03.814719 IP yhosty.ydomainy.60337 > xhostx.xdomainx.domain:
Flags [.], ack 1, win 46, options [nop,nop,TS val 579049652 ecr 82686922], length 0
16:57:03.824849 IP yhosty.ydomainy.60337 > xhostx.xdomainx.domain:
Flags [R.], seq 1, ack 1, win 46, options [nop,nop,TS val 579049652 ecr 82686922], length 0
16:58:57.619649 IP yhosty.ydomainy.33119 > xhostx.xdomainx.domain:
Flags [S], seq 2477015831, win 5840, options [mss 1460,sackOK,TS val 579078102 ecr 0,nop,wscale 7], length 0
16:58:57.619660 IP xhostx.xdomainx.domain > yhosty.ydomainy.33119:
Flags [S.], seq 2403863588, ack 2477015832, win 5792, options [mss 1460,sackOK,TS val 82715374 ecr 579078102,nop,wscale 5], length 0
16:58:57.624381 IP yhosty.ydomainy.33119 > xhostx.xdomainx.domain:
Flags [.], ack 1, win 46, options [nop,nop,TS val 579078103 ecr 82715374], length 0
16:58:57.624393 IP yhosty.ydomainy.33119 > xhostx.xdomainx.domain:
Flags [R.], seq 1, ack 1, win 46, options [nop,nop,TS val 579078103 ecr 82715374], length 0
■以下でsnmptrapを使ったチャットが出来ます。
※文字数制限して、インターフェイスを作ればTwitterライクな事も出来ます。
テキストはデコードが必要な形式でも送れます。
やらないけどw。。。
Squeezeでsnmpトラップの送受信テスト
http://d.hatena.ne.jp/labunix/20120526/
snmpmsgtrap.sh
https://raw.github.com/labunix/snort_log/master/snmpmsgtrap.sh
$ sudo snort -dev -u snort -g snort udp port 162
08/07-17:27:41.859041 0:YY:YY:YY:YY:YY -> 0:XX:XX:XX:XX:XX type:0x800 len:0x73
YYY.YYY.YYY.YYY:53717 -> XXX.XXX.XXX.XXX:162 UDP TTL:64 TOS:0x0 ID:0 IpLen:20 DgmLen:101 DF
Len: 73
XX XX XX XX XX XX XX 74 72 61 70 70 72 69 76 61 0G.....trappriva
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX te.5..+.........
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX @...H.......C...
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX .A0.0...+.......
XX XX XX XX XX 54 65 73 74 .....Test
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
■サンプルでは「trapprivate」のコミュニティを受け取るようになってます。
また、コミュニティに関わらず、受け取ったSNMPトラップはシステムメールします。
$ sudo grep -v "^#" /etc/snmp/snmptrapd.conf
authCommunity log,execute,net trapprivate
authCommunity log,execute,net public
traphandle default /usr/bin/mail -s "SNMPTrap Msg" root@vmsqueeze.localdomain