Snort

ネットワーク型IDSで監視してみようということで、Snortを使ってみます。 EasyIDSというCDからインストールしてくれるものも あります。NIC2枚挿しが前提のようで、Webインターフェースから設定できるようです。

インストール

どうもSnortはlibpcapとlibpcreが必要になるので、まずlibpcapをインストールしておきます。http://www.tcpdump.org/よりダウンロードしました。

wget http://www.tcpdump.org/beta/libpcap-0.9.1-096.tar.gz
tar xzvf libpcap-0.9.1-096.tar.gz
cd libpcap-0.9.1
./configure
make
make install

では次にlibpcreをインストールします。http://www.pcre.org/よりダウンロードしました。

wget http://osdn.dl.sourceforge.net/sourceforge/pcre/pcre-6.1.tar.gz
./configure
make
make install

ではSnortをインストールします。http://www.snort.org/よりダウンロードしました。

wget http://www.snort.org/dl/current/snort-2.3.3.tar.gz

またChecksumがあるので、落としておいて正しいファイルかどうかを比べておきます。

wget http://www.snort.org/dl/current/snort-2.3.3.tar.gz.md5
md5sum snort-2.3.3.tar.gz

で表示される値と

cat snort-2.3.3.tar.gz.md5

で表示される値が同じであれば、OKです。では続きを

tar xzvf snort-2.3.3.tar.gz
cd snort-2.3.3
./configure --with-mysql=yes

この--with-mysql=yesを使うとMySQLにアラートを出力できるようになるので、つけているのだが、

ERROR: unable to find mysql headers (mysql.h)

んー どうもMySQLのディレクトリが違うみたいなので、指定してやりました。

./configure --with-mysql=/usr/local/mysql
make
make install

では、snort用にユーザとグループを作っておきましょう。

groupadd snort
useradd -g snort -s /bin/false snort

では設定ファイルを/etcにコピーしておきます。

mkdir /etc/snort
cp etc/* rules/* /etc/snort

またlog用のディレクトリも作っておきます。

mkdir /var/log/snort
chown snort:snort /var/log/snort

ではMySQLの設定をしておきましょう。Snort用にDBを作って、Snortが用意しているSQLを実行します。

mysql -u root -phogepass
create database snort;
grant all privileges on snort.* to snort@localhost identified by 'hogepass';
FLUSH PRIVILEGES;
exit;
cd schemas
mysql -D snort -u root -phogepass < create_mysql

これで一応MySQLの設定は終わりです。 さてつきは設定ファイルです。先ほど/etc/snortにコピーした中のsnort.confを修正します。

var HOME_NET any -> var HOME_NET 192.168.1.0/24  >監視するIPアドレス $eth0_ADDRESSとNICも指定できるらしい。
var DNS_SERVERS $HOME_NET -> var DNS_SERVERS 192.168.1.1 >DNSサーバのアドレス

以下各サーバのアドレスを指定

var SMTP_SERVERS
var HTTP_SERVERS
var TELNET_SERVERS

複数記述する場合は、

var SMTP_SERVERS [192.168.1.1,192.168.1.2]

ではルールのあるパスを設定します。

var RULE_PATH ../rules -> var RULE_PATH /etc/snort

MySQLの設定で、

output database: log, mysql, user=root password=test dbname=db host=localhost

のコメントをとり、user,password,dbnameを先ほど設定した値で、変更しておきます。 ではsnortを起動してみましょう。

snort -c /etc/snort/snort.conf -i eth0 -u snort -g snort -l /var/log/snort -Dde -y

オプションは

-c 設定ファイル
-i インターフェイス
-u 起動するユーザ
-g グループ
-l ログの保存先
-D デーモンで起動
-d アプリケーション層でログ取得
-y アラートとログファイルのタイムスタンプに年をつける
-e second layer headerの情報を表示
-p ノンプロミスキャストモードで動かす。NIDSにはならなくなる
-? ヘルプ表示

うっ... error while loading shared libraries libmysqlclient.so.12: cannot open shared object file: No such file or directory とりあえず、/libで

ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.12

で動きました。/etc/ld.so.confを確認しておきましょう。

tail -f -n 200 /var/log/messages

で確認してみました。では、起動用のスクリプトを用意しておきます。

#!/bin/sh
# chkconfig: 345 90 30
# description: snort
. /etc/rc.d/init.d/functions
SERVICE="snort"
SERVER="/usr/local/bin/snort"
ARGS="-D -i eth0 -u snort -g snort -c /etc/snort/snort.conf -l /var/log/snort"
case "$1" in
 start)
       echo -n "Starting $SERVICE: "
       daemon "$SERVER $ARGS"
       echo
       touch /var/lock/subsys/$SERVICE
       ;;
 stop)
       echo -n "Stopping $SERVICE: "
       killproc $SERVICE
       echo
       rm -f /var/lock/subsys/$SERVICE
       ;;
 restart)
       $0 stop
       $0 start
       ;;
 *)
       echo "Usage: $SERVICE {start|stop|restart}"
       exit 1
esac
exit 0

を/etc/init.dにsnortというファイルで作成して、実行権限を与えて、

chkconfig --add snort

threshold.conf

アラートの出力を制御します。

limit 期間内のアラートで最初の設定値まで出力する。
threshold 期間内のアラートで設定値以上まで出力しない。
both 期間内のアラートで設定値以上まで出力しないが、それ以降は出力しない。

たとえば、

threshold type limit, track by_src, count 1, seconds 60

by_srcでソースIPを対象にカウント行い、secondsの間でcountだけ出力する。

ACID

これを使えば状況をWebブラウザから確認することができます。ではインストールしていきましょう。GD,ADOdb,JpGraph?のインストールはPHPを参考にします。インストール後、http://www.andrew.cmu.edu/user/rdanyliw/snort/snortacid.htmlからACIDをダウンロードします。

wget http://www.andrew.cmu.edu/user/rdanyliw/snort/acid-0.9.6b23.tar.gz
tar xzvf acid-0.9.6b23.tar.gz
cp -R acid/ /webroot/

ではacid_conf.phpを編集します。

$DBlib_path = "/usr/local/lib/php/adodb";
$alert_dbname   = "snort";
$alert_host     = "localhost";
$alert_port     = "";
$alert_user     = "snort";
$alert_password = "hogepass";
$ChartLib_path = "/usr/local/lib/php/jpgraph";

では保存して、webからアクセスしてみましょう。

http://localhost/acid

Setup pageをクリックして、Create ACID AGをクリックすると、

Successfully created 'acid_ag'
Successfully created 'acid_ag_alert'
Successfully created 'acid_ip_cache'
Successfully created 'acid_event'

とでればOKです。http://localhost/acid/acid_main.phpを見てみましょう!

http://www.atmarkit.co.jp/fsecurity/rensai/snort03/snort03.html

ルール更新

Oinkmasterで自動化してみたいと思います。ではhttp://oinkmaster.sourceforge.net/からダウンロードします。

wget http://umn.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-1.2.tar.gz
tar xzvf oinkmaster-1.2.tar.gz
cd oinkmaster-1.2
cp oinkmaster.pl /usr/local/bin
cp oinkmaster.conf /etc

では設定ファイルを編集します。/etc/oinkmaster.confを開くのですが、 まずhttps://www.snort.orgでユーザ登録しておきます。ユーザ登録後、ログインして、Oinkmaster Download CodesよりGet CodeでOink Codeを取得しておきます。では再度oinkmaster.confを開きます。

# Example for Snort 2.3

#url = http://www.snort.org/pub-bin/oinkmaster.cgi/<oinkcode>/snortrules-snapshot-2.3.tar.\ gz ここで#urlの#のコメントはずし、<oinkcode>のところに先ほど取得したコードをいれておきます。 また下記のコメントもとっておきます。

#skipfile threshold.conf
#modifysid 302 "\$EXTERNAL_NET" | "\$HOME_NET"
#disablesid 4,5,6

ではユーザをつくっておきましょう。

useradd -g snort oinkmaster

ルールのバックアップディレクトリを作ります。

mkdir /etc/snort/rules.backup

では更新してみましょう。

oinkmaster.pl -C /etc/oinkmaster.conf -o /etc/snort -b /etc/snort/rules.backup
-oはルールがあるディレクトリです。
-bはバックアップを格納するディレクトリです。

うまく更新されましたら、cronに登録しておきましょう。

http://www.stackasterisk.jp/tech/systemManagement/snort04_03.jsp

プロミスキャストモード

/sbin/ifconfig eth0 promisc <-ON ifconfigでUP BROADCAST RUNNING PROMISC
/sbin/ifconfig eth0 -promisc <-OFF ifconfigでUP BROADCAST RUNNING 

調査

通常NICはノンプロミスキャストモードで動いている。つまり自分宛のパケットのみしか受け取らない。そのためにはプロミスキャストモードで動かす必要がある。libpcap自体はNICからパケットを取得するのもであるから、これにブロードキャストされているデータを渡してあげないとNIDSの意味がない。さらにいまどきのハブはスイッチングハブなので、ブロードキャストされていない為、プロミスキャストモードで動いていても、受け取れない。SPANポートという監視できるポートを備えているスイッチングハブもあるらしいが、果たして、今のNICがプロミスキャストモードになっているのか、スイッチングハブにSPANポートがあるか確認しないといけない。

どうもSnort起動時にNICをプロミスキャストモードにしているらしい。確かになにもしていないのにログを見てみると自分以外のログも落ちている。

リンク

http://www.snort.gr.jp/docs/
http://www.snort.gr.jp/docs/SnortClass.html Snortアラートの効率的な監視方法
http://www.stackasterisk.jp/tech/systemManagement/snort01_01.jsp

参考書籍

Snort 2.0侵入検知―オープンソースソフトウェアで構築する実践的な侵入検知システム

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-12-09 (日) 09:05:00 (6003d)