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

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

「Snort」のインストール

「Snort」のインストールには以下のものが必要であり、インストールされていない場合、yumコマンドよりインストールする。
・libpcap
・pcre
・pcre-devel

[root@Fedora ~]# yum -y install libpcap pcre pcre-devel <= libpcap、pcre、pcre-develが無い場合

「Snort」をtarballよりインストールするが、specファイルが用意されているので、 後々の管理等を行いやすくする為にrpmファイルを作成し、rpmファイルよりインストールする。

[root@Fedora ~]# wget http://www.snort.org/dl/current/snort-2.4.3.tar.gz <= 「Snort」のダウンロード
[root@Fedora ~]# rpmbuild -tb snort-2.4.3.tar.gz <= 「Snort」のrpmファイルの作成
[root@Fedora ~]# rpm -ivh /usr/src/redhat/RPMS/i386/snort-2.4.3-1.i386.rpm <= 「Snort」のインストール

[root@Fedora ~]# rm -f snort-2.4.3.tar.gz <= ダウンロードしたファイルを削除
[root@Fedora ~]# rm -f /usr/src/redhat/RPMS/i386/snort-* <= SRPMからRPMへのビルドにより作成されたファイル群を削除

yumのアップデート対象から「Snort」を外す。

[root@Fedora ~]# vi /etc/yum.conf <= 設定ファイルの編集
exclude=snort <= 追加
「Snort」の設定

「Snort」の設定

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

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

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

ログローテートファイルの修正

ログローテート時に存在しないファイルをチェックし、エラーが発生してしまうので、チェックしないようにする。

[root@Fedora ~]# vi /etc/logrotate.d/snort <= 設定ファイルの編集
/var/log/snort/alert /var/log/snort/*log /var/log/snort/*/alert /var/log/snort/*/*log  {
↓
/var/log/snort/alert /var/log/snort/*log  { <= 変更

ルールファイルのインストール

[root@Fedora ~]# wget http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz
 <= ルールファイルのダウンロード
[root@Fedora ~]# tar xzf snortrules-pr-2.4.tar.gz <= ダウンロードしたファイルの展開
[root@Fedora ~]# cp -r ./rules/* /etc/snort/rules/ <= ルールファイルのコピー

ダウンロード・展開で出来たファイル・ディレクトリの削除
[root@Fedora ~]# rm -rf ./rules
[root@Fedora ~]# rm -rf ./doc
[root@Fedora ~]# rm -f ./snortrules-pr-2.4.tar.gz
「Snort」の起動
[root@Fedora ~]# /etc/rc.d/init.d/snortd start

「Snort」の自動起動

Fedoraを起動する際に自動的に「Snort」を起動するようにする。

[root@Fedora ~]# chkconfig snortd on
「SnortSnarf」のインストール

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

まず「Time-modules」をインストールする。

[root@Fedora ~]# cpan2rpm --install Time-modules <= 「Time-modules」のインストール
cpan2rpmについてはこちらを参照

「SnortSnarf」のインストール

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

[root@Fedora ~]# mkdir /usr/local/snortsnarf

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

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

[root@Fedora ~]# rm -rf ./SnortSnarf-050314.1 <= 展開したディレクトリの削除
[root@Fedora ~]# rm -f ./SnortSnarf-050314.1.tar.gz <= ダウンロードしたファイルの削除
「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.

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

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

「Apache」の設定

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

[root@Fedora ~]# mkdir /var/www/snort <= 「SnortSnarf」によるHTML出力先ディレクトリの作成

[root@Fedora ~]# vi /etc/httpd/conf.d/snort.conf <= 「SnortSnarf」用のWebサーバ設定ファイル作成
Alias /snort /var/www/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>
ここまで


[root@Fedora ~]# /etc/rc.d/init.d/httpd restart <= 「Apache」の再起動
「SnortSnarf」の実行

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

[root@Fedora ~]# cd /usr/local/snortsnarf
[root@Fedora ~]# ./snortsnarf.pl -dns -d /var/www/snort \
/var/log/snort/alert /var/log/snort/portscan.log

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

「SnortSnarf」の自動実行

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

[root@Fedora ~]# vi snortsnarf.sh <= スクリプトファイルの作成
#!/bin/sh

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


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

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

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

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

[root@Fedora ~]# mkdir /usr/local/oinkmaster

「Oinkmaster」のインストール

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

ダウンロード・展開で出来たファイル・ディレクトリの削除
[root@Fedora ~]# rm -rf ./oinkmaster-1.2
[root@Fedora ~]# rm -f ./oinkmaster-1.2.tar.gz
「Oinkmaster」の設定
[root@Fedora ~]# 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
 <= ルールファイルのダウンロード元を指定
「Oinkmaster」の実行

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

[root@Fedora ~]# mkdir /etc/snort/rules/backup <= バックアップ用ディレクトリの作成
[root@Fedora ~]# chmod 770 /etc/snort/rules/backup <= ディレクトリのパーミッションを変更

「Oinkmaster」の実行

[root@Fedora ~]# /usr/local/oinkmaster/oinkmaster.pl \
-C /usr/local/oinkmaster/oinkmaster.conf -o /etc/snort/rules/ -b /etc/snort/rules/backup/

「Snort」の設定

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

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

「Snort」の再起動

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

[root@Fedora ~]# /etc/rc.d/init.d/snortd restart

「Oinkmaster」の自動実行

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

[root@Fedora ~]# vi oinkmaster.sh <= スクリプトファイルの作成
#!/bin/sh

/usr/local/oinkmaster/oinkmaster.pl -C /usr/local/oinkmaster/oinkmaster.conf -o /etc/snort/rules/ -b /etc/snort/rules/backup/
/etc/rc.d/init.d/snortd restart


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