ホスト攻撃の傾向と対策2

追記:
  • (2001.12.02)
    バージョン 1.8.3 をインストールしました。大筋ではたいして変更無しですが細々と変更されてます。
    そういえば今気づきましたが、 1.8.1 以降は RedHat7.1 で走らせてます。あと実験で 6.2J,FreeBSD
  • (2001.11.29)
    注1:現在では最新の snort 本体、ルール等は CVS で入手するようになっています。CVS についてはこのサイト内に別ページを作成する予定なのでそちらをご覧下さい。多少タイムラグがあってもいいや、というヒトは従来どおりでもいいようです。
  • (2001.11.05)
    バージョン 1.8.2 をインストールしました。バグフィクス中心のようです。


以下は 1.8 リリース当時のものですので、ご注意ください。大きな変更があれば加筆修正していくつもりです。

--------------------------------------------------

今回はIDS(侵入検知システム)ツールの snort というモノについてです。新しいバージョンが出たのでこの機会にとりあえず、インストールから初期状態での運用までの紹介。

現在のバージョンは 1.8 www.snort.org ---> URL変更(2001/08/15)snort.sourcefire.com/からダウンロードできる。ここでは Laser5 6.4 機へインストールした例を挙げるが、またしても rpm を使わなんだので、正しい赤帽愛好者の方々にはスマン.....。しかし、rpm はデフォルトで PostgreSQL を要求するんで、どうしても rpm てなヒトも src.rpm になりますぜ。IDS のために PostgreSQL 入れるなんてのは本末転倒。と、いうことで以下は PostgreSQL が無い環境でのお話。ある場合は細工が必要かもしれないので、READMEとINSTALL読むべし。

snort を動かすには libpcap っつーのも必要、なんで、はいってなかったらこいつを先にインストール。

tcpdump.orgから libpcap-X.X.X.tar.gz をとってくる(前掲の注1参照)。バージョンは 0.6.2(2001/11/09 現在)

例によって /usr/local/src に放り込む

cd /usr/local/src
tar zxvf libpcap-X.X.X.tar.gz
cd libpcap-X.X.X

特にはオプションいらないんじゃないかな

./configure
make
make install

で、OK。

では本編

snort-X.X.X.tar.gz (2001/11/09 現在では 1.8.2 バージョンは読み替えて) をとってきて、

/usr/local/src に放り込む

cd /usr/local/src
tar zxvf snort-X.X.X.tar.gz
cd snort

オプションはお好みで、INSTALLをよく読んで。注意するのは libpcap のありかを教えてあげること。

--with-libpcap-includes=/usr/local/src/libpcap-X.X.X
--with-libpcap-libraries=/usr/local/lib

のようにしてね。

まあ、一応 PostgreSQL ありの場合ね
--with-libppq-includes=
--with-libppq-libraries=
は指定したほうが無難だが、よほどヘンテコなインストールをしてなければデフォルトOKでしょう。

はい、では

./configure --with-libpcap-includes=/usr/local/src/libpcap-0.4 --with-libpcap-libraries=/usr/local/lib
make
make install

では設定いきます。設定関連は /etc/snort とか作ってカレントディレクトリからコピー。

mkdir /etc/snort

cp *.rules snort.conf classification.config !$

こんだけでいいのかな?まあ、実行時に怒られたら考えるか。あ、!$ は bash だけ?

snort 実行用のユーザー、グループを作成。snort とか言う名前でいいでしょう。例によってログインシェルは与えないようにする。ホームディレクトリもいりませんな。この辺念入りに。

最後にログ用ディレクトリを作っとかなきゃなんない

mkdir /val/log/snort

ここは snort を動かすユーザーの持ち物にする。ここでは

chown snort /val/log/snort
chgrp snort /val/log/snort


以上


■ snort.conf の設定 ■

こいつはヒトによって全く変わるし、セッティングを明かすのはセキュリティにちょいと、というわけで、とりあえず動くようにだけする。あとは研究してくれたまえ(花形かい)。基本的には

var HOME_NET any

の所に監視対象を入れる。ビット指定で複数設定できるね。とりあえず1つのホスト用のセッテイング

var HOME_NET XXX.XXX.XXX.XXX/32

というふうに。

あとはDNS設定。カンマ区切りで複数指定可

var DNS_SERVERS [ XXX.XXX.XXX.XXX,XXX.XXX.XXX.XXX ]

鍵カッコなくてもいいかも。

これでとりあえずは動くはず。でも snort のようなのがちゃんと役立つかどうかは設定と監視にかかってるので、こっからが大事なのさ。それを忘れないでくれたまえ、ベイビー(花輪君)。それらについてはそのうち書く(かな?)。


■ snort の起動 ■

すでにウチの赤帽系たちは赤帽であって赤帽でない。rpm をあまり使わないなど、管理者の横暴が原因と思われる。赤帽の規約が素直に通じないことが多い。しかし、ページを公開するにあたって多少改心する気になっているのも確かである。と、いうことで、ここでは snort を赤帽風に起動するようにいじってみる。

/etc/rc.d/init.d/snortd というのを作って中身を以下のようにする。実行属性も忘れずつける。僕の環境ではインターフェースが ppp0 だ。星君!適宜読み替えてくれたまえ(追記:しばしば回線断の起こるADSL回線などではこれを指定してはいけません、回線断により ppp0 が一時的に無効になるため、snort はシグナル3を受けて終了してしまいます。インターフェースは指定しなくても監視対象の指定でも調整できますから、専用線以外では指定しないほうが簡単です。どうしても指定するなら回線再接続後に snort を再起動する仕掛けが必要です、私はそうしてるわけですが.....)。あと、オプションも適当に。以下ではかなり冗長である。
#! /bin/sh

. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
if [ ${NETWORKING} = "no" ]
then
        exit 0
fi

SNORT='/usr/local/bin/snort'

case "$1" in
  start)
        echo -n "Starting snort services: "
	# Don't appoint a interface if you use "dynamic ip address".
	#daemon $SNORT -Ddes -c /etc/snort/snort.conf -u snort -g snort
        daemon $SNORT -Ddes -c /etc/snort/snort.conf -i ppp0 -u snort -g snort
        echo
        touch /var/lock/subsys/snort
        ;;
  stop)
        echo -n "Stopping snort services: "
        killproc $SNORT

        echo
        rm -f /var/lock/subsys/snort
        ;;
  status)
        status $SNORT
        ;;
  restart|reload)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
esac

exit 0
もう疲れた。各ランレベル用ディレクトリへのリンク張り等は省略(改心してませんな)。とりあえずこいつで起動は出来ます。とりあえずデフォルトでどんなログが出るかを見てみるとよいです。かなり過敏ですが、それぐらいでよいのでしょう。その辺をどうやって仕込んで育てていくかはあなたの腕次第です(ドキ)。で、少しづつルールファイルとかに手を加えたりしていきましょう。

別の PostgreSQL が入っているマシンにインストールしたら実行時エラーが出る。libpq.so.2.1 が無いぞー、なめとんのか!と言っているのだ。libpq.so.2.1 は /usr/local/pgsql/lib にはあったがそこは探してくれないらしい(そりゃそうか)、仕方ないんで /usr/lib にシンボリックリンクを作る。


(追記)
■ 回線断が起こったり、動的IPの場合の注意 ■

上にも書いてますが、回線断が起こる場合、それによって一時的に無効となる ppp0 のようなインターフェースは指定してはいけません。指定されたインターフェースが無効になった場合、snort は終了してしまいます。ただし、回線断で終了しても再接続時に snort が再起動するようにしておけばかまいません。ちょこっとスクリプトを書いとけばよいし、pppd まわりの何かをイジることでもできるでしょう。

動的IPを振られるゲートウェイマシンを監視したい、というのはあまりにもありそうですが、多少の工夫が必要です。var HOME_NET any とかにしてしまう、というのが最も簡単ですが、全パケットが監視対象になってしまうので、大量のログが出ますし(それもまた楽し?)、これを抑えることができないわけではないでしょうが一苦労です。
私の場合はゲートウェイのIPアドレスを監視するスクリプトを走らせているので、回線再接続後などに変更があった場合は snort.conf の var HOME_NET 他を書き換えてのち snort 再起動させるようにしてます。sed などを使えば自動書き換えは簡単ですね。




トップページ