Snort(不正アクセス検知)

日頃からのサーバへのアクセス内容を確認したいのでIDS(Intrusion Detection System)侵入検知システムを導入します。
ネットワーク上のパケットを監視して検知できるネットワーク型IDSの Snort を使用します。
本来は最新のSnortと最新のルールファイルを適応したいのですがリスクがともないますので選択しませんでした。
Ubuntuサーバへのアクセスの状況と通常のサーバサービス利用状況を把握するのに留めたいと思います。
snortサイト http://www.snort.org/

【参考サイト】
Fedoraで自宅サーバー構築
   不正アクセス検知システム導入(Snort+BASE+Oinkmaster)
   http://fedorasrv.com/snort-base.shtml

Snort + BASE インストールメモ
http://n.pentest.jp/?p=66

【環境条件】
UbuntuOSバージョン9.10(karmic)
Snort-mysql
SynapticパッケージマネージャからSnort-mysqlを検索してインストールします。
(Snort-mysql 2.8.4.1)

BASE
Snortが検知したアクセスログをWebブラウザ上で表示するためのフロントエンド
Synapticパッケージマネージにないのでサイトからダウンロードしてきます。
http://sourceforge.net/projects/secureideas/files/BASE/

ADOdb http://sourceforge.net/projects/adodb/files/adodb-php5-only/
ADOdbはより高速なDBアクセスモジュール

php5-adodb とりあえず入れておきました。
(インストール中に「php.ini ファイルを更新してください。」といわれたが無視して進むボタンを押しました。)

pearサイト グラフ作成ライブラリ
http://pear.php.net/packages.php?catpid=12&catname=Images
Image_Canvas と Image_Graphをダウンロードしてインストールします。
・Image_Canvas  0.3.2   Image_Canvas-0.3.2.gz
・Image_Graph   0.7.2   Image_Graph-0.7.2.gz

Oinkmaster ルールファイルの自動更新
Synapticパッケージマネージャからインストールします。
Snort-mysqlをインストールすると同時にOinkmasterもインストールされました。
最新のルールファイルを使用するとエラーが発生しますので今回はOinkmasterは使用しません。
snort本体を最新にしたいのですが、、、それもまた問題がありそうなもので、、、

Snort-mysqlのインストール
Synapticパッケージマネージャからインストールする。
ローカルネットワークのアドレス範囲を質問されたので内部ネットワークアドレスを指定(適宜自分の環境に合わせます。)
 192.168.0.0/24 を入力して進むボタンを押します。  
「Snort-mysql を設定しています」画面が表示され
Snort-mysql を利用してログに記録するため、データベースを設定しますか?にチェックを入れて 進むボタンを押します。
「Snort 用にデータベースを強制的に設定」の内容が表示されます。
【内容】
Snort が正しく動作する前にはデータベースの設定が必要です。
データベースを作成するには、パッケージインストール「後」に以下のコマンドを入力する必要があります:
# cd /usr/share/doc/snort-mysql/
# zcat create_mysql.gz | mysql -u -h -p

ユーザ名、ホスト名、データベース名にはそれぞれ正しい値を入れてください。
MySQL がパスワードを要求します。
データベースの作成後、手動で Snort を起動する必要があります。

確認して進むボタンを押します。

インストール完了
端末よりヴァージョンの確認
# snort -V
         Version 2.8.4.1

データベースの作成
MySQLでデータベースの作成
# mysql -u root -p
Enter password:******** 【MySQLのrootパスワードを入力】

mysql> create database snort_db;
Snortのデータベース名をsnort_dbで作成(任意に作成します。)

データベースを削除するにはDROP DATABASE データベース名;

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| magic3 |
| mysql |
| snort_db    |
+——————–+

MySQLから接続を切断するには exit, quit を入力します。

データベースのテーブル作成
# cd /usr/share/doc/snort-mysql/
# zcat create_mysql.gz | mysql -u root -h localhost -p snort_db

mysql -u -h -p
ユーザ名:root、ホスト名:localhost、データベース名:snort_dbを設定します。
Mysqlのrootパスワードを入力してエンターキーを押します。
エラーがでないことを確認します。

Snortの設定
【/etc/snort/snort.conf】を編集
【46行目】 var HOME_NET 192.168.0.133    
   anyをサーバのアドレス(192.168.0.133)またはローカルネットワークのアドレス(192.168.0.0/24)に変更します。
  今回はUbuntuサーバのみ監視します。

【49行目】 # var EXTERNAL_NET any       コメント#をつけて無効にする。
【50行目】 var EXTERNAL_NET !$HOME_NET      コメント#を外す 内部からのアクセスを不正アクセスとして扱わない
                               (HOME_NETで設定したネットワーク以外を外部とみなす)

【111行目】 var RULE_PATH /etc/snort/rules 【確 認】

【689行目あたり】MySQLへのログ出力
【追  加】 output database: log, mysql, user=root password=パスワード dbname=snort_db host=localhost 
password=Mysqlのrootパスワード

Snort動作確認
snort実行開始
#snort -c /etc/snort/snort.conf
~途中省略~

–== Initialization Complete ==–

,,_ -*> Snort! <*-
o" )~ Version 2.8.4.1 (Build 38)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/team.html
Copyright (C) 1998-2009 Sourcefire, Inc., et al.
Using PCRE version: 7.8 2008-09-05

~途中省略~

Preprocessor Object: SF_DNS Version 1.1
Not Using PCAP_FRAMES

エラーが発生しないことを確認する。

snort終了
端末より Ctrl + C

BASEインストール
BASE http://sourceforge.net/projects/secureideas/files/BASE/
base-1.4.5.tar.gzはphpエラーが発生したため今回はサイトからbase-1.3.9.tar.gz をダウンロードしました。
base-1.3.9.tar.gzを/var/wwwへ移動します。

/var/www# tar zxvf base-1.3.9.tar.gz BASEを展開する。
/var/www# mv base-1.3.9 base ディレクトリ名を適当な名前(base)に変更します。
/var/www# rm -f base-1.3.9.tar.gz

ADOdb http://sourceforge.net/projects/adodb/files/adodb-php5-only/
サイトからadodb510.gzをダウンロードする。

adodb510.gzを/var/www/baseへ移動します。

/var/www/base# tar zxvf adodb510.gz adodbを展開する。 Adodb5のディレクトリが作成される。
/var/www/base# rm -f adodb510.gz 

所有者をApacheの実行ユーザーに変更
# chown -R USER:gruopA /var/www/base
   (/var/www/baseの権限を例:USERユーザ 例:gruopAグループに変更します。)

Pear-Imageインストール
http://pear.php.net/packages.php?catpid=12&catname=Images
Image_Canvas と Image_Graphをダウンロードしてインストールします。
・Image_Canvas  0.3.2   Image_Canvas-0.3.2.gz
・Image_Graph   0.7.2   Image_Graph-0.7.2.gz

インストールファイルのあるディレクトリへ移動します。
# pear install Image_Canvas-0.3.2.gz
# pear install Image_Graph-0.7.2.gz

# pear list インストール内容表示

Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.3 stable
Console_Getopt 1.2.3 stable
Image_Canvas 0.3.2 alpha
Image_Color 1.0.3 stable
Image_Graph 0.7.2 alpha
PEAR 1.9.0 stable
Structures_Graph 1.0.2 stable
XML_Util 1.2.1 stable

Image_Color も入っていない場合はインストールします。

アクセス制限
アクセス解析結果を外部に公開するといけませんのでLAN内のみアクセスできるようにアクセス制限を設定します。
サイトが有効の場合はの無効にする。(無効の場合はスキップ)
# a2dissite default2

サイトの設定
【/etc/apache2/sites-available/default】
(すでにdefaultファイルをコピーしてある場合はスキップします。)
/etc/apache2/sites-available/# cp default default2

【/etc/apache2/sites-available/default2】を編集する。

     
<VirtualHost *:80>        ポートはこのまま     
     
DocumentRoot /var/www/   ディレクトリこのまま     
     
<Directory /var/www>      ディレクトリこのまま     
    Options FollowSymLinks MultiViews     
         (※OptionsのIndexesを削除する。     
          Indexesを外すとファイルの一覧は表示されない)     
        AllowOverride None     
        Order allow,deny     
        allow from all     
</Directory>     
     
【追加】以下の5行を追加する。     
<Directory /var/www/base/>     
     Order deny,allow     
     deny from all     
     allow from 192.168.0.0/24  ←LAN内からのみアクセス許可(※Ipアドレスは自分の環境に変更すます。)     
</Directory>     

/etc/apache2/sites-available# a2ensite default2
  default2 のサイトを有効にします。

設定が完了したらApache2を再起動します。
# /etc/init.d/apache2 restart
 エラーが出たら各設定を再度確認する。

Snortの起動
# snort -c /etc/snort/snort.conf -i eth0 -D

-c snort.confのパスを指定
-i キャプチャするインターフェースを指定
-D Daemonモードで起動する。

停止 # /etc/init.d/snort stop

BASEの設定
ブラウザからhttp://IPアドレスまたはドメイン名/base/へアクセスする。
※BASEの設定をやり直す場合は/var/www/baseの base_conf.phpファイルを削除する。
Continueボタンを押す。
Japanese
/var/www/base/adodb5
言語とADODBのパスを設定してクエリ送信ボタンを押す。
Snort01
Pick a Database type::MySQL
Database Name:snort_db
tabase Host:localhost

Database User Name: root
Database Password: Mysqlのrootパスワード
各項目を入力してクエリ送信ボタンを押す。
認証は使用しないので何も入力せずクエリ送信ボタンを押す。
Create BASE Agボタンを押します。
下にあるstep 5…をクリックする。
BASEのトップ画面が日本語で表示されます。
次にアラーと総数の数値をクリックします。
Snort02
アクセスリストが表示されます。
Ubuntuサーバへの不正アクセスの状況(いつ何の攻撃をどこから受けたか)と
通常のサーバサービス利用状況(いつ何のサービスを利用したか)がわかります。
いったんホームボタンを押してトップ画面へもどり グラフ作成をクリックします。
Snort03
グラフ作成項目に有効な値を設定して Graph Alertsボタンを押します。
棒・折れ線・円グラフが表示できます。

外から接続
外から【http://ドメイン名/base】へ接続できないことを確認する。
画面以下の紋々が表示されBASE情報がみられません。
Forbidden
You don’t have permission to access /webdruid on this server.
または403が表示される。

ログローテーション(/var/log/snort)
なぜか1日経つとsnortが停止してしまいます。
ログローテーションでsnortがDaemonモードの再起動で失敗しているみたいなので再起動のあとに
snortの実行コマンドを追加しておきました。>一応、停止しないでローテートしているみたいです。

【/etc/logrotate.d/snort】編集
/var/log/snort/portscan.log /var/log/snort/alert /var/log/snort/portscan2.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm 今回は所有者を snort から root へ変更
sharedscripts                       
postrotate                         
if [ -x /usr/sbin/invoke-rc.d ]; then \     
invoke-rc.d snort restart > /dev/null; \
snort -c /etc/snort/snort.conf -i eth0 -D   【追 加】
else \                          
/etc/init.d/snort restart > /dev/null; \
snort -c /etc/snort/snort.conf -i eth0 -D  【追 加】 
fi;                            
endscript                          
}

Snort自動起動
Ubuntuサーバ再起動後、snortを自動起動させるためにシェルスクリプトファイルを作成する 。
端末より
# cd /etc/init.d
# gedit

以下の3行をsnort.shの名前で保存する。
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
snort -c /etc/snort/snort.conf -i eth0 -D

# chmod a+x /etc/init.d/snort.sh すべてのユーザに実行権限を与えます。
# update-rc.d snort.sh defaults
 (missing LSB informationと出た、、、)

 自動起動を解除する場合は # update-rc.d snort.sh remove になります。

Ubuntuサーバ再起動後もsnortは起動しているみたいです。

///////////////////////////////////////////////////////////////////////////////////////
snort-mysqlをインストール時に# id snortで調べると snortユーザが作成されている。
Mysqlとログローテーとはsnortのユーザを使うべきかも
現在はrootを使用している 次のUbuntu10.04のアップグレードでsnortのバージョンも新しくなっているはず
はじめにsnortのユーザとパスワードを使用してみる。