- 追加された行はこの色です。
- 削除された行はこの色です。
- Snort へ行く。
#freeze
* [[Snort]]
ネットワーク型IDSで監視してみようということで、Snortを使ってみます。
[[EasyIDS>http://www.skynet-solutions.net/easyids/]]というCDからインストールしてくれるものも
あります。NIC2枚挿しが前提のようで、Webインターフェースから設定できるようです。
#contents
** インストール
どうも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侵入検知―オープンソースソフトウェアで構築する実践的な侵入検知システム>http://www.amazon.co.jp/exec/obidos/ASIN/479732533X/worried-22]]~
** コメント
-#comment