不正アクセス検知システム(Snort)の導入

不正アクセスを検知する為にネットワーク型IDS(Intrusion Detection System)として「Snort」を導入する。
また、Webブラウザで不正アクセスログを確認する為、「SnortSnarf」も導入する。
そして、「Snort」が不正アクセスとして判断するルールファイルの最新化を自動化する為、「Oinkmaster」を導入する。
なお、「Apache」の設定は完了済みとする。

「Snort」のインストール

「Snort」のインストールには以下のものが必要であり、インストールされていない場合、インストールする。
「Libpcap」
「tcpdump」
最新版のソースはhttp://www.tcpdump.org/から取得出来る。
またパッケージでも提供されており、その場合http://sunfreeware.com/から取得できる。
ただし、ここでは上記のものはインストール済みとする。

「Snort」用のユーザを作成する。

Solaris# groupadd -g 10005 snort
Solaris# useradd -u 10005 -g snort -d /usr/local/snort -s /bin/false snort

「Snort」のソースをダウンロードし、インストールする。

Solaris# mkdir /usr/local/src/snort <= 作業用ディレクトリの作成
Solaris# chmod 777 /usr/local/src/snort <= 作業用ディレクトリのパーミッション変更
Solaris# exit <= 一般ユーザになる
Solaris% cd /usr/local/src/snort <= 作業用ディレクトリへ移動
Solaris% wget http://www.snort.org/dl/current/snort-2.4.3.tar.gz <= 「Snort」のダウンロード
Solaris% gunzip -c snort-2.4.3.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris% cd snort-2.4.3 <= 展開したディレクトリに移動

Solaris% ./configure --with-libpcap-libraries=/opt/sfw/lib/ |& tee configure.log
Solaris% gmake |& tee make.log <= コンパイル
Solaris% su <= スーパーユーザになる
Password: <= パスワードの入力
Solaris# gmake install |& tee make-install.log <= インストール
「Snort」の設定

「Snort」の設定

Solaris# vi /opt/sfw/etc/snort.conf <= 設定ファイルの編集
var HOME_NET any
↓
var HOME_NET 192.168.0.0/24 <= 監視対象とするネットワークアドレスを指定

var EXTERNAL_NET any
↓
var EXTERNAL_NET !$HOME_NET <= ローカルネットワークからのアクセスは不正アクセスとしない

var RULE_PATH ../rules
↓
var RULE_PATH ../share/snort <= ルールセットのあるディレクトリを指定

# preprocessor portscan: $HOME_NET 4 3 portscan.log
↓
preprocessor portscan: $HOME_NET 4 3 portscan.log <= コメント解除(ポートスキャンを検知する)
preprocessor portscan: より右の内容は
 検知したいホスト/ネットワークのIPアドレス
 検知量
 検知時間(秒)
 ログの位置
となり、検知時間(秒)以内に検知量以上のコネクションが発生した場合にポートスキャンと判断する

ログファイルを出力するディレクトリを作成する。

Solaris# mkdir /var/log/snort <= ディレクトリの作成
Solaris# chown snort:snort /var/log/snort <= オーナの変更
「Snort」の起動

「Snort」をデーモンモードで起動する。

Solaris# /opt/sfw/bin/snort -Dde -u snort -g snort -c /opt/sfw/etc/snort.conf -l /var/log/snort

なお、「Snort」起動時の主なオプションは以下の通り。

起動オプション 説明
-b ログをtcpdumpのフォーマットで保存する。
-c 設定ファイルを指定。
-d アプリケーション層のデータをダンプする。
-D デーモンモードで起動。
特に指定がなければ、/var/log/snort/alertファイルにログを出力する。
-e リンク層のパケットのヘッダを表示したり、ログとして保存する。
-g 「Snort」を起動するユーザの属するグループを指定。
-h 自分の属するネットワークを指定。
-i パケットをスニファするインターフェイス名を指定。
-l ログを保存するディレクトリを指定。
-u 「Snort」を起動するユーザを指定。
-v コンソールにパケットを表示する。

「Snort」の自動起動

起動スクリプトを作成し、Solaris起動時に自動的に起動するようにする。

Solaris# vi /etc/init.d/snort <= 起動スクリプトの作成
#!/sbin/sh

SNORT=/opt/sfw/bin/snort
CONFDIR=/opt/sfw/etc
LOGDIR=/var/log/snort

case "$1" in
'start')
        if [ -f $CONFDIR/snort.conf ]; then
            $SNORT -Dde -u snort -g snort -c $CONFDIR/snort.conf -l $LOGDIR
            echo "snort starting."
        fi
        ;;

'stop')
        kill `cat /var/run/snort_rtls0.pid`
        echo "snort stopping."
        ;;

'restart')
        $0 stop
        sleep 3
        $0 start
        ;;

*)
        echo "Usage: $0 { start | stop | restart }"
        exit 1
        ;;
esac

exit 0


Solaris# chmod 744 /etc/init.d/snort <= 起動スクリプトに実行権限付加
Solaris# ln /etc/init.d/snort /etc/rc3.d/S99snort <= ランレベル3で起動する
Solaris# ln /etc/init.d/snort /etc/rc0.d/K01snort <= ランレベル0で停止する
Solaris# ln /etc/init.d/snort /etc/rc2.d/K01snort <= ランレベル2で停止する
「SnortSnarf」のインストール

「SnortSnarf」のインストール

「SnortSnarf」をインストールするディレクトリを作成する。

Solaris# mkdir /usr/local/snortsnarf

「SnortSnarf」のソースをダウンロードし、インストールする。

Solaris# wget http://www.snort.org/dl/contrib/data_analysis/snortsnarf/SnortSnarf-050314.1.tar.gz
 <= 「SnortSnarf」のダウンロード
Solaris# gunzip -c SnortSnarf-050314.1.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris# cp ./SnortSnarf-050314.1/snortsnarf.pl /usr/local/snortsnarf/ <= snortsnarf.plファイルのコピー
Solaris# cp -r ./SnortSnarf-050314.1/include/ /usr/local/snortsnarf/ <= includeディレクトリのコピー

Solaris# rm -rf ./SnortSnarf-050314.1 <= 展開したディレクトリの削除
Solaris# rm -f ./SnortSnarf-050314.1.tar <= ダウンロードしたファイルの削除

「Time-modules」のインストール

Solaris# mkdir /usr/local/src/time-modules <= 作業用ディレクトリの作成
Solaris# chmod 777 /usr/local/src/time-modules <= 作業用ディレクトリのパーミッション変更
Solaris# exit <= 一般ユーザになる

Solaris% cd /usr/local/src/time-modules <= 作業用ディレクトリへ移動
Solaris% wget http://search.cpan.org/CPAN/authors/id/M/MU/MUIR/modules/Time-modules-2003.1126.tar.gz
 <= 「Time-modules」のダウンロード
Solaris% gunzip -c Time-modules-2003.1126.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris% cd Time-modules-2003.1126 <= 展開したディレクトリに移動
Solaris% perl Makefile.PL
Solaris% gmake |& tee make.log <= コンパイル
Solaris% su <= スーパーユーザになる
Password: <= パスワードの入力
Solaris# gmake install |& tee make-install.log <= インストール
「SnortSnarf」の設定

「SnortSnarf」の設定

「SnortSnarf」の実行時に以下のエラーメッセージが出力されることへの対処。
Using an array as a reference is deprecated at include/SnortSnarf/HTMLMemStorage.pm line 290.
Using an array as a reference is deprecated at include/SnortSnarf/HTMLAnomMemStorage.pm line 266.

Solaris# vi /usr/local/snortsnarf/include/SnortSnarf/HTMLMemStorage.pm <= SnortSnarfのpmファイルの編集
return @arr->[($first-1)..$end];
↓
return @arr[($first-1)..$end]; <= "->" を削除

Solaris# vi /usr/local/snortsnarf/include/SnortSnarf/HTMLAnomMemStorage.pm <= SnortSnarfのpmファイルの編集
return @arr->[($first-1)..$end];
↓
return @arr[($first-1)..$end]; <= "->" を削除

「Apache」の設定

「SnortSnarf」によるHTML出力先ディレクトリを作成し、「Apache」からアクセス出来るようにする。

Solaris# mkdir /var/apache2/snort <= 「SnortSnarf」によるHTML出力先ディレクトリの作成

Solaris# vi /etc/apache2/httpd.conf <= 設定ファイルの編集
Alias /snort "/var/apache2/snort/" <= 追加

内部からのみアクセスする場合
<Location /snort/>
    Order deny,allow
    Deny from All
    Allow from 127.0.0.1
    Allow from 192.168.0 <= ローカルネットワークのIPアドレスを指定
    Allow from ::1
</Location>
ここまで

外部からもアクセスする場合
<Location /snort/>
    Order deny,allow
    Deny from All
    Allow from All
    Allow from ::1
</Location>
ここまで


Solaris# svcadm restart svc:/network/http:apache2 <= 「Apache」の再起動
「SnortSnarf」の実行

「SnortSnarf」を実行するにはカレントディレクトリに移動してから実行しなければならない。

Solaris# cd /usr/local/snortsnarf
Solaris# ./snortsnarf.pl -dns -d /var/apache2/snort \
/var/log/snort/alert /var/log/snort/portscan.log

http://サーバのIPアドレス/snort/
とアクセスする。

「SnortSnarf」の自動実行

cronに登録し、1時間ごとに実行する。

Solaris# vi snortsnarf.sh <= スクリプトファイルの作成
#!/sbin/sh

cd /usr/local/snortsnarf
./snortsnarf.pl -dns -d /var/apache2/snort /var/log/snort/alert /var/log/snort/portscan.log


Solaris# chmod 755 snortsnarf.sh <= スクリプトに実行権限付加
Solaris# crontab -e <= cronの編集
00 * * * * /root/snortsnarf.sh <= 追加
「SnortSnarf」の日本語化

日本語化された「HTMLOutput.pm」をダウンロードする。
なお、ダウンロードする「HTMLOutput.pm」の日本語コードはSJISの為、文字化けしてしまうので文字コードをEUCに変換する。
EUCへの変換は「nkf」を利用するが、導入していない場合、こちらを参照にして導入する。
また、日本語化ファイルに変更した後は「SnortSnarf」を実行する必要があるが、ここでは上記で作成したスクリプトにより実行している。

Solaris# cd /usr/local/snortsnarf/include/SnortSnarf
Solaris# mv HTMLOutput.pm HTMLOutput.pm.org <= オリジナルファイルをリネーム
Solaris# wget http://mt-fuji.ddo.jp/~fujito/Linux/secu_soft/s2/HTMLOutput.pm
 <= 日本語化ファイルのダウンロード
Solaris# mv HTMLOutput.pm HTMLOutput.pm.tmp <= ダウンロードしたファイルをリネーム
Solaris# nkf -e HTMLOutput.pm.tmp > HTMLOutput.pm <= 文字コードをEUCに変換
Solaris# rm -f HTMLOutput.pm.tmp <= 文字コードがSJISのファイルを削除
Solaris# /root/snortsnarf.sh <= 「SnortSnarf」の実行
「Oinkmaster」のインストール

「Oinkmaster」をインストールするためのディレクトリを作成する。

Solaris# mkdir /usr/local/oinkmaster

「Oinkmaster」のインストール

Solaris# wget http://jaist.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-1.2.tar.gz
 <= 「Oinkmaster」のダウンロード
Solaris# gunzip -c oinkmaster-1.2.tar.gz | tar xf - <= ダウンロードしたファイルの展開
Solaris# cp -r ./oinkmaster-1.2/* /usr/local/oinkmaster/ <= 展開したファイル・ディレクトリのコピー

ダウンロード・展開で出来たファイル・ディレクトリの削除
Solaris# rm -rf ./oinkmaster-1.2
Solaris# rm -f ./oinkmaster-1.2.tar.gz
「Oinkmaster」の設定
Solaris# vi /usr/local/oinkmaster/oinkmaster.conf <= 設定ファイルの編集
# url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules.tar.gz
↓
url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-2.4.tar.gz
 <= ルールファイルのダウンロード元を指定

path = /bin:/usr/bin:/usr/local/bin
↓
path = /bin:/usr/bin:/usr/local/bin:/usr/sfw/bin <= パスの追加( wget のパスを追加)
「Oinkmaster」の実行

いきなりすべてのルールを変更するのは危険なので、「Oinkmaster」実行時に現在のルールファイルをバックアップするようにする。

Solaris# mkdir /opt/sfw/share/snort/backup <= バックアップ用ディレクトリの作成
Solaris# chmod 770 /opt/sfw/share/snort/backup <= ディレクトリのパーミッションを変更

「Oinkmaster」の実行

Solaris# /usr/local/oinkmaster/oinkmaster.pl \
-C /usr/local/oinkmaster/oinkmaster.conf -o /opt/sfw/share/snort/ -b /opt/sfw/share/snort/backup/

「Snort」の設定

「Oinkmaster」でCommunityのルールファイルをダウンロードするように設定したので、 Communityのルールファイルを読み込むようにする。

Solaris# vi /opt/sfw/etc/snort.conf <= 設定ファイルの編集
以下のように読み込ませたいルールファイルを追加する
include $RULE_PATH/community-bot.rules

「Snort」の再起動

「Snort」を再起動し、ルールファイルを読み込みなおす。

Solaris# /etc/init.d/snort restart

「Oinkmaster」の自動実行

cronに登録し、毎日12時に実行する。
また、ルールファイルを更新したら「Snort」も再起動させる。

Solaris# vi oinkmaster.sh <= スクリプトファイルの作成
#!/sbin/sh

/usr/local/oinkmaster/oinkmaster.pl -C /usr/local/oinkmaster/oinkmaster.conf -o /opt/sfw/share/snort/ -b /opt/sfw/share/snort/backup/
/etc/init.d/snort restart


Solaris# chmod 755 oinkmaster.sh <= スクリプトに実行権限付加
Solaris# crontab -e <= cronの編集
00 12 * * * /root/oinkmaster.sh <= 追加
▲ページのトップへ