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

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

「Snort」のインストール
Gentoo ~ # emerge snort <= 「Snort」のインストール
「Snort」の設定

「Snort」の設定

Gentoo ~ # 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アドレス
 検知量
 検知時間(秒)
 ログの位置
となり、検知時間(秒)以内に検知量以上のコネクションが発生した場合にポートスキャンと判断する

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

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

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

「Snort」の自動起動

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

Gentoo ~ # rc-update add snort default
「SnortSnarf」のインストール

「Time::ParseDate」のインストール

まず「Time::ParseDate」をインストールする。
なお、「CPAN」についてはこちらを参照。

Gentoo ~ # perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan> install Time::ParseDate

「SnortSnarf」のインストール

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

Gentoo ~ # mkdir /usr/local/snortsnarf

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

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

Gentoo ~ # rm -rf ./SnortSnarf-050314.1 <= 展開したディレクトリの削除
Gentoo ~ # 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.

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

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

「Apache」の設定

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

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

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


Gentoo ~ # /etc/init.d/apache2 restart <= 「Apache」の再起動
「SnortSnarf」の実行

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

Gentoo ~ # cd /usr/local/snortsnarf
Gentoo ~ # ./snortsnarf.pl -dns -d /var/www/localhost/snort \
/var/log/snort/alert /var/log/snort/portscan.log

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

「SnortSnarf」の自動実行

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

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

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

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

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

Gentoo ~ # 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 -e HTMLOutput.pm.tmp > HTMLOutput.pm <= 文字コードをEUCに変換
[root@Fedora SnortSnarf]# rm -f HTMLOutput.pm.tmp <= 文字コードがSJISのファイルを削除
[root@Fedora SnortSnarf]# /root/snortsnarf.sh <= 「SnortSnarf」の実行
「Oinkmaster」のインストール
Gentoo ~ # emerge oinkmaster
「Oinkmaster」の設定
Gentoo ~ # vi /etc/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」実行時に現在のルールファイルをバックアップするようにする。

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

「Oinkmaster」の実行

Gentoo ~ # /usr/bin/oinkmaster.pl \
-C /etc/oinkmaster.conf -o /etc/snort/rules/ -b /etc/snort/rules/backup/

「Snort」の設定

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

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

「Snort」の再起動

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

Gentoo ~ # /etc/init.d/snort restart

「Oinkmaster」の自動実行

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

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

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


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