rpm だけで作る snort+acid の IDS 環境


1.はじめに

ちょっと旧いメモですが,某日経ネットワークセキュリティに寄稿した際に,snort+acidの環境を簡単に作る方法をまとめたものです.

世の中は snort-1.9 だし,RedHat も 7.3 なので,情報的には腐りかけてます.まぁ,食い物は腐りかけがいちばん美味いってことで,特に改訂もせずに掲載してみます.

ほんとうは Forensic ネタでゴーゴーと行きたいところですが,あまりウケが良くないみたいですねぇ.

ま,ソレはともかく,解説といきましょう.

さて,今回は RedHat Linux 7.2 の linux コンピュータに snort と acid をインストールしてみます.

RedHat Linux は皆さんご存じの rpm によってパッケージを管理することができます.結構ラクチンですよね.で,RedHat 7.2 の場合 snort の基本部分ほとんど全てを rpm パッケージによって構築できてしまうんです.




2.RedHat Linux のインストール

まずは RedHat Linux の環境についてです.

続いて,snort と acid を動かすための Linux 環境を構築しよう.ここでは RedHat Linux 7.2 J の FTP版を使用してベースとなる Linux 環境を構築しました.インストールタイプは [サーバーインストール] を指定します.また,インストールオプションに, [SQL データベースサーバ] と [Web サーバ] を指定することを忘れないでください.

以下の rpm を acid が必要とします.デフォルトの状態でインストールされているはずですが,念のため rpm -qa | grep php とかで確認してください.

phpphp-4.0.6-7.i386.rpm
php は perl を必要とするperl-5.6.0-17.i386.rpm
php の postgresql サポートphp-pgsql-4.0.6-7.i386.rpm
gd グラフィックライブラリgd-1.8.4-4.i386.rpm

また,libpcap-0.6.2 の rpm パッケージもインストールされてるか確認しましょう.libpcap はデフォルトの状態ではインストールされません.RedHat の cd-rom や ftp サイトにはパッケージが存在しますので,どうにかして手に入れてインストールしてください.

# rpm -ivh libpcap-0.6.2-9.i386.rpm

あと,apache の環境も整える必要があるのですが,ここでは触れません.みんな出来るでしょ?



3.snort と acid の入手

次に必要なファイルを集めましょう.以下のURIから rpm パッケージを入手します.

snort 本体
http://snort.sourcefire.org/releases/snort-1.8.3-5.i386.rpm

snort postgresql サポート
http://snort.sourcefire.org/releases/snort-postgresql-1.8.3-5.i386.rpm

ここで注意です.この postgresql サポートの snort rpm には,SQLデータベース創生用スクリプトが存在しません.ですから, snort のソースアーカイブも必要になります.今は直ってるかもしれません.

snort source archive
http://snort.sourcefire.org/releases/snort-1.8.3.tar.gz

続けて acid とその関連ファイルを入手しましょう.

acid 本体
http://www.andrew.cmu.edu/~rdanyliw/snort/snortacid.html
http://www.andrew.cmu.edu/~rdanyliw/snort/acid-0.9.6b19.tar.gz
原稿執筆時点では acid-0.9.6b19 が最新でしたヽ(´ー`)ノ

adodb php 用データベースライブラリ
http://php.weblogs.com/adodb
http://phplens.com/lens/dl/adodb171.tgz

phplot php 用グラフィックライブラリ
http://www.phplot.com/
http://ftp1.sourceforge.net/phplot/phplot-4.4.6.tar.gz



4.snort のインストール

では,へろへろと snort をインストールしてみます.

# rpm -ivh snort-1.8.3-5.i386.rpm

# rpm -ivh snort-postgresql-1.8.3-5.i386.rpm

で終わりです.簡単でしょ? 正しくインストールされてれば,以下のディレクトリに snort のファイルが納められているはずです.

/etc/rc.d/init.d/snortd起動スクリプト
/usr/sbin/snort-plainsnort バイナリ
/usr/sbin/snort-postgresqlpostgresql 対応バイナリ
/etc/snort/ルールセット
/usr/share/doc/snort-1.8.3/ドキュメント類
/usr/share/man/man8/snort.8manページ
/var/log/snort/ ログファイル保存用ディレクトリ
/usr/sbin/snort バイナリへのリンク

最後の /usr/sbin/snort は,snort それぞれのバイナリへのリンクとなってます.postgresql 対応パッケージがインストールしてあれば,/usr/sbin/snort-postgresql に対してリンクが張られてます.あんまり細かいことは気にしなくても良いようになってるんです.

でも,なぜか snort-postgresql-1.8.3-5.i386.rpm には,テーブルジェネレーション用の SQL スクリプト create_postgresql が入っていません.そこで snort-1.8.3.tar.gz から contrib/create_postgresql だけをいただいてきます.方法は問いません.



5.データベース環境の整備

つづけて PostgreSQL の環境を整備しましょう.

まだ一度も PostgreSQL を動かしていなければ,/var/lib/pgsql/data/ ディレクトリが空の状態になってますから,以下のようにして PostgreSQL を起動します.正しく起動すればすぐに停止しましょう.

# /etc/init.d/postgresql start
# /etc/init.d/postgresql stop

すると,/var/lib/pgsql/data ディレクトリに postgresql.conf が作成されているはずです.vi などで postgresql.conf を編集し,

#tcpip_socket = false



tcpip_socket = true

に変更してください.

あと,RedHat7.3あたりから,デフォルトの設定ではPostgreSQLにネットワーク経由で接続できませんので,/var/lib/pgsql/dataディレクトリにあるpg_hba.confに以下の1行を追加してください.

host	all	127.0.0.1	255.255.255.255	trust

以上の修正が完了したなら再度 PostgreSQL を起動します.
この変更により,PostgreSQL サーバに対して,ネットワーク経由でのアクセスが可能となります.



つぎに Snort のログデータベースにアクセスするためのユーザとグループを作成します.ユーザ,グループ名は何でも構いませんが,ここでは snortlog を使用します.

# groupadd -g 1000 snortlog
# useradd -u 1000 -g snortlog -d /home/snortlog snortlog

そんではデータベースを構築してみましょう.以下のように PostgreSQL が正しく起動していることを確認し, [ postgres ] ユーザに su します.

# /etc/init.d/postgresql status
postmaster (pid 1010) is runnning...
# su postgres
$ 

さらに createuser コマンドを使用し,先ほどの [ snortlog ] ユーザを PostgreSQL へ登録します.無事にユーザ登録が完了したなら,root ユーザに戻ってくださ.

$ createuser
Enter name of user to add: snortlog
Shall the new user be allowed to create database? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
$ exit
#

最後に,snort のアラートを記録するデータベースとテーブルを作成します.

まず snort のソースアーカイブから取り出した create_postgresql を [ snortlog ] ユーザのホームディレクトリ [ /home/snortlog ] にコピーし,chown コマンドで所有者・グループを変更しておきます.

[ snortlog ] ユーザに su し,以下のように createdb コマンドを使用して,snortlog の名称でデータベースを作成します.この時にパスワードを聞かれるので,適切なパスワードを指定します.パスワードは snort と acid からアクセスする際に必要となりますので,忘れないように注意しましょう.

# cp ./create_postgresql /home/snortlog/
# chown snortlog.snortlog /home/snortlog/create_postgresql
# su - snortlog
$ createdb -W snortlog
Password:
CREATE DATABASE
$

続いてデータベース内に配置するテーブルを作成しましょう.以下のようにコマンドを入力することで必要なテーブルが作成されます.テーブルが無事に作成されたなら root ユーザに戻ります.

$ psql < ./create_postgresql

以上でデータベース関係の設定は完了しました.



6.snort.conf の設定

続いて,先ほど作成した snort データベースにログを記録するための設定を行いましょう.

snort.conf 内で [ output database: alert, postgresql 〜 ] と指定している箇所を探しだし,以下のように修正を加えます.

output database: alert, postgresql, user=snortlog dbname=snortlog sensor_name=mysnort

user へはデータベースにアクセスするユーザ,そして dbname へはデータベース名を指定します.ここの解説のとおりに作業していれば,両者とも [ snortlog ] を指定します.また,行の最後尾に [ sensor_name = mysnort ] と追加しましょう.複数の snort センサーを1つのデータベースに保存する場合に,それぞれがどの snort センサーで検出したか識別するためのラベルをここで指定することができます. [ mysnort ] の部分は好みに合わせて変更してもかまいません.

この時点で,とりあえず snort を実行させることができます.以下のように,まずは直接コマンドラインからsnortを実行してみましょう.なんらかの問題があればエラーメッセージを表示して終了します.

# /usr/sbin/snort -l /var/log/snort -d -i eth0 -c /etc/snort/snort.conf

特にエラーメッセージが表示されず,さらにコマンドプロンプトに戻らなければ,snort は正常に実行を続けていることを示していますので,適当に CTRL+ALT+DEL で snort を停止して,今度は /etc/init.d/snortd スクリプトを使って起動してみましょう.

その前に /etc/init.d/snortd スクリプトに変更を加えなければなりません.デフォルトは,alert ファイルにログを記録するためのパラメータが指定してあり,これが原因でデータベースにアラートが記録されないのです.

vi などのエディタで /etc/init.d/snort の30行目を修正し,-A,-b,-d の3つオプションを外し,-o オプションを追加しておきます.

# See how we were called.
case "$1" in
  start)
        echo -n "Starting snort: "
        cd /var/log/snort
        daemon /usr/sbin/snort -o -l /var/log/snort -D \
                 -i $INTERFACE -c /etc/snort/snort.conf
        touch /var/lock/subsys/snort
        echo
        ;;

では /etc/init.d/snort スクリプトを使用して,snort を起動してみましょう.

# /etc/init.d/snortd start
Starting snort: [ OK ]

以上で snort 関連の作業が終わりました.では,いよいよ acid のインストールです.



7.acid のインストール

まずカレントディレクトリを,httpd のドキュメントディレクトリである [ /var/www/html ] に移動した後に,以下の画面に従って adodb,phplot,acid と展開してゆきます.

# cd /var/www/html
# gunzip -c /root/adodb171.tgz | tar -xv -
# gunzip -c /root/phplot-4.4.6.tar.gz | tar -xv -
# gunzip -c /root/acid-0.9.6b19.tar.gz | tar -xv -

つぎに acid サブディレクトリ内の acid_conf.php を適当なエディタを使用して変更しましょう.

修正する個所は以下のとおりです.

acid_conf.php 12行目	adodb のディレクトリを指定する
$DBlib_path = "";		←	$DBlib_path = "../adodb"; 

acid_conf.php 20行目	使用するSQLサーバを指定する
$DBtype = "mysql";		←	$DBtype = "postgres";

acid_conf.php 32行目	データベース名を指定する
$alert_dbname   = "snort_log";	←	$alert_dbname   = "snortlog";

acid_conf.php 35行目	データベースにアクセスするユーザ名指定する
$alert_user     = "root";	←	$alert_user     = "snortlog";

acid_conf.php 36行目	データベースにアクセスするパスワードを指定する
$alert_password = "mypassword";	←	$alert_password = "password";

これらのデータベース関係のパラメータは,[ 6.データベース環境の整備 ] でデータベースを創生する際に指定した値を適切に指定しなければならない.

acid_conf.php 54行目 phplot のディレクトリを指定する $ChartLib_path = ""; ← $ChartLib_path = "../phplot-4.4.6";

以上で acid の設定も完了しました.httpd が正しく起動していることを確認したなら,ブラウザから http://192.168.0.250/acid/ のように acid のディレクトリを指定して参照してみます.



すべての設定が正しければ,上のような画面が表示されます.初めて ACID を起動した直後は,まだ ACID 用のデータベース設定が完了していないために,このような画面が表示されるので,最下行の [ Setup page ] をクリックしてください.



この画面では [ Create ACID AG ] ボタンを押せば ACID 用のデータベース設定が完了します.次の画面は ACID の設定が完了したことを示しています.画面の下にある [ Main page ] をクリックすれば ACID の初期画面が表示されて,すべての設定は完了です.



ご苦労様です.長い作業でしたね.ACID の簡単な操作方法もネタ原稿がありますので,そのうち掲載します.気長に待っててください.