SqueezeのSnortをスニッファとして使う。

■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