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ポートがあるか確認しないといけない。
リンクhttp://www.snort.gr.jp/docs/ 参考書籍Snort 2.0侵入検知―オープンソースソフトウェアで構築する実践的な侵入検知システム コメント
|