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

最終更新日: 2017.04.23

<<トップページ <<新着情報 <<逆引き集 <<リンク集 <<サイト内検索 <<メルマガ <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

クラッカーによるLinuxサーバーへの不正アクセスを検知するシステム(IDS=Intrusion Detection System)を導入する。
ここでは、不正アクセス検知システムにネットワーク型IDSのSnortを導入する。
また、Snortが抽出した不正アクセスログをWebブラウザ上で確認できるようにするためにBASEも導入する。
なお、Snortが不正アクセスの判断をするために参照するルールファイルの最新化は、Oinkmasterを導入して自動化する。

ApacheMySQLインストール済であること



■Snortインストール

[root@centos ~]# yum -y install libpcap-devel ← snortのRPM作成に必要なパッケージインストール

[root@centos ~]# wget http://dl.snort.org/snort-current/snort-2.8.4.1.tar.gz ← snortダウンロード

※最新版のURLはダウンロードページで確認

[root@centos ~]# rpmbuild -tb --clean --with mysql snort-2.8.4.1.tar.gz ← snortのRPMパッケージ作成
※時間がかかる
rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/snort-2.8.4.1-1.i386.rpm ← 作成したRPMパッケージをインストール
準備中...                ########################################### [100%]
   1:snort                  ########################################### [100%]

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/i386/snort-mysql-2.8.4.1-1.i386.rpm ← 作成したRPMパッケージをインストール
準備中...                ########################################### [100%]
   1:snort-mysql            ########################################### [100%]

[root@centos ~]# rm -f /usr/src/redhat/RPMS/i386/snort-* ← 作成したRPMパッケージを削除

[root@centos ~]# rm -f snort-2.8.4.1.tar.gz ← ダウンロードしたファイルを削除

[root@centos ~]# vi /etc/yum.conf ← yum設定ファイル編集
exclude=snort ← yumのアップデート対象からsnortを除外する

■Snort設定

(1)Snort設定
[root@centos ~]# vi /etc/snort/snort.conf ← snort設定ファイル編集
var HOME_NET any
↓
var HOME_NET 192.168.1.0/24 ← 内部ネットワークアドレスを指定

var EXTERNAL_NET any
↓
var EXTERNAL_NET !$HOME_NET ← 内部からのアクセスを不正アクセスとして扱わない

output database: log, mysql, user=snort password=パスワード※ dbname=snort_log host=localhost ← MySQLへのログ出力設定
※パスワードはMySQLsnortユーザーのパスワード(後述の「MySQL設定」参照)

[root@centos ~]# vi /etc/sysconfig/snort ← snort設定ファイル編集
#ALERTMODE=fast ← 行頭に#を追加してコメントアウト(MySQLへログ出力できるようにする)

(2)Snortルールファイル入手
Snort動作に必須のルールファイルを入手するため、ユーザー登録する

ユーザー登録時のメールアドレス宛にユーザー名とパスワードが記載されたメールが送られてくるのでログインする

Snortルールファイル(Sourcefire VRT Certified Rules - The Official Snort Ruleset (registered-user release))をダウンロードする
※一度ダウンロードすると以後約15分間はダウンロードできないので注意

ダウンロードしたSnortルールファイルをWinSCP等でサーバーの/rootディレクトリへアップロードしておく

[root@centos ~]# tar zxvf snortrules-snapshot-CURRENT.tar.gz ← ルールファイル展開

[root@centos ~]# /bin/cp -r rules/* /etc/snort/rules/ ← ルールファイルを所定のディレクトリへコピー

[root@centos ~]# rm -rf doc/ rules/ so_rules/ etc/ ← 展開してできたディレクトリを削除

[root@centos ~]# rm -f snortrules-snapshot-CURRENT.tar.gz ← ダウンロードしたファイルを削除

(3)Snortログローテーションエラー対処
cronから以下のようなエラーメールがroot宛に送られてくることの対処
error: error accessing /var/log/snort/*: No such file or directory
error: snort:4 glob failed for /var/log/snort/*/*log
[root@centos ~]# vi /etc/logrotate.d/snort ← 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 {

■MySQL設定

[root@centos ~]# yum -y install php-mysql ← php-mysqlインストール

[root@centos ~]# mysql -u root -p ← MySQLへrootでログイン
Enter password:  ← MySQLのrootパスワード応答
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 188
Server version: 5.1.32 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant all privileges on snort_log.* to snort@localhost identified by 'パスワード'; ← snortユーザー作成
Query OK, 0 rows affected (0.52 sec)
※パスワードはsnort.confのoutputオプションで指定したパスワード(先述の「Snort設定」参照)

mysql> create database snort_log; ← snort_logデータベース作成
Query OK, 1 row affected (0.08 sec)

mysql> exit ← ログアウト
Bye

[root@centos ~]# mysql -u snort -p snort_log < /usr/share/snort-2.8.4.1/schemas/create_mysql
 ← snort_logデータベース初期設定
Enter password: ← snortユーザーのパスワード応答

■Snort起動

[root@centos ~]# /etc/rc.d/init.d/snortd start ← snort起動
Starting snort:                                            [  OK  ]

[root@centos ~]# chkconfig snortd on ← snort自動起動設定

[root@centos ~]# chkconfig --list snortd ← snort自動起動設定確認
snortd          0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2〜5のonを確認

■Snort確認

pingを検知するようにSnortを仮設定し、Snortがpingを検知できるか確認する。
※自ホストから自ホストへのアクセスは検知しないので、必ず他のマシンからアクセスを行うこと
[root@centos ~]# vi /etc/snort/snort.conf ← Snort設定ファイル編集
include $RULE_PATH/icmp-info.rules ← 行頭の#を削除してコメント解除

[root@centos ~]# /etc/rc.d/init.d/snortd restart ← Snort再起動
Stopping snort:                                            [  OK  ]
Starting snort:                                            [  OK  ]

C:\Documents and Settings\xxxxxxxx>ping サーバーIPアドレス ← サーバーへpingを発行

[root@centos ~]# tail /var/log/snort/alert ← Snortのログを表示
以下のようにpingアクセスのログが記録されていることを確認
12/10-04:10:54.299586  [**] [1:382:7] ICMP PING Windows [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:54.299586  [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:55.304247  [**] [1:382:7] ICMP PING Windows [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:55.304247  [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:56.319412  [**] [1:382:7] ICMP PING Windows [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:56.319412  [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:57.334503  [**] [1:382:7] ICMP PING Windows [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2
12/10-04:10:57.334503  [**] [1:384:5] ICMP PING [**] [Classification: Misc activity] [Priority: 3] {ICMP} XXX.XXX.XXX.XXX -> 192.168.1.2

[root@centos ~]# vi /etc/snort/snort.conf ← Snort設定ファイル編集
# include $RULE_PATH/icmp-info.rules ← 行頭に#を追加してコメントアウト

[root@centos ~]# /etc/rc.d/init.d/snortd restart ← Snort再起動
Stopping snort:                                            [  OK  ]
Starting snort:                                            [  OK  ]

■BASEインストール

[root@centos ~]# wget http://jaist.dl.sourceforge.net/sourceforge/secureideas/base-1.4.3.1.tar.gz ← BASEダウンロード

※最新版のURLはダウンロードページで確認

[root@centos ~]# tar zxvf base-1.4.3.1.tar.gz ← BASE展開

[root@centos ~]# mv base-1.4.3.1 /var/www/base ← BASE展開先ディレクトリを移動

[root@centos ~]# wget http://jaist.dl.sourceforge.net/sourceforge/adodb/adodb508a.tgz ← ADOdbダウンロード

※最新版のURLはダウンロードページで確認

[root@centos ~]# tar zxvf adodb508a.tgz ← ADOdb展開

[root@centos ~]# mv adodb5 /var/www/base/adodb ← ADOdb展開先ディレクトリを移動

[root@centos ~]# rm -f base-1.4.3.1.tar.gz ← ダウンロードしたBASEを削除

[root@centos ~]# rm -f adodb508a.tgz ← ダウンロードしたADOdbを削除

[root@centos ~]# chown -R apache:apache /var/www/base/ ← BASE展開先ディレクトリ所有者をapacheに変更

■BASE設定

(1)BASE設定
[root@centos ~]# cp /var/www/base/base_conf.php.dist /var/www/base/base_conf.php ← BASE設定ファイルをサンプルよりコピー

[root@centos ~]# vi /var/www/base/base_conf.php ← BASE設定ファイル編集
$BASE_Language = 'japanese'; ← 日本語化

$BASE_urlpath = '/base'; ← BASE展開先ディレクトリ名

$DBlib_path = '/var/www/base/adodb'; ← ADOdb展開先ディレクトリ名

$alert_password = 'xxxxxxxx'; ← MySQLsnortユーザーパスワード

[root@centos ~]# pear install --alldeps Image_Graph-alpha ← グラフ描画に必要なphpのPear::Image_Graphをインストール

(2)Aapche設定
[root@centos ~]# vi /etc/httpd/conf.d/base.conf ← Apache用BASE設定ファイル作成
【CentOS7の場合】
Alias /base /var/www/base
<Directory "/var/www/base">
    Require local
    Require ip 192.168.1.0/24 ← 内部ネットワークアドレス(例:192.168.1.0/24)を指定
</Directory>

【CentOS6,5の場合】
Alias /base /var/www/base
<Directory "/var/www/base">
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.1.0/24 ← 内部ネットワークアドレス(例:192.168.1.0/24)を指定
</Directory>

[root@centos ~]# vi /etc/php.ini ← php設定ファイル編集
error_reporting = E_ALL & ~E_NOTICE ← 行頭の;を削除してコメント解除

;error_reporting  =  E_ALL ← 行頭に;を追加してコメントアウト

[root@centos ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映
httpd を再読み込み中:                                      [  OK  ]

■BASE確認

http://サーバー名/base/へアクセス


「セットアップページ」リンクをクリック


「Create BASE AG」ボタン押下


「Main page」リンクをクリック


セットアップ完了


■ルールファイルの自動更新

(1)Oinkmasterインストール
[root@centos ~]# wget http://jaist.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-2.0.tar.gz
 ← Oinkmasterダウンロード
※最新版のURLはダウンロードページで確認

[root@centos ~]# tar zxvf oinkmaster-2.0.tar.gz ← Oinkmaster展開

[root@centos ~]# cp oinkmaster-2.0/oinkmaster.pl /usr/local/bin/ ← oinkmaster.plを所定のディレクトリへコピー

[root@centos ~]# cp oinkmaster-2.0/oinkmaster.conf /etc/ ← oinkmaster.confを所定のディレクトリへコピー

[root@centos ~]# cp oinkmaster-2.0/oinkmaster.1 /usr/share/man/man1/ ← oinkmaster.1を所定のディレクトリへコピー

[root@centos ~]# rm -rf oinkmaster-2.0 ← Oinkmaster展開先ディレクトリを削除

[root@centos ~]# rm -f oinkmaster-2.0.tar.gz ← ダウンロードしたOinkmasterを削除

(2)Oinkmaster設定
Snortルールファイル(Sourcefire VRT Certified Rules)をダウンロードするには「Oink Code」が必要なので、ログインして、「Oink Code」を取得する
[root@centos ~]# vi /etc/oinkmaster.conf ← Oinkmaster設定ファイル編集
# Example for Snort-current ("current" means cvs snapshots).
# url = http://www.snort.org/pub-bin/oinkmaster.cgi//snortrules-snapshot-CURRENT.tar.gz
url = http://www.snort.org/pub-bin/oinkmaster.cgi/Oink Code貼り付け/snortrules-snapshot-CURRENT.tar.gz ← 追加

(3)Oinkmaster確認
[root@centos ~]# oinkmaster.pl -o /etc/snort/rules/ ← Oinkmaster実行
Loading /etc/oinkmaster.conf
Downloading file from http://www.snort.org/pub-bin/oinkmaster.cgi/*oinkcode*/snortrules-snapshot-CURRENT.tar.gz... done.
Archive successfully downloaded, unpacking... done.
Setting up rules structures... 
WARNING: duplicate SID in your local rules, SID 3017 exists multiple times, you may need to fix this manually!
done.
Processing downloaded rules... disabled 0, enabled 0, modified 0, total=8151
Setting up rules structures... 
WARNING: duplicate SID in your local rules, SID 3017 exists multiple times, you may need to fix this manually!
done.
Comparing new files to the old ones... done.

[***] Results from Oinkmaster started 20090623 02:08:28 [***]

[*] Rules modifications: [*]
    None.

[*] Non-rule line modifications: [*]
    None.

[*] Added files: [*]
    None.

(4)Oinkmaster定期自動実行設定
[root@centos ~]# vi /etc/cron.daily/snort-rule-update ← Oinkmaster定期自動実行スクリプト作成
#!/bin/bash

/usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ 2>&1 | logger -t oinkmaster
/etc/rc.d/init.d/snortd restart > /dev/null

[root@centos ~]# chmod +x /etc/cron.daily/snort-rule-update ← Oinkmaster定期自動実行スクリプトへ実行権限付加



▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします